forked from OSchip/llvm-project
				
			
		
			
				
	
	
		
			211 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			211 lines
		
	
	
		
			6.2 KiB
		
	
	
	
		
			C++
		
	
	
	
| // RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm-only -fdump-vtable-layouts 2>&1 | FileCheck %s
 | |
| 
 | |
| // A collection of big class hierarchies and their vtables.
 | |
| 
 | |
| namespace Test1 {
 | |
| 
 | |
| class C0
 | |
| {
 | |
| };
 | |
| class C1
 | |
|  :  virtual public C0
 | |
| {
 | |
|   int k0;
 | |
| };
 | |
| class C2
 | |
|  :  public C0
 | |
|  ,  virtual public C1
 | |
| {
 | |
|   int k0;
 | |
| };
 | |
| class C3
 | |
|  :  virtual public C0
 | |
|  ,  virtual public C1
 | |
|  ,  public C2
 | |
| {
 | |
|   int k0;
 | |
|   int k1;
 | |
|   int k2;
 | |
|   int k3;
 | |
| };
 | |
| class C4
 | |
|  :  public C2
 | |
|  ,  virtual public C3
 | |
|  ,  public C0
 | |
| {
 | |
|   int k0;
 | |
| };
 | |
| class C5
 | |
|  :  public C0
 | |
|  ,  virtual public C4
 | |
|  ,  public C2
 | |
|  ,  public C1
 | |
|  ,  virtual public C3
 | |
| {
 | |
|   int k0;
 | |
| };
 | |
| class C6
 | |
|  :  virtual public C3
 | |
|  ,  public C0
 | |
|  ,  public C5
 | |
|  ,  public C4
 | |
|  ,  public C1
 | |
| {
 | |
|   int k0;
 | |
| };
 | |
| class C7
 | |
|  :  virtual public C5
 | |
|  ,  virtual public C6
 | |
|  ,  virtual public C3
 | |
|  ,  public C4
 | |
|  ,  virtual public C2
 | |
| {
 | |
|   int k0;
 | |
|   int k1;
 | |
| };
 | |
| class C8
 | |
|  :  public C7
 | |
|  ,  public C5
 | |
|  ,  public C3
 | |
|  ,  virtual public C4
 | |
|  ,  public C1
 | |
|  ,  public C2
 | |
| {
 | |
|   int k0;
 | |
|   int k1;
 | |
| };
 | |
| 
 | |
| // CHECK:     Vtable for 'Test1::C9' (87 entries).
 | |
| // CHECK-NEXT:   0 | vbase_offset (344)
 | |
| // CHECK-NEXT:   1 | vbase_offset (312)
 | |
| // CHECK-NEXT:   2 | vbase_offset (184)
 | |
| // CHECK-NEXT:   3 | vbase_offset (168)
 | |
| // CHECK-NEXT:   4 | vbase_offset (120)
 | |
| // CHECK-NEXT:   5 | vbase_offset (48)
 | |
| // CHECK-NEXT:   6 | vbase_offset (148)
 | |
| // CHECK-NEXT:   7 | vbase_offset (152)
 | |
| // CHECK-NEXT:   8 | offset_to_top (0)
 | |
| // CHECK-NEXT:   9 | Test1::C9 RTTI
 | |
| // CHECK-NEXT:       -- (Test1::C2, 0) vtable address --
 | |
| // CHECK-NEXT:       -- (Test1::C9, 0) vtable address --
 | |
| // CHECK-NEXT:  10 | void Test1::C9::f()
 | |
| // CHECK-NEXT:  11 | vbase_offset (104)
 | |
| // CHECK-NEXT:  12 | vbase_offset (132)
 | |
| // CHECK-NEXT:  13 | vbase_offset (136)
 | |
| // CHECK-NEXT:  14 | offset_to_top (-16)
 | |
| // CHECK-NEXT:  15 | Test1::C9 RTTI
 | |
| // CHECK-NEXT:       -- (Test1::C2, 16) vtable address --
 | |
| // CHECK-NEXT:       -- (Test1::C4, 16) vtable address --
 | |
| // CHECK-NEXT:  16 | vbase_offset (72)
 | |
| // CHECK-NEXT:  17 | vbase_offset (120)
 | |
| // CHECK-NEXT:  18 | vbase_offset (100)
 | |
| // CHECK-NEXT:  19 | vbase_offset (104)
 | |
| // CHECK-NEXT:  20 | offset_to_top (-48)
 | |
| // CHECK-NEXT:  21 | Test1::C9 RTTI
 | |
| // CHECK-NEXT:       -- (Test1::C2, 48) vtable address --
 | |
| // CHECK-NEXT:       -- (Test1::C5, 48) vtable address --
 | |
| // CHECK-NEXT:       -- (Test1::C6, 48) vtable address --
 | |
| // CHECK-NEXT:  22 | vbase_offset (84)
 | |
| // CHECK-NEXT:  23 | offset_to_top (-64)
 | |
| // CHECK-NEXT:  24 | Test1::C9 RTTI
 | |
| // CHECK-NEXT:       -- (Test1::C1, 64) vtable address --
 | |
| // CHECK-NEXT:  25 | vbase_offset (32)
 | |
| // CHECK-NEXT:  26 | vbase_offset (60)
 | |
| // CHECK-NEXT:  27 | vbase_offset (64)
 | |
| // CHECK-NEXT:  28 | offset_to_top (-88)
 | |
| // CHECK-NEXT:  29 | Test1::C9 RTTI
 | |
| // CHECK-NEXT:       -- (Test1::C2, 88) vtable address --
 | |
| // CHECK-NEXT:       -- (Test1::C4, 88) vtable address --
 | |
| // CHECK-NEXT:  30 | vbase_offset (44)
 | |
| // CHECK-NEXT:  31 | offset_to_top (-104)
 | |
| // CHECK-NEXT:  32 | Test1::C9 RTTI
 | |
| // CHECK-NEXT:       -- (Test1::C1, 104) vtable address --
 | |
| // CHECK-NEXT:  33 | vbase_offset (28)
 | |
| // CHECK-NEXT:  34 | vbase_offset (32)
 | |
| // CHECK-NEXT:  35 | offset_to_top (-120)
 | |
| // CHECK-NEXT:  36 | Test1::C9 RTTI
 | |
| // CHECK-NEXT:       -- (Test1::C2, 120) vtable address --
 | |
| // CHECK-NEXT:       -- (Test1::C3, 120) vtable address --
 | |
| // CHECK-NEXT:  37 | vbase_offset (-4)
 | |
| // CHECK-NEXT:  38 | offset_to_top (-152)
 | |
| // CHECK-NEXT:  39 | Test1::C9 RTTI
 | |
| // CHECK-NEXT:       -- (Test1::C1, 152) vtable address --
 | |
| // CHECK-NEXT:  40 | vbase_offset (-48)
 | |
| // CHECK-NEXT:  41 | vbase_offset (-20)
 | |
| // CHECK-NEXT:  42 | vbase_offset (-16)
 | |
| // CHECK-NEXT:  43 | offset_to_top (-168)
 | |
| // CHECK-NEXT:  44 | Test1::C9 RTTI
 | |
| // CHECK-NEXT:       -- (Test1::C2, 168) vtable address --
 | |
| // CHECK-NEXT:       -- (Test1::C4, 168) vtable address --
 | |
| // CHECK-NEXT:  45 | vbase_offset (160)
 | |
| // CHECK-NEXT:  46 | vbase_offset (-136)
 | |
| // CHECK-NEXT:  47 | vbase_offset (-16)
 | |
| // CHECK-NEXT:  48 | vbase_offset (128)
 | |
| // CHECK-NEXT:  49 | vbase_offset (-64)
 | |
| // CHECK-NEXT:  50 | vbase_offset (-36)
 | |
| // CHECK-NEXT:  51 | vbase_offset (-32)
 | |
| // CHECK-NEXT:  52 | offset_to_top (-184)
 | |
| // CHECK-NEXT:  53 | Test1::C9 RTTI
 | |
| // CHECK-NEXT:       -- (Test1::C2, 184) vtable address --
 | |
| // CHECK-NEXT:       -- (Test1::C4, 184) vtable address --
 | |
| // CHECK-NEXT:       -- (Test1::C7, 184) vtable address --
 | |
| // CHECK-NEXT:       -- (Test1::C8, 184) vtable address --
 | |
| // CHECK-NEXT:  54 | vbase_offset (-88)
 | |
| // CHECK-NEXT:  55 | vbase_offset (-40)
 | |
| // CHECK-NEXT:  56 | vbase_offset (-60)
 | |
| // CHECK-NEXT:  57 | vbase_offset (-56)
 | |
| // CHECK-NEXT:  58 | offset_to_top (-208)
 | |
| // CHECK-NEXT:  59 | Test1::C9 RTTI
 | |
| // CHECK-NEXT:       -- (Test1::C2, 208) vtable address --
 | |
| // CHECK-NEXT:       -- (Test1::C5, 208) vtable address --
 | |
| // CHECK-NEXT:  60 | vbase_offset (-76)
 | |
| // CHECK-NEXT:  61 | offset_to_top (-224)
 | |
| // CHECK-NEXT:  62 | Test1::C9 RTTI
 | |
| // CHECK-NEXT:       -- (Test1::C1, 224) vtable address --
 | |
| // CHECK-NEXT:  63 | vbase_offset (-92)
 | |
| // CHECK-NEXT:  64 | vbase_offset (-88)
 | |
| // CHECK-NEXT:  65 | offset_to_top (-240)
 | |
| // CHECK-NEXT:  66 | Test1::C9 RTTI
 | |
| // CHECK-NEXT:       -- (Test1::C2, 240) vtable address --
 | |
| // CHECK-NEXT:       -- (Test1::C3, 240) vtable address --
 | |
| // CHECK-NEXT:  67 | vbase_offset (-124)
 | |
| // CHECK-NEXT:  68 | offset_to_top (-272)
 | |
| // CHECK-NEXT:  69 | Test1::C9 RTTI
 | |
| // CHECK-NEXT:       -- (Test1::C1, 272) vtable address --
 | |
| // CHECK-NEXT:  70 | vbase_offset (-140)
 | |
| // CHECK-NEXT:  71 | vbase_offset (-136)
 | |
| // CHECK-NEXT:  72 | offset_to_top (-288)
 | |
| // CHECK-NEXT:  73 | Test1::C9 RTTI
 | |
| // CHECK-NEXT:       -- (Test1::C2, 288) vtable address --
 | |
| // CHECK-NEXT:  74 | vbase_offset (-192)
 | |
| // CHECK-NEXT:  75 | vbase_offset (-144)
 | |
| // CHECK-NEXT:  76 | vbase_offset (-164)
 | |
| // CHECK-NEXT:  77 | vbase_offset (-160)
 | |
| // CHECK-NEXT:  78 | offset_to_top (-312)
 | |
| // CHECK-NEXT:  79 | Test1::C9 RTTI
 | |
| // CHECK-NEXT:       -- (Test1::C2, 312) vtable address --
 | |
| // CHECK-NEXT:       -- (Test1::C5, 312) vtable address --
 | |
| // CHECK-NEXT:  80 | vbase_offset (-180)
 | |
| // CHECK-NEXT:  81 | offset_to_top (-328)
 | |
| // CHECK-NEXT:  82 | Test1::C9 RTTI
 | |
| // CHECK-NEXT:       -- (Test1::C1, 328) vtable address --
 | |
| // CHECK-NEXT:  83 | vbase_offset (-196)
 | |
| // CHECK-NEXT:  84 | vbase_offset (-192)
 | |
| // CHECK-NEXT:  85 | offset_to_top (-344)
 | |
| // CHECK-NEXT:  86 | Test1::C9 RTTI
 | |
| class C9
 | |
|  :  virtual public C6
 | |
|  ,  public C2
 | |
|  ,  public C4
 | |
|  ,  virtual public C8
 | |
| {
 | |
|   int k0;
 | |
|   int k1;
 | |
|   int k2;
 | |
|   int k3;
 | |
|   virtual void f();
 | |
| };
 | |
| void C9::f() { }
 | |
| 
 | |
| }
 |