File: microsoft-inaccessible-base.cpp

package info (click to toggle)
swiftlang 6.0.3-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,519,992 kB
  • sloc: cpp: 9,107,863; ansic: 2,040,022; asm: 1,135,751; python: 296,500; objc: 82,456; f90: 60,502; lisp: 34,951; pascal: 19,946; sh: 18,133; perl: 7,482; ml: 4,937; javascript: 4,117; makefile: 3,840; awk: 3,535; xml: 914; fortran: 619; cs: 573; ruby: 573
file content (25 lines) | stat: -rw-r--r-- 1,056 bytes parent folder | download | duplicates (12)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// RUN: %clang_cc1 -fms-compatibility -triple x86_64-windows-msvc %s -emit-llvm -o - | FileCheck %s

// Make sure we choose the *direct* base path when doing these conversions.

struct A { int a; };
struct B : A { int b; };

struct C : A, B { };
extern "C" A *a_from_c(C *p) { return p; }
// CHECK-LABEL: define dso_local ptr @a_from_c(ptr noundef %{{.*}})
// CHECK: [[P_ADDR:%.*]] = alloca ptr
// CHECK-NEXT: store ptr [[P:%.*]], ptr [[P_ADDR]]
// CHECK-NEXT: [[RET:%.*]] = load ptr, ptr [[P_ADDR]]
// CHECK-NEXT: ret ptr [[RET]]

struct D : B, A { };
extern "C" A *a_from_d(D *p) { return p; }
// CHECK-LABEL: define dso_local ptr @a_from_d(ptr noundef %{{.*}})
// CHECK: [[P_ADDR:%.*]] = alloca ptr
// CHECK-NEXT: store ptr [[P:%.*]], ptr [[P_ADDR]]
// CHECK-NEXT: [[P_RELOAD:%.*]] = load ptr, ptr [[P_ADDR]]
// CHECK-NEXT: [[CMP:%.*]] = icmp eq ptr [[P_RELOAD]], null
// CHECK: [[ADD_PTR:%.*]] = getelementptr inbounds i8, ptr [[P_RELOAD]], i64 8
// CHECK: [[RET:%.*]] = phi ptr [ [[ADD_PTR]], {{.*}} ], [ null, %entry ]
// CHECK-NEXT: ret ptr [[RET]]