<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Feb 1, 2018 at 2:42 AM, Richard Smith <span dir="ltr"><<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><span class="">On 31 January 2018 at 16:42, Shoaib Meenai via cfe-commits <span dir="ltr"><<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">







<div bgcolor="white" lang="EN-US" link="blue" vlink="purple">
<div class="m_-9083542946892827280m_-4444345358604898380WordSection1">
<p class="MsoNormal">Is this viable for backporting to 6.0? It fixes a bug that's been hit in various forms by quite a few people:
<a href="https://bugs.llvm.org/show_bug.cgi?id=36181" target="_blank">https://bugs.llvm.org/show_bug<wbr>.cgi?id=36181</a>,
<a href="https://bugs.llvm.org/show_bug.cgi?id=35473" target="_blank">https://bugs.llvm.org/show_bug<wbr>.cgi?id=35473</a>, and
<a href="https://bugs.llvm.org/show_bug.cgi?id=35939" target="_blank">https://bugs.llvm.org/show_bug<wbr>.cgi?id=35939</a>.</p></div></div></blockquote><div><br></div></span><div>I'd be OK with that once it's had a few days to work its way through various automated build systems.</div></div></div></div></blockquote><div><br></div><div>Sounds good. I'll merge when it's baked a bit.</div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div bgcolor="white" lang="EN-US" link="blue" vlink="purple"><div class="m_-9083542946892827280m_-4444345358604898380WordSection1"><p class="MsoNormal"> </p><p class="MsoNormal"><u></u></p>
<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal" style="margin-left:.5in"><b><span style="font-size:12.0pt;color:black">From:
</span></b><span style="font-size:12.0pt;color:black">cfe-commits <<a href="mailto:cfe-commits-bounces@lists.llvm.org" target="_blank">cfe-commits-bounces@lists.llv<wbr>m.org</a>> on behalf of Richard Smith via cfe-commits <<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>><br>
<b>Reply-To: </b>Richard Smith <<a href="mailto:richard-llvm@metafoo.co.uk" target="_blank">richard-llvm@metafoo.co.uk</a>><br>
<b>Date: </b>Wednesday, January 31, 2018 at 4:32 PM<br>
<b>To: </b>"<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>" <<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a>><br>
<b>Subject: </b>r323935 - PR36181: Teach CodeGen to properly ignore requests to emit dependent entities.<u></u><u></u></span></p>
</div><span>
<div>
<p class="MsoNormal" style="margin-left:.5in"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Author: rsmith<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Date: Wed Jan 31 16:28:36 2018<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">New Revision: 323935<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><u></u> <u></u></p>
</div>
</span><div>
<p class="MsoNormal" style="margin-left:.5in">URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D323935-26view-3Drev&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=lpLH9VUhmNJcmdOGGUS4JH7kl-0dHB_UbZJavDZFar8&s=gXiqdj7RcmFitXxzq_T6trCkulPJ1hKO9JTh4N1W1Ds&e=" target="_blank">
https://urldefense.proofpoint.<wbr>com/v2/url?u=http-3A__llvm.org<wbr>_viewvc_llvm-2Dproject-3Frev-<wbr>3D323935-26view-3Drev&d=DwIGaQ<wbr>&c=5VD0RTtNlTh3ycd41b3MUw&r=o3<wbr>kDXzdBUE3ljQXKeTWOMw&m=lpLH9VU<wbr>hmNJcmdOGGUS4JH7kl-0dHB_<wbr>UbZJavDZFar8&s=gXiqdj7RcmFitXx<wbr>zq_T6trCkulPJ1hKO9JTh4N1W1Ds&<wbr>e=</a><u></u><u></u></p>
</div><span>
<div>
<p class="MsoNormal" style="margin-left:.5in">Log:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">PR36181: Teach CodeGen to properly ignore requests to emit dependent entities.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Previously, friend function definitions within class templates slipped through<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">the gaps and caused the MS mangler to assert.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Added:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">    cfe/trunk/test/CodeGenCXX/<wbr>microsoft-abi-emit-dependent.c<wbr>pp<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Modified:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">    cfe/trunk/include/clang/AS<wbr>T/DeclBase.h<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">    cfe/trunk/lib/AST/DeclBase<wbr>.cpp<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">    cfe/trunk/lib/CodeGen/Code<wbr>GenModule.cpp<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Modified: cfe/trunk/include/clang/AST/De<wbr>clBase.h<u></u><u></u></p>
</div>
</span><div>
<p class="MsoNormal" style="margin-left:.5in">URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_include_clang_AST_DeclBase.h-3Frev-3D323935-26r1-3D323934-26r2-3D323935-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=lpLH9VUhmNJcmdOGGUS4JH7kl-0dHB_UbZJavDZFar8&s=IdB02f1U8VHa1i4Dvuj1BkcyoWf9sYvY3xE1L8bzfM0&e=" target="_blank">
https://urldefense.proofpoint.<wbr>com/v2/url?u=http-3A__llvm.org<wbr>_viewvc_llvm-2Dproject_cfe_tru<wbr>nk_include_clang_AST_DeclBase.<wbr>h-3Frev-3D323935-26r1-<wbr>3D323934-26r2-3D323935-26view-<wbr>3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3<wbr>ycd41b3MUw&r=o3kDXzdBUE3ljQXKe<wbr>TWOMw&m=lpLH9VUhmNJcmdOGGUS4JH<wbr>7kl-0dHB_UbZJavDZFar8&s=IdB02f<wbr>1U8VHa1i4Dvuj1BkcyoWf9sYvY3xE1<wbr>L8bzfM0&e=</a><u></u><u></u></p>
</div><span>
<div>
<p class="MsoNormal" style="margin-left:.5in">==============================<wbr>==============================<wbr>==================<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">--- cfe/trunk/include/clang/AST/De<wbr>clBase.h (original)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+++ cfe/trunk/include/clang/AST/De<wbr>clBase.h Wed Jan 31 16:28:36 2018<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">@@ -836,6 +836,10 @@ public:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   void setLexicalDeclContext(DeclCont<wbr>ext *DC);<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  /// Determine whether this declaration is a templated entity (whether it is<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  // within the scope of a template parameter).<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  bool isTemplated() const;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   /// isDefinedOutsideFunctionOrMeth<wbr>od - This predicate returns true if this<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   /// scoped decl is defined outside the current function or method.  This is<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   /// roughly global variables and functions, but also handles enums (which<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Modified: cfe/trunk/lib/AST/DeclBase.cpp<u></u><u></u></p>
</div>
</span><div>
<p class="MsoNormal" style="margin-left:.5in">URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_AST_DeclBase.cpp-3Frev-3D323935-26r1-3D323934-26r2-3D323935-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=lpLH9VUhmNJcmdOGGUS4JH7kl-0dHB_UbZJavDZFar8&s=3WgES9JYNm2mJaPKUnRnaFndAGpGnj0AJ9kR5ARgxao&e=" target="_blank">
https://urldefense.proofpoint.<wbr>com/v2/url?u=http-3A__llvm.org<wbr>_viewvc_llvm-2Dproject_cfe_tru<wbr>nk_lib_AST_DeclBase.cpp-3Frev-<wbr>3D323935-26r1-3D323934-26r2-<wbr>3D323935-26view-3Ddiff&d=DwIGa<wbr>Q&c=5VD0RTtNlTh3ycd41b3MUw&r=o<wbr>3kDXzdBUE3ljQXKeTWOMw&m=lpLH9V<wbr>UhmNJcmdOGGUS4JH7kl-0dHB_<wbr>UbZJavDZFar8&s=3WgES9JYNm2mJaP<wbr>KUnRnaFndAGpGnj0AJ9kR5ARgxao&<wbr>e=</a><u></u><u></u></p>
</div><div><div class="m_-9083542946892827280h5">
<div>
<p class="MsoNormal" style="margin-left:.5in">==============================<wbr>==============================<wbr>==================<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">--- cfe/trunk/lib/AST/DeclBase.cpp (original)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+++ cfe/trunk/lib/AST/DeclBase.cpp Wed Jan 31 16:28:36 2018<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">@@ -236,10 +236,23 @@ TemplateDecl *Decl::getDescribedTemplate<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     return RD->getDescribedClassTemplate(<wbr>);<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   else if (auto *VD = dyn_cast<VarDecl>(this))<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     return VD->getDescribedVarTemplate();<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  else if (auto *AD = dyn_cast<TypeAliasDecl>(this))<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+    return AD->getDescribedAliasTemplate(<wbr>);<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   return nullptr;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">}<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+bool Decl::isTemplated() const {<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  // A declaration is dependent if it is a template or a template pattern, or<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  // is within (lexcially for a friend, semantically otherwise) a dependent<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  // context.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  // FIXME: Should local extern declarations be treated like friends?<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  if (auto *AsDC = dyn_cast<DeclContext>(this))<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+    return AsDC->isDependentContext();<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  auto *DC = getFriendObjectKind() ? getLexicalDeclContext() : getDeclContext();<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  return DC->isDependentContext() || isTemplateDecl() || getDescribedTemplate();<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+}<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">const DeclContext *Decl::getParentFunctionOrMeth<wbr>od() const {<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   for (const DeclContext *DC = getDeclContext();<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">        DC && !DC->isTranslationUnit() && !DC->isNamespace();
<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Modified: cfe/trunk/lib/CodeGen/CodeGenM<wbr>odule.cpp<u></u><u></u></p>
</div>
</div></div><div>
<p class="MsoNormal" style="margin-left:.5in">URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_CodeGen_CodeGenModule.cpp-3Frev-3D323935-26r1-3D323934-26r2-3D323935-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=lpLH9VUhmNJcmdOGGUS4JH7kl-0dHB_UbZJavDZFar8&s=h8Z9xGHMAkSO6Ph5TtmYjbR5XdFVkIgGMgUXGk2oMqc&e=" target="_blank">
https://urldefense.proofpoint.<wbr>com/v2/url?u=http-3A__llvm.org<wbr>_viewvc_llvm-2Dproject_cfe_tru<wbr>nk_lib_CodeGen_CodeGenModule.<wbr>cpp-3Frev-3D323935-26r1-<wbr>3D323934-26r2-3D323935-26view-<wbr>3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3<wbr>ycd41b3MUw&r=o3kDXzdBUE3ljQXKe<wbr>TWOMw&m=lpLH9VUhmNJcmdOGGUS4JH<wbr>7kl-0dHB_UbZJavDZFar8&s=h8Z9xG<wbr>HMAkSO6Ph5TtmYjbR5XdFVkIgGMgUX<wbr>Gk2oMqc&e=</a><u></u><u></u></p>
</div><div><div class="m_-9083542946892827280h5">
<div>
<p class="MsoNormal" style="margin-left:.5in">==============================<wbr>==============================<wbr>==================<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">--- cfe/trunk/lib/CodeGen/CodeGenM<wbr>odule.cpp (original)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+++ cfe/trunk/lib/CodeGen/CodeGenM<wbr>odule.cpp Wed Jan 31 16:28:36 2018<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">@@ -4190,18 +4190,13 @@ void CodeGenModule::EmitDeclContext<wbr>(cons<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">/// EmitTopLevelDecl - Emit code for a single top level declaration.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">void CodeGenModule::EmitTopLevelDec<wbr>l(Decl *D) {<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   // Ignore dependent declarations.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-  if (D->getDeclContext() && D->getDeclContext()->isDepende<wbr>ntContext())<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  if (D->isTemplated())<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     return;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   switch (D->getKind()) {<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   case Decl::CXXConversion:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   case Decl::CXXMethod:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   case Decl::Function:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-    // Skip function templates<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-    if (cast<FunctionDecl>(D)->getDes<wbr>cribedFunctionTemplate() ||<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-        cast<FunctionDecl>(D)<wbr>->isLateTemplateParsed())<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-      return;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     EmitGlobal(cast<FunctionDecl>(<wbr>D));<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     // Always provide some coverage mapping<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     // even for the functions that aren't emitted.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">@@ -4214,10 +4209,6 @@ void CodeGenModule::EmitTopLevelDec<wbr>l(Dec<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   case Decl::Var:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   case Decl::Decomposition:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-    // Skip variable templates<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-    if (cast<VarDecl>(D)->getDescribe<wbr>dVarTemplate())<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-      return;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-    LLVM_FALLTHROUGH;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   case Decl::VarTemplateSpecializatio<wbr>n:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     EmitGlobal(cast<VarDecl>(D));<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     if (auto *DD = dyn_cast<DecompositionDecl>(D)<wbr>)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">@@ -4276,16 +4267,9 @@ void CodeGenModule::EmitTopLevelDec<wbr>l(Dec<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">       DI->EmitUsingDirective(cast<Us<wbr>ingDirectiveDecl>(*D));<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     return;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   case Decl::CXXConstructor:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-    // Skip function templates<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-    if (cast<FunctionDecl>(D)->getDes<wbr>cribedFunctionTemplate() ||<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-        cast<FunctionDecl>(D)<wbr>->isLateTemplateParsed())<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-      return;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     getCXXABI().EmitCXXConstructor<wbr>s(cast<CXXConstructorDecl>(D))<wbr>;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     break;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   case Decl::CXXDestructor:<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-    if (cast<FunctionDecl>(D)->isLate<wbr>TemplateParsed())<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-      return;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     getCXXABI().EmitCXXDestructors<wbr>(cast<CXXDestructorDecl>(D));<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     break;<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Added: cfe/trunk/test/CodeGenCXX/micr<wbr>osoft-abi-emit-dependent.cpp<u></u><u></u></p>
</div>
</div></div><div>
<p class="MsoNormal" style="margin-left:.5in">URL: <a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_test_CodeGenCXX_microsoft-2Dabi-2Demit-2Ddependent.cpp-3Frev-3D323935-26view-3Dauto&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=lpLH9VUhmNJcmdOGGUS4JH7kl-0dHB_UbZJavDZFar8&s=mAm9nqXVQhIgVg8KPFJg-dzCh8yKufwWzfiUNbPDk-Q&e=" target="_blank">
https://urldefense.proofpoint.<wbr>com/v2/url?u=http-3A__llvm.org<wbr>_viewvc_llvm-2Dproject_cfe_tru<wbr>nk_test_CodeGenCXX_microsoft-<wbr>2Dabi-2Demit-2Ddependent.cpp-<wbr>3Frev-3D323935-26view-3Dauto&<wbr>d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3<wbr>MUw&r=o3kDXzdBUE3ljQXKeTWOMw&<wbr>m=lpLH9VUhmNJcmdOGGUS4JH7kl-0d<wbr>HB_UbZJavDZFar8&s=mAm9nqXVQhIg<wbr>Vg8KPFJg-dzCh8yKufwWzfiUNbPDk-<wbr>Q&e=</a><u></u><u></u></p>
</div><span>
<div>
<p class="MsoNormal" style="margin-left:.5in">==============================<wbr>==============================<wbr>==================<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">--- cfe/trunk/test/CodeGenCXX/micr<wbr>osoft-abi-emit-dependent.cpp (added)<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+++ cfe/trunk/test/CodeGenCXX/micr<wbr>osoft-abi-emit-dependent.cpp Wed Jan 31 16:28:36 2018<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">@@ -0,0 +1,11 @@<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+// RUN: %clang_cc1 -emit-llvm-only -fmodules -triple x86_64-windows %s<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+// PR36181<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+#pragma clang module build foo<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+module foo {}<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+#pragma clang module contents<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+template <typename T> struct A {<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  friend void f(A<T>) {}<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+};<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+#pragma clang module endbuild<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+#pragma clang module import foo<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+void g() { f(A<int>()); }<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">______________________________<wbr>_________________<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">cfe-commits mailing list<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><u></u><u></u></p>
</div>
</span><div>
<p class="MsoNormal" style="margin-left:.5in"><a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_cfe-2Dcommits&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=lpLH9VUhmNJcmdOGGUS4JH7kl-0dHB_UbZJavDZFar8&s=DpwzUMYVSTyRYllZ8J2SVU1ikJcj5-_6D5qjr2dNSL0&e=" target="_blank">https://urldefense.proofpoint.<wbr>com/v2/url?u=http-3A__lists.ll<wbr>vm.org_cgi-2Dbin_mailman_listi<wbr>nfo_cfe-2Dcommits&d=DwIGaQ&c=5<wbr>VD0RTtNlTh3ycd41b3MUw&r=o3kDXz<wbr>dBUE3ljQXKeTWOMw&m=lpLH9VUhmNJ<wbr>cmdOGGUS4JH7kl-0dHB_<wbr>UbZJavDZFar8&s=DpwzUMYVSTyRYll<wbr>Z8J2SVU1ikJcj5-_6D5qjr2dNSL0&<wbr>e=</a><u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><u></u> <u></u></p>
</div>
</div>
</div>

<br>______________________________<wbr>_________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@lists.llvm.org" target="_blank">cfe-commits@lists.llvm.org</a><br>
</div></div><a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/cfe-commits</a><br>
<br></blockquote></div><br></div></div>
</blockquote></div><br></div></div>