| Daniel Dunbar | 8fbe78f | 2009-12-15 20:14:24 +0000 | [diff] [blame] | 1 | // RUN: %clang_cc1 %s -emit-llvm -o - | FileCheck %s | 
| Fariborz Jahanian | b0cd26a | 2009-11-30 22:07:56 +0000 | [diff] [blame] | 2 |  | 
|  | 3 | struct basic_ios{~basic_ios(); }; | 
|  | 4 |  | 
|  | 5 | template<typename _CharT> struct basic_istream : virtual public basic_ios { | 
|  | 6 | virtual ~basic_istream(){} | 
|  | 7 | }; | 
|  | 8 |  | 
|  | 9 | template<typename _CharT> struct basic_iostream : public basic_istream<_CharT> | 
|  | 10 | { | 
|  | 11 | virtual ~basic_iostream(){} | 
|  | 12 | }; | 
|  | 13 |  | 
|  | 14 | basic_iostream<char> res; | 
|  | 15 |  | 
|  | 16 | int main() { | 
|  | 17 | } | 
|  | 18 |  | 
| John McCall | 5c60a6f | 2010-02-18 19:59:28 +0000 | [diff] [blame] | 19 | // basic_iostream's complete dtor calls its base dtor, then its | 
|  | 20 | // virtual base's dtor. | 
| Rafael Espindola | 05842da | 2011-01-25 19:10:24 +0000 | [diff] [blame^] | 21 | //  CHECK: define linkonce_odr void @_ZN14basic_iostreamIcED1Ev(%struct.basic_iostream* %this) unnamed_addr | 
| John McCall | 5c60a6f | 2010-02-18 19:59:28 +0000 | [diff] [blame] | 22 | //  CHECK: call void @_ZN14basic_iostreamIcED2Ev | 
|  | 23 | //  CHECK: call void @_ZN9basic_iosD2Ev | 
|  | 24 |  | 
| Rafael Espindola | e7113ca | 2010-03-10 02:19:29 +0000 | [diff] [blame] | 25 | // basic_iostream's base dtor calls its non-virtual base dtor. | 
| Rafael Espindola | 05842da | 2011-01-25 19:10:24 +0000 | [diff] [blame^] | 26 | //  CHECK: define linkonce_odr void @_ZN14basic_iostreamIcED2Ev(%struct.basic_iostream* %this, i8** %vtt) unnamed_addr | 
| Rafael Espindola | e7113ca | 2010-03-10 02:19:29 +0000 | [diff] [blame] | 27 | //  CHECK: call void @_ZN13basic_istreamIcED2Ev | 
|  | 28 | //  CHECK: } | 
|  | 29 |  | 
| John McCall | 6a7f9f5 | 2010-06-02 21:22:02 +0000 | [diff] [blame] | 30 | // basic_istream's base dtor is a no-op. | 
| Rafael Espindola | 05842da | 2011-01-25 19:10:24 +0000 | [diff] [blame^] | 31 | //  CHECK: define linkonce_odr void @_ZN13basic_istreamIcED2Ev(%struct.basic_istream* %this, i8** %vtt) unnamed_addr | 
| John McCall | 6a7f9f5 | 2010-06-02 21:22:02 +0000 | [diff] [blame] | 32 | //  CHECK-NOT: call | 
|  | 33 | //  CHECK: } | 
|  | 34 |  | 
| John McCall | 5c60a6f | 2010-02-18 19:59:28 +0000 | [diff] [blame] | 35 | // basic_iostream's deleting dtor calls its complete dtor, then | 
|  | 36 | // operator delete(). | 
| Rafael Espindola | 05842da | 2011-01-25 19:10:24 +0000 | [diff] [blame^] | 37 | //  CHECK: define linkonce_odr void @_ZN14basic_iostreamIcED0Ev(%struct.basic_iostream* %this) unnamed_addr | 
| John McCall | 5c60a6f | 2010-02-18 19:59:28 +0000 | [diff] [blame] | 38 | //  CHECK: call void @_ZN14basic_iostreamIcED1Ev | 
|  | 39 | //  CHECK: call void @_ZdlPv | 
|  | 40 |  | 
|  | 41 | // basic_istream's complete dtor calls the base dtor, | 
|  | 42 | // then its virtual base's base dtor. | 
| Rafael Espindola | 05842da | 2011-01-25 19:10:24 +0000 | [diff] [blame^] | 43 | //  CHECK: define linkonce_odr void @_ZN13basic_istreamIcED1Ev(%struct.basic_istream* %this) unnamed_addr | 
| John McCall | 5c60a6f | 2010-02-18 19:59:28 +0000 | [diff] [blame] | 44 | //  CHECK: call void @_ZN13basic_istreamIcED2Ev | 
|  | 45 | //  CHECK: call void @_ZN9basic_iosD2Ev | 
|  | 46 |  | 
|  | 47 | // basic_istream's deleting dtor calls the complete dtor, then | 
|  | 48 | // operator delete(). | 
| Rafael Espindola | 05842da | 2011-01-25 19:10:24 +0000 | [diff] [blame^] | 49 | //  CHECK: define linkonce_odr void @_ZN13basic_istreamIcED0Ev(%struct.basic_istream* %this) unnamed_addr | 
| John McCall | 5c60a6f | 2010-02-18 19:59:28 +0000 | [diff] [blame] | 50 | //  CHECK: call void @_ZN13basic_istreamIcED1Ev | 
|  | 51 | //  CHECK: call void @_ZdlPv |