1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -fsyntax-only -verify %s
2a6f0f9d589a06737707fe914e06bd6d4bfae0997Douglas Gregor
3a6f0f9d589a06737707fe914e06bd6d4bfae0997Douglas Gregorclass X {};
4a6f0f9d589a06737707fe914e06bd6d4bfae0997Douglas Gregor
5a6f0f9d589a06737707fe914e06bd6d4bfae0997Douglas Gregorvoid test() {
6a6f0f9d589a06737707fe914e06bd6d4bfae0997Douglas Gregor  X x;
7a6f0f9d589a06737707fe914e06bd6d4bfae0997Douglas Gregor
82d1c21414199a7452f122598189363a3922605b1Douglas Gregor  x.int; // expected-error{{expected unqualified-id}}
9124b878dba5007df0a268ea128a6ad8dc5dd2c5eDouglas Gregor  x.~int(); // expected-error{{expected a class name}}
109fa8e569407e02148888136609431a3fe083096dNick Lewycky  x.operator; // expected-error{{expected a type}}
1169730c115c2d0fec2f20609d905d920a5a41b29bRichard Smith  x.operator typedef; // expected-error{{expected a type}} expected-error{{type name does not allow storage class}}
12a6f0f9d589a06737707fe914e06bd6d4bfae0997Douglas Gregor}
13a6f0f9d589a06737707fe914e06bd6d4bfae0997Douglas Gregor
14a6f0f9d589a06737707fe914e06bd6d4bfae0997Douglas Gregorvoid test2() {
15a6f0f9d589a06737707fe914e06bd6d4bfae0997Douglas Gregor  X *x;
16a6f0f9d589a06737707fe914e06bd6d4bfae0997Douglas Gregor
172d1c21414199a7452f122598189363a3922605b1Douglas Gregor  x->int; // expected-error{{expected unqualified-id}}
18124b878dba5007df0a268ea128a6ad8dc5dd2c5eDouglas Gregor  x->~int(); // expected-error{{expected a class name}}
199fa8e569407e02148888136609431a3fe083096dNick Lewycky  x->operator; // expected-error{{expected a type}}
2069730c115c2d0fec2f20609d905d920a5a41b29bRichard Smith  x->operator typedef; // expected-error{{expected a type}} expected-error{{type name does not allow storage class}}
21a6f0f9d589a06737707fe914e06bd6d4bfae0997Douglas Gregor}
227727acf243ee61c0757d86c95b69dbee56a3d898John McCall
237727acf243ee61c0757d86c95b69dbee56a3d898John McCall// PR6327
247727acf243ee61c0757d86c95b69dbee56a3d898John McCallnamespace test3 {
257727acf243ee61c0757d86c95b69dbee56a3d898John McCall  template <class A, class B> struct pair {};
267727acf243ee61c0757d86c95b69dbee56a3d898John McCall
277727acf243ee61c0757d86c95b69dbee56a3d898John McCall  void test0() {
287727acf243ee61c0757d86c95b69dbee56a3d898John McCall    pair<int, int> z = minmax({}); // expected-error {{expected expression}}
297727acf243ee61c0757d86c95b69dbee56a3d898John McCall  }
307727acf243ee61c0757d86c95b69dbee56a3d898John McCall
317727acf243ee61c0757d86c95b69dbee56a3d898John McCall  struct string {
327727acf243ee61c0757d86c95b69dbee56a3d898John McCall    class iterator {};
337727acf243ee61c0757d86c95b69dbee56a3d898John McCall  };
347727acf243ee61c0757d86c95b69dbee56a3d898John McCall
357727acf243ee61c0757d86c95b69dbee56a3d898John McCall  void test1() {
367727acf243ee61c0757d86c95b69dbee56a3d898John McCall    string s;
377727acf243ee61c0757d86c95b69dbee56a3d898John McCall    string::iterator i = s.foo(); // expected-error {{no member named 'foo'}}
387727acf243ee61c0757d86c95b69dbee56a3d898John McCall  }
397727acf243ee61c0757d86c95b69dbee56a3d898John McCall}
40d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis
41d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis
42d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis// Make sure we don't crash.
43d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidisnamespace rdar11293995 {
44d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis
45d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidisstruct Length {
46d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis  explicit Length(PassRefPtr<CalculationValue>); // expected-error {{unknown type name}} \
47d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis                    expected-error {{expected ')'}} \
48d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis                    expected-note {{to match this '('}}
49d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis};
50d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis
51d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidisstruct LengthSize {
52d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis    Length m_width;
53d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis    Length m_height;
54d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis};
55d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis
56d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidisenum EFillSizeType { Contain, Cover, SizeLength, SizeNone };
57d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis
58d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidisstruct FillSize {
59d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis    EFillSizeType type;
60d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis    LengthSize size;
61d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis};
62d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis
63d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidisclass FillLayer {
64d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidispublic:
65d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis    void setSize(FillSize f) { m_sizeType = f.type;}
66d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidisprivate:
67d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis    unsigned m_sizeType : 2;
68d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis};
69d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis
70d601c62ad49ddc2593dfeb3d777ad8baf4ab6acbArgyrios Kyrtzidis}
71