<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="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;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.EmailStyle18
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;}
.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 lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Should this be considered for 8.0? It's late in the branch and I don't know how prevalent the issue being fixed is, but it caught my eye.<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 Erik Pilkington via cfe-commits <cfe-commits@lists.llvm.org><br>
<b>Reply-To: </b>Erik Pilkington <erik.pilkington@gmail.com><br>
<b>Date: </b>Wednesday, February 13, 2019 at 12:32 PM<br>
<b>To: </b>"cfe-commits@lists.llvm.org" <cfe-commits@lists.llvm.org><br>
<b>Subject: </b>r353976 - [Sema] Delay checking whether objc_designated_initializer is being applied to an init method<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: epilk<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">Date: Wed Feb 13 12:32:37 2019<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">New Revision: 353976<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-3D353976-26view-3Drev&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=SS1gIdRrXBd-rCKs5rBEEPmEevgsHAkkERh1ko2vPEc&s=W245MwgFUCCNz9Ug2Tc0dY5lJ35n855YKxo_fwmicxM&e=">
https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject-3Frev-3D353976-26view-3Drev&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=SS1gIdRrXBd-rCKs5rBEEPmEevgsHAkkERh1ko2vPEc&s=W245MwgFUCCNz9Ug2Tc0dY5lJ35n855YKxo_fwmicxM&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">[Sema] Delay checking whether objc_designated_initializer is being applied to an init method<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">This fixes a regression that was caused by r335084, which reversed<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">the order that attributes are applied. objc_method_family can change<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">whether a method is an init method, so the order that these<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">attributes are applied matters. The commit fixes this by delaying the<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">init check until after all attributes have been applied.<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">rdar://47829358<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">Differential revision: <a href="https://urldefense.proofpoint.com/v2/url?u=https-3A__reviews.llvm.org_D58152&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=SS1gIdRrXBd-rCKs5rBEEPmEevgsHAkkERh1ko2vPEc&s=-4Nd4QBW0KxmFdmqS-2w90_5AoHoRQbdwd8K3Z4JzuY&e=">
https://urldefense.proofpoint.com/v2/url?u=https-3A__reviews.llvm.org_D58152&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=SS1gIdRrXBd-rCKs5rBEEPmEevgsHAkkERh1ko2vPEc&s=-4Nd4QBW0KxmFdmqS-2w90_5AoHoRQbdwd8K3Z4JzuY&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">Modified:<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">    cfe/trunk/include/clang/Basic/Attr.td<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">    cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">    cfe/trunk/lib/Sema/SemaDeclAttr.cpp<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">    cfe/trunk/test/Misc/pragma-attribute-supported-attributes-list.test<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">    cfe/trunk/test/SemaObjC/attr-designated-init.m<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/Basic/Attr.td<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_Basic_Attr.td-3Frev-3D353976-26r1-3D353975-26r2-3D353976-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=SS1gIdRrXBd-rCKs5rBEEPmEevgsHAkkERh1ko2vPEc&s=tgqq2EylVgj2FgGry6ZO46KA6teeO-xJ1TlvJWvEy6Q&e=">
https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_include_clang_Basic_Attr.td-3Frev-3D353976-26r1-3D353975-26r2-3D353976-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=SS1gIdRrXBd-rCKs5rBEEPmEevgsHAkkERh1ko2vPEc&s=tgqq2EylVgj2FgGry6ZO46KA6teeO-xJ1TlvJWvEy6Q&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/Basic/Attr.td (original)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+++ cfe/trunk/include/clang/Basic/Attr.td Wed Feb 13 12:32:37 2019<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">@@ -102,13 +102,6 @@ def ObjCInstanceMethod : SubsetSubject<O<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">                                        [{S->isInstanceMethod()}],<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">                                        "Objective-C instance methods">;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-def ObjCInterfaceDeclInitMethod : SubsetSubject<ObjCMethod,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-                               [{S->getMethodFamily() == OMF_init &&<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-                                 (isa<ObjCInterfaceDecl>(S->getDeclContext()) ||<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-                                  (isa<ObjCCategoryDecl>(S->getDeclContext()) &&<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-            cast<ObjCCategoryDecl>(S->getDeclContext())->IsClassExtension()))}],<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-            "init methods of interface or class extension declarations">;<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">def Struct : SubsetSubject<Record,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">                            [{!S->isUnion()}], "structs">;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">@@ -1786,7 +1779,7 @@ def ObjCExplicitProtocolImpl : Inheritab<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">def ObjCDesignatedInitializer : Attr {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   let Spellings = [Clang<"objc_designated_initializer">];<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-  let Subjects = SubjectList<[ObjCInterfaceDeclInitMethod], ErrorDiag>;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  let Subjects = SubjectList<[ObjCMethod], ErrorDiag>;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   let Documentation = [Undocumented];<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">Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td<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_Basic_DiagnosticSemaKinds.td-3Frev-3D353976-26r1-3D353975-26r2-3D353976-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=SS1gIdRrXBd-rCKs5rBEEPmEevgsHAkkERh1ko2vPEc&s=d6MOBmrgs96qcCuR_Q5j82acKFzDnHxqDkcDiUM_IIk&e=">
https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_include_clang_Basic_DiagnosticSemaKinds.td-3Frev-3D353976-26r1-3D353975-26r2-3D353976-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=SS1gIdRrXBd-rCKs5rBEEPmEevgsHAkkERh1ko2vPEc&s=d6MOBmrgs96qcCuR_Q5j82acKFzDnHxqDkcDiUM_IIk&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/Basic/DiagnosticSemaKinds.td (original)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Wed Feb 13 12:32:37 2019<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">@@ -3481,6 +3481,9 @@ def warn_objc_secondary_init_missing_ini<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">def warn_objc_implementation_missing_designated_init_override : Warning<<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   "method override for the designated initializer of the superclass %objcinstance0 not found">,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   InGroup<ObjCDesignatedInit>;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+def err_designated_init_attr_non_init : Error<<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  "'objc_designated_initializer' attribute only applies to init methods "<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  "of interface or class extension declarations">;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">// objc_bridge attribute diagnostics.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">def err_objc_attr_not_id : Error<<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/Sema/SemaDeclAttr.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_Sema_SemaDeclAttr.cpp-3Frev-3D353976-26r1-3D353975-26r2-3D353976-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=SS1gIdRrXBd-rCKs5rBEEPmEevgsHAkkERh1ko2vPEc&s=n3Lrsayy7oQTOdjbionMiki15N4Z4kxZaPSw5Fn4uww&e=">
https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_lib_Sema_SemaDeclAttr.cpp-3Frev-3D353976-26r1-3D353975-26r2-3D353976-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=SS1gIdRrXBd-rCKs5rBEEPmEevgsHAkkERh1ko2vPEc&s=n3Lrsayy7oQTOdjbionMiki15N4Z4kxZaPSw5Fn4uww&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/Sema/SemaDeclAttr.cpp (original)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+++ cfe/trunk/lib/Sema/SemaDeclAttr.cpp Wed Feb 13 12:32:37 2019<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">@@ -5249,11 +5249,22 @@ static void handleObjCBridgeRelatedAttr(<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">static void handleObjCDesignatedInitializer(Sema &S, Decl *D,<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">                                             const ParsedAttr &AL) {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  DeclContext *Ctx = D->getDeclContext();<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">+  // This attribute can only be applied to methods in interfaces or class<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  // extensions.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  if (!isa<ObjCInterfaceDecl>(Ctx) &&<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+      !(isa<ObjCCategoryDecl>(Ctx) &&<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+        cast<ObjCCategoryDecl>(Ctx)->IsClassExtension())) {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+    S.Diag(D->getLocation(), diag::err_designated_init_attr_non_init);<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">+<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   ObjCInterfaceDecl *IFace;<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-  if (auto *CatDecl = dyn_cast<ObjCCategoryDecl>(D->getDeclContext()))<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  if (auto *CatDecl = dyn_cast<ObjCCategoryDecl>(Ctx))<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">     IFace = CatDecl->getClassInterface();<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   else<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-    IFace = cast<ObjCInterfaceDecl>(D->getDeclContext());<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+    IFace = cast<ObjCInterfaceDecl>(Ctx);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">   if (!IFace)<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">@@ -7243,6 +7254,17 @@ void Sema::ProcessDeclAttributeList(Scop<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">+<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  // Do this check after processing D's attributes because the attribute<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  // objc_method_family can change whether the given method is in the init<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  // family, and it can be applied after objc_designated_initializer. This is a<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  // bit of a hack, but we need it to be compatible with versions of clang that<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  // processed the attribute list in the wrong order.<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  if (D->hasAttr<ObjCDesignatedInitializerAttr>() &&<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+      cast<ObjCMethodDecl>(D)->getMethodFamily() != OMF_init) {<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+    Diag(D->getLocation(), diag::err_designated_init_attr_non_init);<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+    D->dropAttr<ObjCDesignatedInitializerAttr>();<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">// Helper for delayed processing TransparentUnion attribute.<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/test/Misc/pragma-attribute-supported-attributes-list.test<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_Misc_pragma-2Dattribute-2Dsupported-2Dattributes-2Dlist.test-3Frev-3D353976-26r1-3D353975-26r2-3D353976-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=SS1gIdRrXBd-rCKs5rBEEPmEevgsHAkkERh1ko2vPEc&s=WG3dj5MItvLs5XeEzU66Ghla6jowRBTj94bOG49Bz0g&e=">
https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_test_Misc_pragma-2Dattribute-2Dsupported-2Dattributes-2Dlist.test-3Frev-3D353976-26r1-3D353975-26r2-3D353976-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=SS1gIdRrXBd-rCKs5rBEEPmEevgsHAkkERh1ko2vPEc&s=WG3dj5MItvLs5XeEzU66Ghla6jowRBTj94bOG49Bz0g&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/Misc/pragma-attribute-supported-attributes-list.test (original)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+++ cfe/trunk/test/Misc/pragma-attribute-supported-attributes-list.test Wed Feb 13 12:32:37 2019<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">@@ -97,6 +97,7 @@<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">// CHECK-NEXT: ObjCBridge (SubjectMatchRule_record, SubjectMatchRule_type_alias)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">// CHECK-NEXT: ObjCBridgeMutable (SubjectMatchRule_record)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">// CHECK-NEXT: ObjCBridgeRelated (SubjectMatchRule_record)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+// CHECK-NEXT: ObjCDesignatedInitializer (SubjectMatchRule_objc_method)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">// CHECK-NEXT: ObjCException (SubjectMatchRule_objc_interface)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">// CHECK-NEXT: ObjCExplicitProtocolImpl (SubjectMatchRule_objc_protocol)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">// CHECK-NEXT: ObjCExternallyRetained (SubjectMatchRule_variable_not_is_parameter, SubjectMatchRule_function, SubjectMatchRule_block, SubjectMatchRule_objc_method)<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/test/SemaObjC/attr-designated-init.m<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_SemaObjC_attr-2Ddesignated-2Dinit.m-3Frev-3D353976-26r1-3D353975-26r2-3D353976-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=SS1gIdRrXBd-rCKs5rBEEPmEevgsHAkkERh1ko2vPEc&s=qFGKSW2h6UsOH36D_A3kkAWh1P-zIl2zj0dNdzK5fZU&e=">
https://urldefense.proofpoint.com/v2/url?u=http-3A__llvm.org_viewvc_llvm-2Dproject_cfe_trunk_test_SemaObjC_attr-2Ddesignated-2Dinit.m-3Frev-3D353976-26r1-3D353975-26r2-3D353976-26view-3Ddiff&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=SS1gIdRrXBd-rCKs5rBEEPmEevgsHAkkERh1ko2vPEc&s=qFGKSW2h6UsOH36D_A3kkAWh1P-zIl2zj0dNdzK5fZU&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/SemaObjC/attr-designated-init.m (original)<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+++ cfe/trunk/test/SemaObjC/attr-designated-init.m Wed Feb 13 12:32:37 2019<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">@@ -3,7 +3,7 @@<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">#define NS_UNAVAILABLE __attribute__((unavailable))<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-void fnfoo(void) NS_DESIGNATED_INITIALIZER; // expected-error {{only applies to init methods of interface or class extension declarations}}<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+void fnfoo(void) NS_DESIGNATED_INITIALIZER; // expected-error {{'objc_designated_initializer' attribute only applies to Objective-C methods}}<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">@protocol P1<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">-(id)init NS_DESIGNATED_INITIALIZER; // expected-error {{only applies to init methods of interface or class extension declarations}}<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">@@ -428,3 +428,16 @@ __attribute__((objc_root_class))<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">@interface CategoryForMissingInterface(Cat) // expected-error{{cannot find interface declaration}}<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">- (instancetype)init NS_DESIGNATED_INITIALIZER; // expected-error{{only applies to init methods of interface or class extension declarations}}<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">@end<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">+@interface TwoAttrs<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+-(instancetype)foo<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+    __attribute__((objc_designated_initializer))<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+    __attribute__((objc_method_family(init)));<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+-(instancetype)bar<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+    __attribute__((objc_method_family(init)))<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+    __attribute__((objc_designated_initializer));<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+-(instancetype)baz<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  __attribute__((objc_designated_initializer, objc_method_family(init)));<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+-(instancetype)quux<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+  __attribute__((objc_method_family(init), objc_designated_initializer));<o:p></o:p></p>
</div>
<div>
<p class="MsoNormal" style="margin-left:.5in">+@end<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=https-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_cfe-2Dcommits&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=SS1gIdRrXBd-rCKs5rBEEPmEevgsHAkkERh1ko2vPEc&s=CUgh_2TLwbP045tLWSjPb2ggagK8hronounsArE9dbQ&e=">https://urldefense.proofpoint.com/v2/url?u=https-3A__lists.llvm.org_cgi-2Dbin_mailman_listinfo_cfe-2Dcommits&d=DwIGaQ&c=5VD0RTtNlTh3ycd41b3MUw&r=o3kDXzdBUE3ljQXKeTWOMw&m=SS1gIdRrXBd-rCKs5rBEEPmEevgsHAkkERh1ko2vPEc&s=CUgh_2TLwbP045tLWSjPb2ggagK8hronounsArE9dbQ&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>