diff options
author | Aaron Ballman <aaron@aaronballman.com> | 2013-10-14 23:22:37 +0000 |
---|---|---|
committer | Aaron Ballman <aaron@aaronballman.com> | 2013-10-14 23:22:37 +0000 |
commit | 91c98e1e0bc835be09ec698382306becf4bb6cd7 (patch) | |
tree | 4e228d518737e746eddd8974c0e6c2c1ba0b83c4 /clang/lib/Sema/SemaDeclAttr.cpp | |
parent | 37868073aee3e9475e8cdaae8b38c5486586102b (diff) | |
download | bcm5719-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.cpp | 34 |
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; |