1 | // RUN: %clang_cc1 -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 | |