Ignore:
Timestamp:
Oct 2, 2017, 12:37:39 PM (8 years ago)
Author:
bird
Message:

kHlpAssert.h: Workaround for buggy gcc7+ warnings. The fall thru warnings of gcc7+ thinks we can avoid if (!0) expressions in kHlpAssert* macors and issues misleading warnings. So, duplicate the macros for the kAssert*Failed* variations and drop the conditional, hoping that gcc gets it now.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/k/kHlpAssert.h

    r93 r101  
    197197    } while (0)
    198198
     199/* Same as above, only no expression. */
     200
     201# define kHlpAssertFailed() \
     202    do { \
     203        kHlpAssertMsg1("failed", __FILE__, __LINE__, K_FUNCTION); \
     204        kHlpAssertBreakpoint(); \
     205    } while (0)
     206
     207# define kHlpAssertFailedStmt(stmt) \
     208    do { \
     209        kHlpAssertMsg1("failed", __FILE__, __LINE__, K_FUNCTION); \
     210        kHlpAssertBreakpoint(); \
     211        stmt; \
     212    } while (0)
     213
     214# define kHlpAssertFailedReturn(rcRet) \
     215    do { \
     216        kHlpAssertMsg1("failed", __FILE__, __LINE__, K_FUNCTION); \
     217        kHlpAssertBreakpoint(); \
     218        return (rcRet); \
     219    } while (0)
     220
     221# define kHlpAssertFailedStmtReturn(stmt, rcRet) \
     222    do { \
     223        kHlpAssertMsg1("failed", __FILE__, __LINE__, K_FUNCTION); \
     224        kHlpAssertBreakpoint(); \
     225        stmt; \
     226        return (rcRet); \
     227    } while (0)
     228
     229# define kHlpAssertFailedReturnVoid() \
     230    do { \
     231        kHlpAssertMsg1("failed", __FILE__, __LINE__, K_FUNCTION); \
     232        kHlpAssertBreakpoint(); \
     233        return; \
     234    } while (0)
     235
     236# define kHlpAssertFailedStmtReturnVoid(stmt) \
     237    do { \
     238        kHlpAssertMsg1("failed", __FILE__, __LINE__, K_FUNCTION); \
     239        kHlpAssertBreakpoint(); \
     240        stmt; \
     241        return; \
     242    } while (0)
     243
     244# define kHlpAssertMsgFailed(msg) \
     245    do { \
     246        kHlpAssertMsg1("failed", __FILE__, __LINE__, K_FUNCTION); \
     247        kHlpAssertMsg2 msg; \
     248        kHlpAssertBreakpoint(); \
     249    } while (0)
     250
     251# define kHlpAssertMsgFailedStmt(msg, stmt) \
     252    do { \
     253        kHlpAssertMsg1("failed", __FILE__, __LINE__, K_FUNCTION); \
     254        kHlpAssertMsg2 msg; \
     255        kHlpAssertBreakpoint(); \
     256        stmt; \
     257    } while (0)
     258
     259# define kHlpAssertMsgFailedReturn(msg, rcRet) \
     260    do { \
     261        kHlpAssertMsg1("failed", __FILE__, __LINE__, K_FUNCTION); \
     262        kHlpAssertMsg2 msg; \
     263        kHlpAssertBreakpoint(); \
     264        return (rcRet); \
     265    } while (0)
     266
     267# define kHlpAssertMsgFailedStmtReturn(msg, stmt, rcRet) \
     268    do { \
     269        kHlpAssertMsg1("failed", __FILE__, __LINE__, K_FUNCTION); \
     270        kHlpAssertMsg2 msg; \
     271        kHlpAssertBreakpoint(); \
     272        stmt; \
     273        return (rcRet); \
     274    } while (0)
     275
     276# define kHlpAssertMsgFailedReturnVoid(msg) \
     277    do { \
     278        kHlpAssertMsg1("failed", __FILE__, __LINE__, K_FUNCTION); \
     279        kHlpAssertMsg2 msg; \
     280        kHlpAssertBreakpoint(); \
     281        return; \
     282    } while (0)
     283
     284# define kHlpAssertMsgFailedStmtReturnVoid(msg, stmt) \
     285    do { \
     286        kHlpAssertMsg1("failed", __FILE__, __LINE__, K_FUNCTION); \
     287        kHlpAssertMsg2 msg; \
     288        kHlpAssertBreakpoint(); \
     289        stmt; \
     290        return; \
     291    } while (0)
     292
     293
    199294#else   /* !K_STRICT */
     295
    200296# define kHlpAssert(expr)                                   do { } while (0)
    201297# define kHlpAssertStmt(expr, stmt)                         do { if (!(expr)) { stmt; }  } while (0)
     
    210306# define kHlpAssertMsgReturnVoid(expr, msg)                 do { if (!(expr)) return; } while (0)
    211307# define kHlpAssertMsgStmtReturnVoid(expr, msg, stmt)       do { if (!(expr)) { stmt; return; } } while (0)
     308/* Same as above, only no expression: */
     309# define kHlpAssertFailed()                                 do { } while (0)
     310# define kHlpAssertFailedStmt(stmt)                         do { stmt; } while (0)
     311# define kHlpAssertFailedReturn(rcRet)                      do { return (rcRet); } while (0)
     312# define kHlpAssertFailedStmtReturn(stmt, rcRet)            do { stmt; return (rcRet);  } while (0)
     313# define kHlpAssertFailedReturnVoid()                       do { return; } while (0)
     314# define kHlpAssertFailedStmtReturnVoid(stmt)               do { stmt; return; }  while (0)
     315# define kHlpAssertMsgFailed(msg)                           do { } while (0)
     316# define kHlpAssertMsgFailedStmt(msg, stmt)                 do { stmt; } while (0)
     317# define kHlpAssertMsgFailedReturn(msg, rcRet)              do { return (rcRet); } while (0)
     318# define kHlpAssertMsgFailedStmtReturn(msg, stmt, rcRet)    do { { stmt; return (rcRet); } } while (0)
     319# define kHlpAssertMsgFailedReturnVoid(msg)                 do { return; } while (0)
     320# define kHlpAssertMsgFailedStmtReturnVoid(msg, stmt)       do { stmt; return; } while (0)
     321
    212322#endif  /* !K_STRICT */
    213323
     
    222332#define kHlpAssertRCReturn(rc, rcRet)           kHlpAssertMsgReturn((rc) == 0, ("%s = %d -> %d\n", #rc, (rc), (rcRet)), (rcRet))
    223333#define kHlpAssertRCReturnVoid(rc)              kHlpAssertMsgReturnVoid((rc) == 0, ("%s = %d -> %d\n", #rc, (rc), (rcRet)))
    224 #define kHlpAssertFailed()                              kHlpAssert(0)
    225 #define kHlpAssertFailedStmt(stmt)                      kHlpAssertStmt(0, stmt)
    226 #define kHlpAssertFailedReturn(rcRet)                   kHlpAssertReturn(0, (rcRet))
    227 #define kHlpAssertFailedStmtReturn(stmt, rcRet)         kHlpAssertStmtReturn(0, stmt, (rcRet))
    228 #define kHlpAssertFailedReturnVoid()                    kHlpAssertReturnVoid(0)
    229 #define kHlpAssertFailedStmtReturnVoid(stmt)            kHlpAssertStmtReturnVoid(0, stmt)
    230 #define kHlpAssertMsgFailed(msg)                        kHlpAssertMsg(0, msg)
    231 #define kHlpAssertMsgFailedStmt(msg, stmt)              kHlpAssertMsgStmt(0, msg, stmt)
    232 #define kHlpAssertMsgFailedReturn(msg, rcRet)           kHlpAssertMsgReturn(0, msg, (rcRet))
    233 #define kHlpAssertMsgFailedStmtReturn(msg, stmt, rcRet) kHlpAssertMsgStmtReturn(0, msg, stmt, (rcRet))
    234 #define kHlpAssertMsgFailedReturnVoid(msg)              kHlpAssertMsgReturnVoid(0, msg)
    235 #define kHlpAssertMsgFailedStmtReturnVoid(msg, stmt)    kHlpAssertMsgStmtReturnVoid(0, msg, stmt)
     334
    236335
    237336/**
Note: See TracChangeset for help on using the changeset viewer.