aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Naroff <snaroff@apple.com>2008-01-29 00:15:50 +0000
committerSteve Naroff <snaroff@apple.com>2008-01-29 00:15:50 +0000
commitba03eda1599dd89da935a2b46da10659afe46add (patch)
tree7f895c0dabd30fb59e5816fd064b8b3e1b176849
parent403c181133bb3774b39f10b566433fd8bbe5ec54 (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.cpp5
-rw-r--r--test/Sema/function.c3
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)()) {
}