https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79894
--- Comment #3 from Richard Biener <rguenth at gcc dot gnu.org> ---
Note while we've tried to enforce this strict rules I don't think any checking
code ever come to fruit actually verifying that calling fold_* (.., type, ...)
produces a tree of TREE_TYPE () == type.
So it would be probably better for the Fortran FE to relax this assert
to test for equal TYPE_MAIN_VARIANT.
Checking code like the following (here only applying to match.pd foldings):
Index: gcc/fold-const.c
===================================================================
--- gcc/fold-const.c (revision 245908)
+++ gcc/fold-const.c (working copy)
@@ -7617,7 +7617,10 @@ fold_unary_loc (location_t loc, enum tre
tem = generic_simplify (loc, code, type, op0);
if (tem)
- return tem;
+ {
+ gcc_checking_assert (TREE_TYPE (tem) == type);
+ return tem;
+ }
if (TREE_CODE_CLASS (code) == tcc_unary)
{
@@ -9156,7 +9159,10 @@ fold_binary_loc (location_t loc,
tem = generic_simplify (loc, code, type, op0, op1);
if (tem)
- return tem;
+ {
+ gcc_checking_assert (TREE_TYPE (tem) == type);
+ return tem;
+ }
/* ARG0 is the first operand of EXPR, and ARG1 is the second operand.
@@ -11260,7 +11266,10 @@ fold_ternary_loc (location_t loc, enum t
tem = generic_simplify (loc, code, type, op0, op1, op2);
if (tem)
- return tem;
+ {
+ gcc_checking_assert (TREE_TYPE (tem) == type);
+ return tem;
+ }
/* Strip any conversions that don't change the mode. This is safe
for every expression, except for a comparison expression because