middle-end/103248 - fix RDIV_EXPR handling with fixed point
This fixes the previous adjustment to operation_could_trap_helper_p where I failed to realize that RDIV_EXPR is also used for fixed-point types. It also fixes that handling by properly checking for a fixed_zerop divisor. 2021-11-16 Richard Biener <rguenther@suse.de> PR middle-end/103248 * tree-eh.c (operation_could_trap_helper_p): Properly handle fixed-point RDIV_EXPR. * gcc.dg/pr103248.c: New testcase.
This commit is contained in:
parent
0fc859f5ef
commit
fb15abdc9b
2 changed files with 17 additions and 3 deletions
8
gcc/testsuite/gcc.dg/pr103248.c
Normal file
8
gcc/testsuite/gcc.dg/pr103248.c
Normal file
|
@ -0,0 +1,8 @@
|
|||
/* { dg-do compile } */
|
||||
/* { dg-require-effective-target fixed_point } */
|
||||
/* { dg-options "-fnon-call-exceptions" } */
|
||||
|
||||
_Accum sa;
|
||||
int c;
|
||||
|
||||
void div_csa() { c /= sa; }
|
|
@ -2474,10 +2474,16 @@ operation_could_trap_helper_p (enum tree_code op,
|
|||
return false;
|
||||
|
||||
case RDIV_EXPR:
|
||||
if (honor_snans)
|
||||
if (fp_operation)
|
||||
{
|
||||
if (honor_snans)
|
||||
return true;
|
||||
return flag_trapping_math;
|
||||
}
|
||||
/* Fixed point operations also use RDIV_EXPR. */
|
||||
if (!TREE_CONSTANT (divisor) || fixed_zerop (divisor))
|
||||
return true;
|
||||
gcc_assert (fp_operation);
|
||||
return flag_trapping_math;
|
||||
return false;
|
||||
|
||||
case LT_EXPR:
|
||||
case LE_EXPR:
|
||||
|
|
Loading…
Add table
Reference in a new issue