brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.0 KiB · 2d218e2 Raw
26 lines · cpp
1// RUN: %clang_cc1 -fms-compatibility -triple x86_64-windows-msvc %s -emit-llvm -o - | FileCheck %s2 3// Make sure we choose the *direct* base path when doing these conversions.4 5struct A { int a; };6struct B : A { int b; };7 8struct C : A, B { };9extern "C" A *a_from_c(C *p) { return p; }10// CHECK-LABEL: define dso_local ptr @a_from_c(ptr noundef %{{.*}})11// CHECK: [[P_ADDR:%.*]] = alloca ptr12// CHECK-NEXT: store ptr [[P:%.*]], ptr [[P_ADDR]]13// CHECK-NEXT: [[RET:%.*]] = load ptr, ptr [[P_ADDR]]14// CHECK-NEXT: ret ptr [[RET]]15 16struct D : B, A { };17extern "C" A *a_from_d(D *p) { return p; }18// CHECK-LABEL: define dso_local ptr @a_from_d(ptr noundef %{{.*}})19// CHECK: [[P_ADDR:%.*]] = alloca ptr20// CHECK-NEXT: store ptr [[P:%.*]], ptr [[P_ADDR]]21// CHECK-NEXT: [[P_RELOAD:%.*]] = load ptr, ptr [[P_ADDR]]22// CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[P_RELOAD]], null23// CHECK: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[P_RELOAD]], i64 824// CHECK: [[RET:%.*]] = phi ptr [ [[ADD_PTR]], {{.*}} ], [ null, %entry ]25// CHECK-NEXT: ret ptr [[RET]]26