From ab76d45e023fc5ae966968344e180cd09fdcc746 Mon Sep 17 00:00:00 2001 From: Steve Naroff Date: Tue, 14 Apr 2009 00:03:58 +0000 Subject: [PATCH] Fix crasher in ASTContext::getObjCEncodingForMethodDecl(). This was exposed as a result of something else that was recently fixed. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@69004 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/AST/ASTContext.cpp | 12 +++++++----- test/CodeGen/function-decay.m | 10 ++++++++++ 2 files changed, 17 insertions(+), 5 deletions(-) create mode 100644 test/CodeGen/function-decay.m diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index f319c3f392..1c682175b3 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -2081,11 +2081,13 @@ void ASTContext::getObjCEncodingForMethodDecl(const ObjCMethodDecl *Decl, ParmVarDecl *PVDecl = *PI; QualType PType = PVDecl->getOriginalType(); if (const ArrayType *AT = - dyn_cast(PType->getCanonicalTypeInternal())) - // Use array's original type only if it has known number of - // elements. - if (!dyn_cast(AT)) - PType = PVDecl->getType(); + dyn_cast(PType->getCanonicalTypeInternal())) { + // Use array's original type only if it has known number of + // elements. + if (!dyn_cast(AT)) + PType = PVDecl->getType(); + } else if (PType->isFunctionType()) + PType = PVDecl->getType(); // Process argument qualifiers for user supplied arguments; such as, // 'in', 'inout', etc. getObjCEncodingForTypeQualifier(PVDecl->getObjCDeclQualifier(), S); diff --git a/test/CodeGen/function-decay.m b/test/CodeGen/function-decay.m new file mode 100644 index 0000000000..9c871139db --- /dev/null +++ b/test/CodeGen/function-decay.m @@ -0,0 +1,10 @@ +// RUN: clang-cc %s -emit-llvm + +@interface I0 @end +@implementation I0 +- (void) im0: (int (void)) a0 { +} +@end + +void func(int pf(void)) { +}