diff --git a/lib/Sema/SemaType.cpp b/lib/Sema/SemaType.cpp index 4dab52a9f5f44c18257036515b5f21ade5d31170..af060cf21b5fa4a92c8d3a3c6b7c42de62fab6b4 100644 --- a/lib/Sema/SemaType.cpp +++ b/lib/Sema/SemaType.cpp @@ -4767,7 +4767,7 @@ static TypeSourceInfo *GetFullTypeForDeclarator(TypeProcessingState &state, break; case DeclaratorChunk::Function: { const DeclaratorChunk::FunctionTypeInfo &FTI = DeclType.Fun; - if (FTI.NumParams == 0) + if (FTI.NumParams == 0 && !FTI.isVariadic) S.Diag(DeclType.Loc, diag::warn_strict_prototypes) << IsBlock << FixItHint::CreateInsertion(FTI.getRParenLoc(), "void"); diff --git a/test/Sema/warn-strict-prototypes.c b/test/Sema/warn-strict-prototypes.c index a28f57d48c84f64023ed88de81e42d53eeffff55..0c23b3b2c2453f7d4e11092645c10fd196976439 100644 --- a/test/Sema/warn-strict-prototypes.c +++ b/test/Sema/warn-strict-prototypes.c @@ -65,3 +65,9 @@ void foo11(p, p2) int p; int p2; {} void __attribute__((cdecl)) foo12(d) // expected-warning {{this old-style function definition is not preceded by a prototype}} short d; {} + +// No warnings for variadic functions. Overloadable attribute is required +// to avoid err_ellipsis_first_param error. +// rdar://problem/33251668 +void foo13(...) __attribute__((overloadable)); +void foo13(...) __attribute__((overloadable)) {}