// RUN: cir-opt %s --verify-roundtrip | FileCheck %s !s32i = !cir.int !s64i = !cir.int !u32i = !cir.int !u64i = !cir.int module { // void empty() { } cir.func @empty() { cir.return } // CHECK: cir.func{{.*}} @empty() { // CHECK: cir.return // CHECK: } // void empty() { } cir.func no_proto @noProto() { cir.return } // CHECK: cir.func no_proto @noProto() { // CHECK: cir.return // CHECK: } // void voidret() { return; } cir.func @voidret() { cir.return } // CHECK: cir.func{{.*}} @voidret() { // CHECK: cir.return // CHECK: } // int intfunc() { return 42; } cir.func @intfunc() -> !s32i { %0 = cir.const #cir.int<42> : !s32i cir.return %0 : !s32i } // CHECK: cir.func{{.*}} @intfunc() -> !s32i { // CHECK: %[[VAL:.*]] = cir.const #cir.int<42> : !s32i // CHECK: cir.return %[[VAL]] : !s32i // CHECK: } // Should print/parse function aliases. cir.func @a_empty() alias(@empty) // CHECK: cir.func @a_empty() alias(@empty) // Should print/parse function personality. cir.func @personality_func() personality(@__gxx_personality_v0) { cir.return } // CHECK: cir.func @personality_func() personality(@__gxx_personality_v0) { // CHECK: cir.return // CHECK: } // int scopes() { // { // { // return 99; // } // } //} cir.func @scopes() -> !s32i { cir.scope { cir.scope { %0 = cir.const #cir.int<99> : !s32i cir.return %0 : !s32i } } cir.trap } // CHECK: cir.func{{.*}} @scopes() -> !s32i { // CHECK: cir.scope { // CHECK: cir.scope { // CHECK: %[[VAL:.*]] = cir.const #cir.int<99> : !s32i // CHECK: cir.return %[[VAL]] : !s32i // CHECK: } // CHECK: } // CHECK: cir.trap // CHECK: } // long longfunc() { return 42l; } cir.func @longfunc() -> !s64i { %0 = cir.const #cir.int<42> : !s64i cir.return %0 : !s64i } // CHECK: cir.func{{.*}} @longfunc() -> !s64i // CHECK: %0 = cir.const #cir.int<42> : !s64i // CHECK: cir.return %0 : !s64i // CHECK: } // unsigned unsignedfunc() { return 42u; } cir.func @unsignedfunc() -> !u32i { %0 = cir.const #cir.int<42> : !u32i cir.return %0 : !u32i } // CHECK: cir.func{{.*}} @unsignedfunc() -> !u32i // CHECK: %[[VAL:.*]] = cir.const #cir.int<42> : !u32i // CHECK: cir.return %[[VAL]] : !u32i // CHECK: } // unsigned long long ullfunc() { return 42ull; } cir.func @ullfunc() -> !u64i { %0 = cir.const #cir.int<42> : !u64i cir.return %0 : !u64i } // CHECK: cir.func{{.*}} @ullfunc() -> !u64i // CHECK: %[[VAL:.*]] = cir.const #cir.int<42> : !u64i // CHECK: cir.return %[[VAL:.*]] : !u64i // CHECK: } cir.func coroutine @coro() { cir.coro.body { cir.await(init, ready : { %0 = cir.alloca !cir.bool, !cir.ptr, [""] {alignment = 1 : i64} %1 = cir.load align(1) %0 : !cir.ptr, !cir.bool cir.condition(%1) }, suspend : { cir.yield }, resume : { cir.yield },) cir.yield } cir.return } // CHECK: cir.func{{.*}} coroutine @coro() cir.func builtin @builtin() { cir.return } // CHECK: cir.func{{.*}} builtin @builtin() cir.func @global_ctor_func() global_ctor { cir.return } // CHECK: cir.func @global_ctor_func() global_ctor { // CHECK: cir.return // CHECK: } cir.func @global_ctor_with_priority() global_ctor(200) { cir.return } // CHECK: cir.func @global_ctor_with_priority() global_ctor(200) { // CHECK: cir.return // CHECK: } cir.func @global_dtor_func() global_dtor { cir.return } // CHECK: cir.func @global_dtor_func() global_dtor { // CHECK: cir.return // CHECK: } cir.func @global_dtor_with_priority() global_dtor(201) { cir.return } // CHECK: cir.func @global_dtor_with_priority() global_dtor(201) { // CHECK: cir.return // CHECK: } } !rec_Foo = !cir.struct<"Foo" {!s32i}> cir.func @Foo_default() special_member<#cir.cxx_ctor> { cir.return } // CHECK: cir.func @Foo_default() special_member<#cir.cxx_ctor> { // CHECK: cir.return // CHECK: } cir.func @Foo_trivial_copy() special_member<#cir.cxx_ctor> { cir.return } // CHECK: cir.func @Foo_trivial_copy() special_member<#cir.cxx_ctor> { // CHECK: cir.return // CHECK: } cir.func @Foo_destructor() special_member<#cir.cxx_dtor> { cir.return } // CHECK: cir.func @Foo_destructor() special_member<#cir.cxx_dtor> { // CHECK: cir.return // CHECK: } cir.func @Foo_move_assign() special_member<#cir.cxx_assign> { cir.return } // CHECK: cir.func @Foo_move_assign() special_member<#cir.cxx_assign> { // CHECK: cir.return // CHECK: } cir.func @has_attrs() attributes {foo, baz = 5, floof = "flop"} { cir.return } // CHECK: cir.func @has_attrs() attributes {baz = 5 : i64{{.*}}, floof = "flop", foo} { // CHECK: cir.return // CHECK: }