Opened 5 years ago
Closed 5 years ago
#190 closed defect (fixed)
Re-throw-resume incorrectly depends on enclosing function return type
| Reported by: | mlbrooks | Owned by: | |
|---|---|---|---|
| Priority: | minor | Component: | cfa-cc |
| Version: | 1.0 | Keywords: | |
| Cc: |
Description
#ifdef WONT_WORK
#define RETTYPE void
#else
#define RETTYPE int
#endif
#include <exception.hfa>
TRIVIAL_EXCEPTION( CPU_Fire );
RETTYPE foo() {
try {
int x = 1 + 1;
} catchResume ( CPU_Fire * ) {
throwResume;
}
}
-DWONT_WORK actual: compiler error at throwResume, from gcc:
error: void value not ignored as it ought to be
-DWONT_WORK expected, no-args actual: compiler success, linker error for no main
When the error happens, running gcc on -CFA output shows the error is coming from the return ((void)0); line of this function nested in foo.
_Bool handle(struct __cfaehm_base_exception_t *__exception_inst){
__attribute__ ((unused)) _Bool __ret_bool;
{
struct CPU_Fire *__anonymous_object2220;
if ( (__anonymous_object2220=((struct CPU_Fire *)__cfa__virtual_cast(((const struct __cfa__parent_vtable *)(&_X25_CPU_Fire_vtable_instanceS15CPU_Fire_vtable_1)), ((const struct __cfa__parent_vtable **)__exception_inst)))) ) {
return ((void)0);
return 1;
}
}
return 0;
}
Note:
See TracTickets
for help on using tickets.
Fixed and added tests.
7f9968adc291989fb495461dc2b178248a560216