brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.7 KiB · f30218b Raw
50 lines · cpp
1// RUN: %clang_cc1 %s -fsyntax-only -verify -triple=x86_64-apple-darwin102 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.7struct Test1 {8  char c : 9; // expected-warning {{width of bit-field 'c' (9 bits) exceeds the width of its type; value will be truncated to 8 bits}}9};10CHECK_SIZE(Test1, 2);11CHECK_ALIGN(Test1, 1);12 13struct Test1a {14  char : 9; // no warning (there's no value to truncate here)15};16CHECK_SIZE(Test1a, 2);17CHECK_ALIGN(Test1a, 1);18 19struct Test2 {20  char c : 16; // expected-warning {{width of bit-field 'c' (16 bits) exceeds the width of its type; value will be truncated to 8 bits}}21};22CHECK_SIZE(Test2, 2);23CHECK_ALIGN(Test2, 2);24 25struct Test3 {26  char c : 32; // expected-warning {{width of bit-field 'c' (32 bits) exceeds the width of its type; value will be truncated to 8 bits}}27};28CHECK_SIZE(Test3, 4);29CHECK_ALIGN(Test3, 4);30 31struct Test4 {32  char c : 64; // expected-warning {{width of bit-field 'c' (64 bits) exceeds the width of its type; value will be truncated to 8 bits}}33};34CHECK_SIZE(Test4, 8);35CHECK_ALIGN(Test4, 8);36 37struct Test5 {38  char c : 0x100000001; // expected-warning {{width of bit-field 'c' (4'294'967'297 bits) exceeds the width of its type; value will be truncated to 8 bits}}39};40// Size and align don't really matter here, just make sure we don't crash.41CHECK_SIZE(Test5, 1);42CHECK_ALIGN(Test5, 1);43 44struct Test6 {45  char c : (unsigned __int128)0xffffffffffffffff + 2; // expected-error {{bit-field 'c' is too wide (18446744073709551617 bits)}}46};47// Size and align don't really matter here, just make sure we don't crash.48CHECK_SIZE(Test6, 1);49CHECK_ALIGN(Test6, 1);50