Author: d0k Date: Tue Jan 15 09:20:05 2019 New Revision: 351209 URL: http://llvm.org/viewvc/llvm-project?rev=351209&view=rev Log: Revert "Correct the source range returned from preprocessor callbacks."
This reverts commit r350891. Also add a test case that would return an empty string with r350891. Modified: cfe/trunk/include/clang/Lex/Preprocessor.h cfe/trunk/lib/Lex/PPDirectives.cpp cfe/trunk/lib/Lex/PPExpressions.cpp cfe/trunk/unittests/Lex/PPCallbacksTest.cpp Modified: cfe/trunk/include/clang/Lex/Preprocessor.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/Preprocessor.h?rev=351209&r1=351208&r2=351209&view=diff ============================================================================== --- cfe/trunk/include/clang/Lex/Preprocessor.h (original) +++ cfe/trunk/include/clang/Lex/Preprocessor.h Tue Jan 15 09:20:05 2019 @@ -1816,8 +1816,8 @@ public: void CheckEndOfDirective(const char *DirType, bool EnableMacros = false); /// Read and discard all tokens remaining on the current line until - /// the tok::eod token is found. Returns the range of the skipped tokens. - SourceRange DiscardUntilEndOfDirective(); + /// the tok::eod token is found. + void DiscardUntilEndOfDirective(); /// Returns true if the preprocessor has seen a use of /// __DATE__ or __TIME__ in the file so far. @@ -1982,9 +1982,6 @@ private: /// True if the expression contained identifiers that were undefined. bool IncludedUndefinedIds; - - /// The source range for the expression. - SourceRange ExprRange; }; /// Evaluate an integer constant expression that may occur after a Modified: cfe/trunk/lib/Lex/PPDirectives.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPDirectives.cpp?rev=351209&r1=351208&r2=351209&view=diff ============================================================================== --- cfe/trunk/lib/Lex/PPDirectives.cpp (original) +++ cfe/trunk/lib/Lex/PPDirectives.cpp Tue Jan 15 09:20:05 2019 @@ -79,18 +79,12 @@ Preprocessor::AllocateVisibilityMacroDir /// Read and discard all tokens remaining on the current line until /// the tok::eod token is found. -SourceRange Preprocessor::DiscardUntilEndOfDirective() { +void Preprocessor::DiscardUntilEndOfDirective() { Token Tmp; - SourceRange Res; - - LexUnexpandedToken(Tmp); - Res.setBegin(Tmp.getLocation()); - while (Tmp.isNot(tok::eod)) { - assert(Tmp.isNot(tok::eof) && "EOF seen while discarding directive tokens"); + do { LexUnexpandedToken(Tmp); - } - Res.setEnd(Tmp.getLocation()); - return Res; + assert(Tmp.isNot(tok::eof) && "EOF seen while discarding directive tokens"); + } while (Tmp.isNot(tok::eod)); } /// Enumerates possible cases of #define/#undef a reserved identifier. @@ -544,19 +538,19 @@ void Preprocessor::SkipExcludedCondition if (CondInfo.WasSkipping || CondInfo.FoundNonSkip) { DiscardUntilEndOfDirective(); } else { + const SourceLocation CondBegin = CurPPLexer->getSourceLocation(); // Restore the value of LexingRawMode so that identifiers are // looked up, etc, inside the #elif expression. assert(CurPPLexer->LexingRawMode && "We have to be skipping here!"); CurPPLexer->LexingRawMode = false; IdentifierInfo *IfNDefMacro = nullptr; - DirectiveEvalResult DER = EvaluateDirectiveExpression(IfNDefMacro); - const bool CondValue = DER.Conditional; + const bool CondValue = EvaluateDirectiveExpression(IfNDefMacro).Conditional; CurPPLexer->LexingRawMode = true; if (Callbacks) { - Callbacks->Elif( - Tok.getLocation(), DER.ExprRange, - (CondValue ? PPCallbacks::CVK_True : PPCallbacks::CVK_False), - CondInfo.IfLoc); + const SourceLocation CondEnd = CurPPLexer->getSourceLocation(); + Callbacks->Elif(Tok.getLocation(), + SourceRange(CondBegin, CondEnd), + (CondValue ? PPCallbacks::CVK_True : PPCallbacks::CVK_False), CondInfo.IfLoc); } // If this condition is true, enter it! if (CondValue) { @@ -1122,24 +1116,19 @@ void Preprocessor::HandleLineDirective() ; // ok else if (StrTok.isNot(tok::string_literal)) { Diag(StrTok, diag::err_pp_line_invalid_filename); - DiscardUntilEndOfDirective(); - return; + return DiscardUntilEndOfDirective(); } else if (StrTok.hasUDSuffix()) { Diag(StrTok, diag::err_invalid_string_udl); - DiscardUntilEndOfDirective(); - return; + return DiscardUntilEndOfDirective(); } else { // Parse and validate the string, converting it into a unique ID. StringLiteralParser Literal(StrTok, *this); assert(Literal.isAscii() && "Didn't allow wide strings in"); - if (Literal.hadError) { - DiscardUntilEndOfDirective(); - return; - } + if (Literal.hadError) + return DiscardUntilEndOfDirective(); if (Literal.Pascal) { Diag(StrTok, diag::err_pp_linemarker_invalid_filename); - DiscardUntilEndOfDirective(); - return; + return DiscardUntilEndOfDirective(); } FilenameID = SourceMgr.getLineTableFilenameID(Literal.GetString()); @@ -1272,24 +1261,19 @@ void Preprocessor::HandleDigitDirective( FileKind = SourceMgr.getFileCharacteristic(DigitTok.getLocation()); } else if (StrTok.isNot(tok::string_literal)) { Diag(StrTok, diag::err_pp_linemarker_invalid_filename); - DiscardUntilEndOfDirective(); - return; + return DiscardUntilEndOfDirective(); } else if (StrTok.hasUDSuffix()) { Diag(StrTok, diag::err_invalid_string_udl); - DiscardUntilEndOfDirective(); - return; + return DiscardUntilEndOfDirective(); } else { // Parse and validate the string, converting it into a unique ID. StringLiteralParser Literal(StrTok, *this); assert(Literal.isAscii() && "Didn't allow wide strings in"); - if (Literal.hadError) { - DiscardUntilEndOfDirective(); - return; - } + if (Literal.hadError) + return DiscardUntilEndOfDirective(); if (Literal.Pascal) { Diag(StrTok, diag::err_pp_linemarker_invalid_filename); - DiscardUntilEndOfDirective(); - return; + return DiscardUntilEndOfDirective(); } FilenameID = SourceMgr.getLineTableFilenameID(Literal.GetString()); @@ -1359,8 +1343,7 @@ void Preprocessor::HandleIdentSCCSDirect if (StrTok.hasUDSuffix()) { Diag(StrTok, diag::err_invalid_string_udl); - DiscardUntilEndOfDirective(); - return; + return DiscardUntilEndOfDirective(); } // Verify that there is nothing after the string, other than EOD. @@ -2800,8 +2783,10 @@ void Preprocessor::HandleIfDirective(Tok // Parse and evaluate the conditional expression. IdentifierInfo *IfNDefMacro = nullptr; + const SourceLocation ConditionalBegin = CurPPLexer->getSourceLocation(); const DirectiveEvalResult DER = EvaluateDirectiveExpression(IfNDefMacro); const bool ConditionalTrue = DER.Conditional; + const SourceLocation ConditionalEnd = CurPPLexer->getSourceLocation(); // If this condition is equivalent to #ifndef X, and if this is the first // directive seen, handle it for the multiple-include optimization. @@ -2814,9 +2799,9 @@ void Preprocessor::HandleIfDirective(Tok } if (Callbacks) - Callbacks->If( - IfToken.getLocation(), DER.ExprRange, - (ConditionalTrue ? PPCallbacks::CVK_True : PPCallbacks::CVK_False)); + Callbacks->If(IfToken.getLocation(), + SourceRange(ConditionalBegin, ConditionalEnd), + (ConditionalTrue ? PPCallbacks::CVK_True : PPCallbacks::CVK_False)); // Should we include the stuff contained by this directive? if (PPOpts->SingleFileParseMode && DER.IncludedUndefinedIds) { @@ -2909,7 +2894,9 @@ void Preprocessor::HandleElifDirective(T // #elif directive in a non-skipping conditional... start skipping. // We don't care what the condition is, because we will always skip it (since // the block immediately before it was included). - SourceRange ConditionRange = DiscardUntilEndOfDirective(); + const SourceLocation ConditionalBegin = CurPPLexer->getSourceLocation(); + DiscardUntilEndOfDirective(); + const SourceLocation ConditionalEnd = CurPPLexer->getSourceLocation(); PPConditionalInfo CI; if (CurPPLexer->popConditionalLevel(CI)) { @@ -2925,7 +2912,8 @@ void Preprocessor::HandleElifDirective(T if (CI.FoundElse) Diag(ElifToken, diag::pp_err_elif_after_else); if (Callbacks) - Callbacks->Elif(ElifToken.getLocation(), ConditionRange, + Callbacks->Elif(ElifToken.getLocation(), + SourceRange(ConditionalBegin, ConditionalEnd), PPCallbacks::CVK_NotEvaluated, CI.IfLoc); if (PPOpts->SingleFileParseMode && !CI.FoundNonSkip) { Modified: cfe/trunk/lib/Lex/PPExpressions.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPExpressions.cpp?rev=351209&r1=351208&r2=351209&view=diff ============================================================================== --- cfe/trunk/lib/Lex/PPExpressions.cpp (original) +++ cfe/trunk/lib/Lex/PPExpressions.cpp Tue Jan 15 09:20:05 2019 @@ -152,8 +152,8 @@ static bool EvaluateDefined(PPValue &Res return true; } // Consume the ). - PP.LexNonComment(PeekTok); Result.setEnd(PeekTok.getLocation()); + PP.LexNonComment(PeekTok); } else { // Consume identifier. Result.setEnd(PeekTok.getLocation()); @@ -849,7 +849,7 @@ Preprocessor::EvaluateDirectiveExpressio // Restore 'DisableMacroExpansion'. DisableMacroExpansion = DisableMacroExpansionAtStartOfDirective; - return {false, DT.IncludedUndefinedIds, {}}; + return {false, DT.IncludedUndefinedIds}; } // If we are at the end of the expression after just parsing a value, there @@ -863,7 +863,7 @@ Preprocessor::EvaluateDirectiveExpressio // Restore 'DisableMacroExpansion'. DisableMacroExpansion = DisableMacroExpansionAtStartOfDirective; - return {ResVal.Val != 0, DT.IncludedUndefinedIds, ResVal.getRange()}; + return {ResVal.Val != 0, DT.IncludedUndefinedIds}; } // Otherwise, we must have a binary operator (e.g. "#if 1 < 2"), so parse the @@ -876,7 +876,7 @@ Preprocessor::EvaluateDirectiveExpressio // Restore 'DisableMacroExpansion'. DisableMacroExpansion = DisableMacroExpansionAtStartOfDirective; - return {false, DT.IncludedUndefinedIds, ResVal.getRange()}; + return {false, DT.IncludedUndefinedIds}; } // If we aren't at the tok::eod token, something bad happened, like an extra @@ -888,5 +888,5 @@ Preprocessor::EvaluateDirectiveExpressio // Restore 'DisableMacroExpansion'. DisableMacroExpansion = DisableMacroExpansionAtStartOfDirective; - return {ResVal.Val != 0, DT.IncludedUndefinedIds, ResVal.getRange()}; + return {ResVal.Val != 0, DT.IncludedUndefinedIds}; } Modified: cfe/trunk/unittests/Lex/PPCallbacksTest.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Lex/PPCallbacksTest.cpp?rev=351209&r1=351208&r2=351209&view=diff ============================================================================== --- cfe/trunk/unittests/Lex/PPCallbacksTest.cpp (original) +++ cfe/trunk/unittests/Lex/PPCallbacksTest.cpp Tue Jan 15 09:20:05 2019 @@ -431,58 +431,16 @@ TEST_F(PPCallbacksTest, OpenCLExtensionP } TEST_F(PPCallbacksTest, DirectiveExprRanges) { - const auto &Results1 = DirectiveExprRange("#if FLUZZY_FLOOF\n#endif\n"); - EXPECT_EQ(Results1.size(), 1U); - EXPECT_EQ( - GetSourceStringToEnd(CharSourceRange(Results1[0].ConditionRange, false)), - "FLUZZY_FLOOF"); - - const auto &Results2 = DirectiveExprRange("#if 1 + 4 < 7\n#endif\n"); - EXPECT_EQ(Results2.size(), 1U); - EXPECT_EQ( - GetSourceStringToEnd(CharSourceRange(Results2[0].ConditionRange, false)), - "1 + 4 < 7"); - - const auto &Results3 = DirectiveExprRange("#if 1 + \\\n 2\n#endif\n"); - EXPECT_EQ(Results3.size(), 1U); - EXPECT_EQ( - GetSourceStringToEnd(CharSourceRange(Results3[0].ConditionRange, false)), - "1 + \\\n 2"); - - const auto &Results4 = DirectiveExprRange("#if 0\n#elif FLOOFY\n#endif\n"); - EXPECT_EQ(Results4.size(), 2U); - EXPECT_EQ( - GetSourceStringToEnd(CharSourceRange(Results4[0].ConditionRange, false)), - "0"); - EXPECT_EQ( - GetSourceStringToEnd(CharSourceRange(Results4[1].ConditionRange, false)), - "FLOOFY"); - - const auto &Results5 = DirectiveExprRange("#if 1\n#elif FLOOFY\n#endif\n"); - EXPECT_EQ(Results5.size(), 2U); - EXPECT_EQ( - GetSourceStringToEnd(CharSourceRange(Results5[0].ConditionRange, false)), - "1"); - EXPECT_EQ( - GetSourceStringToEnd(CharSourceRange(Results5[1].ConditionRange, false)), - "FLOOFY"); - - const auto &Results6 = - DirectiveExprRange("#if defined(FLUZZY_FLOOF)\n#endif\n"); - EXPECT_EQ(Results6.size(), 1U); - EXPECT_EQ( - GetSourceStringToEnd(CharSourceRange(Results6[0].ConditionRange, false)), - "defined(FLUZZY_FLOOF)"); - - const auto &Results7 = - DirectiveExprRange("#if 1\n#elif defined(FLOOFY)\n#endif\n"); - EXPECT_EQ(Results7.size(), 2U); - EXPECT_EQ( - GetSourceStringToEnd(CharSourceRange(Results7[0].ConditionRange, false)), - "1"); - EXPECT_EQ( - GetSourceStringToEnd(CharSourceRange(Results7[1].ConditionRange, false)), - "defined(FLOOFY)"); + const auto &Results8 = + DirectiveExprRange("#define FLOOFY 0\n#if __FILE__ > FLOOFY\n#endif\n"); + EXPECT_EQ(Results8.size(), 1U); + EXPECT_EQ( + GetSourceStringToEnd(CharSourceRange(Results8[0].ConditionRange, false)), + " __FILE__ > FLOOFY\n#"); + EXPECT_EQ( + Lexer::getSourceText(CharSourceRange(Results8[0].ConditionRange, false), + SourceMgr, LangOpts), + " __FILE__ > FLOOFY\n"); } } // namespace _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits