r261512 - Addressing review comments for r261163.
Manman Ren via cfe-commits
cfe-commits at lists.llvm.org
Sun Feb 21 20:47:25 PST 2016
Author: mren
Date: Sun Feb 21 22:47:24 2016
New Revision: 261512
URL: http://llvm.org/viewvc/llvm-project?rev=261512&view=rev
Log:
Addressing review comments for r261163.
Use "strict" instead of "nopartial". Also make strictly not-introduced
share the same diagnostics as Obsolete and Unavailable.
rdar://23791325
Modified:
cfe/trunk/include/clang/Basic/Attr.td
cfe/trunk/include/clang/Basic/AttrDocs.td
cfe/trunk/include/clang/Basic/DiagnosticGroups.td
cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
cfe/trunk/include/clang/Parse/Parser.h
cfe/trunk/include/clang/Sema/AttributeList.h
cfe/trunk/include/clang/Sema/DelayedDiagnostic.h
cfe/trunk/include/clang/Sema/Sema.h
cfe/trunk/lib/Parse/ParseDecl.cpp
cfe/trunk/lib/Parse/Parser.cpp
cfe/trunk/lib/Sema/DelayedDiagnostic.cpp
cfe/trunk/lib/Sema/SemaDecl.cpp
cfe/trunk/lib/Sema/SemaDeclAttr.cpp
cfe/trunk/lib/Sema/SemaExpr.cpp
cfe/trunk/test/Sema/attr-availability-macosx.c
Modified: cfe/trunk/include/clang/Basic/Attr.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/Attr.td?rev=261512&r1=261511&r2=261512&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/Attr.td (original)
+++ cfe/trunk/include/clang/Basic/Attr.td Sun Feb 21 22:47:24 2016
@@ -451,7 +451,7 @@ def Availability : InheritableAttr {
let Args = [IdentifierArgument<"platform">, VersionArgument<"introduced">,
VersionArgument<"deprecated">, VersionArgument<"obsoleted">,
BoolArgument<"unavailable">, StringArgument<"message">,
- BoolArgument<"nopartial">];
+ BoolArgument<"strict">];
let AdditionalMembers =
[{static llvm::StringRef getPrettyPlatformName(llvm::StringRef Platform) {
return llvm::StringSwitch<llvm::StringRef>(Platform)
Modified: cfe/trunk/include/clang/Basic/AttrDocs.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/AttrDocs.td?rev=261512&r1=261511&r2=261512&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/AttrDocs.td (original)
+++ cfe/trunk/include/clang/Basic/AttrDocs.td Sun Feb 21 22:47:24 2016
@@ -685,20 +685,21 @@ are:
Apple's watchOS operating system. The minimum deployment target is specified by
the ``-mwatchos-version-min=*version*`` command-line argument.
-An optional nopartial can be placed after the platform name.
-With the optional nopartial, when deploying back to a platform version prior to
-when the declaration was introduced, Clang emits an error specifying that the
-function is not introduced yet.
-
-Without the optional nopartial, a declaration can be used even when deploying back
-to a platform version prior to when the declaration was introduced. When this
-happens, the declaration is `weakly linked
+A declaration can typically be used even when deploying back to a platform
+version prior to when the declaration was introduced. When this happens, the
+declaration is `weakly linked
<https://developer.apple.com/library/mac/#documentation/MacOSX/Conceptual/BPFrameworks/Concepts/WeakLinking.html>`_,
as if the ``weak_import`` attribute were added to the declaration. A
weakly-linked declaration may or may not be present a run-time, and a program
can determine whether the declaration is present by checking whether the
address of that declaration is non-NULL.
+The flag ``strict`` disallows using API when deploying back to a
+platform version prior to when the declaration was introduced. An
+attempt to use such API before its introduction causes a hard error.
+Weakly-linking is almost always a better API choice, since it allows
+users to query availability at runtime.
+
If there are multiple declarations of the same entity, the availability
attributes must either match on a per-platform basis or later
declarations must not have availability attributes for that
Modified: cfe/trunk/include/clang/Basic/DiagnosticGroups.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticGroups.td?rev=261512&r1=261511&r2=261512&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticGroups.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticGroups.td Sun Feb 21 22:47:24 2016
@@ -87,7 +87,6 @@ def DeprecatedAttributes : DiagGroup<"de
def DeprecatedDeclarations : DiagGroup<"deprecated-declarations">;
def UnavailableDeclarations : DiagGroup<"unavailable-declarations">;
def PartialAvailability : DiagGroup<"partial-availability">;
-def NotYetIntroducedDeclarations : DiagGroup<"not-yet-introduced-declarations">;
def DeprecatedImplementations :DiagGroup<"deprecated-implementations">;
def DeprecatedIncrementBool : DiagGroup<"deprecated-increment-bool">;
def DeprecatedRegister : DiagGroup<"deprecated-register">;
Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=261512&r1=261511&r2=261512&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Sun Feb 21 22:47:24 2016
@@ -841,7 +841,7 @@ def warn_accessor_property_type_mismatch
def not_conv_function_declared_at : Note<"type conversion function declared here">;
def note_method_declared_at : Note<"method %0 declared here">;
def note_property_attribute : Note<"property %0 is declared "
- "%select{deprecated|unavailable|partial|not-yet-introduced}1 here">;
+ "%select{deprecated|unavailable|partial}1 here">;
def err_setter_type_void : Error<"type of setter must be void">;
def err_duplicate_method_decl : Error<"duplicate declaration of method %0">;
def warn_duplicate_method_decl :
@@ -4128,14 +4128,9 @@ def err_unavailable_message : Error<"%0
def warn_unavailable_fwdclass_message : Warning<
"%0 may be unavailable because the receiver type is unknown">,
InGroup<UnavailableDeclarations>;
-def err_notyetintroduced : Error<"%0 is not introduced yet">;
-def err_notyetintroduced_message : Error<"%0 is not introduced yet: %1">;
-def warn_notyetintroduced_fwdclass_message : Warning<
- "%0 may not be introduced because the receiver type is unknown">,
- InGroup<NotYetIntroducedDeclarations>;
def note_availability_specified_here : Note<
"%0 has been explicitly marked "
- "%select{unavailable|deleted|deprecated|partial|not-yet-introduced}1 here">;
+ "%select{unavailable|deleted|deprecated|partial}1 here">;
def note_implicitly_deleted : Note<
"explicitly defaulted function was implicitly deleted here">;
def note_inherited_deleted_here : Note<
Modified: cfe/trunk/include/clang/Parse/Parser.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Parse/Parser.h?rev=261512&r1=261511&r2=261512&view=diff
==============================================================================
--- cfe/trunk/include/clang/Parse/Parser.h (original)
+++ cfe/trunk/include/clang/Parse/Parser.h Sun Feb 21 22:47:24 2016
@@ -134,8 +134,8 @@ class Parser : public CodeCompletionHand
/// \brief Identifier for "message".
IdentifierInfo *Ident_message;
- /// \brief Identifier for "nopartial".
- IdentifierInfo *Ident_nopartial;
+ /// \brief Identifier for "strict".
+ IdentifierInfo *Ident_strict;
/// C++0x contextual keywords.
mutable IdentifierInfo *Ident_final;
Modified: cfe/trunk/include/clang/Sema/AttributeList.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/AttributeList.h?rev=261512&r1=261511&r2=261512&view=diff
==============================================================================
--- cfe/trunk/include/clang/Sema/AttributeList.h (original)
+++ cfe/trunk/include/clang/Sema/AttributeList.h Sun Feb 21 22:47:24 2016
@@ -157,13 +157,13 @@ private:
+ NumArgs)[index];
}
- /// The location of the 'nopartial' keyword in an availability attribute.
- SourceLocation *getNopartialSlot() {
+ /// The location of the 'strict' keyword in an availability attribute.
+ SourceLocation *getStrictSlot() {
return reinterpret_cast<SourceLocation*>(
&getAvailabilitySlot(ObsoletedSlot) + 1);
}
- SourceLocation const *getNopartialSlot() const {
+ SourceLocation const *getStrictSlot() const {
return reinterpret_cast<SourceLocation const*>(
&getAvailabilitySlot(ObsoletedSlot) + 1);
}
@@ -244,7 +244,7 @@ private:
const AvailabilityChange &obsoleted,
SourceLocation unavailable,
const Expr *messageExpr,
- Syntax syntaxUsed, SourceLocation nopartial)
+ Syntax syntaxUsed, SourceLocation strict)
: AttrName(attrName), ScopeName(scopeName), AttrRange(attrRange),
ScopeLoc(scopeLoc), EllipsisLoc(), NumArgs(1), SyntaxUsed(syntaxUsed),
Invalid(false), UsedAsTypeAttr(false), IsAvailability(true),
@@ -256,7 +256,7 @@ private:
new (&getAvailabilitySlot(IntroducedSlot)) AvailabilityChange(introduced);
new (&getAvailabilitySlot(DeprecatedSlot)) AvailabilityChange(deprecated);
new (&getAvailabilitySlot(ObsoletedSlot)) AvailabilityChange(obsoleted);
- memcpy(getNopartialSlot(), &nopartial, sizeof(SourceLocation));
+ memcpy(getStrictSlot(), &strict, sizeof(SourceLocation));
AttrKind = getKind(getName(), getScopeName(), syntaxUsed);
}
@@ -424,9 +424,9 @@ public:
return getAvailabilitySlot(ObsoletedSlot);
}
- SourceLocation getNopartialLoc() const {
+ SourceLocation getStrictLoc() const {
assert(getKind() == AT_Availability && "Not an availability attribute");
- return *getNopartialSlot();
+ return *getStrictSlot();
}
SourceLocation getUnavailableLoc() const {
@@ -624,13 +624,13 @@ public:
SourceLocation unavailable,
const Expr *MessageExpr,
AttributeList::Syntax syntax,
- SourceLocation nopartial) {
+ SourceLocation strict) {
void *memory = allocate(AttributeFactory::AvailabilityAllocSize);
return add(new (memory) AttributeList(attrName, attrRange,
scopeName, scopeLoc,
Param, introduced, deprecated,
obsoleted, unavailable, MessageExpr,
- syntax, nopartial));
+ syntax, strict));
}
AttributeList *create(IdentifierInfo *attrName, SourceRange attrRange,
@@ -760,11 +760,11 @@ public:
SourceLocation unavailable,
const Expr *MessageExpr,
AttributeList::Syntax syntax,
- SourceLocation nopartial) {
+ SourceLocation strict) {
AttributeList *attr =
pool.create(attrName, attrRange, scopeName, scopeLoc, Param, introduced,
deprecated, obsoleted, unavailable, MessageExpr, syntax,
- nopartial);
+ strict);
add(attr);
return attr;
}
Modified: cfe/trunk/include/clang/Sema/DelayedDiagnostic.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/DelayedDiagnostic.h?rev=261512&r1=261511&r2=261512&view=diff
==============================================================================
--- cfe/trunk/include/clang/Sema/DelayedDiagnostic.h (original)
+++ cfe/trunk/include/clang/Sema/DelayedDiagnostic.h Sun Feb 21 22:47:24 2016
@@ -113,8 +113,7 @@ private:
/// the complete parsing of the current declaration.
class DelayedDiagnostic {
public:
- enum DDKind { Deprecation, Unavailable, Access, ForbiddenType,
- NotYetIntroduced };
+ enum DDKind { Deprecation, Unavailable, Access, ForbiddenType };
unsigned char Kind; // actually a DDKind
bool Triggered;
@@ -166,15 +165,13 @@ public:
}
const NamedDecl *getDeprecationDecl() const {
- assert((Kind == Deprecation || Kind == Unavailable ||
- Kind == NotYetIntroduced) &&
+ assert((Kind == Deprecation || Kind == Unavailable) &&
"Not a deprecation diagnostic.");
return DeprecationData.Decl;
}
StringRef getDeprecationMessage() const {
- assert((Kind == Deprecation || Kind == Unavailable ||
- Kind == NotYetIntroduced) &&
+ assert((Kind == Deprecation || Kind == Unavailable) &&
"Not a deprecation diagnostic.");
return StringRef(DeprecationData.Message,
DeprecationData.MessageLen);
Modified: cfe/trunk/include/clang/Sema/Sema.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Sema/Sema.h?rev=261512&r1=261511&r2=261512&view=diff
==============================================================================
--- cfe/trunk/include/clang/Sema/Sema.h (original)
+++ cfe/trunk/include/clang/Sema/Sema.h Sun Feb 21 22:47:24 2016
@@ -2108,7 +2108,7 @@ public:
VersionTuple Obsoleted,
bool IsUnavailable,
StringRef Message,
- bool IsNopartial,
+ bool IsStrict,
AvailabilityMergeKind AMK,
unsigned AttrSpellingListIndex);
TypeVisibilityAttr *mergeTypeVisibilityAttr(Decl *D, SourceRange Range,
@@ -3536,8 +3536,7 @@ public:
void redelayDiagnostics(sema::DelayedDiagnosticPool &pool);
- enum AvailabilityDiagnostic { AD_Deprecation, AD_Unavailable, AD_Partial,
- AD_NotYetIntroduced };
+ enum AvailabilityDiagnostic { AD_Deprecation, AD_Unavailable, AD_Partial };
void EmitAvailabilityWarning(AvailabilityDiagnostic AD,
NamedDecl *D, StringRef Message,
Modified: cfe/trunk/lib/Parse/ParseDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDecl.cpp?rev=261512&r1=261511&r2=261512&view=diff
==============================================================================
--- cfe/trunk/lib/Parse/ParseDecl.cpp (original)
+++ cfe/trunk/lib/Parse/ParseDecl.cpp Sun Feb 21 22:47:24 2016
@@ -833,13 +833,13 @@ VersionTuple Parser::ParseVersionTuple(S
/// \brief Parse the contents of the "availability" attribute.
///
/// availability-attribute:
-/// 'availability' '(' platform ',' opt-nopartial version-arg-list, opt-message')'
+/// 'availability' '(' platform ',' opt-strict version-arg-list, opt-message')'
///
/// platform:
/// identifier
///
-/// opt-nopartial:
-/// 'nopartial' ','
+/// opt-strict:
+/// 'strict' ','
///
/// version-arg-list:
/// version-arg
@@ -892,12 +892,12 @@ void Parser::ParseAvailabilityAttribute(
Ident_obsoleted = PP.getIdentifierInfo("obsoleted");
Ident_unavailable = PP.getIdentifierInfo("unavailable");
Ident_message = PP.getIdentifierInfo("message");
- Ident_nopartial = PP.getIdentifierInfo("nopartial");
+ Ident_strict = PP.getIdentifierInfo("strict");
}
- // Parse the optional "nopartial" and the set of
+ // Parse the optional "strict" and the set of
// introductions/deprecations/removals.
- SourceLocation UnavailableLoc, NopartialLoc;
+ SourceLocation UnavailableLoc, StrictLoc;
do {
if (Tok.isNot(tok::identifier)) {
Diag(Tok, diag::err_availability_expected_change);
@@ -907,12 +907,12 @@ void Parser::ParseAvailabilityAttribute(
IdentifierInfo *Keyword = Tok.getIdentifierInfo();
SourceLocation KeywordLoc = ConsumeToken();
- if (Keyword == Ident_nopartial) {
- if (NopartialLoc.isValid()) {
+ if (Keyword == Ident_strict) {
+ if (StrictLoc.isValid()) {
Diag(KeywordLoc, diag::err_availability_redundant)
- << Keyword << SourceRange(NopartialLoc);
+ << Keyword << SourceRange(StrictLoc);
}
- NopartialLoc = KeywordLoc;
+ StrictLoc = KeywordLoc;
continue;
}
@@ -1037,7 +1037,7 @@ void Parser::ParseAvailabilityAttribute(
Changes[Deprecated],
Changes[Obsoleted],
UnavailableLoc, MessageExpr.get(),
- Syntax, NopartialLoc);
+ Syntax, StrictLoc);
}
/// \brief Parse the contents of the "objc_bridge_related" attribute.
Modified: cfe/trunk/lib/Parse/Parser.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/Parser.cpp?rev=261512&r1=261511&r2=261512&view=diff
==============================================================================
--- cfe/trunk/lib/Parse/Parser.cpp (original)
+++ cfe/trunk/lib/Parse/Parser.cpp Sun Feb 21 22:47:24 2016
@@ -491,7 +491,7 @@ void Parser::Initialize() {
Ident_deprecated = nullptr;
Ident_obsoleted = nullptr;
Ident_unavailable = nullptr;
- Ident_nopartial = nullptr;
+ Ident_strict = nullptr;
Ident__except = nullptr;
Modified: cfe/trunk/lib/Sema/DelayedDiagnostic.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/DelayedDiagnostic.cpp?rev=261512&r1=261511&r2=261512&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/DelayedDiagnostic.cpp (original)
+++ cfe/trunk/lib/Sema/DelayedDiagnostic.cpp Sun Feb 21 22:47:24 2016
@@ -35,9 +35,6 @@ DelayedDiagnostic::makeAvailability(Sema
case Sema::AD_Unavailable:
DD.Kind = Unavailable;
break;
- case Sema::AD_NotYetIntroduced:
- DD.Kind = NotYetIntroduced;
- break;
case Sema::AD_Partial:
llvm_unreachable("AD_Partial diags should not be delayed");
}
@@ -66,7 +63,6 @@ void DelayedDiagnostic::Destroy() {
case Deprecation:
case Unavailable:
- case NotYetIntroduced:
delete [] DeprecationData.Message;
break;
Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=261512&r1=261511&r2=261512&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDecl.cpp Sun Feb 21 22:47:24 2016
@@ -2196,7 +2196,7 @@ static bool mergeDeclAttribute(Sema &S,
NewAttr = S.mergeAvailabilityAttr(D, AA->getRange(), AA->getPlatform(),
AA->getIntroduced(), AA->getDeprecated(),
AA->getObsoleted(), AA->getUnavailable(),
- AA->getMessage(), AA->getNopartial(), AMK,
+ AA->getMessage(), AA->getStrict(), AMK,
AttrSpellingListIndex);
else if (const auto *VA = dyn_cast<VisibilityAttr>(Attr))
NewAttr = S.mergeVisibilityAttr(D, VA->getRange(), VA->getVisibility(),
Modified: cfe/trunk/lib/Sema/SemaDeclAttr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDeclAttr.cpp?rev=261512&r1=261511&r2=261512&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaDeclAttr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaDeclAttr.cpp Sun Feb 21 22:47:24 2016
@@ -1918,7 +1918,7 @@ AvailabilityAttr *Sema::mergeAvailabilit
VersionTuple Obsoleted,
bool IsUnavailable,
StringRef Message,
- bool IsNopartial,
+ bool IsStrict,
AvailabilityMergeKind AMK,
unsigned AttrSpellingListIndex) {
VersionTuple MergedIntroduced = Introduced;
@@ -2065,7 +2065,7 @@ AvailabilityAttr *Sema::mergeAvailabilit
return ::new (Context) AvailabilityAttr(Range, Context, Platform,
Introduced, Deprecated,
Obsoleted, IsUnavailable, Message,
- IsNopartial, AttrSpellingListIndex);
+ IsStrict, AttrSpellingListIndex);
}
return nullptr;
}
@@ -2092,7 +2092,7 @@ static void handleAvailabilityAttr(Sema
AvailabilityChange Deprecated = Attr.getAvailabilityDeprecated();
AvailabilityChange Obsoleted = Attr.getAvailabilityObsoleted();
bool IsUnavailable = Attr.getUnavailableLoc().isValid();
- bool IsNopartial = Attr.getNopartialLoc().isValid();
+ bool IsStrict = Attr.getStrictLoc().isValid();
StringRef Str;
if (const StringLiteral *SE =
dyn_cast_or_null<StringLiteral>(Attr.getMessageExpr()))
@@ -2103,7 +2103,7 @@ static void handleAvailabilityAttr(Sema
Deprecated.Version,
Obsoleted.Version,
IsUnavailable, Str,
- IsNopartial,
+ IsStrict,
Sema::AMK_None,
Index);
if (NewAttr)
@@ -2148,7 +2148,7 @@ static void handleAvailabilityAttr(Sema
NewDeprecated,
NewObsoleted,
IsUnavailable, Str,
- IsNopartial,
+ IsStrict,
Sema::AMK_None,
Index);
if (NewAttr)
@@ -2171,7 +2171,7 @@ static void handleAvailabilityAttr(Sema
Deprecated.Version,
Obsoleted.Version,
IsUnavailable, Str,
- IsNopartial,
+ IsStrict,
Sema::AMK_None,
Index);
if (NewAttr)
@@ -5964,14 +5964,6 @@ static void DoEmitAvailabilityWarning(Se
property_note_select = /* partial */ 2;
available_here_select_kind = /* partial */ 3;
break;
-
- case Sema::AD_NotYetIntroduced:
- diag = diag::err_notyetintroduced;
- diag_message = diag::err_notyetintroduced_message;
- diag_fwdclass_message = diag::warn_notyetintroduced_fwdclass_message;
- property_note_select = /* deprecated */ 3;
- available_here_select_kind = /* notyetintroduced */ 4;
- break;
}
if (!Message.empty()) {
@@ -5998,22 +5990,10 @@ static void DoEmitAvailabilityWarning(Se
static void handleDelayedAvailabilityCheck(Sema &S, DelayedDiagnostic &DD,
Decl *Ctx) {
assert(DD.Kind == DelayedDiagnostic::Deprecation ||
- DD.Kind == DelayedDiagnostic::Unavailable ||
- DD.Kind == DelayedDiagnostic::NotYetIntroduced);
- Sema::AvailabilityDiagnostic AD;
- switch (DD.Kind) {
- case DelayedDiagnostic::Deprecation:
- AD = Sema::AD_Deprecation;
- break;
- case DelayedDiagnostic::Unavailable:
- AD = Sema::AD_Unavailable;
- break;
- case DelayedDiagnostic::NotYetIntroduced:
- AD = Sema::AD_NotYetIntroduced;
- break;
- default:
- llvm_unreachable("Expecting: deprecated, unavailable, not-yet-introduced");
- }
+ DD.Kind == DelayedDiagnostic::Unavailable);
+ Sema::AvailabilityDiagnostic AD = DD.Kind == DelayedDiagnostic::Deprecation
+ ? Sema::AD_Deprecation
+ : Sema::AD_Unavailable;
DD.Triggered = true;
DoEmitAvailabilityWarning(
S, AD, Ctx, DD.getDeprecationDecl(), DD.getDeprecationMessage(), DD.Loc,
Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=261512&r1=261511&r2=261512&view=diff
==============================================================================
--- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
+++ cfe/trunk/lib/Sema/SemaExpr.cpp Sun Feb 21 22:47:24 2016
@@ -159,12 +159,11 @@ DiagnoseAvailabilityOfDecl(Sema &S, Name
break;
case AR_NotYetIntroduced: {
- // With nopartial, the compiler will emit delayed error just like how
- // "deprecated, unavailable" are handled.
+ // With strict, the compiler will emit unavailable error.
AvailabilityAttr *AA = D->getAttr<AvailabilityAttr>();
- if (AA && AA->getNopartial() &&
+ if (AA && AA->getStrict() &&
S.getCurContextAvailability() != AR_NotYetIntroduced)
- S.EmitAvailabilityWarning(Sema::AD_NotYetIntroduced,
+ S.EmitAvailabilityWarning(Sema::AD_Unavailable,
D, Message, Loc, UnknownObjCClass, ObjCPDecl,
ObjCPropertyAccess);
Modified: cfe/trunk/test/Sema/attr-availability-macosx.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/attr-availability-macosx.c?rev=261512&r1=261511&r2=261512&view=diff
==============================================================================
--- cfe/trunk/test/Sema/attr-availability-macosx.c (original)
+++ cfe/trunk/test/Sema/attr-availability-macosx.c Sun Feb 21 22:47:24 2016
@@ -6,7 +6,7 @@ void f2(int) __attribute__((availability
void f3(int) __attribute__((availability(macosx,introduced=10.6)));
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}}
void f5(int) __attribute__((availability(ios,introduced=3.2), availability(macosx,unavailable))); // expected-note{{'f5' has been explicitly marked unavailable here}}
-void f6(int) __attribute__((availability(macosx,nopartial,introduced=10.6))); //expected-note{{'f6' has been explicitly marked not-yet-introduced here}}
+void f6(int) __attribute__((availability(macosx,strict,introduced=10.6))); //expected-note{{'f6' has been explicitly marked unavailable here}}
void test() {
f0(0);
@@ -15,7 +15,7 @@ void test() {
f3(0);
f4(0); // expected-error{{f4' is unavailable: obsoleted in OS X 10.5}}
f5(0); // expected-error{{'f5' is unavailable: not available on OS X}}
- f6(0); // expected-error{{'f6' is not introduced yet: introduced in OS X 10.6}}
+ f6(0); // expected-error{{'f6' is unavailable: introduced in OS X 10.6}}
}
// rdar://10535640
More information about the cfe-commits
mailing list