Mercurial > hg > CbC > CbC_gcc
diff gcc/testsuite/gcc.dg/analyzer/abort.c @ 145:1830386684a0
gcc-9.2.0
author | anatofuz |
---|---|
date | Thu, 13 Feb 2020 11:34:05 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gcc/testsuite/gcc.dg/analyzer/abort.c Thu Feb 13 11:34:05 2020 +0900 @@ -0,0 +1,80 @@ +#include <stdio.h> +#include <stdlib.h> +#include "analyzer-decls.h" + +extern void foo (); +extern void bar (); + +void test_1 (int i) +{ + if (i == 42) + abort (); + + __analyzer_eval (i != 42); /* { dg-warning "TRUE" } */ +} + +void test_2 (int i) +{ + if (i) + foo (); + else + bar (); + + foo (); + + if (i) + foo (); + else + abort (); + + __analyzer_eval (i != 0); /* { dg-warning "TRUE" } */ +} + +/**************************************************************************/ + +void calls_abort (const char *msg) +{ + fprintf (stderr, "%s", msg); + abort (); +} + +void test_3 (void *ptr) +{ + if (!ptr) + calls_abort ("ptr was NULL"); + + __analyzer_eval (ptr != 0); /* { dg-warning "TRUE" } */ +} + +/**************************************************************************/ + +extern void marked_noreturn (const char *msg) + __attribute__ ((__noreturn__)); + +void test_4 (void *ptr) +{ + if (!ptr) + marked_noreturn ("ptr was NULL"); + + __analyzer_eval (ptr != 0); /* { dg-warning "TRUE" } */ +} + +/**************************************************************************/ + +/* Verify that we discover conditions from assertions if the assert macro + isn't disabled, and that it has its failure-handler labelled with + __attribute__ ((__noreturn__)). + This attribute isn't present for all implementations of <assert.h>, so + we have to test the idea using our own assert macro. */ + +extern void my_assert_fail (const char *expr, const char *file, int line) + __attribute__ ((__noreturn__)); + +#define MY_ASSERT(EXPR) \ + do { if (!(EXPR)) my_assert_fail (#EXPR, __FILE__, __LINE__); } while (0) + +void test_5 (int i) +{ + MY_ASSERT (i < 10); + __analyzer_eval (i < 10); /* { dg-warning "TRUE" } */ +}