xref: /aosp_15_r20/external/clang/test/SemaCXX/crashes.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 // <rdar://problem/8124080>
6*67e74705SXin Li template<typename _Alloc> class allocator;
7*67e74705SXin Li template<class _CharT> struct char_traits;
8*67e74705SXin Li template<typename _CharT, typename _Traits = char_traits<_CharT>,
9*67e74705SXin Li          typename _Alloc = allocator<_CharT> >
10*67e74705SXin Li class basic_string;
11*67e74705SXin Li template<typename _CharT, typename _Traits, typename _Alloc>
12*67e74705SXin Li const typename basic_string<_CharT, _Traits, _Alloc>::size_type
13*67e74705SXin Li basic_string<_CharT, _Traits, _Alloc>::_Rep::_S_max_size // expected-error{{no member named '_Rep' in 'basic_string<_CharT, _Traits, _Alloc>'}}
14*67e74705SXin Li   = (((npos - sizeof(_Rep_base))/sizeof(_CharT)) - 1) / 4;
15*67e74705SXin Li 
16*67e74705SXin Li // PR7118
17*67e74705SXin Li template<typename T>
18*67e74705SXin Li class Foo {
19*67e74705SXin Li   class Bar;
f()20*67e74705SXin Li   void f() {
21*67e74705SXin Li     Bar i;
22*67e74705SXin Li   }
23*67e74705SXin Li };
24*67e74705SXin Li 
25*67e74705SXin Li // PR7625
26*67e74705SXin Li template<typename T> struct a : T {
27*67e74705SXin Li  struct x : T {
aaa::x28*67e74705SXin Li    int aa() { return p; } // expected-error{{use of undeclared identifier 'p'}}
29*67e74705SXin Li  };
30*67e74705SXin Li };
31*67e74705SXin Li 
32*67e74705SXin Li // rdar://8605381
33*67e74705SXin Li namespace rdar8605381 {
34*67e74705SXin Li struct X {};
35*67e74705SXin Li 
36*67e74705SXin Li struct Y { // expected-note{{candidate constructor (the implicit copy constructor) not viable}}
37*67e74705SXin Li #if __cplusplus >= 201103L // C++11 or later
38*67e74705SXin Li // expected-note@-2 {{candidate constructor (the implicit move constructor) not viable}}
39*67e74705SXin Li #endif
40*67e74705SXin Li 
41*67e74705SXin Li   Y();
42*67e74705SXin Li };
43*67e74705SXin Li 
44*67e74705SXin Li struct {
45*67e74705SXin Li   Y obj;
46*67e74705SXin Li } objs[] = {
47*67e74705SXin Li   new Y // expected-error{{no viable conversion}}
48*67e74705SXin Li };
49*67e74705SXin Li }
50*67e74705SXin Li 
51*67e74705SXin Li // http://llvm.org/PR8234
52*67e74705SXin Li namespace PR8234 {
53*67e74705SXin Li template<typename Signature>
54*67e74705SXin Li class callback
55*67e74705SXin Li {
56*67e74705SXin Li };
57*67e74705SXin Li 
58*67e74705SXin Li template<typename R , typename ARG_TYPE0>
59*67e74705SXin Li class callback<R( ARG_TYPE0)>
60*67e74705SXin Li {
61*67e74705SXin Li     public:
callback()62*67e74705SXin Li         callback() {}
63*67e74705SXin Li };
64*67e74705SXin Li 
65*67e74705SXin Li template< typename ARG_TYPE0>
66*67e74705SXin Li class callback<void( ARG_TYPE0)>
67*67e74705SXin Li {
68*67e74705SXin Li     public:
callback()69*67e74705SXin Li         callback() {}
70*67e74705SXin Li };
71*67e74705SXin Li 
f()72*67e74705SXin Li void f()
73*67e74705SXin Li {
74*67e74705SXin Li     callback<void(const int&)> op;
75*67e74705SXin Li }
76*67e74705SXin Li }
77*67e74705SXin Li 
78*67e74705SXin Li namespace PR9007 {
79*67e74705SXin Li   struct bar {
80*67e74705SXin Li     enum xxx {
81*67e74705SXin Li       yyy = sizeof(struct foo*)
82*67e74705SXin Li     };
83*67e74705SXin Li     foo *xxx();
84*67e74705SXin Li   };
85*67e74705SXin Li }
86*67e74705SXin Li 
87*67e74705SXin Li namespace PR9026 {
88*67e74705SXin Li   class InfallibleTArray {
89*67e74705SXin Li   };
90*67e74705SXin Li   class Variant;
91*67e74705SXin Li   class CompVariant {
92*67e74705SXin Li     operator const InfallibleTArray&() const;
93*67e74705SXin Li   };
94*67e74705SXin Li   class Variant {
95*67e74705SXin Li     operator const CompVariant&() const;
96*67e74705SXin Li   };
97*67e74705SXin Li   void     Write(const Variant& __v);
98*67e74705SXin Li   void     Write(const InfallibleTArray& __v);
99*67e74705SXin Li   Variant x;
Write2()100*67e74705SXin Li   void Write2() {
101*67e74705SXin Li     Write(x);
102*67e74705SXin Li   }
103*67e74705SXin Li }
104*67e74705SXin Li 
105*67e74705SXin Li namespace PR10270 {
106*67e74705SXin Li   template<typename T> class C;
f()107*67e74705SXin Li   template<typename T> void f() {
108*67e74705SXin Li     if (C<T> == 1) // expected-error{{expected unqualified-id}}
109*67e74705SXin Li       return;
110*67e74705SXin Li   }
111*67e74705SXin Li }
112*67e74705SXin Li 
113*67e74705SXin Li namespace rdar11806334 {
114*67e74705SXin Li 
115*67e74705SXin Li class cc_YCbCr;
116*67e74705SXin Li 
117*67e74705SXin Li class cc_rgb
118*67e74705SXin Li {
119*67e74705SXin Li  public:
120*67e74705SXin Li   cc_rgb( uint p ); // expected-error {{unknown type name}}
121*67e74705SXin Li   cc_rgb( cc_YCbCr v_in );
122*67e74705SXin Li };
123*67e74705SXin Li 
124*67e74705SXin Li class cc_hsl
125*67e74705SXin Li {
126*67e74705SXin Li  public:
127*67e74705SXin Li   cc_rgb rgb();
128*67e74705SXin Li   cc_YCbCr YCbCr();
129*67e74705SXin Li };
130*67e74705SXin Li 
131*67e74705SXin Li class cc_YCbCr
132*67e74705SXin Li {
133*67e74705SXin Li  public:
134*67e74705SXin Li   cc_YCbCr( const cc_rgb v_in );
135*67e74705SXin Li };
136*67e74705SXin Li 
YCbCr()137*67e74705SXin Li cc_YCbCr cc_hsl::YCbCr()
138*67e74705SXin Li {
139*67e74705SXin Li  cc_YCbCr v_out = cc_YCbCr( rgb());
140*67e74705SXin Li  return v_out;
141*67e74705SXin Li }
142*67e74705SXin Li 
143*67e74705SXin Li }
144*67e74705SXin Li 
145*67e74705SXin Li namespace test1 {
146*67e74705SXin Li   int getString(const int*);
147*67e74705SXin Li   template<int a> class ELFObjectFile  {
148*67e74705SXin Li     const int* sh;
ELFObjectFile()149*67e74705SXin Li     ELFObjectFile() {
150*67e74705SXin Li       switch (*sh) {
151*67e74705SXin Li       }
152*67e74705SXin Li       int SectionName(getString(sh));
153*67e74705SXin Li     }
154*67e74705SXin Li   };
155*67e74705SXin Li }
156*67e74705SXin Li 
157*67e74705SXin Li namespace test2 {
158*67e74705SXin Li   struct fltSemantics ;
159*67e74705SXin Li   const fltSemantics &foobar();
VisitCastExpr(int x)160*67e74705SXin Li   void VisitCastExpr(int x) {
161*67e74705SXin Li     switch (x) {
162*67e74705SXin Li     case 42:
163*67e74705SXin Li       const fltSemantics &Sem = foobar();
164*67e74705SXin Li     }
165*67e74705SXin Li   }
166*67e74705SXin Li }
167*67e74705SXin Li 
168*67e74705SXin Li namespace test3 {
169*67e74705SXin Li   struct nsCSSRect {
170*67e74705SXin Li   };
171*67e74705SXin Li   static int nsCSSRect::* sides;
172*67e74705SXin Li   nsCSSRect dimenX;
ParseBoxCornerRadii(int y)173*67e74705SXin Li   void ParseBoxCornerRadii(int y) {
174*67e74705SXin Li     switch (y) {
175*67e74705SXin Li     }
176*67e74705SXin Li     int& x = dimenX.*sides;
177*67e74705SXin Li   }
178*67e74705SXin Li }
179*67e74705SXin Li 
180*67e74705SXin Li namespace pr16964 {
181*67e74705SXin Li   template<typename> struct bs {
182*67e74705SXin Li     bs();
183*67e74705SXin Li     static int* member(); // expected-note{{possible target}}
184*67e74705SXin Li     member();  // expected-error{{C++ requires a type specifier for all declarations}}
185*67e74705SXin Li     static member();  // expected-error{{C++ requires a type specifier for all declarations}}
186*67e74705SXin Li     static int* member(int); // expected-note{{possible target}}
187*67e74705SXin Li   };
188*67e74705SXin Li 
bs()189*67e74705SXin Li   template<typename T> bs<T>::bs() { member; }  // expected-error{{did you mean to call it}}
190*67e74705SXin Li 
test()191*67e74705SXin Li   bs<int> test() {
192*67e74705SXin Li     return bs<int>(); // expected-note{{in instantiation}}
193*67e74705SXin Li   }
194*67e74705SXin Li }
195*67e74705SXin Li 
196*67e74705SXin Li namespace pr12791 {
197*67e74705SXin Li   template<class _Alloc> class allocator {};
198*67e74705SXin Li   template<class _CharT> struct char_traits;
199*67e74705SXin Li   struct input_iterator_tag {};
200*67e74705SXin Li   struct forward_iterator_tag : public input_iterator_tag {};
201*67e74705SXin Li 
202*67e74705SXin Li   template<typename _CharT, typename _Traits, typename _Alloc> struct basic_string {
203*67e74705SXin Li     struct _Alloc_hider : _Alloc { _Alloc_hider(_CharT*, const _Alloc&); };
204*67e74705SXin Li     mutable _Alloc_hider _M_dataplus;
205*67e74705SXin Li     template<class _InputIterator> basic_string(_InputIterator __beg, _InputIterator __end, const _Alloc& __a = _Alloc());
206*67e74705SXin Li     template<class _InIterator> static _CharT* _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a, input_iterator_tag);
207*67e74705SXin Li     template<class _FwdIterator> static _CharT* _S_construct(_FwdIterator __beg, _FwdIterator __end, const _Alloc& __a, forward_iterator_tag);
208*67e74705SXin Li     static _CharT* _S_construct(size_type __req, _CharT __c, const _Alloc& __a); // expected-error{{unknown type name 'size_type'}}
209*67e74705SXin Li   };
210*67e74705SXin Li 
211*67e74705SXin Li   template<typename _CharT, typename _Traits, typename _Alloc>
212*67e74705SXin Li   template<typename _InputIterator>
basic_string(_InputIterator __beg,_InputIterator __end,const _Alloc & __a)213*67e74705SXin Li   basic_string<_CharT, _Traits, _Alloc>:: basic_string(_InputIterator __beg, _InputIterator __end, const _Alloc& __a)
214*67e74705SXin Li   : _M_dataplus(_S_construct(__beg, __end, __a, input_iterator_tag()), __a) {}
215*67e74705SXin Li 
216*67e74705SXin Li   template<typename _CharT, typename _Traits = char_traits<_CharT>, typename _Alloc = allocator<_CharT> > struct basic_stringbuf {
217*67e74705SXin Li     typedef _CharT char_type;
218*67e74705SXin Li     typedef basic_string<char_type, _Traits, _Alloc> __string_type;
strpr12791::basic_stringbuf219*67e74705SXin Li     __string_type str() const {__string_type((char_type*)0,(char_type*)0);}
220*67e74705SXin Li   };
221*67e74705SXin Li 
222*67e74705SXin Li   template class basic_stringbuf<char>;
223*67e74705SXin Li }
224*67e74705SXin Li 
225*67e74705SXin Li namespace pr16989 {
226*67e74705SXin Li   class C {
227*67e74705SXin Li     template <class T>
tpl_mem(T *)228*67e74705SXin Li     C tpl_mem(T *) { return }    // expected-error{{expected expression}}
mem(int * p)229*67e74705SXin Li     void mem(int *p) {
230*67e74705SXin Li       tpl_mem(p);
231*67e74705SXin Li     }
232*67e74705SXin Li   };
233*67e74705SXin Li   class C2 {
234*67e74705SXin Li     void f();
235*67e74705SXin Li   };
f()236*67e74705SXin Li   void C2::f() {}
237*67e74705SXin Li }
238*67e74705SXin Li 
239*67e74705SXin Li namespace pr20660 {
240*67e74705SXin Li  appendList(int[]...);     // expected-error {{C++ requires a type specifier for all declarations}}
appendList(int[]...)241*67e74705SXin Li  appendList(int[]...) { }  // expected-error {{C++ requires a type specifier for all declarations}}
242*67e74705SXin Li }
243*67e74705SXin Li 
244