@@ -979,49 +979,3 @@ Preprocessor::EvaluateDirectiveExpression(IdentifierInfo *&IfNDefMacro,
979979 return EvaluateDirectiveExpression (IfNDefMacro, Tok, EvaluatedDefined,
980980 CheckForEoD);
981981}
982-
983- static std::optional<CXXStandardLibraryVersionInfo>
984- getCXXStandardLibraryVersion (Preprocessor &PP, StringRef MacroName,
985- CXXStandardLibraryVersionInfo::Library Lib) {
986- MacroInfo *Macro = PP.getMacroInfo (PP.getIdentifierInfo (MacroName));
987-
988- if (!Macro || Macro->getNumTokens () != 1 || !Macro->isObjectLike ())
989- return std::nullopt ;
990-
991- const Token &RevisionDateTok = Macro->getReplacementToken (0 );
992-
993- bool Invalid = false ;
994- llvm::SmallVector<char , 10 > Buffer;
995- llvm::StringRef RevisionDate =
996- PP.getSpelling (RevisionDateTok, Buffer, &Invalid);
997- if (!Invalid) {
998- unsigned Value;
999- // We don't use NumericParser to avoid diagnostics
1000- if (!RevisionDate.consumeInteger (10 , Value))
1001- return CXXStandardLibraryVersionInfo{Lib, Value};
1002- }
1003- return CXXStandardLibraryVersionInfo{CXXStandardLibraryVersionInfo::Unknown,
1004- 0 };
1005- }
1006-
1007- std::optional<unsigned > Preprocessor::getStdLibCxxVersion () {
1008- if (!CXXStandardLibraryVersion)
1009- CXXStandardLibraryVersion = getCXXStandardLibraryVersion (
1010- *this , " __GLIBCXX__" , CXXStandardLibraryVersionInfo::LibStdCXX);
1011- if (!CXXStandardLibraryVersion)
1012- return std::nullopt ;
1013-
1014- if (CXXStandardLibraryVersion->Lib ==
1015- CXXStandardLibraryVersionInfo::LibStdCXX)
1016- return CXXStandardLibraryVersion->Version ;
1017- return std::nullopt ;
1018- }
1019-
1020- bool Preprocessor::NeedsStdLibCxxWorkaroundBefore (unsigned FixedVersion) {
1021- assert (FixedVersion >= 2000'00'00 && FixedVersion <= 2100'00'00 &&
1022- " invalid value for __GLIBCXX__" );
1023- std::optional<unsigned > Ver = getStdLibCxxVersion ();
1024- if (!Ver)
1025- return false ;
1026- return *Ver < FixedVersion;
1027- }
0 commit comments