On Thu, Oct 19, 2023 at 03:38:57PM +0000, Andrew Pinski wrote: > 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.
Looks OK but please move [PR100532] to the end of the subject. > 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. > --- > gcc/c/c-typeck.cc | 2 +- > gcc/testsuite/gcc.dg/pr100532-1.c | 7 +++++++ > 2 files changed, 8 insertions(+), 1 deletion(-) > create mode 100644 gcc/testsuite/gcc.dg/pr100532-1.c > > diff --git a/gcc/c/c-typeck.cc b/gcc/c/c-typeck.cc > index 6e044b4afbc..8f8562936dc 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 00000000000..81e37c60415 > --- /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" > } */ > + Extra newline. Marek