blob: 3739ecef1ccee4da828d99e369f7e50dbefdcda3 [file] [log] [blame]
// RUN: %clang_cc1 -std=c++17 -triple x86_64-unknown-linux-gnu -mconstructor-aliases -fclangir -emit-cir %s -o - | FileCheck %s
struct DummyString {
DummyString(const char *s) {}
};
void t() {
DummyString s4 = "yolo";
}
// CHECK: cir.func linkonce_odr @_ZN11DummyStringC2EPKc
// CHECK-NEXT: %0 = cir.alloca !cir.ptr<!ty_DummyString>, !cir.ptr<!cir.ptr<!ty_DummyString>>, ["this", init] {alignment = 8 : i64}
// CHECK-NEXT: %1 = cir.alloca !cir.ptr<!s8i>, !cir.ptr<!cir.ptr<!s8i>>, ["s", init] {alignment = 8 : i64}
// CHECK-NEXT: cir.store %arg0, %0 : !cir.ptr<!ty_DummyString>, !cir.ptr<!cir.ptr<!ty_DummyString>>
// CHECK-NEXT: cir.store %arg1, %1 : !cir.ptr<!s8i>, !cir.ptr<!cir.ptr<!s8i>>
// CHECK-NEXT: %2 = cir.load %0 : !cir.ptr<!cir.ptr<!ty_DummyString>>, !cir.ptr<!ty_DummyString>
// CHECK-NEXT: cir.return
// CHECK-NOT: cir.fun @_ZN11DummyStringC1EPKc
// CHECK: cir.func @_Z1tv
// CHECK-NEXT: %0 = cir.alloca !ty_DummyString, !cir.ptr<!ty_DummyString>, ["s4", init] {alignment = 1 : i64}
// CHECK-NEXT: %1 = cir.get_global @".str" : !cir.ptr<!cir.array<!s8i x 5>>
// CHECK-NEXT: %2 = cir.cast(array_to_ptrdecay, %1 : !cir.ptr<!cir.array<!s8i x 5>>), !cir.ptr<!s8i>
// CHECK-NEXT: cir.call @_ZN11DummyStringC2EPKc(%0, %2) : (!cir.ptr<!ty_DummyString>, !cir.ptr<!s8i>) -> ()
// CHECK-NEXT: cir.return
struct B {
B();
};
B::B() {
}
// CHECK: cir.func @_ZN1BC2Ev(%arg0: !cir.ptr<!ty_B>
// CHECK: %0 = cir.alloca !cir.ptr<!ty_B>, !cir.ptr<!cir.ptr<!ty_B>>, ["this", init] {alignment = 8 : i64}
// CHECK: cir.store %arg0, %0 : !cir.ptr<!ty_B>, !cir.ptr<!cir.ptr<!ty_B>>
// CHECK: %1 = cir.load %0 : !cir.ptr<!cir.ptr<!ty_B>>, !cir.ptr<!ty_B>
// CHECK: cir.return
// CHECK: }
// CHECK: cir.func @_ZN1BC1Ev(!cir.ptr<!ty_B>) alias(@_ZN1BC2Ev)