1 // RUN: %clang_cc1 -fsyntax-only -verify %s 2 3 struct A { 4 unsigned bitX : 4; 5 unsigned bitY : 4; 6 unsigned var; 7 8 void foo(); 9 }; 10 11 void test(A *a) { 12 int x; 13 x = sizeof(a->bitX); // expected-error {{invalid application of 'sizeof' to bit-field}} 14 x = sizeof((unsigned) a->bitX); 15 x = sizeof(a->foo(), a->bitX); // expected-error {{invalid application of 'sizeof' to bit-field}} 16 x = sizeof(a->var ? a->bitX : a->bitY); // expected-error {{invalid application of 'sizeof' to bit-field}} 17 x = sizeof(a->var ? a->bitX : a->bitX); // expected-error {{invalid application of 'sizeof' to bit-field}} 18 x = sizeof(a->bitX = 3); // expected-error {{invalid application of 'sizeof' to bit-field}} 19 x = sizeof(a->bitY += 3); // expected-error {{invalid application of 'sizeof' to bit-field}} 20 } 21 22 void test2() { 23 int x; 24 x = sizeof(void); // expected-error {{invalid application of 'sizeof' to an incomplete type 'void'}} 25 x = sizeof(int()); // expected-error {{invalid application of 'sizeof' to a function type}} 26 x = sizeof(test2()); // expected-error {{invalid application of 'sizeof' to an incomplete type 'void'}} 27 x = sizeof(test2); // expected-error {{invalid application of 'sizeof' to a function type}} 28 } 29 30 namespace pr16992 { 31 32 template<typename T> struct ABC { 33 int func () { 34 return sizeof T; // expected-error {{expected parentheses around type name in sizeof expression}} 35 } 36 }; 37 38 ABC<int> qq; 39 40 template<typename T> struct ABC2 { 41 int func () { 42 return sizeof T::A; 43 } 44 }; 45 46 struct QQ { int A; }; 47 ABC2<QQ> qq2; 48 } 49