diff options
author | Thorsten <schuett@gmail.com> | 2020-11-16 09:08:08 -0500 |
---|---|---|
committer | Aaron Ballman <aaron@aaronballman.com> | 2020-11-16 09:08:08 -0500 |
commit | 7c6412e0ccf5e00a9f59c5805df9df6ff6720ed2 (patch) | |
tree | ade2c23887ba2e916793e2b289cfe36d193f2e29 /clang/lib/Sema | |
parent | a6ac2b32fbab9679c8f2fa97a3b1123e3a9654c8 (diff) | |
download | llvm-7c6412e0ccf5e00a9f59c5805df9df6ff6720ed2.zip llvm-7c6412e0ccf5e00a9f59c5805df9df6ff6720ed2.tar.gz llvm-7c6412e0ccf5e00a9f59c5805df9df6ff6720ed2.tar.bz2 |
Convert TypeSpecifierSign from Specifiers.h to a scoped enum; NFC
Diffstat (limited to 'clang/lib/Sema')
-rw-r--r-- | clang/lib/Sema/DeclSpec.cpp | 42 | ||||
-rw-r--r-- | clang/lib/Sema/SemaCodeComplete.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Sema/SemaType.cpp | 47 |
3 files changed, 47 insertions, 44 deletions
diff --git a/clang/lib/Sema/DeclSpec.cpp b/clang/lib/Sema/DeclSpec.cpp index 73a6137..b028154 100644 --- a/clang/lib/Sema/DeclSpec.cpp +++ b/clang/lib/Sema/DeclSpec.cpp @@ -525,12 +525,14 @@ const char *DeclSpec::getSpecifierName(TSC C) { llvm_unreachable("Unknown typespec!"); } - -const char *DeclSpec::getSpecifierName(TSS S) { +const char *DeclSpec::getSpecifierName(TypeSpecifierSign S) { switch (S) { - case TSS_unspecified: return "unspecified"; - case TSS_signed: return "signed"; - case TSS_unsigned: return "unsigned"; + case TypeSpecifierSign::Unspecified: + return "unspecified"; + case TypeSpecifierSign::Signed: + return "signed"; + case TypeSpecifierSign::Unsigned: + return "unsigned"; } llvm_unreachable("Unknown typespec!"); } @@ -709,12 +711,11 @@ bool DeclSpec::SetTypeSpecComplex(TSC C, SourceLocation Loc, return false; } -bool DeclSpec::SetTypeSpecSign(TSS S, SourceLocation Loc, - const char *&PrevSpec, - unsigned &DiagID) { - if (TypeSpecSign != TSS_unspecified) - return BadSpecifier(S, (TSS)TypeSpecSign, PrevSpec, DiagID); - TypeSpecSign = S; +bool DeclSpec::SetTypeSpecSign(TypeSpecifierSign S, SourceLocation Loc, + const char *&PrevSpec, unsigned &DiagID) { + if (getTypeSpecSign() != TypeSpecifierSign::Unspecified) + return BadSpecifier(S, getTypeSpecSign(), PrevSpec, DiagID); + TypeSpecSign = static_cast<unsigned>(S); TSSLoc = Loc; return false; } @@ -1094,7 +1095,7 @@ bool DeclSpec::SetConstexprSpec(ConstexprSpecKind ConstexprKind, void DeclSpec::SaveWrittenBuiltinSpecs() { writtenBS.Sign = getTypeSpecSign(); - writtenBS.Width = TypeSpecWidth; + writtenBS.Width = getTypeSpecWidth(); writtenBS.Type = getTypeSpecType(); // Search the list of attributes for the presence of a mode attribute. writtenBS.ModeAttr = getAttributes().hasAttribute(ParsedAttr::AT_Mode); @@ -1116,7 +1117,8 @@ void DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) { // If decltype(auto) is used, no other type specifiers are permitted. if (TypeSpecType == TST_decltype_auto && (getTypeSpecWidth() != TypeSpecifierWidth::Unspecified || - TypeSpecComplex != TSC_unspecified || TypeSpecSign != TSS_unspecified || + TypeSpecComplex != TSC_unspecified || + getTypeSpecSign() != TypeSpecifierSign::Unspecified || TypeAltiVecVector || TypeAltiVecPixel || TypeAltiVecBool || TypeQualifiers)) { const unsigned NumLocs = 9; @@ -1137,7 +1139,7 @@ void DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) { } TypeSpecWidth = static_cast<unsigned>(TypeSpecifierWidth::Unspecified); TypeSpecComplex = TSC_unspecified; - TypeSpecSign = TSS_unspecified; + TypeSpecSign = static_cast<unsigned>(TypeSpecifierSign::Unspecified); TypeAltiVecVector = TypeAltiVecPixel = TypeAltiVecBool = false; TypeQualifiers = 0; S.Diag(TSTLoc, diag::err_decltype_auto_cannot_be_combined) @@ -1149,9 +1151,9 @@ void DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) { if (TypeAltiVecVector) { if (TypeAltiVecBool) { // Sign specifiers are not allowed with vector bool. (PIM 2.1) - if (TypeSpecSign != TSS_unspecified) { + if (getTypeSpecSign() != TypeSpecifierSign::Unspecified) { S.Diag(TSSLoc, diag::err_invalid_vector_bool_decl_spec) - << getSpecifierName((TSS)TypeSpecSign); + << getSpecifierName(getTypeSpecSign()); } // Only char/int are valid with vector bool prior to Power10. // Power10 adds instructions that produce vector bool data @@ -1186,7 +1188,7 @@ void DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) { if ((TypeSpecType == TST_char) || (TypeSpecType == TST_int) || (TypeSpecType == TST_int128) || (getTypeSpecWidth() != TypeSpecifierWidth::Unspecified)) - TypeSpecSign = TSS_unsigned; + TypeSpecSign = static_cast<unsigned>(TypeSpecifierSign::Unsigned); } else if (TypeSpecType == TST_double) { // vector long double and vector long long double are never allowed. // vector double is OK for Power7 and later, and ZVector. @@ -1222,7 +1224,7 @@ void DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) { if (TypeAltiVecPixel) { //TODO: perform validation TypeSpecType = TST_int; - TypeSpecSign = TSS_unsigned; + TypeSpecSign = static_cast<unsigned>(TypeSpecifierSign::Unsigned); TypeSpecWidth = static_cast<unsigned>(TypeSpecifierWidth::Short); TypeSpecOwned = false; } @@ -1232,7 +1234,7 @@ void DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) { TypeSpecType == TST_accum || TypeSpecType == TST_fract; // signed/unsigned are only valid with int/char/wchar_t/_Accum. - if (TypeSpecSign != TSS_unspecified) { + if (getTypeSpecSign() != TypeSpecifierSign::Unspecified) { if (TypeSpecType == TST_unspecified) TypeSpecType = TST_int; // unsigned -> unsigned int, signed -> signed int. else if (TypeSpecType != TST_int && TypeSpecType != TST_int128 && @@ -1241,7 +1243,7 @@ void DeclSpec::Finish(Sema &S, const PrintingPolicy &Policy) { S.Diag(TSSLoc, diag::err_invalid_sign_spec) << getSpecifierName((TST)TypeSpecType, Policy); // signed double -> double. - TypeSpecSign = TSS_unspecified; + TypeSpecSign = static_cast<unsigned>(TypeSpecifierSign::Unspecified); } } diff --git a/clang/lib/Sema/SemaCodeComplete.cpp b/clang/lib/Sema/SemaCodeComplete.cpp index 5f04997..10fd552 100644 --- a/clang/lib/Sema/SemaCodeComplete.cpp +++ b/clang/lib/Sema/SemaCodeComplete.cpp @@ -4256,7 +4256,7 @@ void Sema::CodeCompleteDeclSpec(Scope *S, DeclSpec &DS, DS.getParsedSpecifiers() == DeclSpec::PQ_TypeSpecifier && DS.getTypeSpecType() == DeclSpec::TST_typename && DS.getTypeSpecComplex() == DeclSpec::TSC_unspecified && - DS.getTypeSpecSign() == DeclSpec::TSS_unspecified && + DS.getTypeSpecSign() == TypeSpecifierSign::Unspecified && !DS.isTypeAltiVecVector() && S && (S->getFlags() & Scope::DeclScope) != 0 && (S->getFlags() & (Scope::ClassScope | Scope::TemplateParamScope | diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp index e978fa9..cf82ae7 100644 --- a/clang/lib/Sema/SemaType.cpp +++ b/clang/lib/Sema/SemaType.cpp @@ -1300,27 +1300,27 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) { Result = Context.VoidTy; break; case DeclSpec::TST_char: - if (DS.getTypeSpecSign() == DeclSpec::TSS_unspecified) + if (DS.getTypeSpecSign() == TypeSpecifierSign::Unspecified) Result = Context.CharTy; - else if (DS.getTypeSpecSign() == DeclSpec::TSS_signed) + else if (DS.getTypeSpecSign() == TypeSpecifierSign::Signed) Result = Context.SignedCharTy; else { - assert(DS.getTypeSpecSign() == DeclSpec::TSS_unsigned && + assert(DS.getTypeSpecSign() == TypeSpecifierSign::Unsigned && "Unknown TSS value"); Result = Context.UnsignedCharTy; } break; case DeclSpec::TST_wchar: - if (DS.getTypeSpecSign() == DeclSpec::TSS_unspecified) + if (DS.getTypeSpecSign() == TypeSpecifierSign::Unspecified) Result = Context.WCharTy; - else if (DS.getTypeSpecSign() == DeclSpec::TSS_signed) { + else if (DS.getTypeSpecSign() == TypeSpecifierSign::Signed) { S.Diag(DS.getTypeSpecSignLoc(), diag::ext_wchar_t_sign_spec) << DS.getSpecifierName(DS.getTypeSpecType(), Context.getPrintingPolicy()); Result = Context.getSignedWCharType(); } else { - assert(DS.getTypeSpecSign() == DeclSpec::TSS_unsigned && - "Unknown TSS value"); + assert(DS.getTypeSpecSign() == TypeSpecifierSign::Unsigned && + "Unknown TSS value"); S.Diag(DS.getTypeSpecSignLoc(), diag::ext_wchar_t_sign_spec) << DS.getSpecifierName(DS.getTypeSpecType(), Context.getPrintingPolicy()); @@ -1328,19 +1328,19 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) { } break; case DeclSpec::TST_char8: - assert(DS.getTypeSpecSign() == DeclSpec::TSS_unspecified && - "Unknown TSS value"); - Result = Context.Char8Ty; + assert(DS.getTypeSpecSign() == TypeSpecifierSign::Unspecified && + "Unknown TSS value"); + Result = Context.Char8Ty; break; case DeclSpec::TST_char16: - assert(DS.getTypeSpecSign() == DeclSpec::TSS_unspecified && - "Unknown TSS value"); - Result = Context.Char16Ty; + assert(DS.getTypeSpecSign() == TypeSpecifierSign::Unspecified && + "Unknown TSS value"); + Result = Context.Char16Ty; break; case DeclSpec::TST_char32: - assert(DS.getTypeSpecSign() == DeclSpec::TSS_unspecified && - "Unknown TSS value"); - Result = Context.Char32Ty; + assert(DS.getTypeSpecSign() == TypeSpecifierSign::Unspecified && + "Unknown TSS value"); + Result = Context.Char32Ty; break; case DeclSpec::TST_unspecified: // If this is a missing declspec in a block literal return context, then it @@ -1401,7 +1401,7 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) { LLVM_FALLTHROUGH; case DeclSpec::TST_int: { - if (DS.getTypeSpecSign() != DeclSpec::TSS_unsigned) { + if (DS.getTypeSpecSign() != TypeSpecifierSign::Unsigned) { switch (DS.getTypeSpecWidth()) { case TypeSpecifierWidth::Unspecified: Result = Context.IntTy; @@ -1458,8 +1458,9 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) { if (!S.Context.getTargetInfo().hasExtIntType()) S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << "_ExtInt"; - Result = S.BuildExtIntType(DS.getTypeSpecSign() == TSS_unsigned, - DS.getRepAsExpr(), DS.getBeginLoc()); + Result = + S.BuildExtIntType(DS.getTypeSpecSign() == TypeSpecifierSign::Unsigned, + DS.getRepAsExpr(), DS.getBeginLoc()); if (Result.isNull()) { Result = Context.IntTy; declarator.setInvalidType(true); @@ -1481,7 +1482,7 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) { llvm_unreachable("Unable to specify long long as _Accum width"); } - if (DS.getTypeSpecSign() == DeclSpec::TSS_unsigned) + if (DS.getTypeSpecSign() == TypeSpecifierSign::Unsigned) Result = Context.getCorrespondingUnsignedType(Result); if (DS.isTypeSpecSat()) @@ -1504,7 +1505,7 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) { llvm_unreachable("Unable to specify long long as _Fract width"); } - if (DS.getTypeSpecSign() == DeclSpec::TSS_unsigned) + if (DS.getTypeSpecSign() == TypeSpecifierSign::Unsigned) Result = Context.getCorrespondingUnsignedType(Result); if (DS.isTypeSpecSat()) @@ -1517,7 +1518,7 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) { !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsDevice)) S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) << "__int128"; - if (DS.getTypeSpecSign() == DeclSpec::TSS_unsigned) + if (DS.getTypeSpecSign() == TypeSpecifierSign::Unsigned) Result = Context.UnsignedInt128Ty; else Result = Context.Int128Ty; @@ -5881,7 +5882,7 @@ namespace { // Set info for the written builtin specifiers. TL.getWrittenBuiltinSpecs() = DS.getWrittenBuiltinSpecs(); // Try to have a meaningful source location. - if (TL.getWrittenSignSpec() != TSS_unspecified) + if (TL.getWrittenSignSpec() != TypeSpecifierSign::Unspecified) TL.expandBuiltinRange(DS.getTypeSpecSignLoc()); if (TL.getWrittenWidthSpec() != TypeSpecifierWidth::Unspecified) TL.expandBuiltinRange(DS.getTypeSpecWidthRange()); |