exprs.c revision 9c10fcfc3b9d2076efe701b60644a9987a93c503
148d1ef782c8c88066b5febf60f8f456064d7d3f0Daniel Dunbar// RUN: clang-cc %s -verify -pedantic -fsyntax-only -fblocks=0
235080844d3e634c7c1b2875f476ab5f697eece61Chris Lattner
335080844d3e634c7c1b2875f476ab5f697eece61Chris Lattner// PR1966
435080844d3e634c7c1b2875f476ab5f697eece61Chris Lattner_Complex double test1() {
535080844d3e634c7c1b2875f476ab5f697eece61Chris Lattner  return __extension__ 1.0if;
635080844d3e634c7c1b2875f476ab5f697eece61Chris Lattner}
735080844d3e634c7c1b2875f476ab5f697eece61Chris Lattner
835080844d3e634c7c1b2875f476ab5f697eece61Chris Lattner_Complex double test2() {
935080844d3e634c7c1b2875f476ab5f697eece61Chris Lattner  return 1.0if;    // expected-warning {{imaginary constants are an extension}}
1035080844d3e634c7c1b2875f476ab5f697eece61Chris Lattner}
1135080844d3e634c7c1b2875f476ab5f697eece61Chris Lattner
12baf0d6678418e0dd9309438c3e50274253cfc7b2Chris Lattner// rdar://6097308
13baf0d6678418e0dd9309438c3e50274253cfc7b2Chris Lattnervoid test3() {
14baf0d6678418e0dd9309438c3e50274253cfc7b2Chris Lattner  int x;
15baf0d6678418e0dd9309438c3e50274253cfc7b2Chris Lattner  (__extension__ x) = 10;
16baf0d6678418e0dd9309438c3e50274253cfc7b2Chris Lattner}
17baf0d6678418e0dd9309438c3e50274253cfc7b2Chris Lattner
182c15647dce6de66f673cc64236913732d6289317Chris Lattner// rdar://6162726
192c15647dce6de66f673cc64236913732d6289317Chris Lattnervoid test4() {
202c15647dce6de66f673cc64236913732d6289317Chris Lattner      static int var;
212c15647dce6de66f673cc64236913732d6289317Chris Lattner      var =+ 5;  // expected-warning {{use of unary operator that may be intended as compound assignment (+=)}}
222c15647dce6de66f673cc64236913732d6289317Chris Lattner      var =- 5;  // expected-warning {{use of unary operator that may be intended as compound assignment (-=)}}
23399bd1bc2b801ad85e4575e2401bb43919fcbee8Chris Lattner      var = +5;  // no warning when space between the = and +.
242c15647dce6de66f673cc64236913732d6289317Chris Lattner      var = -5;
25399bd1bc2b801ad85e4575e2401bb43919fcbee8Chris Lattner
26399bd1bc2b801ad85e4575e2401bb43919fcbee8Chris Lattner      var =+5;  // no warning when the subexpr of the unary op has no space before it.
27399bd1bc2b801ad85e4575e2401bb43919fcbee8Chris Lattner      var =-5;
283e87209798bcc3fe39254c1b700b0c8251623b98Chris Lattner
293e87209798bcc3fe39254c1b700b0c8251623b98Chris Lattner#define FIVE 5
303e87209798bcc3fe39254c1b700b0c8251623b98Chris Lattner      var=-FIVE;  // no warning with macros.
313e87209798bcc3fe39254c1b700b0c8251623b98Chris Lattner      var=-FIVE;
322c15647dce6de66f673cc64236913732d6289317Chris Lattner}
332c15647dce6de66f673cc64236913732d6289317Chris Lattner
34ca354faa7e9b99af17070c82b9662a5fca76422cChris Lattner// rdar://6319320
35ca354faa7e9b99af17070c82b9662a5fca76422cChris Lattnervoid test5(int *X, float *P) {
36ca354faa7e9b99af17070c82b9662a5fca76422cChris Lattner  (float*)X = P;   // expected-error {{assignment to cast is illegal, lvalue casts are not supported}}
3744e35f7b2b5da1eb338639e46bf0b5522e75c5f3Daniel Dunbar#define FOO ((float*) X)
3844e35f7b2b5da1eb338639e46bf0b5522e75c5f3Daniel Dunbar  FOO = P;   // expected-error {{assignment to cast is illegal, lvalue casts are not supported}}
39ca354faa7e9b99af17070c82b9662a5fca76422cChris Lattner}
40ca354faa7e9b99af17070c82b9662a5fca76422cChris Lattner
41b1b4d337fafe30823b581cbfaa1641f37541fffeChris Lattnervoid test6() {
42b1b4d337fafe30823b581cbfaa1641f37541fffeChris Lattner  int X;
43b1b4d337fafe30823b581cbfaa1641f37541fffeChris Lattner  X();  // expected-error {{called object type 'int' is not a function or function pointer}}
44b1b4d337fafe30823b581cbfaa1641f37541fffeChris Lattner}
457ca14257731eedb4cd16104cc20a6813d2deb0dbChris Lattner
467ca14257731eedb4cd16104cc20a6813d2deb0dbChris Lattnervoid test7(int *P, _Complex float Gamma) {
477ca14257731eedb4cd16104cc20a6813d2deb0dbChris Lattner   P = (P-42) + Gamma*4;  // expected-error {{invalid operands to binary expression ('int *' and '_Complex float')}}
487ca14257731eedb4cd16104cc20a6813d2deb0dbChris Lattner}
497ca14257731eedb4cd16104cc20a6813d2deb0dbChris Lattner
50670a62cd1d51042ea076cda5e93f26a1d8327fb3Chris Lattner
51670a62cd1d51042ea076cda5e93f26a1d8327fb3Chris Lattner// rdar://6095061
52670a62cd1d51042ea076cda5e93f26a1d8327fb3Chris Lattnerint test8(void) {
53670a62cd1d51042ea076cda5e93f26a1d8327fb3Chris Lattner  int i;
54eb32fde032a250091134db56a3aeaea6b09f6594Eli Friedman  __builtin_choose_expr (0, 42, i) = 10;
55670a62cd1d51042ea076cda5e93f26a1d8327fb3Chris Lattner  return i;
56670a62cd1d51042ea076cda5e93f26a1d8327fb3Chris Lattner}
5731e21e05623ce9d11b1a893fecb87ad349df6c7dChris Lattner
5831e21e05623ce9d11b1a893fecb87ad349df6c7dChris Lattner
5931e21e05623ce9d11b1a893fecb87ad349df6c7dChris Lattner// PR3386
6031e21e05623ce9d11b1a893fecb87ad349df6c7dChris Lattnerstruct f { int x : 4;  float y[]; };
6131e21e05623ce9d11b1a893fecb87ad349df6c7dChris Lattnerint test9(struct f *P) {
62da0274725667d1168867dc404417f2c68c8dc0c5Chris Lattner  int R;
63eb32fde032a250091134db56a3aeaea6b09f6594Eli Friedman  R = __alignof(P->x);  // expected-error {{invalid application of '__alignof' to bitfield}}
64eb32fde032a250091134db56a3aeaea6b09f6594Eli Friedman  R = __alignof(P->y);   // ok.
65da0274725667d1168867dc404417f2c68c8dc0c5Chris Lattner  R = sizeof(P->x); // expected-error {{invalid application of 'sizeof' to bitfield}}
66da0274725667d1168867dc404417f2c68c8dc0c5Chris Lattner  return R;
6731e21e05623ce9d11b1a893fecb87ad349df6c7dChris Lattner}
6831e21e05623ce9d11b1a893fecb87ad349df6c7dChris Lattner
6956cd21bd52aed7a32f3ff11b7e480f664d0b4262Chris Lattner// PR3562
7056cd21bd52aed7a32f3ff11b7e480f664d0b4262Chris Lattnervoid test10(int n,...) {
7156cd21bd52aed7a32f3ff11b7e480f664d0b4262Chris Lattner  struct S {
7256cd21bd52aed7a32f3ff11b7e480f664d0b4262Chris Lattner    double          a[n];  // expected-error {{fields must have a constant size}}
7356cd21bd52aed7a32f3ff11b7e480f664d0b4262Chris Lattner  }               s;
7456cd21bd52aed7a32f3ff11b7e480f664d0b4262Chris Lattner  double x = s.a[0];  // should not get another error here.
7556cd21bd52aed7a32f3ff11b7e480f664d0b4262Chris Lattner}
76d0344a4a6182ad704881cbbaa21cca14913d2296Chris Lattner
77d0344a4a6182ad704881cbbaa21cca14913d2296Chris Lattner
78d0344a4a6182ad704881cbbaa21cca14913d2296Chris Lattner#define MYMAX(A,B)    __extension__ ({ __typeof__(A) __a = (A); __typeof__(B) __b = (B); __a < __b ? __b : __a; })
79d0344a4a6182ad704881cbbaa21cca14913d2296Chris Lattner
80d0344a4a6182ad704881cbbaa21cca14913d2296Chris Lattnerstruct mystruct {int A; };
8155660a74897bf42111a8ae61c1f617645e5a9274Chris Lattnervoid test11(struct mystruct P, float F) {
826409625011e4a11ff07956ff46a44d6ca4473992Argyrios Kyrtzidis  MYMAX(P, F);  // expected-error {{invalid operands to binary expression ('typeof (P)' (aka 'struct mystruct') and 'typeof (F)' (aka 'float'))}}
83d0344a4a6182ad704881cbbaa21cca14913d2296Chris Lattner}
84d0344a4a6182ad704881cbbaa21cca14913d2296Chris Lattner
8555660a74897bf42111a8ae61c1f617645e5a9274Chris Lattner// PR3753
8655660a74897bf42111a8ae61c1f617645e5a9274Chris Lattnerint test12(const char *X) {
87466a7f8aa61ca0d1df1f11ed2dfb2510a386cfa6Chris Lattner  return X == "foo";  // expected-warning {{comparison against a string literal is unspecified}}
8855660a74897bf42111a8ae61c1f617645e5a9274Chris Lattner}
8955660a74897bf42111a8ae61c1f617645e5a9274Chris Lattner
909af5500f3f132f9a2f9abbe82113a7c7bb751472Chris Lattner// rdar://6719156
919af5500f3f132f9a2f9abbe82113a7c7bb751472Chris Lattnervoid test13(
929af5500f3f132f9a2f9abbe82113a7c7bb751472Chris Lattner            void (^P)()) { // expected-error {{blocks support disabled - compile with -fblocks}}
939af5500f3f132f9a2f9abbe82113a7c7bb751472Chris Lattner  P();
949af5500f3f132f9a2f9abbe82113a7c7bb751472Chris Lattner  P = ^(){}; // expected-error {{blocks support disabled - compile with -fblocks}}
959af5500f3f132f9a2f9abbe82113a7c7bb751472Chris Lattner}
96d013aa1ee78d8ead93179c179b7c0746e8d97dbbChris Lattner
97d013aa1ee78d8ead93179c179b7c0746e8d97dbbChris Lattnervoid test14() {
98eb32fde032a250091134db56a3aeaea6b09f6594Eli Friedman  typedef long long __m64 __attribute__((__vector_size__(8)));
99eb32fde032a250091134db56a3aeaea6b09f6594Eli Friedman  typedef short __v4hi __attribute__((__vector_size__(8)));
100d013aa1ee78d8ead93179c179b7c0746e8d97dbbChris Lattner
1019c10fcfc3b9d2076efe701b60644a9987a93c503Chris Lattner  // Ok.
102d013aa1ee78d8ead93179c179b7c0746e8d97dbbChris Lattner  __v4hi a;
1039c10fcfc3b9d2076efe701b60644a9987a93c503Chris Lattner  __m64 mask = (__m64)((__v4hi)a > (__v4hi)a);
104d013aa1ee78d8ead93179c179b7c0746e8d97dbbChris Lattner}
105d013aa1ee78d8ead93179c179b7c0746e8d97dbbChris Lattner
106