// RUN: cir-opt %s -verify-diagnostics -split-input-file !s64i = !cir.int !s8i = !cir.int !u32i = !cir.int !u8i = !cir.int !void = !cir.void !Base = !cir.struct<"Base" {!cir.ptr !cir.int>>>}> !Derived = !cir.struct<"Derived" {!cir.struct<"Base" {!cir.ptr !cir.int>>>}>}> 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(%arg0 : !cir.ptr) { // expected-error@+1 {{srcRtti must be an RTTI pointer}} %0 = cir.dyn_cast ptr %arg0 : !cir.ptr -> !cir.ptr #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> } } // ----- !s64i = !cir.int !s8i = !cir.int !u32i = !cir.int !u8i = !cir.int !void = !cir.void !Base = !cir.struct<"Base" {!cir.ptr !cir.int>>>}> !Derived = !cir.struct<"Derived" {!cir.struct<"Base" {!cir.ptr !cir.int>>>}>}> 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(%arg0 : !cir.ptr) { // expected-error@+1 {{destRtti must be an RTTI pointer}} %0 = cir.dyn_cast ptr %arg0 : !cir.ptr -> !cir.ptr #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> } }