221 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			221 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
// RUN: %clang_cc1 -fsyntax-only -verify %s
 | 
						|
 | 
						|
// <rdar://problem/8124080>
 | 
						|
template<typename _Alloc> class allocator;
 | 
						|
template<class _CharT> struct char_traits;
 | 
						|
template<typename _CharT, typename _Traits = char_traits<_CharT>,            
 | 
						|
         typename _Alloc = allocator<_CharT> >
 | 
						|
class basic_string;
 | 
						|
template<typename _CharT, typename _Traits, typename _Alloc>
 | 
						|
const typename basic_string<_CharT, _Traits, _Alloc>::size_type   
 | 
						|
basic_string<_CharT, _Traits, _Alloc>::_Rep::_S_max_size // expected-error{{no member named '_Rep' in 'basic_string<_CharT, _Traits, _Alloc>'}}
 | 
						|
  = (((npos - sizeof(_Rep_base))/sizeof(_CharT)) - 1) / 4; 
 | 
						|
 | 
						|
// PR7118
 | 
						|
template<typename T>
 | 
						|
class Foo {
 | 
						|
  class Bar;
 | 
						|
  void f() {
 | 
						|
    Bar i;
 | 
						|
  }
 | 
						|
};
 | 
						|
 | 
						|
// PR7625
 | 
						|
template<typename T> struct a : T {
 | 
						|
 struct x : T {
 | 
						|
   int aa() { return p; } // expected-error{{use of undeclared identifier 'p'}}
 | 
						|
 };
 | 
						|
};
 | 
						|
 | 
						|
// rdar://8605381
 | 
						|
namespace rdar8605381 {
 | 
						|
struct X {};
 | 
						|
 | 
						|
struct Y { // expected-note{{candidate}}
 | 
						|
  Y();
 | 
						|
};
 | 
						|
 | 
						|
struct {
 | 
						|
  Y obj;
 | 
						|
} objs[] = {
 | 
						|
  new Y // expected-error{{no viable conversion}}
 | 
						|
};
 | 
						|
}
 | 
						|
 | 
						|
// http://llvm.org/PR8234
 | 
						|
namespace PR8234 {
 | 
						|
template<typename Signature>
 | 
						|
class callback
 | 
						|
{
 | 
						|
};
 | 
						|
 | 
						|
template<typename R , typename ARG_TYPE0>
 | 
						|
class callback<R( ARG_TYPE0)>
 | 
						|
{
 | 
						|
    public:
 | 
						|
        callback() {}
 | 
						|
};
 | 
						|
 | 
						|
template< typename ARG_TYPE0>
 | 
						|
class callback<void( ARG_TYPE0)>
 | 
						|
{
 | 
						|
    public:
 | 
						|
        callback() {}
 | 
						|
};
 | 
						|
 | 
						|
void f()
 | 
						|
{
 | 
						|
    callback<void(const int&)> op;
 | 
						|
}
 | 
						|
}
 | 
						|
 | 
						|
namespace PR9007 {
 | 
						|
  struct bar {
 | 
						|
    enum xxx {
 | 
						|
      yyy = sizeof(struct foo*)
 | 
						|
    };
 | 
						|
    foo *xxx();
 | 
						|
  };
 | 
						|
}
 | 
						|
 | 
						|
