annotate 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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
145
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
1 #include <stdio.h>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
2 #include <stdlib.h>
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
3 #include "analyzer-decls.h"
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
4
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
5 extern void foo ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
6 extern void bar ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
7
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
8 void test_1 (int i)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
9 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
10 if (i == 42)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
11 abort ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
12
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
13 __analyzer_eval (i != 42); /* { dg-warning "TRUE" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
14 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
15
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
16 void test_2 (int i)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
17 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
18 if (i)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
19 foo ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
20 else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
21 bar ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
22
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
23 foo ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
24
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
25 if (i)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
26 foo ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
27 else
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
28 abort ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
29
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
30 __analyzer_eval (i != 0); /* { dg-warning "TRUE" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
31 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
32
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
33 /**************************************************************************/
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
34
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
35 void calls_abort (const char *msg)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
36 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
37 fprintf (stderr, "%s", msg);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
38 abort ();
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
39 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
40
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
41 void test_3 (void *ptr)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
42 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
43 if (!ptr)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
44 calls_abort ("ptr was NULL");
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
45
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
46 __analyzer_eval (ptr != 0); /* { dg-warning "TRUE" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
47 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
48
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
49 /**************************************************************************/
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
50
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
51 extern void marked_noreturn (const char *msg)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
52 __attribute__ ((__noreturn__));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
53
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
54 void test_4 (void *ptr)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
55 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
56 if (!ptr)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
57 marked_noreturn ("ptr was NULL");
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
58
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
59 __analyzer_eval (ptr != 0); /* { dg-warning "TRUE" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
60 }
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
61
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
62 /**************************************************************************/
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
63
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
64 /* Verify that we discover conditions from assertions if the assert macro
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
65 isn't disabled, and that it has its failure-handler labelled with
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
66 __attribute__ ((__noreturn__)).
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
67 This attribute isn't present for all implementations of <assert.h>, so
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
68 we have to test the idea using our own assert macro. */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
69
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
70 extern void my_assert_fail (const char *expr, const char *file, int line)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
71 __attribute__ ((__noreturn__));
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
72
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
73 #define MY_ASSERT(EXPR) \
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
74 do { if (!(EXPR)) my_assert_fail (#EXPR, __FILE__, __LINE__); } while (0)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
75
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
76 void test_5 (int i)
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
77 {
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
78 MY_ASSERT (i < 10);
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
79 __analyzer_eval (i < 10); /* { dg-warning "TRUE" } */
1830386684a0 gcc-9.2.0
anatofuz
parents:
diff changeset
80 }