From 2fe13882a846b4152abf0734be43b3e141843818 Mon Sep 17 00:00:00 2001 From: Fariborz Jahanian Date: Wed, 30 Jun 2010 18:27:47 +0000 Subject: [PATCH] extern variable declared locally to objective-c++ method should not be mangled either. Fixes radar 8016412. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@107303 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/Mangle.cpp | 2 +- test/CodeGenObjCXX/method-local-extern-mangle.mm | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) create mode 100644 test/CodeGenObjCXX/method-local-extern-mangle.mm diff --git a/lib/CodeGen/Mangle.cpp b/lib/CodeGen/Mangle.cpp index ac962247fd..4d755ce957 100644 --- a/lib/CodeGen/Mangle.cpp +++ b/lib/CodeGen/Mangle.cpp @@ -294,7 +294,7 @@ bool MangleContext::shouldMangleDeclName(const NamedDecl *D) { if (!FD) { const DeclContext *DC = D->getDeclContext(); // Check for extern variable declared locally. - if (isa(DC) && D->hasLinkage()) + if ((isa(DC) || isa(DC) ) && D->hasLinkage()) while (!DC->isNamespace() && !DC->isTranslationUnit()) DC = DC->getParent(); if (DC->isTranslationUnit() && D->getLinkage() != InternalLinkage) diff --git a/test/CodeGenObjCXX/method-local-extern-mangle.mm b/test/CodeGenObjCXX/method-local-extern-mangle.mm new file mode 100644 index 0000000000..794075da1a --- /dev/null +++ b/test/CodeGenObjCXX/method-local-extern-mangle.mm @@ -0,0 +1,14 @@ +// RUN: %clang_cc1 %s -triple=x86_64-apple-darwin10 -emit-llvm -o - | FileCheck %s + +// CHECK: @gGlobals = external global + +@interface I +- (int) Meth; +@end + +@implementation I +- (int) Meth { + extern int gGlobals; + return gGlobals; +} +@end