[PATCH] D16533: Bug 20796 - GCC's -Wstrict-prototypes warning not implemented in Clang

Paul Titei via cfe-commits cfe-commits at lists.llvm.org
Mon Jan 25 09:19:38 PST 2016


Thanks for the fast review.
> On Mon, Jan 25, 2016 at 03:18:31PM +0000, Paul Titei via cfe-commits wrote:
> > +// function definition with 0 params(for both cases), valid according
> > +to 6.7.5.3/14 void foo1() {}

> I still want to get a warning for this. At best it is inconsistent.

I agree this is inconsistent with GCC behavior of this warning which warns even for
void main(){}.
But from what I understand the standard makes a distinction between unspecified parameters in declaration VS definitions (C99 6.7.5.3/14):
"An empty list in a function declarator that is part of a definition of that function specifies that the function has no parameters."
As opposed with:
"The empty list in a function declarator that is not part of a definition of that function specifies that no information about the number or types of the parameters is supplied."

> > +// Function declaration with no types void foo10(); //
> > +expected-warning{{this function declaration is not a prototype}}
> > +              // CHECK: fix-it:"{{.*}}":{70:12-70:12}:"void"
> > +// K&R function definition with incomplete param list declared void
> > +foo10(p, p2) void *p; {} // expected-warning{{old-style function
> > +definition is not preceded by a prototype}}
> > +
> > +// Prototype declaration
> > +void foo11(int p, int p2);
> > +// K&R function definition with previous prototype declared is not diagnosed.
> > +void foo11(p, p2) int p; int p2; {}

> Same here. I'm perfectly happy if that is a separate option though.

It would make sense to not diagnose this last case since there is there is a previous prototype.
Also GCC does not diagnose this:
"An old-style function definition is permitted without a warning if preceded by a declaration that specifies the argument types."

Paul Titei
National Instruments Romania S.R.L.
------------------------------------------------------
B-dul 21 Decembrie 1989, nr. 77, A2
Cluj-Napoca 400604, Romania
C.I.F.: RO17961616 | O.R.C.: J12/3337/2005
Telefon: +40 264 406428 | Fax: +40 264 406429
E-mail: office.cluj at ni.com
Web: romania.ni.com

Vanzari si suport tehnic:
Telefon gratuit : 0800 070071
E-mail vanzari: ni.romania at ni.com
E-mail suport tehnic: techsupport at ni.com


More information about the cfe-commits mailing list