diff --git a/gcc/c/c-decl.cc b/gcc/c/c-decl.cc index fb17db4cb8e..89ccf820570 100644 --- a/gcc/c/c-decl.cc +++ b/gcc/c/c-decl.cc @@ -10787,7 +10787,8 @@ start_function (struct c_declspecs *declspecs, struct c_declarator *declarator, tree newrt = TREE_TYPE (newtype); if (old_decl != NULL_TREE && TREE_CODE (oldtype) == FUNCTION_TYPE - && comptypes (oldrt, newrt)) + && comptypes (oldrt, newrt) + && !TYPE_NO_NAMED_ARGS_STDARG_P (oldtype)) { if (stdarg_p (oldtype)) { diff --git a/gcc/testsuite/gcc.dg/pr121507.c b/gcc/testsuite/gcc.dg/pr121507.c new file mode 100644 index 00000000000..2b9516aaffe --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr121507.c @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-std=c23" } */ + +int * xmalloc(...); +int * xmalloc(n) /* { dg-error "conflicting types" } */ + int n; /* { dg-warning "old-style function definition" "" { target *-*-* } .-1 } */ +{ + return 0; +} +