diff --git a/gcc/gimple-range-fold.cc b/gcc/gimple-range-fold.cc index efcc3d8bf5b..d07246008f0 100644 --- a/gcc/gimple-range-fold.cc +++ b/gcc/gimple-range-fold.cc @@ -508,7 +508,8 @@ adjust_imagpart_expr (vrange &res, const gimple *stmt) && gimple_assign_rhs_code (def_stmt) == COMPLEX_CST) { tree cst = gimple_assign_rhs1 (def_stmt); - if (TREE_CODE (cst) == COMPLEX_CST) + if (TREE_CODE (cst) == COMPLEX_CST + && TREE_CODE (TREE_TYPE (TREE_TYPE (cst))) == INTEGER_TYPE) { wide_int w = wi::to_wide (TREE_IMAGPART (cst)); int_range<1> imag (TREE_TYPE (TREE_IMAGPART (cst)), w, w); @@ -535,7 +536,8 @@ adjust_realpart_expr (vrange &res, const gimple *stmt) && gimple_assign_rhs_code (def_stmt) == COMPLEX_CST) { tree cst = gimple_assign_rhs1 (def_stmt); - if (TREE_CODE (cst) == COMPLEX_CST) + if (TREE_CODE (cst) == COMPLEX_CST + && TREE_CODE (TREE_TYPE (TREE_TYPE (cst))) == INTEGER_TYPE) { wide_int imag = wi::to_wide (TREE_REALPART (cst)); int_range<2> tmp (TREE_TYPE (TREE_REALPART (cst)), imag, imag); diff --git a/gcc/testsuite/gcc.dg/pr110266.c b/gcc/testsuite/gcc.dg/pr110266.c new file mode 100644 index 00000000000..0b2acb5a791 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr110266.c @@ -0,0 +1,20 @@ +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +#include + +int Hann_i, PsyBufferUpdate_psyInfo_0, PsyBufferUpdate_i; +double *mdct_data; +double PsyBufferUpdate_sfreq; +void PsyBufferUpdate() { + if (PsyBufferUpdate_psyInfo_0 == 4) + for (; Hann_i;) + ; + { + double xr_0 = cos(PsyBufferUpdate_psyInfo_0); + PsyBufferUpdate_sfreq = sin(PsyBufferUpdate_psyInfo_0); + for (; PsyBufferUpdate_psyInfo_0; PsyBufferUpdate_i++) + mdct_data[PsyBufferUpdate_i] = xr_0 * PsyBufferUpdate_sfreq; + } +} +