<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">Good catch!  I commented out those lines when I experimented with hoisting that logic out of the conditionals to the bottom of the function.  I then forgot to remove those comments when I was grinding through the test cases.<div><br></div><div>I’ve removed those lines in r197730.</div><div><br><div><div>On Dec 19, 2013, at 1:57 PM, Aaron Ballman <<a href="mailto:aaron@aaronballman.com">aaron@aaronballman.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div style="font-size: 14px; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-stroke-width: 0px;">On Wed, Dec 18, 2013 at 6:30 PM, Ted Kremenek <<a href="mailto:kremenek@apple.com">kremenek@apple.com</a>> wrote:<br><blockquote type="cite">Author: kremenek<br>Date: Wed Dec 18 17:30:06 2013<br>New Revision: 197627<br><br>URL: <a href="http://llvm.org/viewvc/llvm-project?rev=197627&view=rev">http://llvm.org/viewvc/llvm-project?rev=197627&view=rev</a><br>Log:<br>Implemented delayed processing of 'unavailable' checking, just like with 'deprecated'.<br><br>Fixes <<a href="rdar://problem/15584219">rdar://problem/15584219</a>> and <<a href="rdar://problem/12241361">rdar://problem/12241361</a>>.<br><br>This change looks large, but all it does is reuse and consolidate<br>the delayed diagnostic logic for deprecation warnings with unavailability<br>warnings.  By doing so, it showed various inconsistencies between the<br>diagnostics, which were close, but not consistent.  It also revealed<br>some missing "note:"'s in the deprecated diagnostics that were showing<br>up in the unavailable diagnostics, etc.<br><br>This change also changes the wording of the core deprecation diagnostics.<br>Instead of saying "function has been explicitly marked deprecated"<br>we now saw "'X' has been been explicitly marked deprecated".  It<br>turns out providing a bit more context is useful, and often we<br>got the actual term wrong or it was not very precise<br>(e.g., "function" instead of "destructor").  By just saying the name<br>of the thing that is deprecated/deleted/unavailable we define<br>this issue away.  This diagnostic can likely be further wordsmithed<br>to be shorter.<br><br>Modified:<br>   cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td<br>   cfe/trunk/include/clang/Sema/DelayedDiagnostic.h<br>   cfe/trunk/include/clang/Sema/Sema.h<br>   cfe/trunk/lib/Sema/DelayedDiagnostic.cpp<br>   cfe/trunk/lib/Sema/SemaDeclAttr.cpp<br>   cfe/trunk/lib/Sema/SemaExpr.cpp<br>   cfe/trunk/test/ARCMT/checking.m<br>   cfe/trunk/test/Analysis/retain-release.m<br>   cfe/trunk/test/CXX/dcl.dcl/dcl.attr/dcl.attr.deprecated/p1.cpp<br>   cfe/trunk/test/CXX/special/class.copy/p33-0x.cpp<br>   cfe/trunk/test/CXX/special/class.inhctor/p4.cpp<br>   cfe/trunk/test/CXX/special/class.temporary/p1.cpp<br>   cfe/trunk/test/Headers/ms-intrin.cpp<br>   cfe/trunk/test/Parser/MicrosoftExtensions.c<br>   cfe/trunk/test/Sema/MicrosoftExtensions.c<br>   cfe/trunk/test/Sema/attr-availability-ios.c<br>   cfe/trunk/test/Sema/attr-availability-macosx.c<br>   cfe/trunk/test/Sema/attr-availability.c<br>   cfe/trunk/test/Sema/attr-cleanup.c<br>   cfe/trunk/test/Sema/attr-deprecated-message.c<br>   cfe/trunk/test/Sema/attr-deprecated.c<br>   cfe/trunk/test/Sema/attr-unavailable-message.c<br>   cfe/trunk/test/Sema/typeof-use-deprecated.c<br>   cfe/trunk/test/SemaCXX/aggregate-initialization.cpp<br>   cfe/trunk/test/SemaCXX/attr-deprecated.cpp<br>   cfe/trunk/test/SemaCXX/attr-unavailable.cpp<br>   cfe/trunk/test/SemaCXX/cxx0x-delegating-ctors.cpp<br>   cfe/trunk/test/SemaCXX/deleted-function.cpp<br>   cfe/trunk/test/SemaCXX/for-range-dereference.cpp<br>   cfe/trunk/test/SemaCXX/microsoft-dtor-lookup-cxx11.cpp<br>   cfe/trunk/test/SemaCXX/rval-references-examples.cpp<br>   cfe/trunk/test/SemaObjC/arc-unavailable-system-function.m<br>   cfe/trunk/test/SemaObjC/attr-availability.m<br>   cfe/trunk/test/SemaObjC/attr-deprecated.m<br>   cfe/trunk/test/SemaObjC/class-unavail-warning.m<br>   cfe/trunk/test/SemaObjC/property-deprecated-warning.m<br>   cfe/trunk/test/SemaObjC/property-noninherited-availability-attr.m<br>   cfe/trunk/test/SemaObjC/protocol-attribute.m<br>   cfe/trunk/test/SemaObjC/special-dep-unavail-warning.m<br>   cfe/trunk/test/SemaObjC/warn-deprecated-implementations.m<br>   cfe/trunk/test/SemaObjC/warn-forward-class-attr-deprecated.m<br>   cfe/trunk/test/SemaObjC/warn-protocol-method-deprecated.m<br>   cfe/trunk/test/SemaObjCXX/arc-system-header.mm<br><br>Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)<br>+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Wed Dec 18 17:30:06 2013<br>@@ -3527,8 +3527,8 @@ def err_unavailable : Error<"%0 is unava<br>def err_unavailable_message : Error<"%0 is unavailable: %1">;<br>def warn_unavailable_fwdclass_message : Warning<<br>    "%0 maybe unavailable because receiver type is unknown">;<br>-def note_unavailable_here : Note<<br>-  "%select{declaration|function}0 has been explicitly marked "<br>+def note_availability_specified_here : Note<<br>+  "%0 has been explicitly marked "<br>  "%select{unavailable|deleted|deprecated}1 here">;<br>def note_implicitly_deleted : Note<<br>  "explicitly defaulted function was implicitly deleted here">;<br><br>Modified: cfe/trunk/include/clang/Sema/DelayedDiagnostic.h<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/DelayedDiagnostic.h?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/DelayedDiagnostic.h?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/include/clang/Sema/DelayedDiagnostic.h (original)<br>+++ cfe/trunk/include/clang/Sema/DelayedDiagnostic.h Wed Dec 18 17:30:06 2013<br>@@ -113,7 +113,7 @@ private:<br>/// the complete parsing of the current declaration.<br>class DelayedDiagnostic {<br>public:<br>-  enum DDKind { Deprecation, Access, ForbiddenType };<br>+  enum DDKind { Deprecation, Unavailable, Access, ForbiddenType };<br><br>  unsigned char Kind; // actually a DDKind<br>  bool Triggered;<br>@@ -122,11 +122,13 @@ public:<br><br>  void Destroy();<br><br>-  static DelayedDiagnostic makeDeprecation(SourceLocation Loc,<br>-           const NamedDecl *D,<br>-           const ObjCInterfaceDecl *UnknownObjCClass,<br>-           const ObjCPropertyDecl  *ObjCProperty,<br>-           StringRef Msg);<br>+  static DelayedDiagnostic makeAvailability(Sema::AvailabilityDiagnostic AD,<br>+                                            SourceLocation Loc,<br>+                                            const NamedDecl *D,<br>+                                            const ObjCInterfaceDecl *UnknownObjCClass,<br>+                                            const ObjCPropertyDecl  *ObjCProperty,<br>+                                            StringRef Msg);<br>+<br><br>  static DelayedDiagnostic makeAccess(SourceLocation Loc,<br>                                      const AccessedEntity &Entity) {<br>@@ -162,12 +164,14 @@ public:<br>  }<br><br>  const NamedDecl *getDeprecationDecl() const {<br>-    assert(Kind == Deprecation && "Not a deprecation diagnostic.");<br>+    assert((Kind == Deprecation || Kind == Unavailable) &&<br>+           "Not a deprecation diagnostic.");<br>    return DeprecationData.Decl;<br>  }<br><br>  StringRef getDeprecationMessage() const {<br>-    assert(Kind == Deprecation && "Not a deprecation diagnostic.");<br>+    assert((Kind == Deprecation || Kind == Unavailable) &&<br>+           "Not a deprecation diagnostic.");<br>    return StringRef(DeprecationData.Message,<br>                           DeprecationData.MessageLen);<br>  }<br><br>Modified: cfe/trunk/include/clang/Sema/Sema.h<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/include/clang/Sema/Sema.h (original)<br>+++ cfe/trunk/include/clang/Sema/Sema.h Wed Dec 18 17:30:06 2013<br>@@ -3083,12 +3083,15 @@ public:<br><br>  void redelayDiagnostics(sema::DelayedDiagnosticPool &pool);<br><br>-  void EmitDeprecationWarning(NamedDecl *D, StringRef Message,<br>-                              SourceLocation Loc,<br>-                              const ObjCInterfaceDecl *UnknownObjCClass,<br>-                              const ObjCPropertyDecl  *ObjCProperty);<br>+  enum AvailabilityDiagnostic { AD_Deprecation, AD_Unavailable };<br><br>-  void HandleDelayedDeprecationCheck(sema::DelayedDiagnostic &DD, Decl *Ctx);<br>+  void EmitAvailabilityWarning(AvailabilityDiagnostic AD,<br>+                               NamedDecl *D, StringRef Message,<br>+                               SourceLocation Loc,<br>+                               const ObjCInterfaceDecl *UnknownObjCClass,<br>+                               const ObjCPropertyDecl  *ObjCProperty);<br>+<br>+  void HandleDelayedAvailabilityCheck(sema::DelayedDiagnostic &DD, Decl *Ctx);<br><br>  bool makeUnavailableInSystemHeader(SourceLocation loc,<br>                                     StringRef message);<br><br>Modified: cfe/trunk/lib/Sema/DelayedDiagnostic.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/DelayedDiagnostic.cpp?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/DelayedDiagnostic.cpp?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/lib/Sema/DelayedDiagnostic.cpp (original)<br>+++ cfe/trunk/lib/Sema/DelayedDiagnostic.cpp Wed Dec 18 17:30:06 2013<br>@@ -19,13 +19,22 @@<br>using namespace clang;<br>using namespace sema;<br><br>-DelayedDiagnostic DelayedDiagnostic::makeDeprecation(SourceLocation Loc,<br>+DelayedDiagnostic<br>+DelayedDiagnostic::makeAvailability(Sema::AvailabilityDiagnostic AD,<br>+                                    SourceLocation Loc,<br>                                    const NamedDecl *D,<br>                                    const ObjCInterfaceDecl *UnknownObjCClass,<br>                                    const ObjCPropertyDecl  *ObjCProperty,<br>                                    StringRef Msg) {<br>  DelayedDiagnostic DD;<br>-  DD.Kind = Deprecation;<br>+  switch (AD) {<br>+    case Sema::AD_Deprecation:<br>+      DD.Kind = Deprecation;<br>+      break;<br>+    case Sema::AD_Unavailable:<br>+      DD.Kind = Unavailable;<br>+      break;<br>+  }<br>  DD.Triggered = false;<br>  DD.Loc = Loc;<br>  DD.DeprecationData.Decl = D;<br><br>Modified: cfe/trunk/lib/Sema/SemaDeclAttr.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclAttr.cpp?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclAttr.cpp?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/lib/Sema/SemaDeclAttr.cpp (original)<br>+++ cfe/trunk/lib/Sema/SemaDeclAttr.cpp Wed Dec 18 17:30:06 2013<br>@@ -4477,9 +4477,11 @@ void Sema::PopParsingDeclaration(Parsing<br><br>      switch (diag.Kind) {<br>      case DelayedDiagnostic::Deprecation:<br>-        // Don't bother giving deprecation diagnostics if the decl is invalid.<br>+      case DelayedDiagnostic::Unavailable:<br>+        // Don't bother giving deprecation/unavailable diagnostics if<br>+        // the decl is invalid.<br>        if (!decl->isInvalidDecl())<br>-          HandleDelayedDeprecationCheck(diag, decl);<br>+          HandleDelayedAvailabilityCheck(diag, decl);<br>        break;<br><br>      case DelayedDiagnostic::Access:<br>@@ -4514,61 +4516,124 @@ static bool isDeclDeprecated(Decl *D) {<br>  return false;<br>}<br><br>+static bool isDeclUnavailable(Decl *D) {<br>+  do {<br>+    if (D->isUnavailable())<br>+      return true;<br>+    // A category implicitly has the availability of the interface.<br>+    if (const ObjCCategoryDecl *CatD = dyn_cast<ObjCCategoryDecl>(D))<br>+      return CatD->getClassInterface()->isUnavailable();<br>+  } while ((D = cast_or_null<Decl>(D->getDeclContext())));<br>+  return false;<br>+}<br>+<br>static void<br>-DoEmitDeprecationWarning(Sema &S, const NamedDecl *D, StringRef Message,<br>-                         SourceLocation Loc,<br>-                         const ObjCInterfaceDecl *UnknownObjCClass,<br>-                         const ObjCPropertyDecl *ObjCPropery) {<br>+DoEmitAvailabilityWarning(Sema &S,<br>+                          DelayedDiagnostic::DDKind K,<br>+                          Decl *Ctx,<br>+                          const NamedDecl *D,<br>+                          StringRef Message,<br>+                          SourceLocation Loc,<br>+                          const ObjCInterfaceDecl *UnknownObjCClass,<br>+                          const ObjCPropertyDecl *ObjCProperty) {<br>+<br>+  // Diagnostics for deprecated or unavailable.<br>+  unsigned diag, diag_message, diag_fwdclass_message;<br>+<br>+  // Matches 'diag::note_property_attribute' options.<br>+  unsigned property_note_select;<br>+<br>+  // Matches diag::note_availability_specified_here.<br>+  unsigned available_here_select_kind;<br>+<br>+  // Don't warn if our current context is deprecated or unavailable.<br>+  switch (K) {<br>+    case DelayedDiagnostic::Deprecation:<br>+      if (isDeclDeprecated(Ctx))<br>+        return;<br>+      diag = diag::warn_deprecated;<br>+      diag_message = diag::warn_deprecated_message;<br>+      diag_fwdclass_message = diag::warn_deprecated_fwdclass_message;<br>+      property_note_select = /* deprecated */ 0;<br>+      available_here_select_kind = /* deprecated */ 2;<br>+      break;<br>+<br>+    case DelayedDiagnostic::Unavailable:<br>+      if (isDeclUnavailable(Ctx))<br>+        return;<br>+      diag = diag::err_unavailable;<br>+      diag_message = diag::err_unavailable_message;<br>+      diag_fwdclass_message = diag::warn_unavailable_fwdclass_message;<br>+      property_note_select = /* unavailable */ 1;<br>+      available_here_select_kind = /* unavailable */ 0;<br>+      break;<br>+<br>+    default:<br>+      llvm_unreachable("Neither a deprecation or unavailable kind");<br>+  }<br>+<br>  DeclarationName Name = D->getDeclName();<br>  if (!Message.empty()) {<br>-    S.Diag(Loc, diag::warn_deprecated_message) << Name << Message;<br>-    S.Diag(D->getLocation(),<br>-           isa<ObjCMethodDecl>(D) ? diag::note_method_declared_at<br>-                                  : diag::note_previous_decl) << Name;<br>-    if (ObjCPropery)<br>-      S.Diag(ObjCPropery->getLocation(), diag::note_property_attribute)<br>-        << ObjCPropery->getDeclName() << 0;<br>+    S.Diag(Loc, diag_message) << Name << Message;<br>+//    S.Diag(D->getLocation(), diag::note_availability_specified_here)<br>+//      << D << available_here_select_kind;<br></blockquote><br>Why is this commented out?<br><br><blockquote type="cite">+    if (ObjCProperty)<br>+      S.Diag(ObjCProperty->getLocation(), diag::note_property_attribute)<br>+        << ObjCProperty->getDeclName() << property_note_select;<br>  } else if (!UnknownObjCClass) {<br>-    S.Diag(Loc, diag::warn_deprecated) << D->getDeclName();<br>-    S.Diag(D->getLocation(),<br>-           isa<ObjCMethodDecl>(D) ? diag::note_method_declared_at<br>-                                  : diag::note_previous_decl) << Name;<br>-    if (ObjCPropery)<br>-      S.Diag(ObjCPropery->getLocation(), diag::note_property_attribute)<br>-        << ObjCPropery->getDeclName() << 0;<br>+    S.Diag(Loc, diag) << Name;<br>+//    S.Diag(D->getLocation(), diag::note_availability_specified_here)<br>+//      << D << available_here_select_kind;<br></blockquote><br>This as well?<br><br><blockquote type="cite">+    if (ObjCProperty)<br>+      S.Diag(ObjCProperty->getLocation(), diag::note_property_attribute)<br>+        << ObjCProperty->getDeclName() << property_note_select;<br>  } else {<br>-    S.Diag(Loc, diag::warn_deprecated_fwdclass_message) << Name;<br>+    S.Diag(Loc, diag_fwdclass_message) << Name;<br>    S.Diag(UnknownObjCClass->getLocation(), diag::note_forward_class);<br>  }<br>-}<br><br>-void Sema::HandleDelayedDeprecationCheck(DelayedDiagnostic &DD,<br>-                                         Decl *Ctx) {<br>-  if (isDeclDeprecated(Ctx))<br>-    return;<br>+  S.Diag(D->getLocation(), diag::note_availability_specified_here)<br>+    << D << available_here_select_kind;<br>+}<br><br>+void Sema::HandleDelayedAvailabilityCheck(DelayedDiagnostic &DD,<br>+                                          Decl *Ctx) {<br>  DD.Triggered = true;<br>-  DoEmitDeprecationWarning(*this, DD.getDeprecationDecl(),<br>-                           DD.getDeprecationMessage(), DD.Loc,<br>-                           DD.getUnknownObjCClass(),<br>-                           DD.getObjCProperty());<br>+  DoEmitAvailabilityWarning(*this,<br>+                            (DelayedDiagnostic::DDKind) DD.Kind,<br>+                            Ctx,<br>+                            DD.getDeprecationDecl(),<br>+                            DD.getDeprecationMessage(),<br>+                            DD.Loc,<br>+                            DD.getUnknownObjCClass(),<br>+                            DD.getObjCProperty());<br>}<br><br>-void Sema::EmitDeprecationWarning(NamedDecl *D, StringRef Message,<br>-                                  SourceLocation Loc,<br>-                                  const ObjCInterfaceDecl *UnknownObjCClass,<br>-                                  const ObjCPropertyDecl  *ObjCProperty) {<br>+void Sema::EmitAvailabilityWarning(AvailabilityDiagnostic AD,<br>+                                   NamedDecl *D, StringRef Message,<br>+                                   SourceLocation Loc,<br>+                                   const ObjCInterfaceDecl *UnknownObjCClass,<br>+                                   const ObjCPropertyDecl  *ObjCProperty) {<br>  // Delay if we're currently parsing a declaration.<br>  if (DelayedDiagnostics.shouldDelayDiagnostics()) {<br>-    DelayedDiagnostics.add(DelayedDiagnostic::makeDeprecation(Loc, D,<br>-                                                              UnknownObjCClass,<br>-                                                              ObjCProperty,<br>-                                                              Message));<br>+    DelayedDiagnostics.add(DelayedDiagnostic::makeAvailability(AD, Loc, D,<br>+                                                               UnknownObjCClass,<br>+                                                               ObjCProperty,<br>+                                                               Message));<br>    return;<br>  }<br><br>-  // Otherwise, don't warn if our current context is deprecated.<br>-  if (isDeclDeprecated(cast<Decl>(getCurLexicalContext())))<br>-    return;<br>-  DoEmitDeprecationWarning(*this, D, Message, Loc, UnknownObjCClass, ObjCProperty);<br>+  Decl *Ctx = cast<Decl>(getCurLexicalContext());<br>+  DelayedDiagnostic::DDKind K;<br>+  switch (AD) {<br>+    case AD_Deprecation:<br>+      K = DelayedDiagnostic::Deprecation;<br>+      break;<br>+    case AD_Unavailable:<br>+      K = DelayedDiagnostic::Unavailable;<br>+      break;<br>+  }<br>+<br>+  DoEmitAvailabilityWarning(*this, K, Ctx, D, Message, Loc,<br>+                            UnknownObjCClass, ObjCProperty);<br>}<br><br>Modified: cfe/trunk/lib/Sema/SemaExpr.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)<br>+++ cfe/trunk/lib/Sema/SemaExpr.cpp Wed Dec 18 17:30:06 2013<br>@@ -112,32 +112,16 @@ static AvailabilityResult DiagnoseAvaila<br><br>    case AR_Deprecated:<br>      if (S.getCurContextAvailability() != AR_Deprecated)<br>-        S.EmitDeprecationWarning(D, Message, Loc, UnknownObjCClass, ObjCPDecl);<br>+        S.EmitAvailabilityWarning(Sema::AD_Deprecation,<br>+                                  D, Message, Loc, UnknownObjCClass, ObjCPDecl);<br>      break;<br>-<br>+<br>    case AR_Unavailable:<br>-      if (S.getCurContextAvailability() != AR_Unavailable) {<br>-        if (Message.empty()) {<br>-          if (!UnknownObjCClass) {<br>-            S.Diag(Loc, diag::err_unavailable) << D->getDeclName();<br>-            if (ObjCPDecl)<br>-              S.Diag(ObjCPDecl->getLocation(), diag::note_property_attribute)<br>-                << ObjCPDecl->getDeclName() << 1;<br>-          }<br>-          else<br>-            S.Diag(Loc, diag::warn_unavailable_fwdclass_message)<br>-              << D->getDeclName();<br>-        }<br>-        else<br>-          S.Diag(Loc, diag::err_unavailable_message)<br>-            << D->getDeclName() << Message;<br>-        S.Diag(D->getLocation(), diag::note_unavailable_here)<br>-                  << isa<FunctionDecl>(D) << false;<br>-        if (ObjCPDecl)<br>-          S.Diag(ObjCPDecl->getLocation(), diag::note_property_attribute)<br>-          << ObjCPDecl->getDeclName() << 1;<br>-      }<br>+      if (S.getCurContextAvailability() != AR_Unavailable)<br>+        S.EmitAvailabilityWarning(Sema::AD_Unavailable,<br>+                                  D, Message, Loc, UnknownObjCClass, ObjCPDecl);<br>      break;<br>+<br>    }<br>    return Result;<br>}<br>@@ -177,8 +161,8 @@ void Sema::NoteDeletedFunction(FunctionD<br>    }<br>  }<br><br>-  Diag(Decl->getLocation(), diag::note_unavailable_here)<br>-    << 1 << true;<br>+  Diag(Decl->getLocation(), diag::note_availability_specified_here)<br>+    << Decl << true;<br>}<br><br>/// \brief Determine whether a FunctionDecl was ever declared with an<br><br>Modified: cfe/trunk/test/ARCMT/checking.m<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/checking.m?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/ARCMT/checking.m?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/ARCMT/checking.m (original)<br>+++ cfe/trunk/test/ARCMT/checking.m Wed Dec 18 17:30:06 2013<br>@@ -44,9 +44,9 @@ struct UnsafeS {<br>};<br><br>@interface A : NSObject<br>-- (id)retain; // expected-note {{declaration has been explicitly marked unavailable here}}<br>-- (id)retainCount; // expected-note {{declaration has been explicitly marked unavailable here}}<br>-- (id)autorelease; // expected-note 2 {{declaration has been explicitly marked unavailable here}}<br>+- (id)retain; // expected-note {{'retain' has been explicitly marked unavailable here}}<br>+- (id)retainCount; // expected-note {{'retainCount' has been explicitly marked unavailable here}}<br>+- (id)autorelease; // expected-note 2 {{'autorelease' has been explicitly marked unavailable here}}<br>- (id)init;<br>- (oneway void)release;<br>- (void)dealloc;<br><br>Modified: cfe/trunk/test/Analysis/retain-release.m<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/retain-release.m?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/retain-release.m?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/Analysis/retain-release.m (original)<br>+++ cfe/trunk/test/Analysis/retain-release.m Wed Dec 18 17:30:06 2013<br>@@ -210,7 +210,7 @@ typedef struct IONotificationPort * IONo<br>typedef void (*IOServiceMatchingCallback)(  void * refcon,  io_iterator_t iterator );<br>io_service_t IOServiceGetMatchingService(  mach_port_t masterPort,  CFDictionaryRef matching );<br>kern_return_t IOServiceGetMatchingServices(  mach_port_t masterPort,  CFDictionaryRef matching,  io_iterator_t * existing );<br>-kern_return_t IOServiceAddNotification(  mach_port_t masterPort,  const io_name_t notificationType,  CFDictionaryRef matching,  mach_port_t wakePort,  uintptr_t reference,  io_iterator_t * notification ) __attribute__((deprecated)); // expected-note {{'IOServiceAddNotification' declared here}}<br>+kern_return_t IOServiceAddNotification(  mach_port_t masterPort,  const io_name_t notificationType,  CFDictionaryRef matching,  mach_port_t wakePort,  uintptr_t reference,  io_iterator_t * notification ) __attribute__((deprecated)); // expected-note {{'IOServiceAddNotification' has been explicitly marked deprecated here}}<br>kern_return_t IOServiceAddMatchingNotification(  IONotificationPortRef notifyPort,  const io_name_t notificationType,  CFDictionaryRef matching,         IOServiceMatchingCallback callback,         void * refCon,  io_iterator_t * notification );<br>CFMutableDictionaryRef IOServiceMatching(  const char * name );<br>CFMutableDictionaryRef IOServiceNameMatching(  const char * name );<br><br>Modified: cfe/trunk/test/CXX/dcl.dcl/dcl.attr/dcl.attr.deprecated/p1.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/dcl.dcl/dcl.attr/dcl.attr.deprecated/p1.cpp?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/dcl.dcl/dcl.attr/dcl.attr.deprecated/p1.cpp?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/CXX/dcl.dcl/dcl.attr/dcl.attr.deprecated/p1.cpp (original)<br>+++ cfe/trunk/test/CXX/dcl.dcl/dcl.attr/dcl.attr.deprecated/p1.cpp Wed Dec 18 17:30:06 2013<br>@@ -1,25 +1,25 @@<br>// RUN: %clang_cc1 -std=c++1y -verify %s<br><br>-class [[deprecated]] C {}; // expected-note {{declared here}}<br>+class [[deprecated]] C {}; // expected-note {{'C' has been explicitly marked deprecated here}}<br>C c; // expected-warning {{'C' is deprecated}}<br><br>-typedef int t [[deprecated]]; // expected-note {{declared here}}<br>+typedef int t [[deprecated]]; // expected-note {{'t' has been explicitly marked deprecated here}}<br>t x = 42; // expected-warning {{'t' is deprecated}}<br><br>-[[deprecated]] int old = 42; // expected-note {{declared here}}<br>+[[deprecated]] int old = 42; // expected-note {{'old' has been explicitly marked deprecated here}}<br>int use = old; // expected-warning {{'old' is deprecated}}<br><br>-struct S { [[deprecated]] int member = 42; } s; // expected-note {{declared here}}<br>+struct S { [[deprecated]] int member = 42; } s; // expected-note {{'member' has been explicitly marked deprecated here}}<br>int use2 = s.member; // expected-warning {{'member' is deprecated}}<br><br>-[[deprecated]] int f() { return 42; } // expected-note {{declared here}}<br>+[[deprecated]] int f() { return 42; } // expected-note {{'f' has been explicitly marked deprecated here}}<br>int use3 = f(); // expected-warning {{'f' is deprecated}}<br><br>-enum [[deprecated]] e { E }; // expected-note {{declared here}}<br>+enum [[deprecated]] e { E }; // expected-note {{'e' has been explicitly marked deprecated here}}<br>e my_enum; // expected-warning {{'e' is deprecated}}<br><br>template <typename T> class X {};<br>-template <> class [[deprecated]] X<int> {}; // expected-note {{declared here}}<br>+template <> class [[deprecated]] X<int> {}; // expected-note {{'X<int>' has been explicitly marked deprecated here}}<br>X<char> x1;<br>// FIXME: The diagnostic here could be much better by mentioning X<int>.<br>X<int> x2; // expected-warning {{'X' is deprecated}}<br><br>Modified: cfe/trunk/test/CXX/special/class.copy/p33-0x.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/special/class.copy/p33-0x.cpp?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/special/class.copy/p33-0x.cpp?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/CXX/special/class.copy/p33-0x.cpp (original)<br>+++ cfe/trunk/test/CXX/special/class.copy/p33-0x.cpp Wed Dec 18 17:30:06 2013<br>@@ -27,7 +27,7 @@ namespace PR10142 {<br>  struct X {<br>    X();<br>    X(X&&);<br>-    X(const X&) = delete; // expected-note 2{{function has been explicitly marked deleted here}}<br>+    X(const X&) = delete; // expected-note 2{{'X' has been explicitly marked deleted here}}<br>  };<br><br>  void f(int i) {<br><br>Modified: cfe/trunk/test/CXX/special/class.inhctor/p4.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/special/class.inhctor/p4.cpp?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/special/class.inhctor/p4.cpp?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/CXX/special/class.inhctor/p4.cpp (original)<br>+++ cfe/trunk/test/CXX/special/class.inhctor/p4.cpp Wed Dec 18 17:30:06 2013<br>@@ -43,8 +43,8 @@ FA fa2{X<2>{}}; // expected-error {{call<br><br>// It is deleted if the corresponding constructor [...] is deleted.<br>struct G {<br>-  G(int) = delete; // expected-note {{function has been explicitly marked deleted here}}<br>-  template<typename T> G(T*) = delete; // expected-note {{function has been explicitly marked deleted here}}<br>+  G(int) = delete; // expected-note {{'G' has been explicitly marked deleted here}}<br>+  template<typename T> G(T*) = delete; // expected-note {{'G<const char>' has been explicitly marked deleted here}}<br>};<br>struct H : G {<br>  using G::G; // expected-note 2{{deleted constructor was inherited here}}<br><br>Modified: cfe/trunk/test/CXX/special/class.temporary/p1.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/special/class.temporary/p1.cpp?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/special/class.temporary/p1.cpp?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/CXX/special/class.temporary/p1.cpp (original)<br>+++ cfe/trunk/test/CXX/special/class.temporary/p1.cpp Wed Dec 18 17:30:06 2013<br>@@ -6,7 +6,7 @@ namespace test0 {<br>    int x;<br>    int y;<br><br>-    A(const A&) = delete; // expected-note {{function has been explicitly marked deleted here}}<br>+    A(const A&) = delete; // expected-note {{'A' has been explicitly marked deleted here}}<br>  };<br><br>  void foo(...);<br><br>Modified: cfe/trunk/test/Headers/ms-intrin.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Headers/ms-intrin.cpp?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Headers/ms-intrin.cpp?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/Headers/ms-intrin.cpp (original)<br>+++ cfe/trunk/test/Headers/ms-intrin.cpp Wed Dec 18 17:30:06 2013<br>@@ -18,7 +18,7 @@ void bar() {<br>  _WriteBarrier();      // expected-warning {{is deprecated: use other intrinsics or C++11 atomics instead}}<br>  // FIXME: It'd be handy if we didn't have to hardcode the line number in<br>  // intrin.h.<br>-  // <a href="mailto:expected-note@Intrin.h">expected-note@Intrin.h</a>:754 {{declared here}}<br>-  // <a href="mailto:expected-note@Intrin.h">expected-note@Intrin.h</a>:759 {{declared here}}<br>-  // <a href="mailto:expected-note@Intrin.h">expected-note@Intrin.h</a>:764 {{declared here}}<br>+  // <a href="mailto:expected-note@Intrin.h">expected-note@Intrin.h</a>:754 {{'_ReadWriteBarrier' has been explicitly marked deprecated here}}<br>+  // <a href="mailto:expected-note@Intrin.h">expected-note@Intrin.h</a>:759 {{'_ReadBarrier' has been explicitly marked deprecated here}}<br>+  // <a href="mailto:expected-note@Intrin.h">expected-note@Intrin.h</a>:764 {{'_WriteBarrier' has been explicitly marked deprecated here}}<br>}<br><br>Modified: cfe/trunk/test/Parser/MicrosoftExtensions.c<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/MicrosoftExtensions.c?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/MicrosoftExtensions.c?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/Parser/MicrosoftExtensions.c (original)<br>+++ cfe/trunk/test/Parser/MicrosoftExtensions.c Wed Dec 18 17:30:06 2013<br>@@ -71,8 +71,8 @@ char x = FOO(a);<br>typedef enum E { e1 };<br><br><br>-enum __declspec(deprecated) E2 { i, j, k }; // expected-note {{declared here}}<br>-__declspec(deprecated) enum E3 { a, b, c } e; // expected-note {{declared here}}<br>+enum __declspec(deprecated) E2 { i, j, k }; // expected-note {{'E2' has been explicitly marked deprecated here}}<br>+__declspec(deprecated) enum E3 { a, b, c } e; // expected-note {{'e' has been explicitly marked deprecated here}}<br><br>void deprecated_enum_test(void)<br>{<br>@@ -111,7 +111,7 @@ struct __declspec(unknown(12) deprecated<br><br>struct S7 {<br>       int foo() { return 12; }<br>-       __declspec(property(get=foo) deprecated) int t; // expected-note {{declared here}}<br>+       __declspec(property(get=foo) deprecated) int t; // expected-note {{'t' has been explicitly marked deprecated here}}<br>};<br><br>/* Technically, this is legal (though it does nothing) */<br><br>Modified: cfe/trunk/test/Sema/MicrosoftExtensions.c<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/MicrosoftExtensions.c?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/MicrosoftExtensions.c?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/Sema/MicrosoftExtensions.c (original)<br>+++ cfe/trunk/test/Sema/MicrosoftExtensions.c Wed Dec 18 17:30:06 2013<br>@@ -87,11 +87,11 @@ typedef struct {<br>  AA; // expected-warning {{anonymous structs are a Microsoft extension}}<br>} BB;<br><br>-__declspec(deprecated("This is deprecated")) enum DE1 { one, two } e1; // expected-note {{'e1' declared here}}<br>-struct __declspec(deprecated) DS1 { int i; float f; }; // expected-note {{declared here}}<br>+__declspec(deprecated("This is deprecated")) enum DE1 { one, two } e1; // expected-note {{'e1' has been explicitly marked deprecated here}}<br>+struct __declspec(deprecated) DS1 { int i; float f; }; // expected-note {{'DS1' has been explicitly marked deprecated here}}<br><br>#define MY_TEXT                "This is also deprecated"<br>-__declspec(deprecated(MY_TEXT)) void Dfunc1( void ) {} // expected-note {{'Dfunc1' declared here}}<br>+__declspec(deprecated(MY_TEXT)) void Dfunc1( void ) {} // expected-note {{'Dfunc1' has been explicitly marked deprecated here}}<br><br>struct __declspec(deprecated(123)) DS2 {};     // expected-error {{'deprecated' attribute requires a string}}<br><br><br>Modified: cfe/trunk/test/Sema/attr-availability-ios.c<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-availability-ios.c?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-availability-ios.c?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/Sema/attr-availability-ios.c (original)<br>+++ cfe/trunk/test/Sema/attr-availability-ios.c Wed Dec 18 17:30:06 2013<br>@@ -1,14 +1,14 @@<br>// RUN: %clang_cc1 "-triple" "x86_64-apple-ios3.0" -fsyntax-only -verify %s<br><br>-void f0(int) __attribute__((availability(ios,introduced=2.0,deprecated=2.1))); // expected-note {{'f0' declared here}}<br>+void f0(int) __attribute__((availability(ios,introduced=2.0,deprecated=2.1))); // expected-note {{'f0' has been explicitly marked deprecated here}}<br>void f1(int) __attribute__((availability(ios,introduced=2.1)));<br>-void f2(int) __attribute__((availability(ios,introduced=2.0,deprecated=3.0))); // expected-note {{'f2' declared here}}<br>+void f2(int) __attribute__((availability(ios,introduced=2.0,deprecated=3.0))); // expected-note {{'f2' has been explicitly marked deprecated here}}<br>void f3(int) __attribute__((availability(ios,introduced=3.0)));<br>void f4(int) __attribute__((availability(macosx,introduced=10.1,deprecated=10.3,obsoleted=10.5), availability(ios,introduced=2.0,deprecated=2.1,obsoleted=3.0))); // expected-note{{explicitly marked unavailable}}<br><br>-void f5(int) __attribute__((availability(ios,introduced=2.0))) __attribute__((availability(ios,deprecated=3.0))); // expected-note {{'f5' declared here}}<br>+void f5(int) __attribute__((availability(ios,introduced=2.0))) __attribute__((availability(ios,deprecated=3.0))); // expected-note {{'f5' has been explicitly marked deprecated here}}<br>void f6(int) __attribute__((availability(ios,deprecated=3.0)));<br>-void f6(int) __attribute__((availability(ios,introduced=2.0))); // expected-note {{'f6' declared here}}<br>+void f6(int) __attribute__((availability(ios,introduced=2.0))); // expected-note {{'f6' has been explicitly marked deprecated here}}<br><br>void test() {<br>  f0(0); // expected-warning{{'f0' is deprecated: first deprecated in iOS 2.1}}<br><br>Modified: cfe/trunk/test/Sema/attr-availability-macosx.c<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-availability-macosx.c?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-availability-macosx.c?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/Sema/attr-availability-macosx.c (original)<br>+++ cfe/trunk/test/Sema/attr-availability-macosx.c Wed Dec 18 17:30:06 2013<br>@@ -2,10 +2,10 @@<br><br>void f0(int) __attribute__((availability(macosx,introduced=10.4,deprecated=10.6)));<br>void f1(int) __attribute__((availability(macosx,introduced=10.5)));<br>-void f2(int) __attribute__((availability(macosx,introduced=10.4,deprecated=10.5))); // expected-note {{'f2' declared here}}<br>+void f2(int) __attribute__((availability(macosx,introduced=10.4,deprecated=10.5))); // expected-note {{'f2' has been explicitly marked deprecated here}}<br>void f3(int) __attribute__((availability(macosx,introduced=10.6)));<br>void f4(int) __attribute__((availability(macosx,introduced=10.1,deprecated=10.3,obsoleted=10.5), availability(ios,introduced=2.0,deprecated=3.0))); // expected-note{{explicitly marked unavailable}}<br>-void f5(int) __attribute__((availability(ios,introduced=3.2), availability(macosx,unavailable))); // expected-note{{function has been explicitly marked unavailable here}}<br>+void f5(int) __attribute__((availability(ios,introduced=3.2), availability(macosx,unavailable))); // expected-note{{'f5' has been explicitly marked unavailable here}}<br><br>void test() {<br>  f0(0);<br><br>Modified: cfe/trunk/test/Sema/attr-availability.c<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-availability.c?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-availability.c?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/Sema/attr-availability.c (original)<br>+++ cfe/trunk/test/Sema/attr-availability.c Wed Dec 18 17:30:06 2013<br>@@ -8,10 +8,10 @@ void f3() __attribute__((availability(ot<br><br>// <a href="rdar://10095131">rdar://10095131</a><br>extern void<br>-ATSFontGetName(const char *oName) __attribute__((availability(macosx,introduced=8.0,deprecated=9.0, message="use CTFontCopyFullName"))); // expected-note {{'ATSFontGetName' declared here}}<br>+ATSFontGetName(const char *oName) __attribute__((availability(macosx,introduced=8.0,deprecated=9.0, message="use CTFontCopyFullName"))); // expected-note {{'ATSFontGetName' has been explicitly marked deprecated here}}<br><br>extern void<br>-ATSFontGetPostScriptName(int flags) __attribute__((availability(macosx,introduced=8.0,obsoleted=9.0, message="use ATSFontGetFullPostScriptName"))); // expected-note {{function has been explicitly marked unavailable here}}<br>+ATSFontGetPostScriptName(int flags) __attribute__((availability(macosx,introduced=8.0,obsoleted=9.0, message="use ATSFontGetFullPostScriptName"))); // expected-note {{'ATSFontGetPostScriptName' has been explicitly marked unavailable here}}<br><br>void test_10095131() {<br>  ATSFontGetName("Hello"); // expected-warning {{'ATSFontGetName' is deprecated: first deprecated in OS X 9.0 - use CTFontCopyFullName}}<br><br>Modified: cfe/trunk/test/Sema/attr-cleanup.c<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-cleanup.c?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-cleanup.c?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/Sema/attr-cleanup.c (original)<br>+++ cfe/trunk/test/Sema/attr-cleanup.c Wed Dec 18 17:30:06 2013<br>@@ -38,7 +38,7 @@ void t4() {<br>  __attribute((cleanup(c4))) void* g;<br>}<br><br>-void c5(void*) __attribute__((deprecated));  // expected-note{{'c5' declared here}}<br>+void c5(void*) __attribute__((deprecated));  // expected-note{{'c5' has been explicitly marked deprecated here}}<br>void t5() {<br>  int i __attribute__((cleanup(c5)));  // expected-warning {{'c5' is deprecated}}<br>}<br><br>Modified: cfe/trunk/test/Sema/attr-deprecated-message.c<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-deprecated-message.c?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-deprecated-message.c?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/Sema/attr-deprecated-message.c (original)<br>+++ cfe/trunk/test/Sema/attr-deprecated-message.c Wed Dec 18 17:30:06 2013<br>@@ -1,7 +1,7 @@<br>// RUN: %clang_cc1 %s -verify -fsyntax-only<br>// rdar: // 6734520<br><br>-typedef int INT1 __attribute__((deprecated("Please avoid INT1"))); // expected-note 3 {{'INT1' declared here}}<br>+typedef int INT1 __attribute__((deprecated("Please avoid INT1"))); // expected-note 3 {{'INT1' has been explicitly marked deprecated here}}<br><br>typedef INT1 INT2 __attribute__ ((__deprecated__("Please avoid INT2")));<br><br>@@ -12,16 +12,16 @@ typedef INT1 INT1b __attribute__ ((depre<br>INT1 should_be_unavailable; // expected-warning {{'INT1' is deprecated: Please avoid INT1}}<br>INT1a should_not_be_deprecated;<br><br>-INT1 f1(void) __attribute__ ((deprecated("Please avoid f1"))); // expected-note {{'f1' declared here}}<br>+INT1 f1(void) __attribute__ ((deprecated("Please avoid f1"))); // expected-note {{'f1' has been explicitly marked deprecated here}}<br>INT1 f2(void); // expected-warning {{'INT1' is deprecated: Please avoid INT1}}<br><br>-typedef enum {red, green, blue} Color __attribute__((deprecated("Please avoid Color"))); // expected-note {{'Color' declared here}}<br>+typedef enum {red, green, blue} Color __attribute__((deprecated("Please avoid Color"))); // expected-note {{'Color' has been explicitly marked deprecated here}}<br><br><br>Color c1; // expected-warning {{'Color' is deprecated: Please avoid Color}}<br><br>int g1;<br>-int g2 __attribute__ ((deprecated("Please avoid g2"))); // expected-note {{'g2' declared here}}<br>+int g2 __attribute__ ((deprecated("Please avoid g2"))); // expected-note {{'g2' has been explicitly marked deprecated here}}<br><br>int func1()<br>{<br><br>Modified: cfe/trunk/test/Sema/attr-deprecated.c<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-deprecated.c?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-deprecated.c?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/Sema/attr-deprecated.c (original)<br>+++ cfe/trunk/test/Sema/attr-deprecated.c Wed Dec 18 17:30:06 2013<br>@@ -1,10 +1,10 @@<br>// RUN: %clang_cc1 %s -verify -fsyntax-only<br><br>-int f() __attribute__((deprecated)); // expected-note 2 {{declared here}}<br>+int f() __attribute__((deprecated)); // expected-note 2 {{'f' has been explicitly marked deprecated here}}<br>void g() __attribute__((deprecated));<br>-void g(); // expected-note {{declared here}}<br>+void g(); // expected-note {{'g' has been explicitly marked deprecated here}}<br><br>-extern int var __attribute__((deprecated)); // expected-note {{declared here}}<br>+extern int var __attribute__((deprecated)); // expected-note {{'var' has been explicitly marked deprecated here}}<br><br>int a() {<br>  int (*ptr)() = f; // expected-warning {{'f' is deprecated}}<br>@@ -17,13 +17,13 @@ int a() {<br>}<br><br>// test if attributes propagate to variables<br>-extern int var; // expected-note {{declared here}}<br>+extern int var; // expected-note {{'var' has been explicitly marked deprecated here}}<br>int w() {<br>  return var; // expected-warning {{'var' is deprecated}}<br>}<br><br>int old_fn() __attribute__ ((deprecated));<br>-int old_fn(); // expected-note {{declared here}}<br>+int old_fn(); // expected-note {{'old_fn' has been explicitly marked deprecated here}}<br>int (*fn_ptr)() = old_fn; // expected-warning {{'old_fn' is deprecated}}<br><br>int old_fn() {<br>@@ -32,7 +32,7 @@ int old_fn() {<br><br><br>struct foo {<br>-  int x __attribute__((deprecated)); // expected-note 3 {{declared here}}<br>+  int x __attribute__((deprecated)); // expected-note 3 {{'x' has been explicitly marked deprecated here}}<br>};<br><br>void test1(struct foo *F) {<br>@@ -41,11 +41,11 @@ void test1(struct foo *F) {<br>  struct foo f2 = { 17 }; // expected-warning {{'x' is deprecated}}<br>}<br><br>-typedef struct foo foo_dep __attribute__((deprecated)); // expected-note 12 {{declared here}}<br>+typedef struct foo foo_dep __attribute__((deprecated)); // expected-note 12 {{'foo_dep' has been explicitly marked deprecated here}}<br>foo_dep *test2;    // expected-warning {{'foo_dep' is deprecated}}<br><br>struct __attribute__((deprecated,<br>-                      invalid_attribute)) bar_dep ;  // expected-warning {{unknown attribute 'invalid_attribute' ignored}} expected-note 2 {{declared here}}<br>+                      invalid_attribute)) bar_dep ;  // expected-warning {{unknown attribute 'invalid_attribute' ignored}} expected-note 2 {{'bar_dep' has been explicitly marked deprecated here}}<br><br>struct bar_dep *test3;   // expected-warning {{'bar_dep' is deprecated}}<br><br>@@ -102,9 +102,9 @@ foo_dep test17, // expected-warning {{'f<br>        test19;<br><br>// <a href="rdar://problem/8518751">rdar://problem/8518751</a><br>-enum __attribute__((deprecated)) Test20 { // expected-note {{declared here}}<br>-  test20_a __attribute__((deprecated)), // expected-note {{declared here}}<br>-  test20_b // expected-note {{declared here}}<br>+enum __attribute__((deprecated)) Test20 { // expected-note {{'Test20' has been explicitly marked deprecated here}}<br>+  test20_a __attribute__((deprecated)), // expected-note {{'test20_a' has been explicitly marked deprecated here}}<br>+  test20_b // expected-note {{'test20_b' has been explicitly marked deprecated here}}<br>};<br>void test20() {<br>  enum Test20 f; // expected-warning {{'Test20' is deprecated}}<br>@@ -122,5 +122,5 @@ struct test22 {<br>};<br><br>typedef int test23_ty __attribute((deprecated)); // expected-note {{previous definition is here}}<br>-typedef int test23_ty; // expected-note {{'test23_ty' declared here}} expected-warning {{redefinition of typedef 'test23_ty' is a C11 feature}}<br>+typedef int test23_ty; // expected-note {{'test23_ty' has been explicitly marked deprecated here}} expected-warning {{redefinition of typedef 'test23_ty' is a C11 feature}}<br>test23_ty test23_v; // expected-warning {{'test23_ty' is deprecated}}<br><br>Modified: cfe/trunk/test/Sema/attr-unavailable-message.c<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-unavailable-message.c?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-unavailable-message.c?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/Sema/attr-unavailable-message.c (original)<br>+++ cfe/trunk/test/Sema/attr-unavailable-message.c Wed Dec 18 17:30:06 2013<br>@@ -1,8 +1,8 @@<br>// RUN: %clang_cc1 -fsyntax-only -verify %s<br>// rdar: //6734520<br><br>-int foo(int)  __attribute__((__unavailable__("USE IFOO INSTEAD"))); // expected-note {{function has been explicitly marked unavailable here}}<br>-double dfoo(double)  __attribute__((__unavailable__("NO LONGER"))); // expected-note 2 {{function has been explicitly marked unavailable here}}<br>+int foo(int)  __attribute__((__unavailable__("USE IFOO INSTEAD"))); // expected-note {{'foo' has been explicitly marked unavailable here}}<br>+double dfoo(double)  __attribute__((__unavailable__("NO LONGER"))); // expected-note 2 {{'dfoo' has been explicitly marked unavailable here}}<br><br>void bar() __attribute__((__unavailable__)); // expected-note {{explicitly marked unavailable}}<br><br>@@ -34,13 +34,13 @@ void unavail(void) {<br><br>// <a href="rdar://10201690">rdar://10201690</a><br>enum foo {<br>-    a = 1, // expected-note {{declared here}}<br>-    b __attribute__((deprecated())) = 2, // expected-note {{declared here}}<br>+    a = 1, // expected-note {{'a' has been explicitly marked deprecated here}}<br>+    b __attribute__((deprecated())) = 2, // expected-note {{'b' has been explicitly marked deprecated here}}<br>    c = 3<br>}__attribute__((deprecated()));<br><br>-enum fee { // expected-note {{declaration has been explicitly marked unavailable here}}<br>-    r = 1, // expected-note {{declaration has been explicitly marked unavailable here}}<br>+enum fee { // expected-note {{'fee' has been explicitly marked unavailable here}}<br>+    r = 1, // expected-note {{'r' has been explicitly marked unavailable here}}<br>    s = 2,<br>    t = 3<br>}__attribute__((unavailable()));<br><br>Modified: cfe/trunk/test/Sema/typeof-use-deprecated.c<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/typeof-use-deprecated.c?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/typeof-use-deprecated.c?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/Sema/typeof-use-deprecated.c (original)<br>+++ cfe/trunk/test/Sema/typeof-use-deprecated.c Wed Dec 18 17:30:06 2013<br>@@ -1,25 +1,25 @@<br>// RUN: %clang_cc1 %s -verify -fsyntax-only<br><br>-struct s { int a; } __attribute__((deprecated)) x;  // expected-warning {{'s' is deprecated}} expected-note 2 {{'s' declared here}}<br>+struct s { int a; } __attribute__((deprecated)) x;  // expected-warning {{'s' is deprecated}} expected-note 2 {{'s' has been explicitly marked deprecated here}}<br><br>typeof(x) y;  // expected-warning {{'s' is deprecated}}<br><br>-union un{ int a; } __attribute__((deprecated)) u;  // expected-warning {{'un' is deprecated}} expected-note 2 {{'un' declared here}}<br>+union un{ int a; } __attribute__((deprecated)) u;  // expected-warning {{'un' is deprecated}} expected-note 2 {{'un' has been explicitly marked deprecated here}}<br><br>typeof(     u) z; // expected-warning {{'un' is deprecated}}<br><br>-enum E{ one} __attribute__((deprecated))  e; // expected-warning {{'E' is deprecated}} expected-note 2 {{'E' declared here}}<br>+enum E{ one} __attribute__((deprecated))  e; // expected-warning {{'E' is deprecated}} expected-note 2 {{'E' has been explicitly marked deprecated here}}<br><br>typeof( e) w; // expected-warning {{'E' is deprecated}}<br><br>-struct foo { int x; } __attribute__((deprecated)); // expected-note {{'foo' declared here}}<br>-typedef struct foo bar __attribute__((deprecated)); // expected-note {{'bar' declared here}}<br>+struct foo { int x; } __attribute__((deprecated)); // expected-note {{'foo' has been explicitly marked deprecated here}}<br>+typedef struct foo bar __attribute__((deprecated)); // expected-note {{'bar' has been explicitly marked deprecated here}}<br>bar x1;        // expected-warning {{'bar' is deprecated}}<br><br>int main() { typeof(x1) y; }   // expected-warning {{'foo' is deprecated}}<br><br>struct gorf { int x; };<br>-typedef struct gorf T __attribute__((deprecated));  // expected-note {{'T' declared here}}<br>+typedef struct gorf T __attribute__((deprecated));  // expected-note {{'T' has been explicitly marked deprecated here}}<br>T t;   // expected-warning {{'T' is deprecated}}<br>void wee() { typeof(t) y; }<br><br><br>Modified: cfe/trunk/test/SemaCXX/aggregate-initialization.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/aggregate-initialization.cpp?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/aggregate-initialization.cpp?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/SemaCXX/aggregate-initialization.cpp (original)<br>+++ cfe/trunk/test/SemaCXX/aggregate-initialization.cpp Wed Dec 18 17:30:06 2013<br>@@ -49,7 +49,7 @@ struct A {<br>  A(int);<br>  ~A();<br><br>-  A(const A&) = delete; // expected-note 2 {{function has been explicitly marked deleted here}}<br>+  A(const A&) = delete; // expected-note 2 {{'A' has been explicitly marked deleted here}}<br>};<br><br>struct B {<br><br>Modified: cfe/trunk/test/SemaCXX/attr-deprecated.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/attr-deprecated.cpp?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/attr-deprecated.cpp?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/SemaCXX/attr-deprecated.cpp (original)<br>+++ cfe/trunk/test/SemaCXX/attr-deprecated.cpp Wed Dec 18 17:30:06 2013<br>@@ -1,10 +1,10 @@<br>// RUN: %clang_cc1 %s -verify -fexceptions<br>class A {<br>-  void f() __attribute__((deprecated)); // expected-note 2 {{declared here}}<br>+  void f() __attribute__((deprecated)); // expected-note 2 {{'f' has been explicitly marked deprecated here}}<br>  void g(A* a);<br>  void h(A* a) __attribute__((deprecated));<br><br>-  int b __attribute__((deprecated)); // expected-note 2 {{declared here}}<br>+  int b __attribute__((deprecated)); // expected-note 2 {{'b' has been explicitly marked deprecated here}}<br>};<br><br>void A::g(A* a)<br>@@ -26,7 +26,7 @@ void A::h(A* a)<br>}<br><br>struct B {<br>-  virtual void f() __attribute__((deprecated)); // expected-note 4 {{declared here}}<br>+  virtual void f() __attribute__((deprecated)); // expected-note 4 {{'f' has been explicitly marked deprecated here}}<br>  void g();<br>};<br><br>@@ -68,20 +68,20 @@ void f(D* d) {<br><br>// Overloaded namespace members.<br>namespace test1 {<br>-  void foo(int) __attribute__((deprecated)); // expected-note {{declared here}}<br>+  void foo(int) __attribute__((deprecated)); // expected-note {{'foo' has been explicitly marked deprecated here}}<br>  void test1() { foo(10); } // expected-warning {{deprecated}}<br>-  void foo(short) __attribute__((deprecated)); // expected-note {{declared here}}<br>+  void foo(short) __attribute__((deprecated)); // expected-note {{'foo' has been explicitly marked deprecated here}}<br>  void test2(short s) { foo(s); } // expected-warning {{deprecated}}<br>  void foo(long);<br>  void test3(long l) { foo(l); }<br>  struct A {<br>-    friend void foo(A*) __attribute__((deprecated)); // expected-note {{declared here}}<br>+    friend void foo(A*) __attribute__((deprecated)); // expected-note {{'foo' has been explicitly marked deprecated here}}<br>  };<br>  void test4(A *a) { foo(a); } // expected-warning {{deprecated}}<br><br>  namespace ns {<br>    struct Foo {};<br>-    void foo(const Foo &f) __attribute__((deprecated)); // expected-note {{declared here}}<br>+    void foo(const Foo &f) __attribute__((deprecated)); // expected-note {{'foo' has been explicitly marked deprecated here}}<br>  }<br>  void test5() {<br>    foo(ns::Foo()); // expected-warning {{deprecated}}<br>@@ -91,9 +91,9 @@ namespace test1 {<br>// Overloaded class members.<br>namespace test2 {<br>  struct A {<br>-    void foo(int) __attribute__((deprecated)); // expected-note 2 {{declared here}}<br>+    void foo(int) __attribute__((deprecated)); // expected-note 2 {{'foo' has been explicitly marked deprecated here}}<br>    void foo(long);<br>-    static void bar(int) __attribute__((deprecated)); // expected-note 3 {{declared here}}<br>+    static void bar(int) __attribute__((deprecated)); // expected-note 3 {{'bar' has been explicitly marked deprecated here}}<br>    static void bar(long);<br><br>    void test2(int i, long l);<br>@@ -120,12 +120,12 @@ namespace test2 {<br>namespace test3 {<br>  struct A {<br>    void operator*(const A &);<br>-    void operator*(int) __attribute__((deprecated)); // expected-note {{declared here}}<br>+    void operator*(int) __attribute__((deprecated)); // expected-note {{'operator*' has been explicitly marked deprecated here}}<br>    void operator-(const A &) const;<br>  };<br>  void operator+(const A &, const A &);<br>-  void operator+(const A &, int) __attribute__((deprecated)); // expected-note {{declared here}}<br>-  void operator-(const A &, int) __attribute__((deprecated)); // expected-note {{declared here}}<br>+  void operator+(const A &, int) __attribute__((deprecated)); // expected-note {{'operator+' has been explicitly marked deprecated here}}<br>+  void operator-(const A &, int) __attribute__((deprecated)); // expected-note {{'operator-' has been explicitly marked deprecated here}}<br><br>  void test() {<br>    A a, b;<br>@@ -143,9 +143,9 @@ namespace test4 {<br>  struct A {<br>    typedef void (*intfn)(int);<br>    typedef void (*unintfn)(unsigned);<br>-    operator intfn() __attribute__((deprecated)); // expected-note {{declared here}}<br>+    operator intfn() __attribute__((deprecated)); // expected-note {{'operator void (*)(int)' has been explicitly marked deprecated here}}<br>    operator unintfn();<br>-    void operator ()(A &) __attribute__((deprecated)); // expected-note {{declared here}}<br>+    void operator ()(A &) __attribute__((deprecated)); // expected-note {{'operator()' has been explicitly marked deprecated here}}<br>    void operator ()(const A &);<br>  };<br><br>@@ -163,7 +163,7 @@ namespace test4 {<br><br>namespace test5 {<br>  struct A {<br>-    operator int() __attribute__((deprecated)); // expected-note 3 {{declared here}}<br>+    operator int() __attribute__((deprecated)); // expected-note 3 {{'operator int' has been explicitly marked deprecated here}}<br>    operator long();<br>  };<br>  void test1(A a) {<br>@@ -193,8 +193,8 @@ namespace test5 {<br><br>// <a href="rdar://problem/8518751">rdar://problem/8518751</a><br>namespace test6 {<br>-  enum __attribute__((deprecated)) A { // expected-note {{declared here}}<br>-    a0 // expected-note {{declared here}}<br>+  enum __attribute__((deprecated)) A { // expected-note {{'A' has been explicitly marked deprecated here}}<br>+    a0 // expected-note {{'a0' has been explicitly marked deprecated here}}<br>  };<br>  void testA() {<br>    A x; // expected-warning {{'A' is deprecated}}<br>@@ -202,7 +202,7 @@ namespace test6 {<br>  }<br><br>  enum B {<br>-    b0 __attribute__((deprecated)), // expected-note {{declared here}}<br>+    b0 __attribute__((deprecated)), // expected-note {{'b0' has been explicitly marked deprecated here}}<br>    b1<br>  };<br>  void testB() {<br>@@ -212,8 +212,8 @@ namespace test6 {<br>  }<br><br>  template <class T> struct C {<br>-    enum __attribute__((deprecated)) Enum { // expected-note {{declared here}}<br>-      c0 // expected-note {{declared here}}<br>+    enum __attribute__((deprecated)) Enum { // expected-note {{'Enum' has been explicitly marked deprecated here}}<br>+      c0 // expected-note {{'c0' has been explicitly marked deprecated here}}<br>    };<br>  };<br>  void testC() {<br>@@ -224,7 +224,7 @@ namespace test6 {<br>  template <class T> struct D {<br>    enum Enum {<br>      d0,<br>-      d1 __attribute__((deprecated)), // expected-note {{declared here}}<br>+      d1 __attribute__((deprecated)), // expected-note {{'d1' has been explicitly marked deprecated here}}<br>    };<br>  };<br>  void testD() {<br>@@ -236,8 +236,8 @@ namespace test6 {<br><br>namespace test7 {<br>  struct X {<br>-    void* operator new(typeof(sizeof(void*))) __attribute__((deprecated));  // expected-note{{'operator new' declared here}}<br>-    void operator delete(void *) __attribute__((deprecated));  // expected-note{{'operator delete' declared here}}<br>+    void* operator new(typeof(sizeof(void*))) __attribute__((deprecated));  // expected-note{{'operator new' has been explicitly marked deprecated here}}<br>+    void operator delete(void *) __attribute__((deprecated));  // expected-note{{'operator delete' has been explicitly marked deprecated here}}<br>  };<br><br>  void test() {<br>@@ -247,6 +247,6 @@ namespace test7 {<br><br>// <a href="rdar://problem/15044218">rdar://problem/15044218</a><br>typedef struct TDS {<br>-} TDS __attribute__((deprecated)); // expected-note {{'TDS' declared here}}<br>+} TDS __attribute__((deprecated)); // expected-note {{'TDS' has been explicitly marked deprecated here}}<br>TDS tds; // expected-warning {{'TDS' is deprecated}}<br>struct TDS tds2; // no warning, attribute only applies to the typedef.<br><br>Modified: cfe/trunk/test/SemaCXX/attr-unavailable.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/attr-unavailable.cpp?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/attr-unavailable.cpp?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/SemaCXX/attr-unavailable.cpp (original)<br>+++ cfe/trunk/test/SemaCXX/attr-unavailable.cpp Wed Dec 18 17:30:06 2013<br>@@ -3,7 +3,7 @@<br>int &foo(int); // expected-note {{candidate}}<br>double &foo(double); // expected-note {{candidate}}<br>void foo(...) __attribute__((__unavailable__)); // expected-note {{candidate function}} \<br>-// expected-note{{function has been explicitly marked unavailable here}}<br>+// expected-note{{'foo' has been explicitly marked unavailable here}}<br><br>void bar(...) __attribute__((__unavailable__)); // expected-note 2{{explicitly marked unavailable}}<br><br>@@ -37,3 +37,22 @@ void unavail(short* sp) {<br>  foo(sp);<br>  foo();<br>}<br>+<br>+// Show that delayed processing of 'unavailable' is the same<br>+// delayed process for 'deprecated'.<br>+// <<a href="rdar://problem/12241361">rdar://problem/12241361</a>> and <<a href="rdar://problem/15584219">rdar://problem/15584219</a>><br>+enum DeprecatedEnum { DE_A, DE_B } __attribute__((deprecated)); // expected-note {{'DeprecatedEnum' has been explicitly marked deprecated here}}<br>+__attribute__((deprecated)) typedef enum DeprecatedEnum DeprecatedEnum;<br>+typedef enum DeprecatedEnum AnotherDeprecatedEnum; // expected-warning {{'DeprecatedEnum' is deprecated}}<br>+<br>+__attribute__((deprecated))<br>+DeprecatedEnum testDeprecated(DeprecatedEnum X) { return X; }<br>+<br>+<br>+enum UnavailableEnum { UE_A, UE_B } __attribute__((unavailable)); // expected-note {{'UnavailableEnum' has been explicitly marked unavailable here}}<br>+__attribute__((unavailable)) typedef enum UnavailableEnum UnavailableEnum;<br>+typedef enum UnavailableEnum AnotherUnavailableEnum; // expected-error {{'UnavailableEnum' is unavailable}}<br>+<br>+<br>+__attribute__((unavailable))<br>+UnavailableEnum testUnavailable(UnavailableEnum X) { return X; }<br><br>Modified: cfe/trunk/test/SemaCXX/cxx0x-delegating-ctors.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/cxx0x-delegating-ctors.cpp?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/cxx0x-delegating-ctors.cpp?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/SemaCXX/cxx0x-delegating-ctors.cpp (original)<br>+++ cfe/trunk/test/SemaCXX/cxx0x-delegating-ctors.cpp Wed Dec 18 17:30:06 2013<br>@@ -43,7 +43,7 @@ foo::foo (void*) : foo(4.0f) {<br>}<br><br>struct deleted_dtor {<br>-  ~deleted_dtor() = delete; // expected-note{{function has been explicitly marked deleted here}}<br>+  ~deleted_dtor() = delete; // expected-note{{'~deleted_dtor' has been explicitly marked deleted here}}<br>  deleted_dtor();<br>  deleted_dtor(int) : deleted_dtor() // expected-error{{attempt to use a deleted function}}<br>  {}<br><br>Modified: cfe/trunk/test/SemaCXX/deleted-function.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/deleted-function.cpp?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/deleted-function.cpp?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/SemaCXX/deleted-function.cpp (original)<br>+++ cfe/trunk/test/SemaCXX/deleted-function.cpp Wed Dec 18 17:30:06 2013<br>@@ -15,9 +15,9 @@ void ov(int) {} // expected-note {{candi<br>void ov(double) = delete; // expected-note {{candidate function has been explicitly deleted}}<br><br>struct WithDel {<br>-  WithDel() = delete; // expected-note {{function has been explicitly marked deleted here}}<br>-  void fn() = delete; // expected-note {{function has been explicitly marked deleted here}}<br>-  operator int() = delete; // expected-note {{function has been explicitly marked deleted here}}<br>+  WithDel() = delete; // expected-note {{'WithDel' has been explicitly marked deleted here}}<br>+  void fn() = delete; // expected-note {{'fn' has been explicitly marked deleted here}}<br>+  operator int() = delete; // expected-note {{'operator int' has been explicitly marked deleted here}}<br>  void operator +(int) = delete;<br><br>  int i = delete; // expected-error {{only functions can have deleted definitions}}<br><br>Modified: cfe/trunk/test/SemaCXX/for-range-dereference.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/for-range-dereference.cpp?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/for-range-dereference.cpp?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/SemaCXX/for-range-dereference.cpp (original)<br>+++ cfe/trunk/test/SemaCXX/for-range-dereference.cpp Wed Dec 18 17:30:06 2013<br>@@ -11,7 +11,7 @@ struct NoBegin {<br><br>struct DeletedEnd : public T {<br>  Data *begin();<br>-  Data *end() = delete; //expected-note {{function has been explicitly marked deleted here}}<br>+  Data *end() = delete; //expected-note {{'end' has been explicitly marked deleted here}}<br>};<br><br>struct DeletedADLBegin { };<br><br>Modified: cfe/trunk/test/SemaCXX/microsoft-dtor-lookup-cxx11.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/microsoft-dtor-lookup-cxx11.cpp?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/microsoft-dtor-lookup-cxx11.cpp?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/SemaCXX/microsoft-dtor-lookup-cxx11.cpp (original)<br>+++ cfe/trunk/test/SemaCXX/microsoft-dtor-lookup-cxx11.cpp Wed Dec 18 17:30:06 2013<br>@@ -1,7 +1,7 @@<br>// RUN: %clang_cc1 -triple i686-pc-win32 -cxx-abi microsoft -std=c++11 -verify %s<br><br>struct S {<br>-  virtual ~S() = delete; // expected-note {{function has been explicitly marked deleted here}}<br>+  virtual ~S() = delete; // expected-note {{'~S' has been explicitly marked deleted here}}<br>  void operator delete(void*, int);<br>  void operator delete(void*, double);<br>} s; // expected-error {{attempt to use a deleted function}}<br><br>Modified: cfe/trunk/test/SemaCXX/rval-references-examples.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/rval-references-examples.cpp?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/rval-references-examples.cpp?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/SemaCXX/rval-references-examples.cpp (original)<br>+++ cfe/trunk/test/SemaCXX/rval-references-examples.cpp Wed Dec 18 17:30:06 2013<br>@@ -4,7 +4,7 @@ template<typename T><br>class unique_ptr {<br>  T *ptr;<br><br>-  unique_ptr(const unique_ptr&) = delete; // expected-note 3{{function has been explicitly marked deleted here}}<br>+  unique_ptr(const unique_ptr&) = delete; // expected-note 3{{'unique_ptr' has been explicitly marked deleted here}}<br>  unique_ptr &operator=(const unique_ptr&) = delete; // expected-note{{candidate function has been explicitly deleted}}<br>public:<br>  unique_ptr() : ptr(0) { }<br><br>Modified: cfe/trunk/test/SemaObjC/arc-unavailable-system-function.m<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/arc-unavailable-system-function.m?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/arc-unavailable-system-function.m?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/SemaObjC/arc-unavailable-system-function.m (original)<br>+++ cfe/trunk/test/SemaObjC/arc-unavailable-system-function.m Wed Dec 18 17:30:06 2013<br>@@ -3,7 +3,7 @@<br><br># 1 "<command line>"<br># 1 "/System/Library/Frameworks/Foundation.framework/Headers/Foundation.h" 1 3<br>-id * foo(); // expected-note {{function has been explicitly marked unavailable here}}<br>+id * foo(); // expected-note {{'foo' has been explicitly marked unavailable here}}<br><br># 1 "arc-unavailable-system-function.m" 2<br>void ret() {<br><br>Modified: cfe/trunk/test/SemaObjC/attr-availability.m<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/attr-availability.m?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/attr-availability.m?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/SemaObjC/attr-availability.m (original)<br>+++ cfe/trunk/test/SemaObjC/attr-availability.m Wed Dec 18 17:30:06 2013<br>@@ -1,11 +1,11 @@<br>// RUN: %clang_cc1 -triple x86_64-apple-darwin9.0.0 -fsyntax-only -verify %s<br><br>@protocol P<br>-- (void)proto_method __attribute__((availability(macosx,introduced=10.1,deprecated=10.2))); // expected-note 2 {{method 'proto_method' declared here}}<br>+- (void)proto_method __attribute__((availability(macosx,introduced=10.1,deprecated=10.2))); // expected-note 2 {{'proto_method' has been explicitly marked deprecated here}}<br>@end<br><br>@interface A <P><br>-- (void)method __attribute__((availability(macosx,introduced=10.1,deprecated=10.2))); // expected-note {{method 'method' declared here}}<br>+- (void)method __attribute__((availability(macosx,introduced=10.1,deprecated=10.2))); // expected-note {{'method' has been explicitly marked deprecated here}}<br><br>- (void)overridden __attribute__((availability(macosx,introduced=10.3))); // expected-note{{overridden method is here}}<br>- (void)overridden2 __attribute__((availability(macosx,introduced=10.3)));<br>@@ -37,7 +37,7 @@ void f(A *a, B *b) {<br>// using a deprecated method when that method is re-implemented in a<br>// subclass where the redeclared method is not deprecated.<br>@interface C<br>-- (void) method __attribute__((availability(macosx,introduced=10.1,deprecated=10.2))); // expected-note {{method 'method' declared here}}<br>+- (void) method __attribute__((availability(macosx,introduced=10.1,deprecated=10.2))); // expected-note {{'method' has been explicitly marked deprecated here}}<br>@end<br><br>@interface D : C<br><br>Modified: cfe/trunk/test/SemaObjC/attr-deprecated.m<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/attr-deprecated.m?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/attr-deprecated.m?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/SemaObjC/attr-deprecated.m (original)<br>+++ cfe/trunk/test/SemaObjC/attr-deprecated.m Wed Dec 18 17:30:06 2013<br>@@ -2,10 +2,10 @@<br>// RUN: %clang_cc1 -x objective-c++ -fsyntax-only -verify -Wno-objc-root-class %s<br><br>@interface A {<br>-  int X __attribute__((deprecated)); // expected-note 2 {{declared here}}<br>+  int X __attribute__((deprecated)); // expected-note 2 {{'X' has been explicitly marked deprecated here}}<br>}<br>-+ (void)F __attribute__((deprecated)); // expected-note 2 {{declared here}}<br>-- (void)f __attribute__((deprecated)); // expected-note 4 {{declared here}}<br>++ (void)F __attribute__((deprecated)); // expected-note 2 {{'F' has been explicitly marked deprecated here}}<br>+- (void)f __attribute__((deprecated)); // expected-note 4 {{'f' has been explicitly marked deprecated here}}<br>@end<br><br>@implementation A<br>@@ -43,7 +43,7 @@<br>@end<br><br>@protocol P<br>-- (void)p __attribute__((deprecated)); // expected-note {{declared here}}<br>+- (void)p __attribute__((deprecated)); // expected-note {{'p' has been explicitly marked deprecated here}}<br>@end<br><br>void t1(A *a)<br>@@ -72,7 +72,7 @@ void t4(Class c)<br><br>@interface Bar<br><br>-@property (assign, setter = MySetter:) int FooBar __attribute__ ((deprecated)); // expected-note 2 {{declared here}}<br>+@property (assign, setter = MySetter:) int FooBar __attribute__ ((deprecated)); // expected-note 2 {{'FooBar' has been explicitly marked deprecated here}}<br>- (void) MySetter : (int) value;<br>@end<br><br>@@ -84,7 +84,7 @@ int t5() {<br><br><br>__attribute ((deprecated))<br>-@interface DEPRECATED { // expected-note 2 {{declared here}}<br>+@interface DEPRECATED { // expected-note 2 {{'DEPRECATED' has been explicitly marked deprecated here}}<br>  @public int ivar;<br>  DEPRECATED *ivar2; // no warning.<br>}<br>@@ -108,8 +108,8 @@ __attribute ((deprecated))<br><br><br>@interface Test2<br>-@property int test2 __attribute__((deprecated)); // expected-note 4 {{declared here}} \<br>-                                                // expected-note 2 {{property 'test2' is declared deprecated here}}<br>+@property int test2 __attribute__((deprecated)); // expected-note 2 {{property 'test2' is declared deprecated here}} expected-note 3 {{'test2' has been explicitly marked deprecated here}} \<br>+                                                // expected-note {{'setTest2:' has been explicitly marked deprecated here}}<br>@end<br><br>void test(Test2 *foo) {<br>@@ -127,7 +127,7 @@ __attribute__((deprecated))<br><br>typedef struct {<br>       int x;<br>-} footype __attribute((deprecated)); // expected-note 2 {{declared here}}<br>+} footype __attribute((deprecated)); // expected-note 2 {{'footype' has been explicitly marked deprecated here}}<br><br>@interface foo {<br>       footype a; // expected-warning {{'footype' is deprecated}}<br>@@ -142,7 +142,7 @@ typedef struct {<br>+(void)cmeth;<br>@end<br><br>-typedef NewI DeprI __attribute__((deprecated("blah"))); // expected-note 4 {{'DeprI' declared here}}<br>+typedef NewI DeprI __attribute__((deprecated("blah"))); // expected-note 4 {{'DeprI' has been explicitly marked deprecated here}}<br><br>@interface SI : DeprI // expected-warning {{'DeprI' is deprecated: blah}}<br>-(DeprI*)meth; // expected-warning {{'DeprI' is deprecated: blah}}<br><br>Modified: cfe/trunk/test/SemaObjC/class-unavail-warning.m<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/class-unavail-warning.m?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/class-unavail-warning.m?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/SemaObjC/class-unavail-warning.m (original)<br>+++ cfe/trunk/test/SemaObjC/class-unavail-warning.m Wed Dec 18 17:30:06 2013<br>@@ -2,7 +2,7 @@<br>// <a href="rdar://9092208">rdar://9092208</a><br><br>__attribute__((unavailable("not available")))<br>-@interface MyClass { // expected-note 8 {{declaration has been explicitly marked unavailable here}}<br>+@interface MyClass { // expected-note 8 {{'MyClass' has been explicitly marked unavailable here}}<br>@public<br>    void *_test;<br>    MyClass *ivar; // no error.<br><br>Modified: cfe/trunk/test/SemaObjC/property-deprecated-warning.m<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/property-deprecated-warning.m?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/property-deprecated-warning.m?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/SemaObjC/property-deprecated-warning.m (original)<br>+++ cfe/trunk/test/SemaObjC/property-deprecated-warning.m Wed Dec 18 17:30:06 2013<br>@@ -5,7 +5,7 @@<br>typedef signed char BOOL;<br><br>@protocol P<br>-@property(nonatomic,assign) id ptarget __attribute__((availability(ios,introduced=2.0,deprecated=3.0))); // expected-note {{property 'ptarget' is declared deprecated here}} expected-note {{method 'ptarget' declared here}}<br>+@property(nonatomic,assign) id ptarget __attribute__((availability(ios,introduced=2.0,deprecated=3.0))); // expected-note {{property 'ptarget' is declared deprecated here}} expected-note {{'ptarget' has been explicitly marked deprecated here}}<br>@end<br><br>@protocol P1<P><br>@@ -14,7 +14,7 @@ typedef signed char BOOL;<br><br><br>@interface UITableViewCell<P1><br>-@property(nonatomic,assign) id target __attribute__((availability(ios,introduced=2.0,deprecated=3.0))); // expected-note {{property 'target' is declared deprecated here}} expected-note {{method 'setTarget:' declared here}}<br>+@property(nonatomic,assign) id target __attribute__((availability(ios,introduced=2.0,deprecated=3.0))); // expected-note {{property 'target' is declared deprecated here}} expected-note {{'setTarget:' has been explicitly marked deprecated here}}<br>@end<br><br>@interface PSTableCell : UITableViewCell<br>@@ -22,9 +22,9 @@ typedef signed char BOOL;<br>@end<br><br>@interface UITableViewCell(UIDeprecated)<br>-@property(nonatomic,assign) id dep_target  __attribute__((availability(ios,introduced=2.0,deprecated=3.0))); // expected-note 2 {{method 'dep_target' declared here}} \<br>+@property(nonatomic,assign) id dep_target  __attribute__((availability(ios,introduced=2.0,deprecated=3.0))); // expected-note 2 {{'dep_target' has been explicitly marked deprecated here}} \<br>                                                                                    // expected-note 4 {{property 'dep_target' is declared deprecated here}} \<br>-                                                                                    // expected-note 2 {{method 'setDep_target:' declared here}}<br>+                                                                                    // expected-note 2 {{'setDep_target:' has been explicitly marked deprecated here}}<br>@end<br><br>@implementation PSTableCell<br>@@ -55,9 +55,9 @@ typedef signed char BOOL;<br><br><br>@interface CustomAccessorNames<br>-@property(getter=isEnabled,assign) BOOL enabled __attribute__((availability(ios,introduced=2.0,deprecated=3.0))); // expected-note {{method 'isEnabled' declared here}} expected-note {{property 'enabled' is declared deprecated here}}<br>+@property(getter=isEnabled,assign) BOOL enabled __attribute__((availability(ios,introduced=2.0,deprecated=3.0))); // expected-note {{'isEnabled' has been explicitly marked deprecated here}} expected-note {{property 'enabled' is declared deprecated here}}<br><br>-@property(setter=setNewDelegate:,assign) id delegate __attribute__((availability(ios,introduced=2.0,deprecated=3.0))); // expected-note {{method 'setNewDelegate:' declared here}} expected-note {{property 'delegate' is declared deprecated here}}<br>+@property(setter=setNewDelegate:,assign) id delegate __attribute__((availability(ios,introduced=2.0,deprecated=3.0))); // expected-note {{'setNewDelegate:' has been explicitly marked deprecated here}} expected-note {{property 'delegate' is declared deprecated here}}<br>@end<br><br>void testCustomAccessorNames(CustomAccessorNames *obj) {<br><br>Modified: cfe/trunk/test/SemaObjC/property-noninherited-availability-attr.m<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/property-noninherited-availability-attr.m?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/property-noninherited-availability-attr.m?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/SemaObjC/property-noninherited-availability-attr.m (original)<br>+++ cfe/trunk/test/SemaObjC/property-noninherited-availability-attr.m Wed Dec 18 17:30:06 2013<br>@@ -5,13 +5,12 @@<br><br>@interface NSObject @end<br>@protocol myProtocol<br>-@property int myProtocolProperty __attribute__((availability(macosx,introduced=10.7,deprecated=10.8))); // expected-note {{method 'myProtocolProperty' declared here}} \<br>+@property int myProtocolProperty __attribute__((availability(macosx,introduced=10.7,deprecated=10.8))); // expected-note {{'myProtocolProperty' has been explicitly marked deprecated here}} \<br>                                                                                                        // expected-note {{property 'myProtocolProperty' is declared deprecated here}}<br>@end<br><br>@interface Foo : NSObject<br>-@property int myProperty __attribute__((availability(macosx,introduced=10.7,deprecated=10.8)));  // expected-note {{'myProperty' declared here}} \<br>-                                                               // expected-note {{method 'myProperty' declared here}} \<br>+@property int myProperty __attribute__((availability(macosx,introduced=10.7,deprecated=10.8)));  // expected-note 2 {{'myProperty' has been explicitly marked deprecated here}} \<br>                                                               // expected-note {{property 'myProperty' is declared deprecated here}}<br>@end<br><br><br>Modified: cfe/trunk/test/SemaObjC/protocol-attribute.m<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/protocol-attribute.m?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/protocol-attribute.m?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/SemaObjC/protocol-attribute.m (original)<br>+++ cfe/trunk/test/SemaObjC/protocol-attribute.m Wed Dec 18 17:30:06 2013<br>@@ -6,7 +6,7 @@ __attribute ((unavailable))<br>Class <FwProto> cFw = 0;  // expected-error {{'FwProto' is unavailable}}<br><br><br>-__attribute ((deprecated)) @protocol MyProto1 // expected-note 7 {{declared here}}<br>+__attribute ((deprecated)) @protocol MyProto1 // expected-note 7 {{'MyProto1' has been explicitly marked deprecated here}}<br>@end<br><br>@protocol Proto2  <MyProto1>  // expected-warning {{'MyProto1' is deprecated}}<br><br>Modified: cfe/trunk/test/SemaObjC/special-dep-unavail-warning.m<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/special-dep-unavail-warning.m?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/special-dep-unavail-warning.m?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/SemaObjC/special-dep-unavail-warning.m (original)<br>+++ cfe/trunk/test/SemaObjC/special-dep-unavail-warning.m Wed Dec 18 17:30:06 2013<br>@@ -4,30 +4,30 @@<br>@interface B<br>- (void) depInA;<br>- (void) unavailMeth __attribute__((unavailable)); // expected-note {{has been explicitly marked unavailable here}}<br>-- (void) depInA1 __attribute__((deprecated));<br>+- (void) depInA1 __attribute__((deprecated)); // expected-note {{'depInA1' has been explicitly marked deprecated here}}<br>- (void) unavailMeth1;<br>-- (void) depInA2 __attribute__((deprecated));<br>+- (void) depInA2 __attribute__((deprecated)); // expected-note {{'depInA2' has been explicitly marked deprecated here}}<br>- (void) unavailMeth2 __attribute__((unavailable)); // expected-note {{has been explicitly marked unavailable here}}<br>- (void) depunavailInA;<br>- (void) depunavailInA1 __attribute__((deprecated)) __attribute__((unavailable)); // expected-note {{has been explicitly marked unavailable here}}<br>-- (void)FuzzyMeth __attribute__((deprecated));<br>+- (void)FuzzyMeth __attribute__((deprecated)); // expected-note {{'FuzzyMeth' has been explicitly marked deprecated here}}<br>- (void)FuzzyMeth1 __attribute__((unavailable));<br>@end<br><br>@interface A<br>- (void) unavailMeth1 __attribute__((unavailable)); // expected-note {{has been explicitly marked unavailable here}}<br>-- (void) depInA __attribute__((deprecated));<br>+- (void) depInA __attribute__((deprecated)); // expected-note {{'depInA' has been explicitly marked deprecated here}}<br>- (void) depInA2 __attribute__((deprecated));<br>- (void) depInA1;<br>- (void) unavailMeth2 __attribute__((unavailable));<br>- (void) depunavailInA __attribute__((deprecated)) __attribute__((unavailable)); // expected-note {{has been explicitly marked unavailable here}}<br>- (void) depunavailInA1;<br>- (void)FuzzyMeth __attribute__((unavailable));<br>-- (void)FuzzyMeth1 __attribute__((deprecated));<br>+- (void)FuzzyMeth1 __attribute__((deprecated)); // expected-note {{'FuzzyMeth1' has been explicitly marked deprecated here}}<br>@end<br><br><br>-@class C;      // expected-note 5 {{forward declaration of class here}}<br>+@class C;      // expected-note 10 {{forward declaration of class here}}<br><br>void test(C *c) {<br>  [c depInA]; // expected-warning {{'depInA' maybe deprecated because receiver type is unknown}}<br>@@ -45,7 +45,7 @@ void test(C *c) {<br><br>// <a href="rdar://10268422">rdar://10268422</a><br>__attribute ((deprecated))<br>-@interface DEPRECATED // expected-note {{declared here}}<br>+@interface DEPRECATED // expected-note {{'DEPRECATED' has been explicitly marked deprecated here}}<br>+(id)new;<br>@end<br><br><br>Modified: cfe/trunk/test/SemaObjC/warn-deprecated-implementations.m<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/warn-deprecated-implementations.m?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/warn-deprecated-implementations.m?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/SemaObjC/warn-deprecated-implementations.m (original)<br>+++ cfe/trunk/test/SemaObjC/warn-deprecated-implementations.m Wed Dec 18 17:30:06 2013<br>@@ -29,7 +29,7 @@<br>@end<br><br>__attribute__((deprecated))<br>-@interface CL // expected-note 2 {{class declared here}} // expected-note 2 {{declared here}}<br>+@interface CL // expected-note 2 {{class declared here}} // expected-note 2 {{'CL' has been explicitly marked deprecated here}}<br>@end<br><br>@implementation CL // expected-warning {{Implementing deprecated class}}<br><br>Modified: cfe/trunk/test/SemaObjC/warn-forward-class-attr-deprecated.m<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/warn-forward-class-attr-deprecated.m?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/warn-forward-class-attr-deprecated.m?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/SemaObjC/warn-forward-class-attr-deprecated.m (original)<br>+++ cfe/trunk/test/SemaObjC/warn-forward-class-attr-deprecated.m Wed Dec 18 17:30:06 2013<br>@@ -4,7 +4,7 @@<br>@class ABGroupImportFilesScope; // expected-note {{forward declaration of class here}}<br><br>@interface I1<br>-- (id) filenames __attribute__((deprecated));<br>+- (id) filenames __attribute__((deprecated)); // expected-note {{'filenames' has been explicitly marked deprecated here}}<br>@end<br><br>@interface I2<br><br>Modified: cfe/trunk/test/SemaObjC/warn-protocol-method-deprecated.m<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/warn-protocol-method-deprecated.m?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjC/warn-protocol-method-deprecated.m?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/SemaObjC/warn-protocol-method-deprecated.m (original)<br>+++ cfe/trunk/test/SemaObjC/warn-protocol-method-deprecated.m Wed Dec 18 17:30:06 2013<br>@@ -3,7 +3,7 @@<br><br>@protocol TestProtocol<br>- (void)newProtocolMethod;<br>-- (void)deprecatedProtocolMethod __attribute__((deprecated)); // expected-note 2 {{method 'deprecatedProtocolMethod' declared here}}<br>+- (void)deprecatedProtocolMethod __attribute__((deprecated)); // expected-note 2 {{'deprecatedProtocolMethod' has been explicitly marked deprecated here}}<br>@end<br><br>@interface NSObject @end<br>@@ -11,7 +11,7 @@<br>@interface TestClass : NSObject <TestProtocol><br><br>- (void)newInstanceMethod;<br>-- (void)deprecatedInstanceMethod __attribute__((deprecated)); // expected-note {{method 'deprecatedInstanceMethod' declared here}}<br>+- (void)deprecatedInstanceMethod __attribute__((deprecated)); // expected-note {{'deprecatedInstanceMethod' has been explicitly marked deprecated here}}<br><br>@end<br><br><br>Modified: cfe/trunk/test/SemaObjCXX/arc-system-header.mm<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjCXX/arc-system-header.mm?rev=197627&r1=197626&r2=197627&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaObjCXX/arc-system-header.mm?rev=197627&r1=197626&r2=197627&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/SemaObjCXX/arc-system-header.mm (original)<br>+++ cfe/trunk/test/SemaObjCXX/arc-system-header.mm Wed Dec 18 17:30:06 2013<br>@@ -6,4 +6,4 @@ void f(A* a) {<br>  a->data.void_ptr = 0;<br>  a->data.a_b.b = 0; // expected-error{{'a_b' is unavailable: this system field has retaining ownership}}<br>}<br>-// <a href="mailto:expected-note@arc-system-header.h">expected-note@arc-system-header.h</a>:10{{declaration has been explicitly marked unavailable here}}<br>+// <a href="mailto:expected-note@arc-system-header.h">expected-note@arc-system-header.h</a>:10{{'a_b' has been explicitly marked unavailable here}}<br><br><br>_______________________________________________<br>cfe-commits mailing list<br><a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits<br></blockquote><br>~Aaron</div></blockquote></div><br></div></body></html>