From: Jakub Jelinek Date: Fri, 30 Aug 2019 12:12:24 +0000 (+0200) Subject: backport: re PR middle-end/89590 (ICE in maybe_emit_free_warning) X-Git-Tag: releases/gcc-7.5.0~241 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=32ef02731361b79d9726f7372717e7a7cfba2943;p=thirdparty%2Fgcc.git backport: re PR middle-end/89590 (ICE in maybe_emit_free_warning) Backported from mainline 2019-03-05 Jakub Jelinek PR middle-end/89590 * builtins.c (maybe_emit_free_warning): Punt if free doesn't have exactly one argument. * gcc.dg/pr89590.c: New test. From-SVN: r275122 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 29a1f92b1269..ab3d0d650771 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,6 +1,12 @@ 2019-08-30 Jakub Jelinek Backported from mainline + 2019-03-05 Jakub Jelinek + + PR middle-end/89590 + * builtins.c (maybe_emit_free_warning): Punt if free doesn't have + exactly one argument. + 2019-02-28 Jakub Jelinek PR c/89520 diff --git a/gcc/builtins.c b/gcc/builtins.c index 767093f539f9..fcc8d2294593 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -9774,6 +9774,9 @@ maybe_emit_sprintf_chk_warning (tree exp, enum built_in_function fcode) static void maybe_emit_free_warning (tree exp) { + if (call_expr_nargs (exp) != 1) + return; + tree arg = CALL_EXPR_ARG (exp, 0); STRIP_NOPS (arg); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 17d8ee578dda..206a617043e4 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,6 +1,11 @@ 2019-08-30 Jakub Jelinek Backported from mainline + 2019-03-05 Jakub Jelinek + + PR middle-end/89590 + * gcc.dg/pr89590.c: New test. + 2019-02-28 Jakub Jelinek PR c/89521 diff --git a/gcc/testsuite/gcc.dg/pr89590.c b/gcc/testsuite/gcc.dg/pr89590.c new file mode 100644 index 000000000000..441b0f9c47e6 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr89590.c @@ -0,0 +1,11 @@ +/* PR middle-end/89590 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -Wall -w" } */ + +void free (void *); + +void +foo (void) +{ + ((void (*)()) free) (); +}