brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · 74e1f17 Raw
56 lines · cpp
1// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -emit-llvm --std=c++17 -fcxx-exceptions -fexceptions -discard-value-names %s -o - | FileCheck %s2 3struct Q { Q(); };4struct R { R(Q); ~R(); };5struct S { S(Q); ~S(); };6struct T : R, S {};7 8Q q;9T t { R{q}, S{q} };10 11// CHECK-LABEL: define internal void @__cxx_global_var_init.1() {{.*}} {12// CHECK-NEXT: [[TMP_R:%[a-z0-9.]+]] = alloca %struct.R, align 113// CHECK-NEXT: [[TMP_Q1:%[a-z0-9.]+]] = alloca %struct.Q, align 114// CHECK-NEXT: [[TMP_S:%[a-z0-9.]+]] = alloca %struct.S, align 115// CHECK-NEXT: [[TMP_Q2:%[a-z0-9.]+]] = alloca %struct.Q, align 116// CHECK-NEXT: [[XPT:%[a-z0-9.]+]] = alloca ptr17// CHECK-NEXT: [[SLOT:%[a-z0-9.]+]] = alloca i3218// CHECK-NEXT: [[ACTIVE:%[a-z0-9.]+]] = alloca i1, align 119// CHECK-NEXT: call void @_ZN1RC1E1Q(ptr {{[^,]*}} [[TMP_R]])20// CHECK-NEXT: store i1 true, ptr [[ACTIVE]], align 121// CHECK-NEXT: invoke void @_ZN1SC1E1Q(ptr {{[^,]*}} [[TMP_S]])22// CHECK-NEXT:   to label %[[L1:[a-z0-9.]+]] unwind label %[[L2:[a-z0-9.]+]]23// CHECK-EMPTY:24// CHECK-NEXT: [[L1]]:25// CHECK-NEXT: store i1 false, ptr [[ACTIVE]], align 126// CHECK-NEXT: call void @_ZN1SD1Ev(ptr27// CHECK-NEXT: call void @_ZN1RD1Ev(ptr28// CHECK-NEXT: [[EXIT:%[a-z0-9.]+]] = call i32 @__cxa_atexit(29// CHECK-NEXT: ret void30// CHECK-EMPTY:31// CHECK-NEXT: [[L2]]:32// CHECK-NEXT: [[LP:%[a-z0-9.]+]] = landingpad { ptr, i32 }33// CHECK-NEXT:                      cleanup34// CHECK-NEXT: [[X1:%[a-z0-9.]+]] = extractvalue { ptr, i32 } [[LP]], 035// CHECK-NEXT: store ptr [[X1]], ptr [[XPT]], align 836// CHECK-NEXT: [[X2:%[a-z0-9.]+]] = extractvalue { ptr, i32 } [[LP]], 137// CHECK-NEXT: store i32 [[X2]], ptr [[SLOT]], align 438// CHECK-NEXT: [[IS_ACT:%[a-z0-9.]+]] = load i1, ptr [[ACTIVE]], align 139// CHECK-NEXT: br i1 [[IS_ACT]], label %[[L3:[a-z0-9.]+]], label %[[L4:[a-z0-9.]+]]40// CHECK-EMPTY:41// CHECK-NEXT: [[L3]]:42// CHECK-NEXT: call void @_ZN1RD1Ev(ptr43// CHECK-NEXT: br label %[[L4]]44// CHECK-EMPTY:45// CHECK-NEXT: [[L4]]:46// CHECK-NEXT: call void @_ZN1RD1Ev(ptr {{[^,]*}} [[TMP_R]])47// CHECK-NEXT: br label %[[L5:[a-z0-9.]+]]48// CHECK-EMPTY:49// CHECK-NEXT: [[L5]]:50// CHECK-NEXT: [[EXN:%[a-z0-9.]+]] = load ptr, ptr [[XPT]], align 851// CHECK-NEXT: [[SEL:%[a-z0-9.]+]] = load i32, ptr [[SLOT]], align 452// CHECK-NEXT: [[LV1:%[a-z0-9.]+]] = insertvalue { ptr, i32 } poison, ptr [[EXN]], 053// CHECK-NEXT: [[LV2:%[a-z0-9.]+]] = insertvalue { ptr, i32 } [[LV1]], i32 [[SEL]], 154// CHECK-NEXT: resume { ptr, i32 } [[LV2]]55// CHECK-NEXT: }56