blob: 2ea0641b00771b883718aee2288915e6bebd3289 [file] [log] [blame]
Douglas Gregora0e500d2009-03-12 16:53:44 +00001// RUN: clang -fsyntax-only -verify %s
2
3template<int I, int J>
4struct Bitfields {
5 int simple : I; // expected-error{{bit-field 'simple' has zero width}}
6 int parens : (J);
7};
8
9void test_Bitfields(Bitfields<0, 5> *b) {
10 (void)sizeof(Bitfields<10, 5>);
11 (void)sizeof(Bitfields<0, 1>); // expected-note{{in instantiation of template class 'struct Bitfields<0, 1>' requested here}}
12}
Douglas Gregordf032512009-03-12 22:46:12 +000013
14template<int I, int J>
15struct BitfieldPlus {
16 int bitfield : I + J; // expected-error{{bit-field 'bitfield' has zero width}}
17};
18
19void test_BitfieldPlus() {
20 (void)sizeof(BitfieldPlus<0, 1>);
21 (void)sizeof(BitfieldPlus<-5, 5>); // expected-note{{in instantiation of template class 'struct BitfieldPlus<-5, 5>' requested here}}
22}
23
24template<int I, int J>
25struct BitfieldMinus {
26 int bitfield : I - J; // expected-error{{bit-field 'bitfield' has negative width (-1)}} \
27 // expected-error{{bit-field 'bitfield' has zero width}}
28};
29
30void test_BitfieldMinus() {
31 (void)sizeof(BitfieldMinus<5, 1>);
32 (void)sizeof(BitfieldMinus<0, 1>); // expected-note{{in instantiation of template class 'struct BitfieldMinus<0, 1>' requested here}}
33 (void)sizeof(BitfieldMinus<5, 5>); // expected-note{{in instantiation of template class 'struct BitfieldMinus<5, 5>' requested here}}
34}
35
36template<int I, int J>
37struct BitfieldDivide {
38 int bitfield : I / J; // expected-error{{expression is not an integer constant expression}} \
39 // expected-note{{division by zero}}
40};
41
42void test_BitfieldDivide() {
43 (void)sizeof(BitfieldDivide<5, 1>);
44 (void)sizeof(BitfieldDivide<5, 0>); // expected-note{{in instantiation of template class 'struct BitfieldDivide<5, 0>' requested here}}
45}
Douglas Gregorba498172009-03-13 21:01:28 +000046
47template<typename T, T I, int J>
48struct BitfieldDep {
49 int bitfield : I + J;
50};
51
52void test_BitfieldDep() {
53 (void)sizeof(BitfieldDep<int, 1, 5>);
54}
55
Douglas Gregorbc736fc2009-03-13 23:49:33 +000056template<int I>
57struct BitfieldNeg {
58 int bitfield : (-I); // expected-error{{bit-field 'bitfield' has negative width (-5)}}
59};
60
61template<typename T, T I>
62struct BitfieldNeg2 {
63 int bitfield : (-I); // expected-error{{bit-field 'bitfield' has negative width (-5)}}
64};
65
66void test_BitfieldNeg() {
67 (void)sizeof(BitfieldNeg<-5>); // okay
68 (void)sizeof(BitfieldNeg<5>); // expected-note{{in instantiation of template class 'struct BitfieldNeg<5>' requested here}}
69 (void)sizeof(BitfieldNeg2<int, -5>); // okay
70 (void)sizeof(BitfieldNeg2<int, 5>); // expected-note{{in instantiation of template class 'struct BitfieldNeg2<int, 5>' requested here}}
71}