brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.0 KiB · 125cb69 Raw
78 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-apple-darwin10 -fapple-kext -fno-rtti -emit-llvm -o - %s | FileCheck %s2 3// CHECK: @_ZTV1A ={{.*}} unnamed_addr constant { [4 x ptr] } { [4 x ptr] [ptr null, ptr null, ptr @_ZNK1A3abcEv, ptr null] }4// CHECK: @_ZTV4Base ={{.*}} unnamed_addr constant { [4 x ptr] } { [4 x ptr] [ptr null, ptr null, ptr @_ZNK4Base3abcEv, ptr null] }5// CHECK: @_ZTV8Derived2 ={{.*}} unnamed_addr constant { [5 x ptr] } { [5 x ptr] [ptr null, ptr null, ptr null, ptr @_ZNK8Derived23efgEv, ptr null] }6// CHECK: @_ZTV2D2 ={{.*}} unnamed_addr constant { [5 x ptr] } { [5 x ptr] [ptr null, ptr null, ptr null, ptr @_ZNK2D23abcEv, ptr null] }7 8struct A {9  virtual const char* abc(void) const;10};11 12const char* A::abc(void) const {return "A"; };13 14struct B : virtual A {15  virtual void VF();16};17 18void B::VF() {}19 20void FUNC(B* p) {21// CHECK: [[T1:%.*]] = load ptr, ptr getelementptr inbounds (ptr, ptr @_ZTV1A, i64 2)22// CHECK-NEXT:  [[T2:%.*]] = call noundef ptr [[T1]]23  const char* c = p->A::abc();24}25 26 27// Test228struct Base { virtual char* abc(void) const; };29 30char* Base::abc() const { return 0; }31 32struct Derived : public Base {33};34 35void FUNC1(Derived* p) {36// CHECK: [[U1:%.*]] = load ptr, ptr getelementptr inbounds (ptr, ptr @_ZTV4Base, i64 2)37// CHECK-NEXT:  [[U2:%.*]] = call noundef ptr [[U1]]38  char* c = p->Base::abc();39}40 41 42// Test343struct Base2 { };44 45struct Derived2 : virtual Base2 {46  virtual char* efg(void) const;47};48 49char* Derived2::efg(void) const { return 0; }50 51void FUNC2(Derived2* p) {52// CHECK: [[V1:%.*]] = load ptr, ptr getelementptr inbounds (ptr, ptr @_ZTV8Derived2, i64 3)53// CHECK-NEXT:  [[V2:%.*]] = call noundef ptr [[V1]]54  char* c = p->Derived2::efg();55}56 57// Test458struct Base3 { };59 60struct D1 : virtual Base3 {61};62 63struct D2 : virtual Base3 {64 virtual char *abc(void) const;65};66 67struct Sub : D1, D2 {68};69 70char* D2::abc(void) const { return 0; }71 72void FUNC3(Sub* p) {73// CHECK: [[W1:%.*]] = load ptr, ptr getelementptr inbounds (ptr, ptr @_ZTV2D2, i64 3)74// CHECK-NEXT:  [[W2:%.*]] = call noundef ptr [[W1]]75  char* c = p->D2::abc();76}77 78