From: Steve Naroff Date: Tue, 29 Jan 2008 00:15:50 +0000 (+0000) Subject: Fix bz1950. ASTContext::functionTypesAreCompatible() needs to operate on the unqualif... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=ba03eda1599dd89da935a2b46da10659afe46add;p=clang Fix bz1950. ASTContext::functionTypesAreCompatible() needs to operate on the unqualified parameter types (per C99 6.7.5.3p15). git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@46472 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/AST/ASTContext.cpp b/AST/ASTContext.cpp index 242a684b0a..c86cf6797c 100644 --- a/AST/ASTContext.cpp +++ b/AST/ASTContext.cpp @@ -1579,7 +1579,10 @@ bool ASTContext::functionTypesAreCompatible(QualType lhs, QualType rhs) { // The use of ellipsis agree...now check the argument types. for (unsigned i = 0; i < lproto_nargs; i++) - if (!typesAreCompatible(lproto->getArgType(i), rproto->getArgType(i))) + // C99 6.7.5.3p15: ...and each parameter declared with qualified type + // is taken as having the unqualified version of it's declared type. + if (!typesAreCompatible(lproto->getArgType(i).getUnqualifiedType(), + rproto->getArgType(i).getUnqualifiedType())) return false; return true; } diff --git a/test/Sema/function.c b/test/Sema/function.c index 3f6ad96637..34e523586c 100644 --- a/test/Sema/function.c +++ b/test/Sema/function.c @@ -3,6 +3,9 @@ void f(double a[restrict][5]); // should promote to restrict ptr. void f(double (* restrict a)[5]); +int foo (__const char *__path); +int foo(__const char *__restrict __file); + void g(int (*)(const void **, const void **)); void g(int (*compar)()) { }