1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only
235080844d3e634c7c1b2875f476ab5f697eece61Chris Lattner
3377e215da11e0208f5c8eedf35f507f972559fe6Ted Kremenek// PR 8876 - don't warn about trivially unreachable null derefs.  Note that
4377e215da11e0208f5c8eedf35f507f972559fe6Ted Kremenek// we put this here because the reachability analysis only kicks in for
5377e215da11e0208f5c8eedf35f507f972559fe6Ted Kremenek// suppressing false positives when code has no errors.
6377e215da11e0208f5c8eedf35f507f972559fe6Ted Kremenek#define PR8876(err_ptr) do {\
7377e215da11e0208f5c8eedf35f507f972559fe6Ted Kremenek    if (err_ptr) *(int*)(err_ptr) = 1;\
8377e215da11e0208f5c8eedf35f507f972559fe6Ted Kremenek  } while (0)
9377e215da11e0208f5c8eedf35f507f972559fe6Ted Kremenek
10377e215da11e0208f5c8eedf35f507f972559fe6Ted Kremenek#define PR8876_pos(err_ptr) do {\
11377e215da11e0208f5c8eedf35f507f972559fe6Ted Kremenek    if (!err_ptr) *(int*)(err_ptr) = 1;\
12377e215da11e0208f5c8eedf35f507f972559fe6Ted Kremenek  } while (0)
13377e215da11e0208f5c8eedf35f507f972559fe6Ted Kremenek
14377e215da11e0208f5c8eedf35f507f972559fe6Ted Kremenek
15a8d459e8a68b1270b0c35fb73e8cc090b2b69e36Ted Kremenek// Test that we don't report divide-by-zero errors in unreachable code.
16a8d459e8a68b1270b0c35fb73e8cc090b2b69e36Ted Kremenek// This test should be left as is, as it also tests CFG functionality.
17a8d459e8a68b1270b0c35fb73e8cc090b2b69e36Ted Kremenekvoid radar9171946() {
18a8d459e8a68b1270b0c35fb73e8cc090b2b69e36Ted Kremenek  if (0) {
19a8d459e8a68b1270b0c35fb73e8cc090b2b69e36Ted Kremenek    0 / (0 ? 1 : 0); // expected-warning {{expression result unused}}
20a8d459e8a68b1270b0c35fb73e8cc090b2b69e36Ted Kremenek  }
21a8d459e8a68b1270b0c35fb73e8cc090b2b69e36Ted Kremenek}
22a8d459e8a68b1270b0c35fb73e8cc090b2b69e36Ted Kremenek
23377e215da11e0208f5c8eedf35f507f972559fe6Ted Kremenekint test_pr8876() {
24377e215da11e0208f5c8eedf35f507f972559fe6Ted Kremenek  PR8876(0); // no-warning
25377e215da11e0208f5c8eedf35f507f972559fe6Ted Kremenek  PR8876_pos(0); // expected-warning{{indirection of non-volatile null pointer will be deleted, not trap}} expected-note{{consider using __builtin_trap() or qualifying pointer with 'volatile'}}
26377e215da11e0208f5c8eedf35f507f972559fe6Ted Kremenek  return 0;
27377e215da11e0208f5c8eedf35f507f972559fe6Ted Kremenek}
28377e215da11e0208f5c8eedf35f507f972559fe6Ted Kremenek
29c56c004e0b8030e8ca8614e7febe581221938b75Ted Kremenek// PR 8183 - Handle null pointer constants on the left-side of the '&&', and reason about
30c56c004e0b8030e8ca8614e7febe581221938b75Ted Kremenek// this when determining the reachability of the null pointer dereference on the right side.
31c56c004e0b8030e8ca8614e7febe581221938b75Ted Kremenekvoid pr8183(unsigned long long test)
32c56c004e0b8030e8ca8614e7febe581221938b75Ted Kremenek{
33c56c004e0b8030e8ca8614e7febe581221938b75Ted Kremenek  (void)((((void*)0)) && (*((unsigned long long*)(((void*)0))) = ((unsigned long long)((test)) % (unsigned long long)((1000000000)))));  // no-warning
34c56c004e0b8030e8ca8614e7febe581221938b75Ted Kremenek  (*((unsigned long long*)(((void*)0))) = ((unsigned long long)((test)) % (unsigned long long)((1000000000)))); // expected-warning {{indirection of non-volatile null pointer will be deleted, not trap}} expected-note {{consider using __builtin_trap() or qualifying pointer with 'volatile'}}
35c56c004e0b8030e8ca8614e7febe581221938b75Ted Kremenek}
36c56c004e0b8030e8ca8614e7febe581221938b75Ted Kremenek
3735080844d3e634c7c1b2875f476ab5f697eece61Chris Lattner// PR1966
3835080844d3e634c7c1b2875f476ab5f697eece61Chris Lattner_Complex double test1() {
3935080844d3e634c7c1b2875f476ab5f697eece61Chris Lattner  return __extension__ 1.0if;
4035080844d3e634c7c1b2875f476ab5f697eece61Chris Lattner}
4135080844d3e634c7c1b2875f476ab5f697eece61Chris Lattner
4235080844d3e634c7c1b2875f476ab5f697eece61Chris Lattner_Complex double test2() {
4380a8eb76a0043271adcfee5cb1e643ce3927fcbfEli Friedman  return 1.0if;    // expected-warning {{imaginary constants are a GNU extension}}
4435080844d3e634c7c1b2875f476ab5f697eece61Chris Lattner}
4535080844d3e634c7c1b2875f476ab5f697eece61Chris Lattner
46baf0d6678418e0dd9309438c3e50274253cfc7b2Chris Lattner// rdar://6097308
47baf0d6678418e0dd9309438c3e50274253cfc7b2Chris Lattnervoid test3() {
48baf0d6678418e0dd9309438c3e50274253cfc7b2Chris Lattner  int x;
49baf0d6678418e0dd9309438c3e50274253cfc7b2Chris Lattner  (__extension__ x) = 10;
50baf0d6678418e0dd9309438c3e50274253cfc7b2Chris Lattner}
51baf0d6678418e0dd9309438c3e50274253cfc7b2Chris Lattner
522c15647dce6de66f673cc64236913732d6289317Chris Lattner// rdar://6162726
532c15647dce6de66f673cc64236913732d6289317Chris Lattnervoid test4() {
542c15647dce6de66f673cc64236913732d6289317Chris Lattner      static int var;
552c15647dce6de66f673cc64236913732d6289317Chris Lattner      var =+ 5;  // expected-warning {{use of unary operator that may be intended as compound assignment (+=)}}
562c15647dce6de66f673cc64236913732d6289317Chris Lattner      var =- 5;  // expected-warning {{use of unary operator that may be intended as compound assignment (-=)}}
57399bd1bc2b801ad85e4575e2401bb43919fcbee8Chris Lattner      var = +5;  // no warning when space between the = and +.
582c15647dce6de66f673cc64236913732d6289317Chris Lattner      var = -5;
59399bd1bc2b801ad85e4575e2401bb43919fcbee8Chris Lattner
60399bd1bc2b801ad85e4575e2401bb43919fcbee8Chris Lattner      var =+5;  // no warning when the subexpr of the unary op has no space before it.
61399bd1bc2b801ad85e4575e2401bb43919fcbee8Chris Lattner      var =-5;
623e87209798bcc3fe39254c1b700b0c8251623b98Chris Lattner
633e87209798bcc3fe39254c1b700b0c8251623b98Chris Lattner#define FIVE 5
643e87209798bcc3fe39254c1b700b0c8251623b98Chris Lattner      var=-FIVE;  // no warning with macros.
653e87209798bcc3fe39254c1b700b0c8251623b98Chris Lattner      var=-FIVE;
662c15647dce6de66f673cc64236913732d6289317Chris Lattner}
672c15647dce6de66f673cc64236913732d6289317Chris Lattner
68ca354faa7e9b99af17070c82b9662a5fca76422cChris Lattner// rdar://6319320
69ca354faa7e9b99af17070c82b9662a5fca76422cChris Lattnervoid test5(int *X, float *P) {
70ca354faa7e9b99af17070c82b9662a5fca76422cChris Lattner  (float*)X = P;   // expected-error {{assignment to cast is illegal, lvalue casts are not supported}}
7144e35f7b2b5da1eb338639e46bf0b5522e75c5f3Daniel Dunbar#define FOO ((float*) X)
7244e35f7b2b5da1eb338639e46bf0b5522e75c5f3Daniel Dunbar  FOO = P;   // expected-error {{assignment to cast is illegal, lvalue casts are not supported}}
73ca354faa7e9b99af17070c82b9662a5fca76422cChris Lattner}
74ca354faa7e9b99af17070c82b9662a5fca76422cChris Lattner
75b1b4d337fafe30823b581cbfaa1641f37541fffeChris Lattnervoid test6() {
76b1b4d337fafe30823b581cbfaa1641f37541fffeChris Lattner  int X;
77b1b4d337fafe30823b581cbfaa1641f37541fffeChris Lattner  X();  // expected-error {{called object type 'int' is not a function or function pointer}}
78b1b4d337fafe30823b581cbfaa1641f37541fffeChris Lattner}
797ca14257731eedb4cd16104cc20a6813d2deb0dbChris Lattner
807ca14257731eedb4cd16104cc20a6813d2deb0dbChris Lattnervoid test7(int *P, _Complex float Gamma) {
817ca14257731eedb4cd16104cc20a6813d2deb0dbChris Lattner   P = (P-42) + Gamma*4;  // expected-error {{invalid operands to binary expression ('int *' and '_Complex float')}}
827ca14257731eedb4cd16104cc20a6813d2deb0dbChris Lattner}
837ca14257731eedb4cd16104cc20a6813d2deb0dbChris Lattner
84670a62cd1d51042ea076cda5e93f26a1d8327fb3Chris Lattner
85670a62cd1d51042ea076cda5e93f26a1d8327fb3Chris Lattner// rdar://6095061
86670a62cd1d51042ea076cda5e93f26a1d8327fb3Chris Lattnerint test8(void) {
87670a62cd1d51042ea076cda5e93f26a1d8327fb3Chris Lattner  int i;
88eb32fde032a250091134db56a3aeaea6b09f6594Eli Friedman  __builtin_choose_expr (0, 42, i) = 10;
89670a62cd1d51042ea076cda5e93f26a1d8327fb3Chris Lattner  return i;
90670a62cd1d51042ea076cda5e93f26a1d8327fb3Chris Lattner}
9131e21e05623ce9d11b1a893fecb87ad349df6c7dChris Lattner
9231e21e05623ce9d11b1a893fecb87ad349df6c7dChris Lattner
9331e21e05623ce9d11b1a893fecb87ad349df6c7dChris Lattner// PR3386
9431e21e05623ce9d11b1a893fecb87ad349df6c7dChris Lattnerstruct f { int x : 4;  float y[]; };
9531e21e05623ce9d11b1a893fecb87ad349df6c7dChris Lattnerint test9(struct f *P) {
96da0274725667d1168867dc404417f2c68c8dc0c5Chris Lattner  int R;
977132be1ef46248746990590b91e693dfc3cce251Richard Smith  R = __alignof(P->x);  // expected-error {{invalid application of 'alignof' to bit-field}}
98eb32fde032a250091134db56a3aeaea6b09f6594Eli Friedman  R = __alignof(P->y);   // ok.
9931fddcca28ffb7a569ee8f5d565a856827d92adaAnders Carlsson  R = sizeof(P->x); // expected-error {{invalid application of 'sizeof' to bit-field}}
100da0274725667d1168867dc404417f2c68c8dc0c5Chris Lattner  return R;
10131e21e05623ce9d11b1a893fecb87ad349df6c7dChris Lattner}
10231e21e05623ce9d11b1a893fecb87ad349df6c7dChris Lattner
10356cd21bd52aed7a32f3ff11b7e480f664d0b4262Chris Lattner// PR3562
10456cd21bd52aed7a32f3ff11b7e480f664d0b4262Chris Lattnervoid test10(int n,...) {
10556cd21bd52aed7a32f3ff11b7e480f664d0b4262Chris Lattner  struct S {
10656cd21bd52aed7a32f3ff11b7e480f664d0b4262Chris Lattner    double          a[n];  // expected-error {{fields must have a constant size}}
10756cd21bd52aed7a32f3ff11b7e480f664d0b4262Chris Lattner  }               s;
10856cd21bd52aed7a32f3ff11b7e480f664d0b4262Chris Lattner  double x = s.a[0];  // should not get another error here.
10956cd21bd52aed7a32f3ff11b7e480f664d0b4262Chris Lattner}
110d0344a4a6182ad704881cbbaa21cca14913d2296Chris Lattner
111d0344a4a6182ad704881cbbaa21cca14913d2296Chris Lattner
112d0344a4a6182ad704881cbbaa21cca14913d2296Chris Lattner#define MYMAX(A,B)    __extension__ ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __b : __a; })
113d0344a4a6182ad704881cbbaa21cca14913d2296Chris Lattner
114d0344a4a6182ad704881cbbaa21cca14913d2296Chris Lattnerstruct mystruct {int A; };
11555660a74897bf42111a8ae61c1f617645e5a9274Chris Lattnervoid test11(struct mystruct P, float F) {
1166409625011e4a11ff07956ff46a44d6ca4473992Argyrios Kyrtzidis  MYMAX(P, F);  // expected-error {{invalid operands to binary expression ('typeof (P)' (aka 'struct mystruct') and 'typeof (F)' (aka 'float'))}}
117d0344a4a6182ad704881cbbaa21cca14913d2296Chris Lattner}
118d0344a4a6182ad704881cbbaa21cca14913d2296Chris Lattner
11955660a74897bf42111a8ae61c1f617645e5a9274Chris Lattner// PR3753
12055660a74897bf42111a8ae61c1f617645e5a9274Chris Lattnerint test12(const char *X) {
12103a4bee558b63ead66e942c6b26381df9a8b1754Ted Kremenek  return X == "foo";  // expected-warning {{comparison against a string literal is unspecified (use strncmp instead)}}
12255660a74897bf42111a8ae61c1f617645e5a9274Chris Lattner}
12355660a74897bf42111a8ae61c1f617645e5a9274Chris Lattner
124d1e4d9bfd57f643d950eb1373f582bda4dfb8dc7Douglas Gregorint test12b(const char *X) {
125d1e4d9bfd57f643d950eb1373f582bda4dfb8dc7Douglas Gregor  return sizeof(X == "foo"); // no-warning
126d1e4d9bfd57f643d950eb1373f582bda4dfb8dc7Douglas Gregor}
127d1e4d9bfd57f643d950eb1373f582bda4dfb8dc7Douglas Gregor
1289af5500f3f132f9a2f9abbe82113a7c7bb751472Chris Lattner// rdar://6719156
1299af5500f3f132f9a2f9abbe82113a7c7bb751472Chris Lattnervoid test13(
1309af5500f3f132f9a2f9abbe82113a7c7bb751472Chris Lattner            void (^P)()) { // expected-error {{blocks support disabled - compile with -fblocks}}
1319af5500f3f132f9a2f9abbe82113a7c7bb751472Chris Lattner  P();
1329af5500f3f132f9a2f9abbe82113a7c7bb751472Chris Lattner  P = ^(){}; // expected-error {{blocks support disabled - compile with -fblocks}}
1339af5500f3f132f9a2f9abbe82113a7c7bb751472Chris Lattner}
134d013aa1ee78d8ead93179c179b7c0746e8d97dbbChris Lattner
135d013aa1ee78d8ead93179c179b7c0746e8d97dbbChris Lattnervoid test14() {
136eb32fde032a250091134db56a3aeaea6b09f6594Eli Friedman  typedef long long __m64 __attribute__((__vector_size__(8)));
137eb32fde032a250091134db56a3aeaea6b09f6594Eli Friedman  typedef short __v4hi __attribute__((__vector_size__(8)));
138d013aa1ee78d8ead93179c179b7c0746e8d97dbbChris Lattner
1399c10fcfc3b9d2076efe701b60644a9987a93c503Chris Lattner  // Ok.
140d013aa1ee78d8ead93179c179b7c0746e8d97dbbChris Lattner  __v4hi a;
1419c10fcfc3b9d2076efe701b60644a9987a93c503Chris Lattner  __m64 mask = (__m64)((__v4hi)a > (__v4hi)a);
142d013aa1ee78d8ead93179c179b7c0746e8d97dbbChris Lattner}
143d013aa1ee78d8ead93179c179b7c0746e8d97dbbChris Lattner
1440a026af6deb4a9e9f30ff047e04db56eb4333741Chris Lattner
1450a026af6deb4a9e9f30ff047e04db56eb4333741Chris Lattner// PR5242
1460a026af6deb4a9e9f30ff047e04db56eb4333741Chris Lattnertypedef unsigned long *test15_t;
1470a026af6deb4a9e9f30ff047e04db56eb4333741Chris Lattner
1480a026af6deb4a9e9f30ff047e04db56eb4333741Chris Lattnertest15_t test15(void) {
1490a026af6deb4a9e9f30ff047e04db56eb4333741Chris Lattner  return (test15_t)0 + (test15_t)0;  // expected-error {{invalid operands to binary expression ('test15_t' (aka 'unsigned long *') and 'test15_t')}}
1500a026af6deb4a9e9f30ff047e04db56eb4333741Chris Lattner}
1510a026af6deb4a9e9f30ff047e04db56eb4333741Chris Lattner
15202dd4b1e279114cc51422fab8b42a7759421800eChris Lattner// rdar://7446395
15302dd4b1e279114cc51422fab8b42a7759421800eChris Lattnervoid test16(float x) { x == ((void*) 0); }  // expected-error {{invalid operands to binary expression}}
1540a026af6deb4a9e9f30ff047e04db56eb4333741Chris Lattner
1557ef655a78863c0a7550bfe51174b9c340ab1dce0Chris Lattner// PR6004
1567ef655a78863c0a7550bfe51174b9c340ab1dce0Chris Lattnervoid test17(int x) {
1577ef655a78863c0a7550bfe51174b9c340ab1dce0Chris Lattner  x = x / 0;  // expected-warning {{division by zero is undefined}}
1587ef655a78863c0a7550bfe51174b9c340ab1dce0Chris Lattner  x = x % 0;  // expected-warning {{remainder by zero is undefined}}
1597ef655a78863c0a7550bfe51174b9c340ab1dce0Chris Lattner  x /= 0;  // expected-warning {{division by zero is undefined}}
1607ef655a78863c0a7550bfe51174b9c340ab1dce0Chris Lattner  x %= 0;  // expected-warning {{remainder by zero is undefined}}
161cb329c506d0e041b9523618158ac925d620c24acChris Lattner
162cb329c506d0e041b9523618158ac925d620c24acChris Lattner  x = sizeof(x/0);  // no warning.
1637ef655a78863c0a7550bfe51174b9c340ab1dce0Chris Lattner}
1647ef655a78863c0a7550bfe51174b9c340ab1dce0Chris Lattner
165f7b8056f1ff0c0409a9523a34f78b69ab8314becRichard Smith// PR6501 & PR11857
1669aab1489866a5afe1a8a3267f9ad7124034fd644Peter Collingbournevoid test18_a(int a); // expected-note 2 {{'test18_a' declared here}}
167f7b8056f1ff0c0409a9523a34f78b69ab8314becRichard Smithvoid test18_b(int); // expected-note {{'test18_b' declared here}}
168c608c3c0781e15b74fbbda03f8708cc85a3dd488Richard Smithvoid test18_c(int a, int b); // expected-note 2 {{'test18_c' declared here}}
169f7b8056f1ff0c0409a9523a34f78b69ab8314becRichard Smithvoid test18_d(int a, ...); // expected-note {{'test18_d' declared here}}
170c608c3c0781e15b74fbbda03f8708cc85a3dd488Richard Smithvoid test18_e(int a, int b, ...); // expected-note {{'test18_e' declared here}}
171c5e869b7949d162ee93c6200c0100a27544bdaa3Eric Christophervoid test18(int b) {
172c608c3c0781e15b74fbbda03f8708cc85a3dd488Richard Smith  test18_a(b, b); // expected-error {{too many arguments to function call, expected single argument 'a', have 2}}
173c608c3c0781e15b74fbbda03f8708cc85a3dd488Richard Smith  test18_a(); // expected-error {{too few arguments to function call, single argument 'a' was not specified}}
174f7b8056f1ff0c0409a9523a34f78b69ab8314becRichard Smith  test18_b(); // expected-error {{too few arguments to function call, expected 1, have 0}}
175f7b8056f1ff0c0409a9523a34f78b69ab8314becRichard Smith  test18_c(b); // expected-error {{too few arguments to function call, expected 2, have 1}}
176c608c3c0781e15b74fbbda03f8708cc85a3dd488Richard Smith  test18_c(b, b, b); // expected-error {{too many arguments to function call, expected 2, have 3}}
177f7b8056f1ff0c0409a9523a34f78b69ab8314becRichard Smith  test18_d(); // expected-error {{too few arguments to function call, at least argument 'a' must be specified}}
178c608c3c0781e15b74fbbda03f8708cc85a3dd488Richard Smith  test18_e(); // expected-error {{too few arguments to function call, expected at least 2, have 0}}
179c5e869b7949d162ee93c6200c0100a27544bdaa3Eric Christopher}
1808b5dec3002bd3e17061a8bf1fc35ba82912ec768Chris Lattner
1818b5dec3002bd3e17061a8bf1fc35ba82912ec768Chris Lattner// PR7569
1828b5dec3002bd3e17061a8bf1fc35ba82912ec768Chris Lattnervoid test19() {
1838b5dec3002bd3e17061a8bf1fc35ba82912ec768Chris Lattner  *(int*)0 = 0;   // expected-warning {{indirection of non-volatile null pointer}} \
1848b5dec3002bd3e17061a8bf1fc35ba82912ec768Chris Lattner                  // expected-note {{consider using __builtin_trap}}
1858b5dec3002bd3e17061a8bf1fc35ba82912ec768Chris Lattner  *(volatile int*)0 = 0;  // Ok.
1868a285ae6fc4926cc4e419025eec63e2d6696e13fArgyrios Kyrtzidis
1878a285ae6fc4926cc4e419025eec63e2d6696e13fArgyrios Kyrtzidis  // rdar://9269271
1888a285ae6fc4926cc4e419025eec63e2d6696e13fArgyrios Kyrtzidis  int x = *(int*)0;  // expected-warning {{indirection of non-volatile null pointer}} \
1898a285ae6fc4926cc4e419025eec63e2d6696e13fArgyrios Kyrtzidis                     // expected-note {{consider using __builtin_trap}}
1908a285ae6fc4926cc4e419025eec63e2d6696e13fArgyrios Kyrtzidis  int x2 = *(volatile int*)0; // Ok.
1918a285ae6fc4926cc4e419025eec63e2d6696e13fArgyrios Kyrtzidis  int *p = &(*(int*)0); // Ok;
1928b5dec3002bd3e17061a8bf1fc35ba82912ec768Chris Lattner}
1938b5dec3002bd3e17061a8bf1fc35ba82912ec768Chris Lattner
19490a8f27f144233b53cac0c88a1595f7f05105b7eChris Lattnerint test20(int x) {
1959b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay  return x && 4; // expected-warning {{use of logical '&&' with constant operand}} \
1969b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay                 // expected-note {{use '&' for a bitwise operation}} \
1979b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay                 // expected-note {{remove constant to silence this warning}}
19823ef3e4f044d701d0f84980fd9816fedf17fc0cbChris Lattner
199b7690b425845b636849f25074d64d30aad646473Chris Lattner  return x && sizeof(int) == 4;  // no warning, RHS is logical op.
200b7690b425845b636849f25074d64d30aad646473Chris Lattner
201b7690b425845b636849f25074d64d30aad646473Chris Lattner  // no warning, this is an idiom for "true" in old C style.
202b7690b425845b636849f25074d64d30aad646473Chris Lattner  return x && (signed char)1;
2030683a1418b28b289eca4cb602ac69780f9e0a609Chandler Carruth
2040683a1418b28b289eca4cb602ac69780f9e0a609Chandler Carruth  return x || 0;
2050683a1418b28b289eca4cb602ac69780f9e0a609Chandler Carruth  return x || 1;
2069b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay  return x || -1; // expected-warning {{use of logical '||' with constant operand}} \
2079b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay                  // expected-note {{use '|' for a bitwise operation}}
2089b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay  return x || 5; // expected-warning {{use of logical '||' with constant operand}} \
2099b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay                 // expected-note {{use '|' for a bitwise operation}}
2100683a1418b28b289eca4cb602ac69780f9e0a609Chandler Carruth  return x && 0;
2110683a1418b28b289eca4cb602ac69780f9e0a609Chandler Carruth  return x && 1;
2129b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay  return x && -1; // expected-warning {{use of logical '&&' with constant operand}} \
2139b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay                  // expected-note {{use '&' for a bitwise operation}} \
2149b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay                  // expected-note {{remove constant to silence this warning}}
2159b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay  return x && 5; // expected-warning {{use of logical '&&' with constant operand}} \
2169b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay                 // expected-note {{use '&' for a bitwise operation}} \
2179b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay                 // expected-note {{remove constant to silence this warning}}
2180683a1418b28b289eca4cb602ac69780f9e0a609Chandler Carruth  return x || (0);
2190683a1418b28b289eca4cb602ac69780f9e0a609Chandler Carruth  return x || (1);
2209b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay  return x || (-1); // expected-warning {{use of logical '||' with constant operand}} \
2219b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay                    // expected-note {{use '|' for a bitwise operation}}
2229b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay  return x || (5); // expected-warning {{use of logical '||' with constant operand}} \
2239b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay                   // expected-note {{use '|' for a bitwise operation}}
2240683a1418b28b289eca4cb602ac69780f9e0a609Chandler Carruth  return x && (0);
2250683a1418b28b289eca4cb602ac69780f9e0a609Chandler Carruth  return x && (1);
2269b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay  return x && (-1); // expected-warning {{use of logical '&&' with constant operand}} \
2279b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay                    // expected-note {{use '&' for a bitwise operation}} \
2289b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay                    // expected-note {{remove constant to silence this warning}}
2299b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay  return x && (5); // expected-warning {{use of logical '&&' with constant operand}} \
2309b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay                   // expected-note {{use '&' for a bitwise operation}} \
2319b127f3b44e685cbe513595b7e0115b0884b0604Matt Beaumont-Gay                   // expected-note {{remove constant to silence this warning}}
2320683a1418b28b289eca4cb602ac69780f9e0a609Chandler Carruth
23390a8f27f144233b53cac0c88a1595f7f05105b7eChris Lattner}
234cf2e5063ae7e7ed3f8d86bb426b2208e242128abJohn McCall
235cf2e5063ae7e7ed3f8d86bb426b2208e242128abJohn McCallstruct Test21; // expected-note 2 {{forward declaration}}
236cf2e5063ae7e7ed3f8d86bb426b2208e242128abJohn McCallvoid test21(volatile struct Test21 *ptr) {
237cf2e5063ae7e7ed3f8d86bb426b2208e242128abJohn McCall  void test21_help(void);
238cf2e5063ae7e7ed3f8d86bb426b2208e242128abJohn McCall  (test21_help(), *ptr); // expected-error {{incomplete type 'struct Test21' where a complete type is required}}
239cf2e5063ae7e7ed3f8d86bb426b2208e242128abJohn McCall  (*ptr, test21_help()); // expected-error {{incomplete type 'struct Test21' where a complete type is required}}
240cf2e5063ae7e7ed3f8d86bb426b2208e242128abJohn McCall}
241abc56c726178fc7c8a3f45185768426a6e9d584eJohn McCall
242abc56c726178fc7c8a3f45185768426a6e9d584eJohn McCall// Make sure we do function/array decay.
243abc56c726178fc7c8a3f45185768426a6e9d584eJohn McCallvoid test22() {
244abc56c726178fc7c8a3f45185768426a6e9d584eJohn McCall  if ("help")
245abc56c726178fc7c8a3f45185768426a6e9d584eJohn McCall    (void) 0;
246abc56c726178fc7c8a3f45185768426a6e9d584eJohn McCall
247abc56c726178fc7c8a3f45185768426a6e9d584eJohn McCall  if (test22)
248abc56c726178fc7c8a3f45185768426a6e9d584eJohn McCall    (void) 0;
249abc56c726178fc7c8a3f45185768426a6e9d584eJohn McCall}
250