Viewing file: abort.c (1.65 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#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" } */ }
|