Bug 107219 - ICE in reduce_unary, at fortran/arith.cc:1290
Summary: ICE in reduce_unary, at fortran/arith.cc:1290
Status: RESOLVED FIXED
Alias: None
Product: gcc
Classification: Unclassified
Component: fortran (show other bugs)
Version: 13.0
: P3 normal
Target Milestone: 13.0
Assignee: Not yet assigned to anyone
URL:
Keywords: ice-on-valid-code
Depends on:
Blocks:
 
Reported: 2022-10-11 17:00 UTC by G. Steinmetz
Modified: 2022-10-17 17:36 UTC (History)
1 user (show)

See Also:
Host:
Target:
Build:
Known to work:
Known to fail:
Last reconfirmed: 2022-10-11 00:00:00


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description G. Steinmetz 2022-10-11 17:00:47 UTC
Affects versions down to at least r5 :
(in addition to pr93483_c2_first_print)


$ cat z1.f90
program p
   print *, -[real :: [(1)]]
   print *, +[real :: [-(1)]]
   print *, -[real :: [[(1)]]]
end


$ gfortran-13-20221009 -c z1.f90
f951: internal compiler error: Segmentation fault
0xf3feef crash_signal
        ../../gcc/toplev.cc:314
0x7becaf reduce_unary
        ../../gcc/fortran/arith.cc:1290
0x7bec7f reduce_unary
        ../../gcc/fortran/arith.cc:1277
0x7bec7f reduce_unary
        ../../gcc/fortran/arith.cc:1277
0x7bf408 eval_intrinsic
        ../../gcc/fortran/arith.cc:1652
0x832374 match_level_2
        ../../gcc/fortran/matchexp.cc:490
0x832392 match_level_3
        ../../gcc/fortran/matchexp.cc:551
0x832484 match_level_4
        ../../gcc/fortran/matchexp.cc:599
0x832484 match_and_operand
        ../../gcc/fortran/matchexp.cc:693
0x832672 match_or_operand
        ../../gcc/fortran/matchexp.cc:722
0x832742 match_equiv_operand
        ../../gcc/fortran/matchexp.cc:765
0x832814 match_level_5
        ../../gcc/fortran/matchexp.cc:811
0x831be1 gfc_match_expr(gfc_expr**)
        ../../gcc/fortran/matchexp.cc:870
0x8192d9 match_io_element
        ../../gcc/fortran/io.cc:3668
0x81bc0a match_io_list
        ../../gcc/fortran/io.cc:3716
0x81c00e match_io
        ../../gcc/fortran/io.cc:4394
0x81fb0a gfc_match_print()
        ../../gcc/fortran/io.cc:4450
0x851e41 match_word
        ../../gcc/fortran/parse.cc:67
0x857aa3 decode_statement
        ../../gcc/fortran/parse.cc:539
0x857eda next_free
        ../../gcc/fortran/parse.cc:1402
Comment 1 anlauf 2022-10-11 18:52:30 UTC
Confirmed.

The following example from pr93483 has the same issue:

  print *, +[ real :: (1) ]
end
Comment 2 GCC Commits 2022-10-17 17:27:19 UTC
The master branch has been updated by Harald Anlauf <anlauf@gcc.gnu.org>:

https://gcc.gnu.org/g:d45af5c2eb1ba1e48449d8f3c5b4e3994a956f92

commit r13-3340-gd45af5c2eb1ba1e48449d8f3c5b4e3994a956f92
Author: Harald Anlauf <anlauf@gmx.de>
Date:   Sat Oct 15 21:56:56 2022 +0200

    Fortran: handle bad array ctors with typespec [PR93483, PR107216, PR107219]
    
    gcc/fortran/ChangeLog:
    
            PR fortran/93483
            PR fortran/107216
            PR fortran/107219
            * arith.cc (reduce_unary): Handled expressions are EXP_CONSTANT and
            EXPR_ARRAY.  Do not attempt to reduce otherwise.
            (reduce_binary_ac): Likewise.
            (reduce_binary_ca): Likewise.
            (reduce_binary_aa): Moved check for EXP_CONSTANT and EXPR_ARRAY
            from here ...
            (reduce_binary): ... to here.
            (eval_intrinsic): Catch failed reductions.
            * gfortran.h (GFC_INTRINSIC_OPS): New enum ARITH_NOT_REDUCED to keep
            track of expressions that were not reduced by the arithmetic evaluation
            code.
    
    gcc/testsuite/ChangeLog:
    
            PR fortran/93483
            PR fortran/107216
            PR fortran/107219
            * gfortran.dg/array_constructor_56.f90: New test.
            * gfortran.dg/array_constructor_57.f90: New test.
    
    Co-authored-by: Mikael Morin <mikael@gcc.gnu.org>
Comment 3 anlauf 2022-10-17 17:36:31 UTC
Fixed for gcc-13.  Closing.

Thanks for your insistence!