<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none;"><!-- P {margin-top:0;margin-bottom:0;} --></style>
</head>
<body dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt;color:#000000;font-family:Calibri,Arial,Helvetica,sans-serif;" dir="ltr">
<p>My fault, waited too long to land it and didn't catch the addition of the file in between.</p>
<br>
<br>
<div style="color: rgb(0, 0, 0);">
<div>
<hr tabindex="-1" style="display:inline-block; width:98%">
<div id="x_divRplyFwdMsg" dir="ltr"><font face="Calibri, sans-serif" color="#000000" style="font-size:11pt"><b>From:</b> vsk@apple.com <vsk@apple.com> on behalf of Vedant Kumar <vsk@apple.com><br>
<b>Sent:</b> Wednesday, April 26, 2017 9:19 PM<br>
<b>To:</b> Frederich Munch<br>
<b>Cc:</b> cfe-commits; Vedant Kumar<br>
<b>Subject:</b> Re: r301449 - PPCallbacks::MacroUndefined, change signature and add test.</font>
<div> </div>
</div>
</div>
<font size="2"><span style="font-size:10pt;">
<div class="PlainText">And I reverted my revert in r301472. See the thread re: r301470.<br>
<br>
Sorry for the noise,<br>
vedant<br>
<br>
> On Apr 26, 2017, at 2:12 PM, Vedant Kumar via cfe-commits <cfe-commits@lists.llvm.org> wrote:<br>
> <br>
> Hi Frederich,<br>
> <br>
> I had to revert this to unblock myself (r301469).<br>
> <br>
> best,<br>
> vedant<br>
> <br>
>> On Apr 26, 2017, at 1:51 PM, Evgenii Stepanov via cfe-commits <cfe-commits@lists.llvm.org> wrote:<br>
>> <br>
>> Please change the signature of all overriding definitions as well.<br>
>> <br>
>> /code/llvm/tools/clang/lib/CodeGen/MacroPPCallbacks.h:114:50: error:<br>
>> non-virtual member function marked 'override' hides virtual member<br>
>> function<br>
>> const MacroDefinition &MD) override;<br>
>> ^<br>
>> /code/llvm/tools/clang/include/clang/Lex/PPCallbacks.h:255:16: note:<br>
>> hidden overloaded virtual function<br>
>> 'clang::PPCallbacks::MacroUndefined' declared here: different number<br>
>> of parameters (3 vs 2)<br>
>> virtual void MacroUndefined(const Token &MacroNameTok,<br>
>> <br>
>> On Wed, Apr 26, 2017 at 12:47 PM, Frederich Munch via cfe-commits<br>
>> <cfe-commits@lists.llvm.org> wrote:<br>
>>> Author: marsupial<br>
>>> Date: Wed Apr 26 14:47:31 2017<br>
>>> New Revision: 301449<br>
>>> <br>
>>> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=301449&view=rev" id="LPlnk575867" previewremoved="true">
http://llvm.org/viewvc/llvm-project?rev=301449&view=rev</a><br>
>>> Log:<br>
>>> PPCallbacks::MacroUndefined, change signature and add test.<br>
>>> <br>
>>> Summary:<br>
>>> The PPCallbacks::MacroUndefined callback is currently insufficient for clients that need to track the MacroDirectives.<br>
>>> This patch adds an additional argument to PPCallbacks::MacroUndefined that is the undef MacroDirective.<br>
>>> <br>
>>> Reviewers: bruno, manmanren<br>
>>> <br>
>>> Reviewed By: bruno<br>
>>> <br>
>>> Subscribers: nemanjai, cfe-commits<br>
>>> <br>
>>> Differential Revision: <a href="https://reviews.llvm.org/D29923" id="LPlnk419708" previewremoved="true">
https://reviews.llvm.org/D29923</a><br>
>>> <br>
>>> Modified:<br>
>>> cfe/trunk/include/clang/Lex/PPCallbacks.h<br>
>>> cfe/trunk/include/clang/Lex/PreprocessingRecord.h<br>
>>> cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp<br>
>>> cfe/trunk/lib/Lex/PPDirectives.cpp<br>
>>> cfe/trunk/lib/Lex/PreprocessingRecord.cpp<br>
>>> cfe/trunk/tools/libclang/Indexing.cpp<br>
>>> cfe/trunk/unittests/Basic/SourceManagerTest.cpp<br>
>>> <br>
>>> Modified: cfe/trunk/include/clang/Lex/PPCallbacks.h<br>
>>> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/PPCallbacks.h?rev=301449&r1=301448&r2=301449&view=diff" id="LPlnk441761" previewremoved="true">
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/PPCallbacks.h?rev=301449&r1=301448&r2=301449&view=diff</a><br>
>>> ==============================================================================<br>
>>> --- cfe/trunk/include/clang/Lex/PPCallbacks.h (original)<br>
>>> +++ cfe/trunk/include/clang/Lex/PPCallbacks.h Wed Apr 26 14:47:31 2017<br>
>>> @@ -247,10 +247,14 @@ public:<br>
>>> }<br>
>>> <br>
>>> /// \brief Hook called whenever a macro \#undef is seen.<br>
>>> + /// \param Token The active Token<br>
>>> + /// \param MD A MacroDefinition for the named macro.<br>
>>> + /// \param Undef New MacroDirective if the macro was defined, null otherwise.<br>
>>> ///<br>
>>> /// MD is released immediately following this callback.<br>
>>> virtual void MacroUndefined(const Token &MacroNameTok,<br>
>>> - const MacroDefinition &MD) {<br>
>>> + const MacroDefinition &MD,<br>
>>> + const MacroDirective *Undef) {<br>
>>> }<br>
>>> <br>
>>> /// \brief Hook called whenever the 'defined' operator is seen.<br>
>>> @@ -439,15 +443,17 @@ public:<br>
>>> Second->MacroExpands(MacroNameTok, MD, Range, Args);<br>
>>> }<br>
>>> <br>
>>> - void MacroDefined(const Token &MacroNameTok, const MacroDirective *MD) override {<br>
>>> + void MacroDefined(const Token &MacroNameTok,<br>
>>> + const MacroDirective *MD) override {<br>
>>> First->MacroDefined(MacroNameTok, MD);<br>
>>> Second->MacroDefined(MacroNameTok, MD);<br>
>>> }<br>
>>> <br>
>>> void MacroUndefined(const Token &MacroNameTok,<br>
>>> - const MacroDefinition &MD) override {<br>
>>> - First->MacroUndefined(MacroNameTok, MD);<br>
>>> - Second->MacroUndefined(MacroNameTok, MD);<br>
>>> + const MacroDefinition &MD,<br>
>>> + const MacroDirective *Undef) override {<br>
>>> + First->MacroUndefined(MacroNameTok, MD, Undef);<br>
>>> + Second->MacroUndefined(MacroNameTok, MD, Undef);<br>
>>> }<br>
>>> <br>
>>> void Defined(const Token &MacroNameTok, const MacroDefinition &MD,<br>
>>> <br>
>>> Modified: cfe/trunk/include/clang/Lex/PreprocessingRecord.h<br>
>>> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/PreprocessingRecord.h?rev=301449&r1=301448&r2=301449&view=diff" id="LPlnk22630" previewremoved="true">
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Lex/PreprocessingRecord.h?rev=301449&r1=301448&r2=301449&view=diff</a><br>
>>> ==============================================================================<br>
>>> --- cfe/trunk/include/clang/Lex/PreprocessingRecord.h (original)<br>
>>> +++ cfe/trunk/include/clang/Lex/PreprocessingRecord.h Wed Apr 26 14:47:31 2017<br>
>>> @@ -488,7 +488,8 @@ namespace clang {<br>
>>> void MacroExpands(const Token &Id, const MacroDefinition &MD,<br>
>>> SourceRange Range, const MacroArgs *Args) override;<br>
>>> void MacroDefined(const Token &Id, const MacroDirective *MD) override;<br>
>>> - void MacroUndefined(const Token &Id, const MacroDefinition &MD) override;<br>
>>> + void MacroUndefined(const Token &Id, const MacroDefinition &MD,<br>
>>> + const MacroDirective *Undef) override;<br>
>>> void InclusionDirective(SourceLocation HashLoc, const Token &IncludeTok,<br>
>>> StringRef FileName, bool IsAngled,<br>
>>> CharSourceRange FilenameRange,<br>
>>> <br>
>>> Modified: cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp<br>
>>> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp?rev=301449&r1=301448&r2=301449&view=diff" id="LPlnk732057">
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp?rev=301449&r1=301448&r2=301449&view=diff</a><br>
>>> ==============================================================================<br>
>>> --- cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp (original)<br>
>>> +++ cfe/trunk/lib/Frontend/PrintPreprocessedOutput.cpp Wed Apr 26 14:47:31 2017<br>
>>> @@ -172,7 +172,8 @@ public:<br>
>>> <br>
>>> /// MacroUndefined - This hook is called whenever a macro #undef is seen.<br>
>>> void MacroUndefined(const Token &MacroNameTok,<br>
>>> - const MacroDefinition &MD) override;<br>
>>> + const MacroDefinition &MD,<br>
>>> + const MacroDirective *Undef) override;<br>
>>> };<br>
>>> } // end anonymous namespace<br>
>>> <br>
>>> @@ -389,7 +390,8 @@ void PrintPPOutputPPCallbacks::MacroDefi<br>
>>> }<br>
>>> <br>
>>> void PrintPPOutputPPCallbacks::MacroUndefined(const Token &MacroNameTok,<br>
>>> - const MacroDefinition &MD) {<br>
>>> + const MacroDefinition &MD,<br>
>>> + const MacroDirective *Undef) {<br>
>>> // Only print out macro definitions in -dD mode.<br>
>>> if (!DumpDefines) return;<br>
>>> <br>
>>> <br>
>>> Modified: cfe/trunk/lib/Lex/PPDirectives.cpp<br>
>>> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPDirectives.cpp?rev=301449&r1=301448&r2=301449&view=diff">
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PPDirectives.cpp?rev=301449&r1=301448&r2=301449&view=diff</a><br>
>>> ==============================================================================<br>
>>> --- cfe/trunk/lib/Lex/PPDirectives.cpp (original)<br>
>>> +++ cfe/trunk/lib/Lex/PPDirectives.cpp Wed Apr 26 14:47:31 2017<br>
>>> @@ -2592,25 +2592,26 @@ void Preprocessor::HandleUndefDirective(<br>
>>> // Okay, we have a valid identifier to undef.<br>
>>> auto *II = MacroNameTok.getIdentifierInfo();<br>
>>> auto MD = getMacroDefinition(II);<br>
>>> + UndefMacroDirective *Undef = nullptr;<br>
>>> +<br>
>>> + // If the macro is not defined, this is a noop undef.<br>
>>> + if (const MacroInfo *MI = MD.getMacroInfo()) {<br>
>>> + if (!MI->isUsed() && MI->isWarnIfUnused())<br>
>>> + Diag(MI->getDefinitionLoc(), diag::pp_macro_not_used);<br>
>>> +<br>
>>> + if (MI->isWarnIfUnused())<br>
>>> + WarnUnusedMacroLocs.erase(MI->getDefinitionLoc());<br>
>>> +<br>
>>> + Undef = AllocateUndefMacroDirective(MacroNameTok.getLocation());<br>
>>> + }<br>
>>> <br>
>>> // If the callbacks want to know, tell them about the macro #undef.<br>
>>> // Note: no matter if the macro was defined or not.<br>
>>> if (Callbacks)<br>
>>> - Callbacks->MacroUndefined(MacroNameTok, MD);<br>
>>> -<br>
>>> - // If the macro is not defined, this is a noop undef, just return.<br>
>>> - const MacroInfo *MI = MD.getMacroInfo();<br>
>>> - if (!MI)<br>
>>> - return;<br>
>>> -<br>
>>> - if (!MI->isUsed() && MI->isWarnIfUnused())<br>
>>> - Diag(MI->getDefinitionLoc(), diag::pp_macro_not_used);<br>
>>> -<br>
>>> - if (MI->isWarnIfUnused())<br>
>>> - WarnUnusedMacroLocs.erase(MI->getDefinitionLoc());<br>
>>> + Callbacks->MacroUndefined(MacroNameTok, MD, Undef);<br>
>>> <br>
>>> - appendMacroDirective(MacroNameTok.getIdentifierInfo(),<br>
>>> - AllocateUndefMacroDirective(MacroNameTok.getLocation()));<br>
>>> + if (Undef)<br>
>>> + appendMacroDirective(II, Undef);<br>
>>> }<br>
>>> <br>
>>> //===----------------------------------------------------------------------===//<br>
>>> <br>
>>> Modified: cfe/trunk/lib/Lex/PreprocessingRecord.cpp<br>
>>> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PreprocessingRecord.cpp?rev=301449&r1=301448&r2=301449&view=diff">
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Lex/PreprocessingRecord.cpp?rev=301449&r1=301448&r2=301449&view=diff</a><br>
>>> ==============================================================================<br>
>>> --- cfe/trunk/lib/Lex/PreprocessingRecord.cpp (original)<br>
>>> +++ cfe/trunk/lib/Lex/PreprocessingRecord.cpp Wed Apr 26 14:47:31 2017<br>
>>> @@ -422,7 +422,8 @@ void PreprocessingRecord::MacroDefined(c<br>
>>> }<br>
>>> <br>
>>> void PreprocessingRecord::MacroUndefined(const Token &Id,<br>
>>> - const MacroDefinition &MD) {<br>
>>> + const MacroDefinition &MD,<br>
>>> + const MacroDirective *Undef) {<br>
>>> MD.forAllDefinitions([&](MacroInfo *MI) { MacroDefinitions.erase(MI); });<br>
>>> }<br>
>>> <br>
>>> <br>
>>> Modified: cfe/trunk/tools/libclang/Indexing.cpp<br>
>>> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/Indexing.cpp?rev=301449&r1=301448&r2=301449&view=diff">
http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/libclang/Indexing.cpp?rev=301449&r1=301448&r2=301449&view=diff</a><br>
>>> ==============================================================================<br>
>>> --- cfe/trunk/tools/libclang/Indexing.cpp (original)<br>
>>> +++ cfe/trunk/tools/libclang/Indexing.cpp Wed Apr 26 14:47:31 2017<br>
>>> @@ -262,7 +262,8 @@ public:<br>
>>> /// MacroUndefined - This hook is called whenever a macro #undef is seen.<br>
>>> /// MI is released immediately following this callback.<br>
>>> void MacroUndefined(const Token &MacroNameTok,<br>
>>> - const MacroDefinition &MD) override {}<br>
>>> + const MacroDefinition &MD,<br>
>>> + const MacroDirective *UD) override {}<br>
>>> <br>
>>> /// MacroExpands - This is called by when a macro invocation is found.<br>
>>> void MacroExpands(const Token &MacroNameTok, const MacroDefinition &MD,<br>
>>> <br>
>>> Modified: cfe/trunk/unittests/Basic/SourceManagerTest.cpp<br>
>>> URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Basic/SourceManagerTest.cpp?rev=301449&r1=301448&r2=301449&view=diff">
http://llvm.org/viewvc/llvm-project/cfe/trunk/unittests/Basic/SourceManagerTest.cpp?rev=301449&r1=301448&r2=301449&view=diff</a><br>
>>> ==============================================================================<br>
>>> --- cfe/trunk/unittests/Basic/SourceManagerTest.cpp (original)<br>
>>> +++ cfe/trunk/unittests/Basic/SourceManagerTest.cpp Wed Apr 26 14:47:31 2017<br>
>>> @@ -249,12 +249,18 @@ TEST_F(SourceManagerTest, getMacroArgExp<br>
>>> namespace {<br>
>>> <br>
>>> struct MacroAction {<br>
>>> + enum Kind { kExpansion, kDefinition, kUnDefinition};<br>
>>> +<br>
>>> SourceLocation Loc;<br>
>>> std::string Name;<br>
>>> - bool isDefinition; // if false, it is expansion.<br>
>>> -<br>
>>> - MacroAction(SourceLocation Loc, StringRef Name, bool isDefinition)<br>
>>> - : Loc(Loc), Name(Name), isDefinition(isDefinition) { }<br>
>>> + unsigned MAKind : 3;<br>
>>> +<br>
>>> + MacroAction(SourceLocation Loc, StringRef Name, unsigned K)<br>
>>> + : Loc(Loc), Name(Name), MAKind(K) { }<br>
>>> +<br>
>>> + bool isExpansion() const { return MAKind == kExpansion; }<br>
>>> + bool isDefinition() const { return MAKind & kDefinition; }<br>
>>> + bool isUnDefinition() const { return MAKind & kUnDefinition; }<br>
>>> };<br>
>>> <br>
>>> class MacroTracker : public PPCallbacks {<br>
>>> @@ -267,13 +273,22 @@ public:<br>
>>> const MacroDirective *MD) override {<br>
>>> Macros.push_back(MacroAction(MD->getLocation(),<br>
>>> MacroNameTok.getIdentifierInfo()->getName(),<br>
>>> - true));<br>
>>> + MacroAction::kDefinition));<br>
>>> + }<br>
>>> + void MacroUndefined(const Token &MacroNameTok,<br>
>>> + const MacroDefinition &MD,<br>
>>> + const MacroDirective *UD) override {<br>
>>> + Macros.push_back(<br>
>>> + MacroAction(UD ? UD->getLocation() : SourceLocation(),<br>
>>> + MacroNameTok.getIdentifierInfo()->getName(),<br>
>>> + UD ? MacroAction::kDefinition | MacroAction::kUnDefinition<br>
>>> + : MacroAction::kUnDefinition));<br>
>>> }<br>
>>> void MacroExpands(const Token &MacroNameTok, const MacroDefinition &MD,<br>
>>> SourceRange Range, const MacroArgs *Args) override {<br>
>>> Macros.push_back(MacroAction(MacroNameTok.getLocation(),<br>
>>> MacroNameTok.getIdentifierInfo()->getName(),<br>
>>> - false));<br>
>>> + MacroAction::kExpansion));<br>
>>> }<br>
>>> };<br>
>>> <br>
>>> @@ -281,7 +296,10 @@ public:<br>
>>> <br>
>>> TEST_F(SourceManagerTest, isBeforeInTranslationUnitWithMacroInInclude) {<br>
>>> const char *header =<br>
>>> - "#define MACRO_IN_INCLUDE 0\n";<br>
>>> + "#define MACRO_IN_INCLUDE 0\n"<br>
>>> + "#define MACRO_DEFINED\n"<br>
>>> + "#undef MACRO_DEFINED\n"<br>
>>> + "#undef MACRO_UNDEFINED\n";<br>
>>> <br>
>>> const char *main =<br>
>>> "#define M(x) x\n"<br>
>>> @@ -327,34 +345,46 @@ TEST_F(SourceManagerTest, isBeforeInTran<br>
>>> // Make sure we got the tokens that we expected.<br>
>>> ASSERT_EQ(0U, toks.size());<br>
>>> <br>
>>> - ASSERT_EQ(9U, Macros.size());<br>
>>> + ASSERT_EQ(15U, Macros.size());<br>
>>> // #define M(x) x<br>
>>> - ASSERT_TRUE(Macros[0].isDefinition);<br>
>>> + ASSERT_TRUE(Macros[0].isDefinition());<br>
>>> ASSERT_EQ("M", Macros[0].Name);<br>
>>> // #define INC "/test-header.h"<br>
>>> - ASSERT_TRUE(Macros[1].isDefinition);<br>
>>> + ASSERT_TRUE(Macros[1].isDefinition());<br>
>>> ASSERT_EQ("INC", Macros[1].Name);<br>
>>> // M expansion in #include M(INC)<br>
>>> - ASSERT_FALSE(Macros[2].isDefinition);<br>
>>> + ASSERT_FALSE(Macros[2].isDefinition());<br>
>>> ASSERT_EQ("M", Macros[2].Name);<br>
>>> // INC expansion in #include M(INC)<br>
>>> - ASSERT_FALSE(Macros[3].isDefinition);<br>
>>> + ASSERT_TRUE(Macros[3].isExpansion());<br>
>>> ASSERT_EQ("INC", Macros[3].Name);<br>
>>> // #define MACRO_IN_INCLUDE 0<br>
>>> - ASSERT_TRUE(Macros[4].isDefinition);<br>
>>> + ASSERT_TRUE(Macros[4].isDefinition());<br>
>>> ASSERT_EQ("MACRO_IN_INCLUDE", Macros[4].Name);<br>
>>> + // #define MACRO_DEFINED<br>
>>> + ASSERT_TRUE(Macros[5].isDefinition());<br>
>>> + ASSERT_FALSE(Macros[5].isUnDefinition());<br>
>>> + ASSERT_EQ("MACRO_DEFINED", Macros[5].Name);<br>
>>> + // #undef MACRO_DEFINED<br>
>>> + ASSERT_TRUE(Macros[6].isDefinition());<br>
>>> + ASSERT_TRUE(Macros[6].isUnDefinition());<br>
>>> + ASSERT_EQ("MACRO_DEFINED", Macros[6].Name);<br>
>>> + // #undef MACRO_UNDEFINED<br>
>>> + ASSERT_FALSE(Macros[7].isDefinition());<br>
>>> + ASSERT_TRUE(Macros[7].isUnDefinition());<br>
>>> + ASSERT_EQ("MACRO_UNDEFINED", Macros[7].Name);<br>
>>> // #define INC2 </test-header.h><br>
>>> - ASSERT_TRUE(Macros[5].isDefinition);<br>
>>> - ASSERT_EQ("INC2", Macros[5].Name);<br>
>>> + ASSERT_TRUE(Macros[8].isDefinition());<br>
>>> + ASSERT_EQ("INC2", Macros[8].Name);<br>
>>> // M expansion in #include M(INC2)<br>
>>> - ASSERT_FALSE(Macros[6].isDefinition);<br>
>>> - ASSERT_EQ("M", Macros[6].Name);<br>
>>> + ASSERT_FALSE(Macros[9].isDefinition());<br>
>>> + ASSERT_EQ("M", Macros[9].Name);<br>
>>> // INC2 expansion in #include M(INC2)<br>
>>> - ASSERT_FALSE(Macros[7].isDefinition);<br>
>>> - ASSERT_EQ("INC2", Macros[7].Name);<br>
>>> + ASSERT_TRUE(Macros[10].isExpansion());<br>
>>> + ASSERT_EQ("INC2", Macros[10].Name);<br>
>>> // #define MACRO_IN_INCLUDE 0<br>
>>> - ASSERT_TRUE(Macros[8].isDefinition);<br>
>>> - ASSERT_EQ("MACRO_IN_INCLUDE", Macros[8].Name);<br>
>>> + ASSERT_TRUE(Macros[11].isDefinition());<br>
>>> + ASSERT_EQ("MACRO_IN_INCLUDE", Macros[11].Name);<br>
>>> <br>
>>> // The INC expansion in #include M(INC) comes before the first<br>
>>> // MACRO_IN_INCLUDE definition of the included file.<br>
>>> @@ -362,7 +392,7 @@ TEST_F(SourceManagerTest, isBeforeInTran<br>
>>> <br>
>>> // The INC2 expansion in #include M(INC2) comes before the second<br>
>>> // MACRO_IN_INCLUDE definition of the included file.<br>
>>> - EXPECT_TRUE(SourceMgr.isBeforeInTranslationUnit(Macros[7].Loc, Macros[8].Loc));<br>
>>> + EXPECT_TRUE(SourceMgr.isBeforeInTranslationUnit(Macros[10].Loc, Macros[11].Loc));<br>
>>> }<br>
>>> <br>
>>> #endif<br>
>>> <br>
>>> <br>
>>> _______________________________________________<br>
>>> cfe-commits mailing list<br>
>>> cfe-commits@lists.llvm.org<br>
>>> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
>> _______________________________________________<br>
>> cfe-commits mailing list<br>
>> cfe-commits@lists.llvm.org<br>
>> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
> <br>
> _______________________________________________<br>
> cfe-commits mailing list<br>
> cfe-commits@lists.llvm.org<br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br>
<br>
</div>
</span></font></div>
</div>
</body>
</html>