Skip analyzer strndup test on hppa*-*-hpux*
[official-gcc.git] / gcc / testsuite / gcc.dg / uninit-38.c
blob9a202430b595e2a39b0cc254b993a7ec9223b1fd
1 /* Verify that dereferencing uninitialized VLAs correctly reflects
2 offsets into the objects.
3 The test's main purpose is to exercise the formatting of MEM_REFs.
4 If -Wuninitialized gets smarter and detects uninitialized accesses
5 before they're turned into MEM_REFs the test will likely need to
6 be adjusted. Ditto if -Wuninitialized output changes for some
7 other reason.
8 { dg-do compile { target { { lp64 || ilp32 } || llp64 } } }
9 { dg-options "-O2 -Wall -ftrack-macro-expansion=0 -fno-ipa-modref" }
10 { dg-require-effective-target alloca } */
12 #define CONCAT(x, y) x ## y
13 #define CAT(x, y) CONCAT(x, y)
14 #define UNIQ(name) CAT (name, __LINE__)
16 typedef __SIZE_TYPE__ size_t;
18 extern void* malloc (size_t);
20 void sink (void*, ...);
22 #define T(Type, idx, off) \
23 __attribute__ ((noipa)) \
24 void UNIQ (test_)(int n) \
25 { \
26 char a[n], *p = a; \
27 Type *q = (Type*)((char*)p + off); \
28 sink (p, q[idx]); \
29 } \
30 typedef void dummy_type
32 T (int, 0, 0); // { dg-warning "'\\*\\(int \\*\\)a' is used uninitialized" }
33 T (int, 0, 1); // { dg-warning "'\\*\\(int \\*\\)\\(\\(char \\*\\)a \\+ 1\\)'" }
34 T (int, 0, 2); // { dg-warning "'\\*\\(int \\*\\)\\(\\(char \\*\\)a \\+ 2\\)'" }
35 T (int, 0, 3); // { dg-warning "'\\*\\(int \\*\\)\\(\\(char \\*\\)a \\+ 3\\)'" }
36 T (int, 0, 4); // { dg-warning "'\\(\\(int \\*\\)a\\)\\\[1]'" }
37 T (int, 0, 5); // { dg-warning "'\\(\\(int \\*\\)\\(\\(char \\*\\)a \\+ 1\\)\\)\\\[1]'" }
38 T (int, 0, 6); // { dg-warning "'\\(\\(int \\*\\)\\(\\(char \\*\\)a \\+ 2\\)\\)\\\[1]'" }
39 T (int, 0, 7); // { dg-warning "'\\(\\(int \\*\\)\\(\\(char \\*\\)a \\+ 3\\)\\)\\\[1]'" }
40 T (int, 0, 8); // { dg-warning "'\\(\\(int \\*\\)a\\)\\\[2]'" }
41 T (int, 0, 9); // { dg-warning "'\\(\\(int \\*\\)\\(\\(char \\*\\)a \\+ 1\\)\\)\\\[2]'" }
44 T (int, 1, 0); // { dg-warning "'\\(\\(int \\*\\)a\\)\\\[1]' is used uninitialized" }
45 T (int, 1, 1); // { dg-warning "'\\(\\(int \\*\\)\\(\\(char \\*\\)a \\+ 1\\)\\)\\\[1]'" }
46 T (int, 1, 2); // { dg-warning "'\\(\\(int \\*\\)\\(\\(char \\*\\)a \\+ 2\\)\\)\\\[1]'" }
47 T (int, 1, 3); // { dg-warning "'\\(\\(int \\*\\)\\(\\(char \\*\\)a \\+ 3\\)\\)\\\[1]'" }
48 T (int, 1, 4); // { dg-warning "'\\(\\(int \\*\\)a\\)\\\[2]'" }
49 T (int, 1, 5); // { dg-warning "'\\(\\(int \\*\\)\\(\\(char \\*\\)a \\+ 1\\)\\)\\\[2]'" }
50 T (int, 1, 6); // { dg-warning "'\\(\\(int \\*\\)\\(\\(char \\*\\)a \\+ 2\\)\\)\\\[2]'" }
51 T (int, 1, 7); // { dg-warning "'\\(\\(int \\*\\)\\(\\(char \\*\\)a \\+ 3\\)\\)\\\[2]'" }
52 T (int, 1, 8); // { dg-warning "'\\(\\(int \\*\\)a\\)\\\[3]'" }
53 T (int, 1, 9); // { dg-warning "'\\(\\(int \\*\\)\\(\\(char \\*\\)a \\+ 1\\)\\)\\\[3]'" }