<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Title" content="">
<meta name="Keywords" content="">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
span.msoIns
        {mso-style-type:export-only;
        mso-style-name:"";
        text-decoration:underline;
        color:teal;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body bgcolor="white" lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<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">https://bugs.llvm.org/show_bug.cgi?id=36181</a>,
<a href="https://bugs.llvm.org/show_bug.cgi?id=35473">https://bugs.llvm.org/show_bug.cgi?id=35473</a>, and
<a href="https://bugs.llvm.org/show_bug.cgi?id=35939">https://bugs.llvm.org/show_bug.cgi?id=35939</a>.<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></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 <cfe-commits-bounces@lists.llvm.org> on behalf of Richard Smith via cfe-commits <cfe-commits@lists.llvm.org><br>
<b>Reply-To: </b>Richard Smith <richard-llvm@metafoo.co.uk><br>
<b>Date: </b>Wednesday, January 31, 2018 at 4:32 PM<br>
<b>To: </b>"cfe-commits@lists.llvm.org" <cfe-commits@lists.llvm.org><br>
<b>Subject: </b>r323935 - PR36181: Teach CodeGen to properly ignore requests to emit dependent entities.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Author: rsmith<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Date: Wed Jan 31 16:28:36 2018<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">New Revision: 323935<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</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-3Frev-3D323935-26view-3Drev&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=lpLH9VUhmNJcmdOGGUS4JH7kl-0dHB_UbZJavDZFar8&s=gXiqdj7RcmFitXxzq_T6trCkulPJ1hKO9JTh4N1W1Ds&e=">
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=</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Log:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">PR36181: Teach CodeGen to properly ignore requests to emit dependent entities.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Previously, friend function definitions within class templates slipped through<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">the gaps and caused the MS mangler to assert.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Added:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">    cfe/trunk/test/CodeGenCXX/microsoft-abi-emit-dependent.cpp<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Modified:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">    cfe/trunk/include/clang/AST/DeclBase.h<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">    cfe/trunk/lib/AST/DeclBase.cpp<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">    cfe/trunk/lib/CodeGen/CodeGenModule.cpp<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Modified: cfe/trunk/include/clang/AST/DeclBase.h<o:p></o:p></p>
</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_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=">
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=</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">==============================================================================<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">--- cfe/trunk/include/clang/AST/DeclBase.h (original)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+++ cfe/trunk/include/clang/AST/DeclBase.h Wed Jan 31 16:28:36 2018<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">@@ -836,6 +836,10 @@ public:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   void setLexicalDeclContext(DeclContext *DC);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  /// Determine whether this declaration is a templated entity (whether it is<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  // within the scope of a template parameter).<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  bool isTemplated() const;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   /// isDefinedOutsideFunctionOrMethod - This predicate returns true if this<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   /// scoped decl is defined outside the current function or method.  This is<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   /// roughly global variables and functions, but also handles enums (which<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Modified: cfe/trunk/lib/AST/DeclBase.cpp<o:p></o:p></p>
</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_AST_DeclBase.cpp-3Frev-3D323935-26r1-3D323934-26r2-3D323935-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=lpLH9VUhmNJcmdOGGUS4JH7kl-0dHB_UbZJavDZFar8&s=3WgES9JYNm2mJaPKUnRnaFndAGpGnj0AJ9kR5ARgxao&e=">
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=</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">==============================================================================<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">--- cfe/trunk/lib/AST/DeclBase.cpp (original)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+++ cfe/trunk/lib/AST/DeclBase.cpp Wed Jan 31 16:28:36 2018<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">@@ -236,10 +236,23 @@ TemplateDecl *Decl::getDescribedTemplate<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     return RD->getDescribedClassTemplate();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   else if (auto *VD = dyn_cast<VarDecl>(this))<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     return VD->getDescribedVarTemplate();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  else if (auto *AD = dyn_cast<TypeAliasDecl>(this))<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+    return AD->getDescribedAliasTemplate();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   return nullptr;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">}<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+bool Decl::isTemplated() const {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  // A declaration is dependent if it is a template or a template pattern, or<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  // is within (lexcially for a friend, semantically otherwise) a dependent<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  // context.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  // FIXME: Should local extern declarations be treated like friends?<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  if (auto *AsDC = dyn_cast<DeclContext>(this))<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+    return AsDC->isDependentContext();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  auto *DC = getFriendObjectKind() ? getLexicalDeclContext() : getDeclContext();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  return DC->isDependentContext() || isTemplateDecl() || getDescribedTemplate();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+}<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">const DeclContext *Decl::getParentFunctionOrMethod() const {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   for (const DeclContext *DC = getDeclContext();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">        DC && !DC->isTranslationUnit() && !DC->isNamespace();
<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Modified: cfe/trunk/lib/CodeGen/CodeGenModule.cpp<o:p></o:p></p>
</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=">
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=</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">==============================================================================<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">--- cfe/trunk/lib/CodeGen/CodeGenModule.cpp (original)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+++ cfe/trunk/lib/CodeGen/CodeGenModule.cpp Wed Jan 31 16:28:36 2018<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">@@ -4190,18 +4190,13 @@ void CodeGenModule::EmitDeclContext(cons<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">/// EmitTopLevelDecl - Emit code for a single top level declaration.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">void CodeGenModule::EmitTopLevelDecl(Decl *D) {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   // Ignore dependent declarations.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-  if (D->getDeclContext() && D->getDeclContext()->isDependentContext())<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  if (D->isTemplated())<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     return;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   switch (D->getKind()) {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   case Decl::CXXConversion:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   case Decl::CXXMethod:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   case Decl::Function:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-    // Skip function templates<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-    if (cast<FunctionDecl>(D)->getDescribedFunctionTemplate() ||<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-        cast<FunctionDecl>(D)->isLateTemplateParsed())<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-      return;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     EmitGlobal(cast<FunctionDecl>(D));<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     // Always provide some coverage mapping<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     // even for the functions that aren't emitted.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">@@ -4214,10 +4209,6 @@ void CodeGenModule::EmitTopLevelDecl(Dec<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   case Decl::Var:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   case Decl::Decomposition:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-    // Skip variable templates<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-    if (cast<VarDecl>(D)->getDescribedVarTemplate())<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-      return;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-    LLVM_FALLTHROUGH;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   case Decl::VarTemplateSpecialization:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     EmitGlobal(cast<VarDecl>(D));<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     if (auto *DD = dyn_cast<DecompositionDecl>(D))<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">@@ -4276,16 +4267,9 @@ void CodeGenModule::EmitTopLevelDecl(Dec<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">       DI->EmitUsingDirective(cast<UsingDirectiveDecl>(*D));<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     return;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   case Decl::CXXConstructor:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-    // Skip function templates<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-    if (cast<FunctionDecl>(D)->getDescribedFunctionTemplate() ||<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-        cast<FunctionDecl>(D)->isLateTemplateParsed())<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-      return;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     getCXXABI().EmitCXXConstructors(cast<CXXConstructorDecl>(D));<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     break;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   case Decl::CXXDestructor:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-    if (cast<FunctionDecl>(D)->isLateTemplateParsed())<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-      return;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     getCXXABI().EmitCXXDestructors(cast<CXXDestructorDecl>(D));<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     break;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Added: cfe/trunk/test/CodeGenCXX/microsoft-abi-emit-dependent.cpp<o:p></o:p></p>
</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=">
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=</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">==============================================================================<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">--- cfe/trunk/test/CodeGenCXX/microsoft-abi-emit-dependent.cpp (added)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+++ cfe/trunk/test/CodeGenCXX/microsoft-abi-emit-dependent.cpp Wed Jan 31 16:28:36 2018<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">@@ -0,0 +1,11 @@<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+// RUN: %clang_cc1 -emit-llvm-only -fmodules -triple x86_64-windows %s<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+// PR36181<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+#pragma clang module build foo<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+module foo {}<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+#pragma clang module contents<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+template <typename T> struct A {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  friend void f(A<T>) {}<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+};<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+#pragma clang module endbuild<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+#pragma clang module import foo<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+void g() { f(A<int>()); }<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">_______________________________________________<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">cfe-commits mailing list<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><a href="mailto:cfe-commits@lists.llvm.org">cfe-commits@lists.llvm.org</a><o:p></o:p></p>
</div>
<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=">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=</a><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in"><o:p> </o:p></p>
</div>
</div>
</body>
</html>