1 // RUN: %clang_cc1 -triple x86_64-apple-darwin10.0.0 -fsyntax-only -verify %s -Winvalid-offsetof -std=c++98
2 // RUN: %clang_cc1 -triple x86_64-apple-darwin10.0.0 -fsyntax-only -verify %s -Winvalid-offsetof -std=c++98 -fexperimental-new-constant-interpreter
10 NonPOD fieldThatPointsToANonPODType
;
14 int i
= __builtin_offsetof(P
, fieldThatPointsToANonPODType
.m
); // expected-warning{{offset of on non-POD type 'P'}}
17 struct Base
{ int x
; };
18 struct Derived
: Base
{ int y
; };
19 int o
= __builtin_offsetof(Derived
, x
); // expected-warning{{offset of on non-POD type}}
21 const int o2
= sizeof(__builtin_offsetof(Derived
, x
));
27 // Constant and non-constant offsetof expressions
28 void test_ice(int i
) {
29 int array0
[__builtin_offsetof(HasArray
, array
[5])];
30 int array1
[__builtin_offsetof(HasArray
, array
[i
])]; // expected-warning {{variable length arrays in C++ are a Clang extension}}
34 struct has_bitfields
{
36 int j
: 12; // expected-note{{bit-field is declared here}}
39 int test3
= __builtin_offsetof(struct has_bitfields
, j
); // expected-error{{cannot compute offset of bit-field 'j'}}
41 // offsetof referring to members of a base class.
50 struct Derived2
: public Base1
, public Base2
{
54 int derived1
[__builtin_offsetof(Derived2
, x
) == 0? 1 : -1]; // expected-warning{{offset of on non-POD type 'Derived2'}}
55 int derived2
[__builtin_offsetof(Derived2
, y
) == 4? 1 : -1]; // expected-warning{{offset of on non-POD type 'Derived2'}}
56 int derived3
[__builtin_offsetof(Derived2
, z
) == 8? 1 : -1]; // expected-warning{{offset of on non-POD type 'Derived2'}}
58 // offsetof referring to anonymous struct in base.
66 struct bar
: public foo
{
69 int anonstruct
[__builtin_offsetof(bar
, x
) == 0 ? 1 : -1]; // expected-warning{{offset of on non-POD type 'bar'}}
76 int ltor
= __builtin_offsetof(struct LtoRCheck
, a
[LtoRCheck().f
]); // \
77 expected
-error
{{reference to non
-static member function must be called
}}
83 struct Derived
: virtual Base
{
84 void Fun() { (void)__builtin_offsetof(Derived
, Field
); } // expected-warning {{offset of on non-POD type}} \
85 expected
-error
{{invalid application of
'offsetof' to a field of a
virtual base
}}
89 int test_definition(void) {
90 return __builtin_offsetof(struct A
// expected-error {{'A' cannot be defined in a type specifier}}
93 struct B
// FIXME: error diagnostic message for nested definitions
94 // https://reviews.llvm.org/D133574
95 // fixme-error{{'A' cannot be defined in '__builtin_offsetof'}}