// RUN: cir-opt %s -cir-cxxabi-lowering -o %t.cir // RUN: FileCheck --input-file=%t.cir %s !u8i = !cir.int !s32i = !cir.int !rec_Other = !cir.struct<"Other" padded {!u8i}> !rec_Struct = !cir.struct<"Struct" {!cir.data_member}> // CHECK: !rec_Struct = !cir.struct<"Struct" {!s64i}> !dmp = !cir.data_member !dmp_ptr = !cir.ptr> // cir::GlobalViewAttr #global = #cir.global_view<@whatever> : !cir.ptr #global2 = #cir.global_view<@whatever> : !cir.ptr #global3 = #cir.global_view<@whatever> : !cir.ptr module attributes {cir.triple = "x86_64-unknown-linux-gnu"} { cir.func @helper() { // cir::ZeroAttr: Needs struct, array, vector, or complex, so no dmp. %zero1 = cir.const #cir.zero : !rec_Struct // CHECK: cir.const #cir.zero : !rec_Struct // cir::PoisonAttr %poison1 = cir.const #cir.poison : !rec_Struct // CHECK: cir.const #cir.poison : !rec_Struct // cir::UndefAttr %undef1 = cir.const #cir.undef : !rec_Struct // CHECK: cir.const #cir.undef : !rec_Struct // cir::ConstPtrAttr %constptr1 = cir.const #cir.ptr : !cir.ptr // CHECK: cir.const #cir.ptr : !cir.ptr %constptr2 = cir.const #cir.ptr : !dmp_ptr // CHECK: cir.const #cir.ptr : !cir.ptr // cir::ConstRecordAttr %constrecord = cir.const #cir.const_record<{#cir.data_member : !dmp }> : !rec_Struct // CHECK: cir.const #cir.const_record<{#cir.int<-1> : !s64i}> : !rec_Struct // Array, ConstArray, Dictionary, VTable, DynamicCastInfo, and TypeInfo // Attrs don't really allow getting a 'bad' type into them. We attempt to // transform them anyway, but they'll probably never fail the legalizer. cir.trap } // cir::TypeAttr: function type is a type attr, so this shows it converting. cir.func @TypeAttrs(%arg0 : !rec_Struct, %arg1 : !dmp, %arg2 : !dmp_ptr) -> (!rec_Struct) { // CHECK: cir.func @TypeAttrs(%arg0: !rec_Struct, %arg1: !s64i, %arg2: !cir.ptr) -> !rec_Struct { cir.trap } // cir::CXXCtorAttr cir.func @ctor() special_member<#cir.cxx_ctor> { // CHECK: cir.func @ctor() special_member<#cir.cxx_ctor> { cir.trap } cir.func @ctor2() special_member<#cir.cxx_ctor> { // CHECK: cir.func @ctor2() special_member<#cir.cxx_ctor> { cir.trap } // cir::CXXDtorAttr cir.func @dtor() special_member<#cir.cxx_dtor> { // CHECK: cir.func @dtor() special_member<#cir.cxx_dtor> { cir.trap } cir.func @dtor2() special_member<#cir.cxx_dtor> { // CHECK: cir.func @dtor2() special_member<#cir.cxx_dtor> { cir.trap } // cir::CXXAssignAttr cir.func @assign() special_member<#cir.cxx_assign> { // CHECK: cir.func @assign() special_member<#cir.cxx_assign> { cir.trap } cir.func @assign2() special_member<#cir.cxx_assign> { // CHECK: cir.func @assign2() special_member<#cir.cxx_assign> { cir.trap } }