00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036 #ifndef diagnostics_INCLUDED
00037 #define diagnostics_INCLUDED
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154 extern void Diag_Init(void);
00155 extern void Diag_Exit(void);
00156 extern void Diag_Set_Phase(const char *phase_name);
00157 extern void Diag_Set_File(const char *filename);
00158 extern void Diag_Set_Max_Diags(INT max_allowed_diags);
00159 extern INT Diag_Get_Warn_Count(void);
00160
00161
00162
00163
00164
00165 typedef enum Diag_Code
00166 {
00167 DIAG_FIRST = 0,
00168 DIAG_A_STRING = 0,
00169 DIAG_UNKNOWN_CMD_LINE_OPTION = 1,
00170 DIAG_UNIMPLEMENTED = 2,
00171 DIAG_CANNOT_OPEN_FILE = 3,
00172 DIAG_CANNOT_CLOSE_FILE = 4,
00173
00174
00175 DIAG_W2F_FIRST = 100,
00176 DIAG_W2F_CANNOT_HANDLE_OPC = 101,
00177 DIAG_W2F_UNEXPECTED_OPC = 110,
00178 DIAG_W2F_UNEXPECTED_IOS = 111,
00179 DIAG_W2F_UNEXPECTED_IOU = 112,
00180 DIAG_W2F_UNEXPECTED_IOF = 113,
00181 DIAG_W2F_UNEXPECTED_IOC = 114,
00182 DIAG_W2F_UNEXPECTED_IOL = 115,
00183 DIAG_W2F_UNEXPECTED_INITV = 116,
00184 DIAG_W2F_UNEXPECTED_DOLOOP_BOUNDOP = 117,
00185 DIAG_W2F_UNEXPECTED_IMPLIED_DOLOOP = 118,
00186 DIAG_W2F_UNEXPECTED_RETURNSITE = 119,
00187 DIAG_W2F_UNEXPECTED_CALLSITE = 120,
00188 DIAG_W2F_UNEXPECTED_SUBSTRING_REF = 121,
00189 DIAG_W2F_UNEXPEXTED_RETURNREG_USE = 122,
00190 DIAG_W2F_UNEXPEXTED_OFFSET = 123,
00191 DIAG_W2F_UNEXPEXTED_NULL_PTR = 124,
00192 DIAG_W2F_NONEXISTENT_FLD_PATH = 125,
00193 DIAG_W2F_CANNOT_LDA_PREG = 126,
00194 DIAG_W2F_CANNOT_DEREF = 127,
00195 DIAG_W2F_UNEXPECTED_NUM_KIDS = 128,
00196 DIAG_W2F_UNEXPECTED_CVT = 129,
00197 DIAG_W2F_UNEXPECTED_CONTEXT = 130,
00198
00199
00200 DIAG_W2F_UNEXPECTED_TYPE_KIND = 203,
00201 DIAG_W2F_UNEXPECTED_TYPE_SIZE = 204,
00202 DIAG_W2F_UNEXPECTED_BTYPE = 205,
00203 DIAG_W2F_EXPECTED_PTR_TO_CHARACTER = 206,
00204 DIAG_W2F_EXPECTED_PTR = 207,
00205 DIAG_W2F_UNEXPECTED_SYMBOL = 208,
00206 DIAG_W2F_UNEXPECTED_SYMCLASS = 209,
00207 DIAG_W2F_UNEXPECTED_STORECLASS = 210,
00208 DIAG_W2F_UNEXPECTED_SYM_CONST = 211,
00209 DIAG_W2F_UNEXPECTED_PRAGMA = 212,
00210 DIAG_W2F_MISPLACED_PRAGMA = 213,
00211 DIAG_W2F_EXPECTED_IDNAME = 214,
00212 DIAG_W2F_INCOMPATIBLE_TYS = 215,
00213 DIAG_W2F_DECLARE_RETURN_PARAM = 216,
00214 DIAG_W2F_BUFFER_ERROR = 217,
00215 DIAG_W2F_LAST = 217,
00216
00217
00218 DIAG_W2C_FIRST = 300,
00219 DIAG_W2C_CANNOT_HANDLE_OPC = 300,
00220 DIAG_W2C_UNEXPECTED_OPC = 301,
00221 DIAG_W2C_EXPECTED_IDNAME = 302,
00222 DIAG_W2C_LAST = 302,
00223
00224
00225
00226 DIAG_PRP_FIRST = 500,
00227 DIAG_PRP_OPTION_ILLEGAL = 501,
00228 DIAG_PRP_OPTION_MISSING_SRC = 502,
00229 DIAG_PRP_NAME_OVERFLOW = 503,
00230 DIAG_PRP_FILE_ERROR = 510,
00231 DIAG_PRP_FILE_CANNOT_OPEN = 511,
00232 DIAG_PRP_FILE_CANNOT_CLOSE = 512,
00233 DIAG_PRP_FILE_OVERWRITTEN = 513,
00234 DIAG_PRP_FILE_AT_END = 514,
00235 DIAG_PRP_FILE_NOT_OPEN = 515,
00236 DIAG_PRP_FILE_NOT_CLOSED = 516,
00237 DIAG_PRP_FILE_HEADER_ERROR = 517,
00238 DIAG_PRP_ITEM_INPUT_ERROR = 519,
00239 DIAG_PRP_EXPECTED_PURPLE_REGION = 520,
00240 DIAG_PRP_PREREQUISITE_CALL = 521,
00241 DIAG_PRP_EXPECTED_CONSTRAINT = 522,
00242 DIAG_PRP_UNEXPECTED_OPCODE = 523,
00243 DIAG_PRP_UNEXPECTED_TYPE= 524,
00244 DIAG_PRP_INVALID_LEXEME_KIND = 525,
00245 DIAG_PRP_INVALID_TRACE_ITEM_KIND = 526,
00246 DIAG_PRP_CANNOT_ASSIGN_OBJECT = 527,
00247 DIAG_PRP_ILLEGAL_SET = 528,
00248 DIAG_PRP_RVALUE_ERROR = 529,
00249 DIAG_PRP_PLACEHOLDER_ERROR = 530,
00250 DIAG_PRP_PREG_VALUE = 531,
00251 DIAG_PRP_MEM_VALUE = 532,
00252 DIAG_PRP_VALUE_SPACE = 533,
00253 DIAG_PRP_VARIABLE_DEF = 534,
00254 DIAG_PRP_DEFINED_MEM_SPACE = 535,
00255 DIAG_PRP_PU_MMAP = 536,
00256 DIAG_PRP_FILE_MMAP = 537,
00257 DIAG_PRP_PROGRAM_MMAP = 538,
00258 DIAG_PRP_ICALL = 539,
00259 DIAG_PRP_REF_PARAM = 540,
00260 DIAG_PRP_CANNOT_HANDLE_CONSTRUCT= 541,
00261 DIAG_PRP_EDIT_OUTPUT= 542,
00262 DIAG_PRP_LAST = 542,
00263
00264 DIAG_LAST = 542
00265 } DIAG_CODE;
00266
00267
00268
00269
00270
00271 #define USER_WARNING(a_truth, diag_args, wn) \
00272 DIAG_USER_SRCPOS(a_truth, Diag_User_Warning, diag_args, wn)
00273
00274 #define USER_FATAL(a_truth, diag_args, wn) \
00275 DIAG_USER_SRCPOS(a_truth, Diag_User_Fatal, diag_args, wn)
00276
00277
00278 #ifdef Is_True_On
00279
00280 #define ASSERT_WARN_SRCPOS(a_truth, diag_args, wn) \
00281 DIAG_ASSERT_LOC_SRCPOS(a_truth, Diag_Warning, diag_args, wn)
00282 #define ASSERT_FATAL_SRCPOS(a_truth, diag_args, wn) \
00283 DIAG_ASSERT_LOC_SRCPOS(a_truth, Diag_Fatal, diag_args, wn)
00284 #define ASSERT_WARN(a_truth, diag_args) \
00285 DIAG_ASSERT_LOC(a_truth, Diag_Warning, diag_args)
00286 #define ASSERT_FATAL(a_truth, diag_args) \
00287 DIAG_ASSERT_LOC(a_truth, Diag_Fatal, diag_args)
00288 #define ASSERT_DBG_WARN ASSERT_WARN
00289 #define ASSERT_DBG_FATAL ASSERT_FATAL
00290
00291 #else
00292
00293 #define ASSERT_WARN(a_truth, diag_args) \
00294 DIAG_ASSERT_NOLOC(a_truth, Diag_Warning, diag_args)
00295 #define ASSERT_FATAL(a_truth, diag_args) \
00296 DIAG_ASSERT_NOLOC(a_truth, Diag_Fatal, diag_args)
00297 # define ASSERT_DBG_WARN(a_truth, diag_args) ((void) 1)
00298 # define ASSERT_DBG_FATAL(a_truth, diag_args) ((void) 1)
00299
00300 #endif
00301
00302
00303
00304
00305
00306 #define DIAG_USER_SRCPOS(a_truth, diag_handler, diag_args, wn) \
00307 ((a_truth) ? \
00308 (void) 1 : \
00309 (Diag_Set_Srcpos(WN_Get_Linenum(wn)), \
00310 diag_handler diag_args))
00311
00312 #define DIAG_ASSERT_LOC(a_truth, diag_handler, diag_args) \
00313 ((a_truth) ? \
00314 (void) 1 : \
00315 (Diag_Set_Location(__FILE__, __LINE__), diag_handler diag_args))
00316
00317 #define DIAG_ASSERT_LOC_SRCPOS(a_truth, diag_handler, diag_args, wn) \
00318 ((a_truth) ? \
00319 (void) 1 : \
00320 (Diag_Set_Location(__FILE__, __LINE__), \
00321 Diag_Set_Srcpos(WN_Get_Linenum(wn)), \
00322 diag_handler diag_args))
00323
00324 #define DIAG_ASSERT_NOLOC(a_truth, diag_handler, diag_args) \
00325 ((a_truth) ? (void) 1 : diag_handler diag_args)
00326
00327 #define DIAG_ASSERT_NOLOC_SRCPOS(a_truth, diag_handler, diag_args, wn) \
00328 ((a_truth) ? \
00329 (void) 1 : \
00330 (Diag_Set_Srcpos(WN_Get_Linenum(wn)), \
00331 diag_handler diag_args))
00332
00333 extern void Diag_Set_Location(const char *file_name, INT line_number);
00334 extern void Diag_Set_Srcpos(SRCPOS srcpos);
00335 extern void Diag_User_Warning(DIAG_CODE code, ...);
00336 extern void Diag_User_Fatal(DIAG_CODE code, ...);
00337 extern void Diag_Warning(DIAG_CODE code, ...);
00338 extern void Diag_Fatal(DIAG_CODE code, ...);
00339 extern void Diag_Warning_Srcpos(DIAG_CODE code, ...);
00340 extern void Diag_Fatal_Srcpos(DIAG_CODE code, ...);
00341
00342
00343 #endif
00344
00345
00346