diff options
-rw-r--r-- | AST/ASTContext.cpp | 5 | ||||
-rw-r--r-- | test/Sema/function.c | 3 |
2 files changed, 7 insertions, 1 deletions
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)()) { } |