From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: by sourceware.org (Postfix, from userid 1314) id 443D13858D33; Thu, 19 Oct 2023 16:51:51 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 sourceware.org 443D13858D33 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gcc.gnu.org; s=default; t=1697734311; bh=cfKBlGB2qxjHuAR8x8clvhyv7cYAKov4yO2J3/N6pGE=; h=From:To:Subject:Date:From; b=mTYaIE8gxNfsIAZs/ir7okoqJLAZBNKlrHv+dQTU3oPIFTeXc8MZtxO5uEInXUDX6 4JxXRMacPRbFFRgSeOh8+BrSRZAZwe7yYKSYGkf6ZTkyMmM9dBZb09JZp6jNMUR3QD Vvuhgh0g1zuAv0vbnm8uSYF74Qyd8zx8HWmhk4Rg= MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="utf-8" From: Andrew Pinski To: gcc-cvs@gcc.gnu.org Subject: [gcc r14-4759] c: Fix ICE when an argument was an error mark [PR100532] X-Act-Checkin: gcc X-Git-Author: Andrew Pinski X-Git-Refname: refs/heads/trunk X-Git-Oldrev: 9f33e4c50ee92a2053f52e5eb8f205afa54d4cb0 X-Git-Newrev: 2454ba9e2d1ce2d1b9b2b46f6111e022364bf9b5 Message-Id: <20231019165151.443D13858D33@sourceware.org> Date: Thu, 19 Oct 2023 16:51:51 +0000 (GMT) List-Id: https://gcc.gnu.org/g:2454ba9e2d1ce2d1b9b2b46f6111e022364bf9b5 commit r14-4759-g2454ba9e2d1ce2d1b9b2b46f6111e022364bf9b5 Author: Andrew Pinski Date: Thu Oct 19 05:42:02 2023 +0000 c: Fix ICE when an argument was an error mark [PR100532] In the case of convert_argument, we would return the same expression back rather than error_mark_node after the error message about trying to convert to an incomplete type. This causes issues in the gimplfier trying to see if another conversion is needed. The code here dates back to before the revision history too so it might be the case it never noticed we should return an error_mark_node. Bootstrapped and tested on x86_64-linux-gnu with no regressions. PR c/100532 gcc/c/ChangeLog: * c-typeck.cc (convert_argument): After erroring out about an incomplete type return error_mark_node. gcc/testsuite/ChangeLog: * gcc.dg/pr100532-1.c: New test. Diff: --- gcc/c/c-typeck.cc | 2 +- gcc/testsuite/gcc.dg/pr100532-1.c | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc index f39dc71d5932..f7ce13ae7380 100644 --- a/gcc/c/c-typeck.cc +++ b/gcc/c/c-typeck.cc @@ -3367,7 +3367,7 @@ convert_argument (location_t ploc, tree function, tree fundecl, { error_at (ploc, "type of formal parameter %d is incomplete", parmnum + 1); - return val; + return error_mark_node; } /* Optionally warn about conversions that differ from the default diff --git a/gcc/testsuite/gcc.dg/pr100532-1.c b/gcc/testsuite/gcc.dg/pr100532-1.c new file mode 100644 index 000000000000..81e37c60415c --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr100532-1.c @@ -0,0 +1,7 @@ +/* { dg-do compile } */ +/* PR c/100532 */ + +typedef __SIZE_TYPE__ size_t; +void *memcpy(void[], const void *, size_t); /* { dg-error "declaration of type name" } */ +void c(void) { memcpy(c, "a", 2); } /* { dg-error "type of formal parameter" } */ +