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