From: Eli Friedman Date: Fri, 15 Feb 2008 06:56:02 +0000 (+0000) Subject: Get rid of outdated code that masks type errors. Fixes PR2036. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f963339f63e37057c7f397b3ecf5bfb49f6b48b9;p=clang Get rid of outdated code that masks type errors. Fixes PR2036. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@47154 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Sema/SemaDecl.cpp b/Sema/SemaDecl.cpp index b14e20b2c3..fc60a7a4aa 100644 --- a/Sema/SemaDecl.cpp +++ b/Sema/SemaDecl.cpp @@ -258,16 +258,6 @@ FunctionDecl *Sema::MergeFunctionDecl(FunctionDecl *New, ScopedDecl *OldD) { QualType OldQType = Old->getCanonicalType(); QualType NewQType = New->getCanonicalType(); - // This is not right, but it's a start. - // If Old is a function prototype with no defined arguments we only compare - // the return type; If arguments are defined on the prototype we validate the - // entire function type. - // FIXME: We should link up decl objects here. - if (Old->getBody() == 0) { - if (OldQType.getTypePtr()->getTypeClass() == Type::FunctionNoProto && - Old->getResultType() == New->getResultType()) - return New; - } // Function types need to be compatible, not identical. This handles // duplicate function decls like "void f(int); void f(enum X);" properly. if (Context.functionTypesAreCompatible(OldQType, NewQType)) diff --git a/test/Sema/function.c b/test/Sema/function.c index a75814ee45..8ef453581f 100644 --- a/test/Sema/function.c +++ b/test/Sema/function.c @@ -13,6 +13,8 @@ void g(int (*)(const void **, const void **)); void g(int (*compar)()) { } +void h(); //expected-error{{previous declaration is here}} +void h (const char *fmt, ...) {} //expected-error{{conflicting types for 'h'}} // PR1965 int t5(b); // expected-error {{parameter list without types}}