<div dir="ltr">LGTM</div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Feb 18, 2015 at 12:38 AM, David Majnemer <span dir="ltr"><<a href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi rsmith,<br>
<br>
extern "C" declarations should be considered like global declarations<br>
for mangling purposes.<br>
<br>
<a href="http://reviews.llvm.org/D7718" target="_blank">http://reviews.llvm.org/D7718</a><br>
<br>
Files:<br>
  lib/AST/ItaniumMangle.cpp<br>
  test/CodeGenCXX/mangle-template.cpp<br>
<br>
Index: lib/AST/ItaniumMangle.cpp<br>
===================================================================<br>
--- lib/AST/ItaniumMangle.cpp<br>
+++ lib/AST/ItaniumMangle.cpp<br>
@@ -69,6 +69,14 @@<br>
   if (const CapturedDecl *CD = dyn_cast<CapturedDecl>(DC))<br>
     return getEffectiveDeclContext(CD);<br>
<br>
+  if (const auto *VD = dyn_cast<VarDecl>(D))<br>
+    if (VD->isExternC())<br>
+      return VD->getASTContext().getTranslationUnitDecl();<br>
+<br>
+  if (const auto *FD = dyn_cast<FunctionDecl>(D))<br>
+    if (FD->isExternC())<br>
+      return FD->getASTContext().getTranslationUnitDecl();<br>
+<br>
   return DC;<br>
 }<br>
<br>
Index: test/CodeGenCXX/mangle-template.cpp<br>
===================================================================<br>
--- test/CodeGenCXX/mangle-template.cpp<br>
+++ test/CodeGenCXX/mangle-template.cpp<br>
@@ -28,16 +28,15 @@<br>
 // CHECK: void @test3_f0<br>
 extern "C" void test3_f0(float) {}<br>
 template<void (&)(float)> struct t1 {};<br>
-// FIXME: Fails because we tack on a namespace.<br>
-// CHECK-FIXME: void @_ZN5test32f1ENS_2t1ILZ8test3_f0EEE(<br>
+// CHECK: void @_ZN5test32f1ENS_2t1IL_Z8test3_f0EEE(<br>
 void f1(t1<test3_f0> a0) {}<br>
 }<br>
<br>
 namespace test4 {<br>
 // CHECK: void @test4_f0<br>
 extern "C" void test4_f0(float) {}<br>
 template<void (*)(float)> struct t1 {};<br>
-// CHECK: void @_ZN5test42f1ENS_2t1IXadL_ZNS_8test4_f0EEEEE(<br>
+// CHECK: void @_ZN5test42f1ENS_2t1IXadL_Z8test4_f0EEEE(<br>
 void f1(t1<test4_f0> a0) {}<br>
 }<br>
<br>
EMAIL PREFERENCES<br>
  <a href="http://reviews.llvm.org/settings/panel/emailpreferences/" target="_blank">http://reviews.llvm.org/settings/panel/emailpreferences/</a><br>
</blockquote></div><br></div>