From: Aaron Ballman Date: Mon, 14 Oct 2013 23:22:37 +0000 (+0000) Subject: Switching some custom logic to using table-generated helper methods. This also remov... X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2b1599c3a0b9e014535ce7495717e8cd03af512c;p=clang Switching some custom logic to using table-generated helper methods. This also removes an unnecessary diagnostic. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@192639 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Basic/DiagnosticSemaKinds.td b/include/clang/Basic/DiagnosticSemaKinds.td index d393edd941..8f68278eeb 100644 --- a/include/clang/Basic/DiagnosticSemaKinds.td +++ b/include/clang/Basic/DiagnosticSemaKinds.td @@ -2216,8 +2216,6 @@ def warn_attr_on_unconsumable_class : Warning< def warn_return_typestate_for_unconsumable_type : Warning< "return state set for an unconsumable type '%0'">, InGroup, DefaultIgnore; -def warn_unknown_consumed_state : Warning< - "unknown consumed analysis state '%0'">, InGroup, DefaultIgnore; def warn_return_typestate_mismatch : Warning< "return value not in expected state; expected '%0', observed '%1'">, InGroup, DefaultIgnore; diff --git a/lib/Sema/SemaDeclAttr.cpp b/lib/Sema/SemaDeclAttr.cpp index 70ae9fd9bc..b9ff477542 100644 --- a/lib/Sema/SemaDeclAttr.cpp +++ b/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(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;