xref: /aosp_15_r20/external/clang/test/SemaCXX/invalid-member-expr.cpp (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify %s
2*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++98 %s
3*67e74705SXin Li // RUN: %clang_cc1 -fsyntax-only -verify -std=c++11 %s
4*67e74705SXin Li 
5*67e74705SXin Li class X {};
6*67e74705SXin Li 
test()7*67e74705SXin Li void test() {
8*67e74705SXin Li   X x;
9*67e74705SXin Li 
10*67e74705SXin Li   x.int; // expected-error{{expected unqualified-id}}
11*67e74705SXin Li   x.~int(); // expected-error{{expected a class name}}
12*67e74705SXin Li   x.operator; // expected-error{{expected a type}}
13*67e74705SXin Li   x.operator typedef; // expected-error{{expected a type}} expected-error{{type name does not allow storage class}}
14*67e74705SXin Li }
15*67e74705SXin Li 
test2()16*67e74705SXin Li void test2() {
17*67e74705SXin Li   X *x;
18*67e74705SXin Li 
19*67e74705SXin Li   x->int; // expected-error{{expected unqualified-id}}
20*67e74705SXin Li   x->~int(); // expected-error{{expected a class name}}
21*67e74705SXin Li   x->operator; // expected-error{{expected a type}}
22*67e74705SXin Li   x->operator typedef; // expected-error{{expected a type}} expected-error{{type name does not allow storage class}}
23*67e74705SXin Li }
24*67e74705SXin Li 
25*67e74705SXin Li // PR6327
26*67e74705SXin Li namespace test3 {
27*67e74705SXin Li   template <class A, class B> struct pair {};
28*67e74705SXin Li   template <class _E> class initializer_list {};
minmax(initializer_list<_Tp> __l)29*67e74705SXin Li   template <typename _Tp> pair<_Tp, _Tp> minmax(initializer_list<_Tp> __l) {};
30*67e74705SXin Li 
test0()31*67e74705SXin Li   void test0() {
32*67e74705SXin Li     pair<int, int> z = minmax({});
33*67e74705SXin Li #if __cplusplus <= 199711L // C++03 or earlier modes
34*67e74705SXin Li     // expected-error@-2 {{expected expression}}
35*67e74705SXin Li #else
36*67e74705SXin Li     // expected-error@-4 {{no matching function for call to 'minmax'}}
37*67e74705SXin Li     // expected-note@-8 {{candidate template ignored: couldn't infer template argument '_Tp'}}
38*67e74705SXin Li #endif
39*67e74705SXin Li   }
40*67e74705SXin Li 
41*67e74705SXin Li   struct string {
42*67e74705SXin Li     class iterator {};
43*67e74705SXin Li   };
44*67e74705SXin Li 
test1()45*67e74705SXin Li   void test1() {
46*67e74705SXin Li     string s;
47*67e74705SXin Li     string::iterator i = s.foo(); // expected-error {{no member named 'foo'}}
48*67e74705SXin Li   }
49*67e74705SXin Li }
50*67e74705SXin Li 
51*67e74705SXin Li 
52*67e74705SXin Li // Make sure we don't crash.
53*67e74705SXin Li namespace rdar11293995 {
54*67e74705SXin Li 
55*67e74705SXin Li struct Length {
56*67e74705SXin Li   explicit Length(PassRefPtr<CalculationValue>); // expected-error {{unknown type name}} \
57*67e74705SXin Li                     expected-error {{expected ')'}} \
58*67e74705SXin Li                     expected-note {{to match this '('}}
59*67e74705SXin Li };
60*67e74705SXin Li 
61*67e74705SXin Li struct LengthSize {
62*67e74705SXin Li     Length m_width;
63*67e74705SXin Li     Length m_height;
64*67e74705SXin Li };
65*67e74705SXin Li 
66*67e74705SXin Li enum EFillSizeType { Contain, Cover, SizeLength, SizeNone };
67*67e74705SXin Li 
68*67e74705SXin Li struct FillSize {
69*67e74705SXin Li     EFillSizeType type;
70*67e74705SXin Li     LengthSize size;
71*67e74705SXin Li };
72*67e74705SXin Li 
73*67e74705SXin Li class FillLayer {
74*67e74705SXin Li public:
setSize(FillSize f)75*67e74705SXin Li     void setSize(FillSize f) { m_sizeType = f.type;}
76*67e74705SXin Li private:
77*67e74705SXin Li     unsigned m_sizeType : 2;
78*67e74705SXin Li };
79*67e74705SXin Li 
80*67e74705SXin Li }
81