1 // RUN: %clang_cc1 -no-opaque-pointers -triple x86_64-unknown-unknown -emit-llvm %s -o - | FileCheck %s 2 3 class A { 4 int a; 5 }; 6 7 class B { 8 int b; 9 public: 10 A *getAsA(); 11 }; 12 13 class X : public A, public B { 14 int x; 15 }; 16 17 // PR35909 - https://bugs.llvm.org/show_bug.cgi?id=35909 18 19 A *B::getAsA() { 20 return static_cast<X*>(this); 21 22 // CHECK-LABEL: define{{.*}} %class.A* @_ZN1B6getAsAEv 23 // CHECK: %[[THIS:.*]] = load %class.B*, %class.B** 24 // CHECK-NEXT: %[[BC:.*]] = bitcast %class.B* %[[THIS]] to i8* 25 // CHECK-NEXT: getelementptr inbounds i8, i8* %[[BC]], i64 -4 26 } 27 28