https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93631

Martin Sebor <msebor at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |msebor at gcc dot gnu.org
            Summary|internal compiler error: in |[8/9/10 Regression] ICE on
                   |gimple_ca ll_arg, at        |an invalid strcmp call in
                   |gimple.h:3258               |gimple_ca ll_arg, at
                   |                            |gimple.h:3258
      Known to fail|                            |7.3.0, 8.3.0, 9.2.0

--- Comment #4 from Martin Sebor <msebor at gcc dot gnu.org> ---
Both test cases are diagnosed with two instances of
-Wimplicit-function-declaration, the smaller of the two with:

$ gcc -S pr93631.c
pr93631.c:1:18: warning: implicit declaration of function ‘strcmp’
[-Wimplicit-function-declaration]
    1 | int f2 ( int x [ strcmp ( ) ] , int b ) { return x[0] - b ; }
      |                  ^~~~~~
pr93631.c:1:18: warning: too few arguments to built-in function ‘strcmp’
expecting 2 [-Wbuiltin-declaration-mismatch]
during GIMPLE pass: lower
pr93631.c: In function ‘f2’:
pr93631.c:1:5: internal compiler error: in gimple_call_arg, at gimple.h:3258
    1 | int f2 ( int x [ strcmp ( ) ] , int b ) { return x[0] - b ; }
      |     ^~

The second warning has started to be issued with r266194 but it doesn't prevent
the call from being treated as a built-in (the function only prevents that for
errors, not for warning).  There are a couple more checks later on for
incompatible built-in calls that look like should catch this but don't. 
Changing the convert_arguments() function in the C front-end that issues the
second warning to treat this case as an error (while still only issuing a
warning) avoids the GIMPLE ICE but then causes another ICE later on:

$ gcc -S -Wall -Wextra -Wpedantic t.c
t.c:1:18: warning: implicit declaration of function ‘strcmp’
[-Wimplicit-function-declaration]
    1 | int f2 ( int x [ strcmp ( ) ] , int b ) { return x[0] - b ; }
      |                  ^~~~~~
t.c:1:18: warning: too few arguments to built-in function ‘strcmp’ expecting 2
[-Wbuiltin-declaration-mismatch]
t.c: In function ‘f2’:
t.c:1:14: warning: unused parameter ‘x’ [-Wunused-parameter]
    1 | int f2 ( int x [ strcmp ( ) ] , int b ) { return x[0] - b ; }
      |          ~~~~^~~~~~~~~~~~~~~~
t.c:1:1: warning: control reaches end of non-void function [-Wreturn-type]
    1 | int f2 ( int x [ strcmp ( ) ] , int b ) { return x[0] - b ; }
      | ^~~
during RTL pass: expand
t.c:1:5: internal compiler error: in adjust_one_expanded_partition_var, at
cfgexpand.c:1463
    1 | int f2 ( int x [ strcmp ( ) ] , int b ) { return x[0] - b ; }
      |     ^~
0xb06387 adjust_one_expanded_partition_var
        /src/gcc/trunk/gcc/cfgexpand.c:1463
0xb184b4 execute
        /src/gcc/trunk/gcc/cfgexpand.c:6457
Please submit a full bug report,
with preprocessed source if appropriate.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.



For reference, bisection of the reported ICE points to r243832:

commit d17680f342ef5407303d8c76f8faa0762f83c3f7
Author: Jakub Jelinek <ja...@redhat.com>
Date:   Wed Dec 21 01:07:49 2016 +0100

    re PR c/77767 (Side-effect from VLA array parameters lost)

            PR c/77767
            * c-decl.c (grokdeclarator): If *expr is non-NULL, append
expression
            to *expr instead of overwriting it.

            * gcc.c-torture/execute/pr77767.c: New test.

    From-SVN: r243832

Reply via email to