summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDeclAttr.cpp
diff options
context:
space:
mode:
authorManman Ren <manman.ren@gmail.com>2016-03-21 17:30:55 +0000
committerManman Ren <manman.ren@gmail.com>2016-03-21 17:30:55 +0000
commit75bc676160c00f73cfdf0b5577b4e57196861bf9 (patch)
treef0980797a18ffcc57e70950a697a6749815d9748 /clang/lib/Sema/SemaDeclAttr.cpp
parent930de67e6a78a2461d21d43a84666293bc0197ed (diff)
downloadbcm5719-llvm-75bc676160c00f73cfdf0b5577b4e57196861bf9.tar.gz
bcm5719-llvm-75bc676160c00f73cfdf0b5577b4e57196861bf9.zip
Add replacement = "xxx" to AvailabilityAttr.
This commit adds a named argument to AvailabilityAttr, while r263652 adds an optional string argument to __attribute__((deprecated)). This was commited in r263687 and reverted in 263752 due to misaligned access. rdar://20588929 llvm-svn: 263958
Diffstat (limited to 'clang/lib/Sema/SemaDeclAttr.cpp')
-rw-r--r--clang/lib/Sema/SemaDeclAttr.cpp14
1 files changed, 12 insertions, 2 deletions
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp
index 18065cb52d8..c90d6236c18 100644
--- a/clang/lib/Sema/SemaDeclAttr.cpp
+++ b/clang/lib/Sema/SemaDeclAttr.cpp
@@ -1941,6 +1941,7 @@ AvailabilityAttr *Sema::mergeAvailabilityAttr(NamedDecl *D, SourceRange Range,
bool IsUnavailable,
StringRef Message,
bool IsStrict,
+ StringRef Replacement,
AvailabilityMergeKind AMK,
unsigned AttrSpellingListIndex) {
VersionTuple MergedIntroduced = Introduced;
@@ -2087,7 +2088,8 @@ AvailabilityAttr *Sema::mergeAvailabilityAttr(NamedDecl *D, SourceRange Range,
return ::new (Context) AvailabilityAttr(Range, Context, Platform,
Introduced, Deprecated,
Obsoleted, IsUnavailable, Message,
- IsStrict, AttrSpellingListIndex);
+ IsStrict, Replacement,
+ AttrSpellingListIndex);
}
return nullptr;
}
@@ -2119,13 +2121,17 @@ static void handleAvailabilityAttr(Sema &S, Decl *D,
if (const StringLiteral *SE =
dyn_cast_or_null<StringLiteral>(Attr.getMessageExpr()))
Str = SE->getString();
+ StringRef Replacement;
+ if (const StringLiteral *SE =
+ dyn_cast_or_null<StringLiteral>(Attr.getReplacementExpr()))
+ Replacement = SE->getString();
AvailabilityAttr *NewAttr = S.mergeAvailabilityAttr(ND, Attr.getRange(), II,
Introduced.Version,
Deprecated.Version,
Obsoleted.Version,
IsUnavailable, Str,
- IsStrict,
+ IsStrict, Replacement,
Sema::AMK_None,
Index);
if (NewAttr)
@@ -2171,6 +2177,7 @@ static void handleAvailabilityAttr(Sema &S, Decl *D,
NewObsoleted,
IsUnavailable, Str,
IsStrict,
+ Replacement,
Sema::AMK_None,
Index);
if (NewAttr)
@@ -2194,6 +2201,7 @@ static void handleAvailabilityAttr(Sema &S, Decl *D,
Obsoleted.Version,
IsUnavailable, Str,
IsStrict,
+ Replacement,
Sema::AMK_None,
Index);
if (NewAttr)
@@ -6229,6 +6237,8 @@ static void DoEmitAvailabilityWarning(Sema &S, Sema::AvailabilityDiagnostic K,
if (K == Sema::AD_Deprecation) {
if (auto attr = D->getAttr<DeprecatedAttr>())
Replacement = attr->getReplacement();
+ if (auto attr = D->getAttr<AvailabilityAttr>())
+ Replacement = attr->getReplacement();
if (!Replacement.empty())
UseRange =
OpenPOWER on IntegriCloud