summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaDeclAttr.cpp
diff options
context:
space:
mode:
authorAaron Ballman <aaron@aaronballman.com>2013-10-14 23:22:37 +0000
committerAaron Ballman <aaron@aaronballman.com>2013-10-14 23:22:37 +0000
commit91c98e1e0bc835be09ec698382306becf4bb6cd7 (patch)
tree4e228d518737e746eddd8974c0e6c2c1ba0b83c4 /clang/lib/Sema/SemaDeclAttr.cpp
parent37868073aee3e9475e8cdaae8b38c5486586102b (diff)
downloadbcm5719-llvm-91c98e1e0bc835be09ec698382306becf4bb6cd7.tar.gz
bcm5719-llvm-91c98e1e0bc835be09ec698382306becf4bb6cd7.zip
Switching some custom logic to using table-generated helper methods. This also removes an unnecessary diagnostic.
llvm-svn: 192639
Diffstat (limited to 'clang/lib/Sema/SemaDeclAttr.cpp')
-rw-r--r--clang/lib/Sema/SemaDeclAttr.cpp34
1 files changed, 11 insertions, 23 deletions
diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp
index 70ae9fd9bc1..b9ff4775425 100644
--- a/clang/lib/Sema/SemaDeclAttr.cpp
+++ b/clang/lib/Sema/SemaDeclAttr.cpp
@@ -1130,21 +1130,14 @@ static void handleSetTypestateAttr(Sema &S, Decl *D, const AttributeList &Attr)
return;
SetTypestateAttr::ConsumedState NewState;
-
if (Attr.isArgIdent(0)) {
- StringRef Param = Attr.getArgAsIdent(0)->Ident->getName();
-
- if (Param == "unknown") {
- NewState = SetTypestateAttr::Unknown;
- } else if (Param == "consumed") {
- NewState = SetTypestateAttr::Consumed;
- } else if (Param == "unconsumed") {
- NewState = SetTypestateAttr::Unconsumed;
- } else {
- S.Diag(Attr.getLoc(), diag::warn_unknown_consumed_state) << Param;
+ IdentifierLoc *Ident = Attr.getArgAsIdent(0);
+ StringRef Param = Ident->Ident->getName();
+ if (!SetTypestateAttr::ConvertStrToConsumedState(Param, NewState)) {
+ S.Diag(Ident->Loc, diag::warn_attribute_type_not_supported)
+ << Attr.getName() << Param;
return;
}
-
} else {
S.Diag(Attr.getLoc(), diag::err_attribute_argument_type) <<
Attr.getName() << AANT_ArgumentIdentifier;
@@ -1169,20 +1162,15 @@ static void handleTestsTypestateAttr(Sema &S, Decl *D,
if (!checkForConsumableClass(S, cast<CXXMethodDecl>(D), Attr))
return;
- TestsTypestateAttr::ConsumedState TestState;
-
+ TestsTypestateAttr::ConsumedState TestState;
if (Attr.isArgIdent(0)) {
- StringRef Param = Attr.getArgAsIdent(0)->Ident->getName();
-
- if (Param == "consumed") {
- TestState = TestsTypestateAttr::Consumed;
- } else if (Param == "unconsumed") {
- TestState = TestsTypestateAttr::Unconsumed;
- } else {
- S.Diag(Attr.getLoc(), diag::warn_unknown_consumed_state) << Param;
+ IdentifierLoc *Ident = Attr.getArgAsIdent(0);
+ StringRef Param = Ident->Ident->getName();
+ if (!TestsTypestateAttr::ConvertStrToConsumedState(Param, TestState)) {
+ S.Diag(Ident->Loc, diag::warn_attribute_type_not_supported)
+ << Attr.getName() << Param;
return;
}
-
} else {
S.Diag(Attr.getLoc(), diag::err_attribute_argument_type) <<
Attr.getName() << AANT_ArgumentIdentifier;
OpenPOWER on IntegriCloud