blob: 94df4b63ed629767836f38283ebc95debbcab9df [file] [log] [blame] [edit]
// RUN: cir-opt %s -verify-diagnostics -split-input-file
module {
cir.func dso_local @invalid_catch_without_all_or_type() {
cir.scope {
cir.try {
cir.yield
// expected-error @below {{'cir.try' expected 'all' or 'type' keyword}}
} catch [invalid_keyword {
cir.yield
}
}
cir.return
}
}
// -----
module {
cir.func dso_local @invalid_catch_rtti_type() {
cir.scope {
// expected-error @below {{'cir.try' op attribute 'handler_types' failed to satisfy constraint: catch all or unwind or global view array attribute}}
cir.try {
cir.yield
} catch [type #cir.undef] {
cir.yield
}
}
cir.return
}
}
// -----
module {
cir.func dso_local @invalid_catch_empty_block() {
cir.scope {
cir.try {
cir.yield
}
// expected-error @below {{'cir.try' handler region shall not be empty}}
catch all {
}
}
cir.return
}
}
// -----
!s32i = !cir.int<s, 32>
module {
cir.func dso_local @invalid_catch_not_terminated() {
%a = cir.alloca !s32i, !cir.ptr<!s32i>, ["a", init]
cir.scope {
cir.try {
cir.yield
}
// expected-error @below {{'cir.try' blocks are expected to be explicitly terminated}}
catch all {
%tmp_a = cir.load %a : !cir.ptr<!s32i>, !s32i
}
}
cir.return
}
}
// -----
module {
cir.func dso_local @invalid_catch_multiple_catch_all() {
cir.scope {
cir.try {
cir.yield
} catch all {
cir.yield
}
// expected-error @below {{op 'cir.try' can't have more than one catch all}}
catch all {
cir.yield
}
}
cir.return
}
}
// -----
module {
cir.func dso_local @invalid_catch_without_type_info() {
cir.scope {
cir.try {
cir.yield
}
// expected-error @below {{expected attribute value}}
// expected-error @below {{op 'cir.try' expected valid RTTI info attribute}}
catch [type] {
cir.yield
}
}
cir.return
}
}
// -----
module {
cir.func dso_local @invalid_catch_all_with_type_info() {
cir.scope {
cir.try {
cir.yield
}
// expected-error @below {{op 'cir.try' catch all dosen't need RTTI info attribute}}
catch [all] {
cir.yield
}
}
cir.return
}
}
// -----
module {
cir.func dso_local @invalid_unwind_with_catch_all() {
cir.scope {
cir.try {
cir.yield
}
catch all {
cir.yield
}
// expected-error @below {{op 'cir.try' unwind can't be used with catch all}}
unwind {
}
}
cir.return
}
}