namespace PR9026 {
 | 
						|
  class InfallibleTArray {
 | 
						|
  };
 | 
						|
  class Variant;
 | 
						|
  class CompVariant {
 | 
						|
    operator const InfallibleTArray&() const;
 | 
						|
  };
 | 
						|
  class Variant {
 | 
						|
    operator const CompVariant&() const;
 | 
						|
  };
 | 
						|
  void     Write(const Variant& __v);
 | 
						|
  void     Write(const InfallibleTArray& __v);
 | 
						|
  Variant x;
 | 
						|
  void Write2() {
 | 
						|
    Write(x);
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
namespace PR10270 {
 | 
						|
  template<typename T> class C;
 | 
						|
  template<typename T> void f() {
 | 
						|
    if (C<T> == 1) // expected-error{{expected unqualified-id}} \
 | 
						|
                   // expected-error{{invalid '==' at end of declaration}}
 | 
						|
      return;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
namespace rdar11806334 {
 | 
						|
 | 
						|
class cc_YCbCr;
 | 
						|
 | 
						|
class cc_rgb
 | 
						|
{
 | 
						|
 public:
 | 
						|
  cc_rgb( uint p ); // expected-error {{unknown type name}}
 | 
						|
  cc_rgb( cc_YCbCr v_in );
 | 
						|
};
 | 
						|
 | 
						|
class cc_hsl
 | 
						|
{
 | 
						|
 public:
 | 
						|
  cc_rgb rgb();
 | 
						|
  cc_YCbCr YCbCr();
 | 
						|
};
 | 
						|
 | 
						|
class cc_YCbCr
 | 
						|
{
 | 
						|
 public:
 | 
						|
  cc_YCbCr( const cc_rgb v_in );
 | 
						|
};
 | 
						|
 | 
						|
cc_YCbCr cc_hsl::YCbCr()
 | 
						|
{
 | 
						|
 cc_YCbCr v_out = cc_YCbCr( rgb());
 | 
						|
 return v_out;
 | 
						|
}
 | 
						|
 | 
						|
}
 | 
						|
 | 
						|
namespace test1 {
 | 
						|
  int getString(const int*);
 | 
						|
  template<int a> class ELFObjectFile  {
 | 
						|
    const int* sh;
 | 
						|
    ELFObjectFile() {
 | 
						|
      switch (*sh) {
 | 
						|
      }
 | 
						|
      int SectionName(getString(sh));
 | 
						|
    }
 | 
						|
  };
 | 
						|
}
 | 
						|
 | 
						|
namespace test2 {
 | 
						|
  struct fltSemantics ;
 | 
						|
  const fltSemantics &foobar();
 | 
						|
  void VisitCastExpr(int x) {
 | 
						|
    switch (x) {
 | 
						|
    case 42:
 | 
						|
      const fltSemantics &Sem = foobar();
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
namespace test3 {
 | 
						|
  struct nsCSSRect {
 | 
						|
  };
 | 
						|
  static int nsCSSRect::* sides;
 | 
						|
  nsCSSRect dimenX;
 | 
						|
  void ParseBoxCornerRadii(int y) {
 | 
						|
    switch (y) {
 | 
						|
    }
 | 
						|
    int& x = dimenX.*sides;
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
namespace pr16964 {
 | 
						|
  template<typename> struct bs {
 | 
						|
    bs();
 | 
						|
    static int* member();
 | 
						|
    member();  // expected-error{{C++ requires a type specifier for all declarations}}
 | 
						|
    static member();  // expected-error{{C++ requires a type specifier for all declarations}}
 | 
						|
    static int* member(int);
 | 
						|
  };
 | 
						|
 | 
						|
  template<typename T> bs<T>::bs() { member; }
 | 
						|
 | 
						|
  bs<int> test() {
 | 
						|
    return bs<int>();
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
namespace pr12791 {
 | 
						|
  template<class _Alloc> class allocator {};
 | 
						|
  template<class _CharT> struct char_traits;
 | 
						|
  struct input_iterator_tag {};
 | 
						|
  struct forward_iterator_tag : public input_iterator_tag {};
 | 
						|
 | 
						|
  template<typename _CharT, typename _Traits, typename _Alloc> struct basic_string {
 | 
						|
    struct _Alloc_hider : _Alloc {};
 | 
						|
    mutable _Alloc_hider _M_dataplus;
 | 
						|
    template<class _InputIterator> basic_string(_InputIterator __beg, _InputIterator __end, const _Alloc& __a = _Alloc());
 | 
						|
    template<class _InIterator> static _CharT* _S_construct(_InIterator __beg, _InIterator __end, const _Alloc& __a, input_iterator_tag);
 | 
						|
    template<class _FwdIterator> static _CharT* _S_construct(_FwdIterator __beg, _FwdIterator __end, const _Alloc& __a, forward_iterator_tag);
 | 
						|
    static _CharT* _S_construct(size_type __req, _CharT __c, const _Alloc& __a); // expected-error{{unknown type name 'size_type'}}
 | 
						|
  };
 | 
						|
 | 
						|
  template<typename _CharT, typename _Traits, typename _Alloc>
 | 
						|
  template<typename _InputIterator>
 | 
						|
  basic_string<_CharT, _Traits, _Alloc>:: basic_string(_InputIterator __beg, _InputIterator __end, const _Alloc& __a)
 | 
						|
  : _M_dataplus(_S_construct(__beg, __end, __a), __a) {}
 | 
						|
 | 
						|
  template<typename _CharT, typename _Traits = char_traits<_CharT>, typename _Alloc = allocator<_CharT> > struct basic_stringbuf {
 | 
						|
    typedef _CharT char_type;
 | 
						|
    typedef basic_string<char_type, _Traits, _Alloc> __string_type;
 | 
						|
    typedef typename __string_type::size_type __size_type;
 | 
						|
    __string_type str() const {__string_type((char_type*)0,(char_type*)0);}
 | 
						|
  };
 | 
						|
 | 
						|
  template class basic_stringbuf<char>;
 | 
						|
}
 | 
						|
 |