blob: 40322f1f0c55a55d65a432f68046edaf9f312148 [file] [log] [blame]
Chris Lattnerae0ee032008-12-04 23:20:07 +00001// RUN: clang -checker-cfref --verify -fblocks %s
Ted Kremenek9f67ede2008-10-01 05:05:46 +00002
3// Reduced test case from crash in <rdar://problem/6253157>
4@class NSObject;
5@interface A @end
6@implementation A
7- (void)foo:(void (^)(NSObject *x))block {
8 if (!((block != ((void *)0)))) {}
9}
10@end
11
Ted Kremenek6dfe2f52008-10-18 22:20:20 +000012// Reduced test case from crash in PR 2796;
13// http://llvm.org/bugs/show_bug.cgi?id=2796
14
15unsigned foo(unsigned x) { return __alignof__((x)) + sizeof(x); }
Ted Kremenek9253b0f2008-10-20 23:14:31 +000016
17// Improvement to path-sensitivity involving compound assignments.
18// Addresses false positive in <rdar://problem/6268365>
19//
20
21unsigned r6268365Aux();
22
23void r6268365() {
24 unsigned x = 0;
25 x &= r6268365Aux();
26 unsigned j = 0;
27
28 if (x == 0) ++j;
29 if (x == 0) x = x / j; // no-warning
30}
31
Ted Kremenekc13b6e22008-10-20 23:40:25 +000032void divzeroassume(unsigned x, unsigned j) {
33 x /= j;
34 if (j == 0) x /= 0; // no-warning
35 if (j == 0) x /= j; // no-warning
36 if (j == 0) x = x / 0; // no-warning
37}
38
39void divzeroassumeB(unsigned x, unsigned j) {
40 x = x / j;
41 if (j == 0) x /= 0; // no-warning
42 if (j == 0) x /= j; // no-warning
43 if (j == 0) x = x / 0; // no-warning
44}
45
Ted Kremenek5b2316a2008-10-25 20:09:21 +000046// PR 2948 (testcase; crash on VisitLValue for union types)
47// http://llvm.org/bugs/show_bug.cgi?id=2948
48
49void checkaccess_union() {
50 int ret = 0, status;
51 if (((((__extension__ (((union {
52 __typeof (status) __in; int __i;}
53 )
54 {
55 .__in = (status)}
56 ).__i))) & 0xff00) >> 8) == 1)
57 ret = 1;
58}
Ted Kremenek76dba7b2008-11-13 05:05:34 +000059
60// InitListExpr processing
61
62typedef float __m128 __attribute__((__vector_size__(16), __may_alias__));
63__m128 return128() {
Ted Kremenek062e2f92008-11-13 06:10:40 +000064 // This compound literal has a Vector type. We currently just
65 // return UnknownVal.
Ted Kremenek76dba7b2008-11-13 05:05:34 +000066 return __extension__(__m128) { 0.0f, 0.0f, 0.0f, 0.0f };
67}
68
Ted Kremenek062e2f92008-11-13 06:10:40 +000069typedef long long __v2di __attribute__ ((__vector_size__ (16)));
70typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));
71__m128i vec128i(long long __q1, long long __q0) {
72 // This compound literal returns true for both isVectorType() and
73 // isIntegerType().
74 return __extension__ (__m128i)(__v2di){ __q0, __q1 };
75}
76
Ted Kremenek8322d6a2008-12-09 00:14:48 +000077// Zero-sized VLAs.
78void check_zero_sized_VLA(int x) {
79 if (x)
80 return;
81
82 int vla[x]; // expected-warning{{VLAs with zero-size are undefined}}
83}
Ted Kremenek062e2f92008-11-13 06:10:40 +000084