forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			43 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 -emit-llvm-only -triple %itanium_abi_triple -O1 %s
 | |
| // This used to crash under asan and valgrind.
 | |
| // PR12284
 | |
| 
 | |
| template < typename _Tp > struct new_allocator
 | |
| {
 | |
|   typedef _Tp *pointer;
 | |
|   template < typename > struct rebind {
 | |
|     typedef new_allocator other;
 | |
|   };
 | |
| };
 | |
| template < typename _Tp > struct allocator:new_allocator < _Tp > {
 | |
| };
 | |
| template < typename _Tp, typename _Alloc > struct _Vector_base {
 | |
|   typedef typename _Alloc::template rebind < _Tp >::other _Tp_alloc_type;
 | |
|   struct _Vector_impl {
 | |
|     typename _Tp_alloc_type::pointer _M_end_of_storage;
 | |
|   };
 | |
|   _Vector_base () {
 | |
|     foo((int *) this->_M_impl._M_end_of_storage);
 | |
|   }
 | |
|   void foo(int *);
 | |
|   _Vector_impl _M_impl;
 | |
| };
 | |
| template < typename _Tp, typename _Alloc =
 | |
| allocator < _Tp > >struct vector:_Vector_base < _Tp, _Alloc > { };
 | |
| 
 | |
| 
 | |
| template < class T> struct HHH {};
 | |
| struct DDD { int x_;};
 | |
| struct Data;
 | |
| struct X1;
 | |
| struct CCC:DDD {   virtual void xxx (HHH < X1 >); };
 | |
| template < class SSS > struct EEE:vector < HHH < SSS > > { };
 | |
| template < class SSS, class = EEE < SSS > >class FFF { };
 | |
| template < class SSS, class GGG = EEE < SSS > >class AAA:FFF <GGG> { };
 | |
| class BBB:virtual CCC {
 | |
|   void xxx (HHH < X1 >);
 | |
|   vector < HHH < X1 > >aaa;
 | |
| };
 | |
| class ZZZ:AAA < Data >, BBB { virtual ZZZ *ppp () ; };
 | |
| ZZZ * ZZZ::ppp () { return new ZZZ; }
 |