Home | History | Annotate | Download | only in SemaCXX
      1 // RUN: %clang_cc1 %s -fsyntax-only -verify -triple=x86_64-apple-darwin10
      2 
      3 #define CHECK_SIZE(name, size) extern int name##1[sizeof(name) == size ? 1 : -1];
      4 #define CHECK_ALIGN(name, size) extern int name##2[__alignof(name) == size ? 1 : -1];
      5 
      6 // Simple tests.
      7 struct Test1 {
      8   char c : 9; // expected-warning {{size of bit-field 'c' (9 bits) exceeds the size of its type; value will be truncated to 8 bits}}
      9 };
     10 CHECK_SIZE(Test1, 2);
     11 CHECK_ALIGN(Test1, 1);
     12 
     13 struct Test2 {
     14   char c : 16; // expected-warning {{size of bit-field 'c' (16 bits) exceeds the size of its type; value will be truncated to 8 bits}}
     15 };
     16 CHECK_SIZE(Test2, 2);
     17 CHECK_ALIGN(Test2, 2);
     18 
     19 struct Test3 {
     20   char c : 32; // expected-warning {{size of bit-field 'c' (32 bits) exceeds the size of its type; value will be truncated to 8 bits}}
     21 };
     22 CHECK_SIZE(Test3, 4);
     23 CHECK_ALIGN(Test3, 4);
     24 
     25 struct Test4 {
     26   char c : 64; // expected-warning {{size of bit-field 'c' (64 bits) exceeds the size of its type; value will be truncated to 8 bits}}
     27 };
     28 CHECK_SIZE(Test4, 8);
     29 CHECK_ALIGN(Test4, 8);
     30 
     31