aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Naroff <snaroff@apple.com>2008-12-09 19:36:17 +0000
committerSteve Naroff <snaroff@apple.com>2008-12-09 19:36:17 +0000
commit6082c62125688a2901c11b932a7bb47ca83bc298 (patch)
tree2e01f41d3eba2feb0c160d330ac8151c20c58b53
parentc9f29c61856ffb5f643cedbe87ac076f21a1381a (diff)
Sema::ActOnMethodDeclaration(): Make sure we perform the default function/array conversion for parameter types.
This fixes <rdar://problem/6424064> checker on xcode: (possible bad AST) can the type of a method parameter really have "isFunctionType() == true"? and http://llvm.org/bugs/show_bug.cgi?id=2997. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@60781 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Sema/SemaDeclObjC.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/lib/Sema/SemaDeclObjC.cpp b/lib/Sema/SemaDeclObjC.cpp
index 5e9e2b21e2..308c125d9a 100644
--- a/lib/Sema/SemaDeclObjC.cpp
+++ b/lib/Sema/SemaDeclObjC.cpp
@@ -1227,9 +1227,14 @@ Sema::DeclTy *Sema::ActOnMethodDeclaration(
// FIXME: arg->AttrList must be stored too!
QualType argType;
- if (ArgTypes[i])
+ if (ArgTypes[i]) {
argType = QualType::getFromOpaquePtr(ArgTypes[i]);
- else
+ // Perform the default array/function conversions (C99 6.7.5.3p[7,8]).
+ if (argType->isArrayType()) // (char *[]) -> (char **)
+ argType = Context.getArrayDecayedType(argType);
+ else if (argType->isFunctionType())
+ argType = Context.getPointerType(argType);
+ } else
argType = Context.getObjCIdType();
ParmVarDecl* Param = ParmVarDecl::Create(Context, ObjCMethod,
SourceLocation(/*FIXME*/),