Get rid of outdated code that masks type errors. Fixes PR2036.

llvm-svn: 47154
This commit is contained in:
Eli Friedman 2008-02-15 06:56:02 +00:00
parent e9d0954c06
commit 78e47634b2
2 changed files with 2 additions and 10 deletions

View File

@ -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))

View File

@ -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}}