diff options
-rw-r--r-- | rts/RtsMessages.c | 6 | ||||
-rw-r--r-- | rts/Stats.c | 14 | ||||
-rw-r--r-- | rts/include/Rts.h | 13 |
3 files changed, 26 insertions, 7 deletions
diff --git a/rts/RtsMessages.c b/rts/RtsMessages.c index 9ecd831a83..8ece485854 100644 --- a/rts/RtsMessages.c +++ b/rts/RtsMessages.c @@ -73,6 +73,12 @@ errorBelch(const char*s, ...) } void +_warnFail(const char*filename, unsigned int linenum) +{ + errorBelch("ASSERTION FAILED: file %s, line %u\n", filename, linenum); +} + +void verrorBelch(const char*s, va_list ap) { (*errorMsgFn)(s,ap); diff --git a/rts/Stats.c b/rts/Stats.c index ed6695ad45..7abe2f7417 100644 --- a/rts/Stats.c +++ b/rts/Stats.c @@ -1275,7 +1275,7 @@ stat_exitReport (void) Time exit_gc_cpu = stats.gc_cpu_ns - start_exit_gc_cpu; Time exit_gc_elapsed = stats.gc_elapsed_ns - start_exit_gc_elapsed; - ASSERT(exit_gc_elapsed > 0); + WARN(exit_gc_elapsed > 0); sum.exit_cpu_ns = end_exit_cpu - start_exit_cpu @@ -1284,7 +1284,7 @@ stat_exitReport (void) - start_exit_elapsed - exit_gc_elapsed; - ASSERT(sum.exit_elapsed_ns >= 0); + WARN(sum.exit_elapsed_ns >= 0); stats.mutator_cpu_ns = start_exit_cpu - end_init_cpu @@ -1294,7 +1294,7 @@ stat_exitReport (void) - end_init_elapsed - (stats.gc_elapsed_ns - exit_gc_elapsed); - ASSERT(stats.mutator_elapsed_ns >= 0); + WARN(stats.mutator_elapsed_ns >= 0); if (stats.mutator_cpu_ns < 0) { stats.mutator_cpu_ns = 0; } @@ -1302,7 +1302,7 @@ stat_exitReport (void) // and subtracting, so the parts should add up to the total exactly. // Note that stats->total_ns is captured a tiny bit later than // end_exit_elapsed, so we don't use it here. - ASSERT(stats.init_elapsed_ns // INIT + WARN(stats.init_elapsed_ns // INIT + stats.mutator_elapsed_ns // MUT + stats.gc_elapsed_ns // GC + sum.exit_elapsed_ns // EXIT @@ -1319,7 +1319,7 @@ stat_exitReport (void) // This assertion is probably not necessary; make sure the // subdivision with PROF also makes sense - ASSERT(stats.init_elapsed_ns // INIT + WARN(stats.init_elapsed_ns // INIT + stats.mutator_elapsed_ns // MUT + stats.gc_elapsed_ns // GC + sum.exit_elapsed_ns // EXIT @@ -1401,7 +1401,7 @@ stat_exitReport (void) - sum.exit_cpu_ns) / TimeToSecondsDbl(stats.cpu_ns); - ASSERT(sum.productivity_cpu_percent >= 0); + WARN(sum.productivity_cpu_percent >= 0); sum.productivity_elapsed_percent = TimeToSecondsDbl(stats.elapsed_ns @@ -1410,7 +1410,7 @@ stat_exitReport (void) - sum.exit_elapsed_ns) / TimeToSecondsDbl(stats.elapsed_ns); - ASSERT(sum.productivity_elapsed_percent >= 0); + WARN(sum.productivity_elapsed_percent >= 0); for(uint32_t g = 0; g < RtsFlags.GcFlags.generations; ++g) { const generation* gen = &generations[g]; diff --git a/rts/include/Rts.h b/rts/include/Rts.h index e3471cf333..2399f8ce7f 100644 --- a/rts/include/Rts.h +++ b/rts/include/Rts.h @@ -120,12 +120,20 @@ extern "C" { void _assertFail(const char *filename, unsigned int linenum) GNUC3_ATTRIBUTE(__noreturn__); +void _warnFail(const char *filename, unsigned int linenum); + #define CHECK(predicate) \ if (RTS_LIKELY(predicate)) \ /*null*/; \ else \ _assertFail(__FILE__, __LINE__) +#define CHECKWARN(predicate) \ + if (RTS_LIKELY(predicate)) \ + /*null*/; \ + else \ + _warnFail(__FILE__, __LINE__) + #define CHECKM(predicate, msg, ...) \ if (RTS_LIKELY(predicate)) \ /*null*/; \ @@ -143,11 +151,16 @@ void _assertFail(const char *filename, unsigned int linenum) do { CHECK(predicate); } while(0) #define ASSERTM(predicate,msg,...) \ do { CHECKM(predicate, msg, ##__VA_ARGS__); } while(0) +#define WARN(predicate) \ + do { CHECKWARN(predicate); } while(0) + #else #define ASSERT(predicate) \ do { (void) sizeof(predicate); } while(0) #define ASSERTM(predicate,msg,...) \ do { (void) sizeof(predicate); (void) sizeof(msg); } while(0) +#define WARN(predicate) \ + do { (void) sizeof(predicate); } while(0) #endif /* DEBUG */ /* |