// RUN: cir-opt --verify-roundtrip %s | FileCheck %s !s64i = !cir.int !u8i = !cir.int !void = !cir.void !rec_Base = !cir.struct<"Base" {!cir.vptr}> !rec_Derived = !cir.struct<"Derived" {!rec_Base}> #dyn_cast_info__ZTI4Base__ZTI7Derived = #cir.dyn_cast_info : !cir.ptr, dest_rtti = #cir.global_view<@_ZTI7Derived> : !cir.ptr, runtime_func = @__dynamic_cast, bad_cast_func = @__cxa_bad_cast, offset_hint = #cir.int<0> : !s64i> // CHECK: #dyn_cast_info__ZTI4Base__ZTI7Derived = #cir.dyn_cast_info : !cir.ptr, dest_rtti = #cir.global_view<@_ZTI7Derived> : !cir.ptr, runtime_func = @__dynamic_cast, bad_cast_func = @__cxa_bad_cast, offset_hint = #cir.int<0> : !s64i> module { cir.global "private" constant external @_ZTI4Base : !cir.ptr cir.global "private" constant external @_ZTI7Derived : !cir.ptr cir.func private @__dynamic_cast(!cir.ptr, !cir.ptr, !cir.ptr, !s64i) -> !cir.ptr cir.func private @__cxa_bad_cast() cir.func @test_ptr_cast(%arg0: !cir.ptr) -> !cir.ptr { %0 = cir.dyn_cast ptr %arg0 : !cir.ptr -> !cir.ptr #dyn_cast_info__ZTI4Base__ZTI7Derived cir.return %0 : !cir.ptr } // CHECK: cir.func @test_ptr_cast(%arg0: !cir.ptr) -> !cir.ptr { // CHECK: %0 = cir.dyn_cast ptr %arg0 : !cir.ptr -> !cir.ptr #dyn_cast_info__ZTI4Base__ZTI7Derived // CHECK: cir.return %0 : !cir.ptr // CHECK: } cir.func @test_ref_cast(%arg0: !cir.ptr) -> !cir.ptr { %0 = cir.dyn_cast ref %arg0 : !cir.ptr -> !cir.ptr #dyn_cast_info__ZTI4Base__ZTI7Derived cir.return %0 : !cir.ptr } // CHECK: cir.func @test_ref_cast(%arg0: !cir.ptr) -> !cir.ptr { // CHECK: %0 = cir.dyn_cast ref %arg0 : !cir.ptr -> !cir.ptr #dyn_cast_info__ZTI4Base__ZTI7Derived // CHECK: cir.return %0 : !cir.ptr // CHECK: } cir.func dso_local @test_cast_to_void(%arg0: !cir.ptr) -> !cir.ptr { %0 = cir.dyn_cast ptr %arg0 : !cir.ptr -> !cir.ptr cir.return %0 : !cir.ptr } // CHECK: cir.func dso_local @test_cast_to_void(%arg0: !cir.ptr) -> !cir.ptr { // CHECK: %0 = cir.dyn_cast ptr %arg0 : !cir.ptr -> !cir.ptr // CHECK: cir.return %0 : !cir.ptr // CHECK: } cir.func dso_local @test_relative_layout_cast(%arg0: !cir.ptr) -> !cir.ptr { %0 = cir.dyn_cast ptr relative_layout %arg0 : !cir.ptr -> !cir.ptr cir.return %0 : !cir.ptr } // CHECK: cir.func dso_local @test_relative_layout_cast(%arg0: !cir.ptr) -> !cir.ptr { // CHECK: %0 = cir.dyn_cast ptr relative_layout %arg0 : !cir.ptr -> !cir.ptr // CHECK: cir.return %0 : !cir.ptr // CHECK: } }