From: Steve Naroff Date: Tue, 9 Dec 2008 19:36:17 +0000 (+0000) Subject: Sema::ActOnMethodDeclaration(): Make sure we perform the default function/array conve... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=6082c62125688a2901c11b932a7bb47ca83bc298;p=clang Sema::ActOnMethodDeclaration(): Make sure we perform the default function/array conversion for parameter types. This fixes 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 --- 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*/),