diff options
author | Steve Naroff <snaroff@apple.com> | 2008-01-29 00:15:50 +0000 |
---|---|---|
committer | Steve Naroff <snaroff@apple.com> | 2008-01-29 00:15:50 +0000 |
commit | ba03eda1599dd89da935a2b46da10659afe46add (patch) | |
tree | 7f895c0dabd30fb59e5816fd064b8b3e1b176849 | |
parent | 403c181133bb3774b39f10b566433fd8bbe5ec54 (diff) |
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
-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)()) { } |