00001
00002 #ifndef diagnostics_INCLUDED
00003 #define diagnostics_INCLUDED
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
00037
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 #include <stdio.h>
00090
00091
00092 #define DBG_LVL 0
00093
00094
00095 extern int DBG_LVL_PUB;
00096
00097 #define DBGMSG(level, ...) \
00098 if (level <= DBG_LVL) { \
00099 fprintf(stderr, "Open64IRInterface:[debuglevel=%d]: ", level); \
00100 fprintf(stderr, __VA_ARGS__); fputs("\n", stderr); }
00101
00102 #define DBGMSG_PUB(level, ...) \
00103 if (level <= DBG_LVL_PUB) { \
00104 fprintf(stderr, "Open64IRInterface:[debuglevel=%d]: ", level); \
00105 fprintf(stderr, __VA_ARGS__); fputs("\n", stderr); }
00106
00107 #define ERRMSG(...) \
00108 { fputs("error", stderr); \
00109 if (DBG_LVL) { \
00110 fprintf(stderr, "Open64IRInterface: [%s:%d]", __FILE__, __LINE__); } \
00111 fputs(": ", stderr); fprintf(stderr, __VA_ARGS__); fputs("\n", stderr); }
00112
00113 #define DIE(...) ERRMSG(__VA_ARGS__); { exit(1); }
00114
00115
00116 #define IFDBG(level) if (level <= DBG_LVL)
00117
00118 #define IFDBG_PUB(level) if (level <= DBG_LVL_PUB)
00119
00120
00121
00122
00123
00124
00125
00126 extern void Diag_Init(void);
00127 extern void Diag_Exit(void);
00128 extern void Diag_Set_Phase(const char *phase_name);
00129 extern void Diag_Set_File(const char *filename);
00130 extern void Diag_Set_Max_Diags(int max_allowed_diags);
00131 extern int Diag_Get_Warn_Count(void);
00132
00133
00134
00135
00136
00137 typedef enum Diag_Code
00138 {
00139 DIAG_FIRST = 0,
00140 DIAG_A_STRING = 0,
00141 DIAG_UNKNOWN_CMD_LINE_OPTION = 1,
00142 DIAG_UNIMPLEMENTED = 2,
00143 DIAG_CANNOT_OPEN_FILE = 3,
00144 DIAG_CANNOT_CLOSE_FILE = 4,
00145
00146
00147 DIAG_W2F_FIRST = 100,
00148 DIAG_W2F_CANNOT_HANDLE_OPC = 101,
00149 DIAG_W2F_UNEXPECTED_OPC = 110,
00150 DIAG_W2F_UNEXPECTED_IOS = 111,
00151 DIAG_W2F_UNEXPECTED_IOU = 112,
00152 DIAG_W2F_UNEXPECTED_IOF = 113,
00153 DIAG_W2F_UNEXPECTED_IOC = 114,
00154 DIAG_W2F_UNEXPECTED_IOL = 115,
00155 DIAG_W2F_UNEXPECTED_INITV = 116,
00156 DIAG_W2F_UNEXPECTED_DOLOOP_BOUNDOP = 117,
00157 DIAG_W2F_UNEXPECTED_IMPLIED_DOLOOP = 118,
00158 DIAG_W2F_UNEXPECTED_RETURNSITE = 119,
00159 DIAG_W2F_UNEXPECTED_CALLSITE = 120,
00160 DIAG_W2F_UNEXPECTED_SUBSTRING_REF = 121,
00161 DIAG_W2F_UNEXPEXTED_RETURNREG_USE = 122,
00162 DIAG_W2F_UNEXPEXTED_OFFSET = 123,
00163 DIAG_W2F_UNEXPEXTED_NULL_PTR = 124,
00164 DIAG_W2F_NONEXISTENT_FLD_PATH = 125,
00165 DIAG_W2F_CANNOT_LDA_PREG = 126,
00166 DIAG_W2F_CANNOT_DEREF = 127,
00167 DIAG_W2F_UNEXPECTED_NUM_KIDS = 128,
00168 DIAG_W2F_UNEXPECTED_CVT = 129,
00169 DIAG_W2F_UNEXPECTED_CONTEXT = 130,
00170
00171
00172 DIAG_W2F_UNEXPECTED_TYPE_KIND = 203,
00173 DIAG_W2F_UNEXPECTED_TYPE_SIZE = 204,
00174 DIAG_W2F_UNEXPECTED_BTYPE = 205,
00175 DIAG_W2F_EXPECTED_PTR_TO_CHARACTER = 206,
00176 DIAG_W2F_EXPECTED_PTR = 207,
00177 DIAG_W2F_UNEXPECTED_SYMBOL = 208,
00178 DIAG_W2F_UNEXPECTED_SYMCLASS = 209,
00179 DIAG_W2F_UNEXPECTED_STORECLASS = 210,
00180 DIAG_W2F_UNEXPECTED_SYM_CONST = 211,
00181 DIAG_W2F_UNEXPECTED_PRAGMA = 212,
00182 DIAG_W2F_MISPLACED_PRAGMA = 213,
00183 DIAG_W2F_EXPECTED_IDNAME = 214,
00184 DIAG_W2F_INCOMPATIBLE_TYS = 215,
00185 DIAG_W2F_DECLARE_RETURN_PARAM = 216,
00186 DIAG_W2F_BUFFER_ERROR = 217,
00187 DIAG_W2F_LAST = 217,
00188
00189 DIAG_LAST = 542
00190 } DIAG_CODE;
00191
00192
00193
00194
00195
00196 #ifdef Is_True_On
00197
00198 #define ASSERT_WARN(a_truth, diag_args) \
00199 DIAG_ASSERT_LOC(a_truth, Diag_Warning, diag_args)
00200 #define ASSERT_FATAL(a_truth, diag_args) \
00201 DIAG_ASSERT_LOC(a_truth, Diag_Fatal, diag_args)
00202 #define ASSERT_DBG_WARN ASSERT_WARN
00203 #define ASSERT_DBG_FATAL ASSERT_FATAL
00204
00205 #else
00206
00207 #define ASSERT_WARN(a_truth, diag_args) \
00208 DIAG_ASSERT_NOLOC(a_truth, Diag_Warning, diag_args)
00209 #define ASSERT_FATAL(a_truth, diag_args) \
00210 DIAG_ASSERT_NOLOC(a_truth, Diag_Fatal, diag_args)
00211 # define ASSERT_DBG_WARN(a_truth, diag_args) ((void) 1)
00212 # define ASSERT_DBG_FATAL(a_truth, diag_args) ((void) 1)
00213
00214 #endif
00215
00216
00217
00218
00219
00220 #define DIAG_ASSERT_LOC(a_truth, diag_handler, diag_args) \
00221 ((a_truth) ? \
00222 (void) 1 : \
00223 (Diag_Set_Location(__FILE__, __LINE__), diag_handler diag_args))
00224
00225 #define DIAG_ASSERT_NOLOC(a_truth, diag_handler, diag_args) \
00226 ((a_truth) ? (void) 1 : diag_handler diag_args)
00227
00228 extern void Diag_Set_Location(const char *file_name, int line_number);
00229 extern void Diag_Warning(DIAG_CODE code, ...);
00230 extern void Diag_Fatal(DIAG_CODE code, ...);
00231
00232 #endif
00233