LexerTest.cpp revision b0985c86f7f75e780bfeb366afdbee7676c28948
119d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis//===- unittests/Basic/LexerTest.cpp ------ Lexer tests -------------------===// 219d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis// 319d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis// The LLVM Compiler Infrastructure 419d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis// 519d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis// This file is distributed under the University of Illinois Open Source 619d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis// License. See LICENSE.TXT for details. 719d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis// 819d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis//===----------------------------------------------------------------------===// 919d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis 1019d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis#include "clang/Basic/SourceManager.h" 1119d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis#include "clang/Basic/FileManager.h" 1219d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis#include "clang/Basic/Diagnostic.h" 133aeb34f5639ca03ba952bef7239028eaaec33281Douglas Gregor#include "clang/Basic/DiagnosticOptions.h" 1419d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis#include "clang/Basic/LangOptions.h" 1519d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis#include "clang/Basic/TargetOptions.h" 1619d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis#include "clang/Basic/TargetInfo.h" 1719d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis#include "clang/Lex/ModuleLoader.h" 1819d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis#include "clang/Lex/HeaderSearch.h" 19b0985c86f7f75e780bfeb366afdbee7676c28948Douglas Gregor#include "clang/Lex/HeaderSearchOptions.h" 2019d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis#include "clang/Lex/Preprocessor.h" 2119d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis#include "llvm/Config/config.h" 2219d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis 2319d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis#include "gtest/gtest.h" 2419d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis 2519d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidisusing namespace llvm; 2619d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidisusing namespace clang; 2719d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis 2819d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidisnamespace { 2919d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis 3019d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis// The test fixture. 3119d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidisclass LexerTest : public ::testing::Test { 3219d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidisprotected: 3319d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis LexerTest() 3419d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis : FileMgr(FileMgrOpts), 3519d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis DiagID(new DiagnosticIDs()), 368e023611637905629b928915cbda22a90b2432c3Douglas Gregor Diags(DiagID, new DiagnosticOptions, new IgnoringDiagConsumer()), 3707f8cf4ec3ffb6668b35e7b864354faa76167209Douglas Gregor SourceMgr(Diags, FileMgr), 3807f8cf4ec3ffb6668b35e7b864354faa76167209Douglas Gregor TargetOpts(new TargetOptions) 3907f8cf4ec3ffb6668b35e7b864354faa76167209Douglas Gregor { 4007f8cf4ec3ffb6668b35e7b864354faa76167209Douglas Gregor TargetOpts->Triple = "x86_64-apple-darwin11.1.0"; 4107f8cf4ec3ffb6668b35e7b864354faa76167209Douglas Gregor Target = TargetInfo::CreateTargetInfo(Diags, *TargetOpts); 4219d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis } 4319d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis 4419d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis FileSystemOptions FileMgrOpts; 4519d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis FileManager FileMgr; 46c93dc7889644293e318e19d82830ea2acc45b678Dylan Noblesmith IntrusiveRefCntPtr<DiagnosticIDs> DiagID; 4719d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis DiagnosticsEngine Diags; 4819d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis SourceManager SourceMgr; 4919d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis LangOptions LangOpts; 5007f8cf4ec3ffb6668b35e7b864354faa76167209Douglas Gregor IntrusiveRefCntPtr<TargetOptions> TargetOpts; 51c93dc7889644293e318e19d82830ea2acc45b678Dylan Noblesmith IntrusiveRefCntPtr<TargetInfo> Target; 5219d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis}; 5319d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis 5419d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidisclass VoidModuleLoader : public ModuleLoader { 5519d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis virtual Module *loadModule(SourceLocation ImportLoc, ModuleIdPath Path, 5619d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis Module::NameVisibilityKind Visibility, 5719d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis bool IsInclusionDirective) { 5819d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis return 0; 5919d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis } 6019d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis}; 6119d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis 6219d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios KyrtzidisTEST_F(LexerTest, LexAPI) { 6319d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis const char *source = 6419d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis "#define M(x) [x]\n" 65d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis "#define N(x) x\n" 667f6cf9764b33381e03fcf7c44f7985a333212b06Argyrios Kyrtzidis "#define INN(x) x\n" 677f6cf9764b33381e03fcf7c44f7985a333212b06Argyrios Kyrtzidis "#define NOF1 INN(val)\n" 687f6cf9764b33381e03fcf7c44f7985a333212b06Argyrios Kyrtzidis "#define NOF2 val\n" 697f6cf9764b33381e03fcf7c44f7985a333212b06Argyrios Kyrtzidis "M(foo) N([bar])\n" 707f6cf9764b33381e03fcf7c44f7985a333212b06Argyrios Kyrtzidis "N(INN(val)) N(NOF1) N(NOF2) N(val)"; 717f6cf9764b33381e03fcf7c44f7985a333212b06Argyrios Kyrtzidis 7219d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis MemoryBuffer *buf = MemoryBuffer::getMemBuffer(source); 731c31ee8f9bf8c4de29cd8ca42dfe0fb37aa2bf52Fariborz Jahanian (void)SourceMgr.createMainFileIDForMemBuffer(buf); 7419d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis 7519d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis VoidModuleLoader ModLoader; 76b0985c86f7f75e780bfeb366afdbee7676c28948Douglas Gregor HeaderSearch HeaderInfo(new HeaderSearchOptions, FileMgr, Diags, LangOpts, 77b0985c86f7f75e780bfeb366afdbee7676c28948Douglas Gregor Target.getPtr()); 7819d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis Preprocessor PP(Diags, LangOpts, 7919d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis Target.getPtr(), 8019d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis SourceMgr, HeaderInfo, ModLoader, 8119d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis /*IILookup =*/ 0, 8219d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis /*OwnsHeaderSearch =*/false, 8319d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis /*DelayInitialization =*/ false); 8419d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis PP.EnterMainSourceFile(); 8519d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis 8619d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis std::vector<Token> toks; 8719d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis while (1) { 8819d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis Token tok; 8919d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis PP.Lex(tok); 9019d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis if (tok.is(tok::eof)) 9119d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis break; 9219d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis toks.push_back(tok); 9319d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis } 9419d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis 9519d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis // Make sure we got the tokens that we expected. 967f6cf9764b33381e03fcf7c44f7985a333212b06Argyrios Kyrtzidis ASSERT_EQ(10U, toks.size()); 9719d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis ASSERT_EQ(tok::l_square, toks[0].getKind()); 9819d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis ASSERT_EQ(tok::identifier, toks[1].getKind()); 9919d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis ASSERT_EQ(tok::r_square, toks[2].getKind()); 100d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis ASSERT_EQ(tok::l_square, toks[3].getKind()); 101d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis ASSERT_EQ(tok::identifier, toks[4].getKind()); 102d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis ASSERT_EQ(tok::r_square, toks[5].getKind()); 1037f6cf9764b33381e03fcf7c44f7985a333212b06Argyrios Kyrtzidis ASSERT_EQ(tok::identifier, toks[6].getKind()); 1047f6cf9764b33381e03fcf7c44f7985a333212b06Argyrios Kyrtzidis ASSERT_EQ(tok::identifier, toks[7].getKind()); 1057f6cf9764b33381e03fcf7c44f7985a333212b06Argyrios Kyrtzidis ASSERT_EQ(tok::identifier, toks[8].getKind()); 1067f6cf9764b33381e03fcf7c44f7985a333212b06Argyrios Kyrtzidis ASSERT_EQ(tok::identifier, toks[9].getKind()); 10719d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis 10819d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis SourceLocation lsqrLoc = toks[0].getLocation(); 10919d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis SourceLocation idLoc = toks[1].getLocation(); 11019d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis SourceLocation rsqrLoc = toks[2].getLocation(); 11111b652d41d0d97380ab321a1dba48ecb044f9de8Argyrios Kyrtzidis std::pair<SourceLocation,SourceLocation> 11211b652d41d0d97380ab321a1dba48ecb044f9de8Argyrios Kyrtzidis macroPair = SourceMgr.getExpansionRange(lsqrLoc); 11311b652d41d0d97380ab321a1dba48ecb044f9de8Argyrios Kyrtzidis SourceRange macroRange = SourceRange(macroPair.first, macroPair.second); 11411b652d41d0d97380ab321a1dba48ecb044f9de8Argyrios Kyrtzidis 11569bda4c027671df7163619f215209529eb236620Argyrios Kyrtzidis SourceLocation Loc; 11669bda4c027671df7163619f215209529eb236620Argyrios Kyrtzidis EXPECT_TRUE(Lexer::isAtStartOfMacroExpansion(lsqrLoc, SourceMgr, LangOpts, &Loc)); 11711b652d41d0d97380ab321a1dba48ecb044f9de8Argyrios Kyrtzidis EXPECT_EQ(Loc, macroRange.getBegin()); 11819d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis EXPECT_FALSE(Lexer::isAtStartOfMacroExpansion(idLoc, SourceMgr, LangOpts)); 11919d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis EXPECT_FALSE(Lexer::isAtEndOfMacroExpansion(idLoc, SourceMgr, LangOpts)); 12069bda4c027671df7163619f215209529eb236620Argyrios Kyrtzidis EXPECT_TRUE(Lexer::isAtEndOfMacroExpansion(rsqrLoc, SourceMgr, LangOpts, &Loc)); 12111b652d41d0d97380ab321a1dba48ecb044f9de8Argyrios Kyrtzidis EXPECT_EQ(Loc, macroRange.getEnd()); 12211b652d41d0d97380ab321a1dba48ecb044f9de8Argyrios Kyrtzidis 123a83f4d2315dbeb3914868f1ccb8e74fb2ccdbb0cArgyrios Kyrtzidis CharSourceRange range = Lexer::makeFileCharRange( 124a83f4d2315dbeb3914868f1ccb8e74fb2ccdbb0cArgyrios Kyrtzidis CharSourceRange::getTokenRange(lsqrLoc, idLoc), SourceMgr, LangOpts); 12511b652d41d0d97380ab321a1dba48ecb044f9de8Argyrios Kyrtzidis EXPECT_TRUE(range.isInvalid()); 126a83f4d2315dbeb3914868f1ccb8e74fb2ccdbb0cArgyrios Kyrtzidis range = Lexer::makeFileCharRange(CharSourceRange::getTokenRange(idLoc, rsqrLoc), 12711b652d41d0d97380ab321a1dba48ecb044f9de8Argyrios Kyrtzidis SourceMgr, LangOpts); 12811b652d41d0d97380ab321a1dba48ecb044f9de8Argyrios Kyrtzidis EXPECT_TRUE(range.isInvalid()); 129a83f4d2315dbeb3914868f1ccb8e74fb2ccdbb0cArgyrios Kyrtzidis range = Lexer::makeFileCharRange(CharSourceRange::getTokenRange(lsqrLoc, rsqrLoc), 13011b652d41d0d97380ab321a1dba48ecb044f9de8Argyrios Kyrtzidis SourceMgr, LangOpts); 13111b652d41d0d97380ab321a1dba48ecb044f9de8Argyrios Kyrtzidis EXPECT_TRUE(!range.isTokenRange()); 13211b652d41d0d97380ab321a1dba48ecb044f9de8Argyrios Kyrtzidis EXPECT_EQ(range.getAsRange(), 13311b652d41d0d97380ab321a1dba48ecb044f9de8Argyrios Kyrtzidis SourceRange(macroRange.getBegin(), 13411b652d41d0d97380ab321a1dba48ecb044f9de8Argyrios Kyrtzidis macroRange.getEnd().getLocWithOffset(1))); 135e64d9037658a1b95c79ea275af6167a110b3c563Argyrios Kyrtzidis 136e64d9037658a1b95c79ea275af6167a110b3c563Argyrios Kyrtzidis StringRef text = Lexer::getSourceText( 137a83f4d2315dbeb3914868f1ccb8e74fb2ccdbb0cArgyrios Kyrtzidis CharSourceRange::getTokenRange(lsqrLoc, rsqrLoc), 138a83f4d2315dbeb3914868f1ccb8e74fb2ccdbb0cArgyrios Kyrtzidis SourceMgr, LangOpts); 139e64d9037658a1b95c79ea275af6167a110b3c563Argyrios Kyrtzidis EXPECT_EQ(text, "M(foo)"); 140d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis 141d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis SourceLocation macroLsqrLoc = toks[3].getLocation(); 142d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis SourceLocation macroIdLoc = toks[4].getLocation(); 143d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis SourceLocation macroRsqrLoc = toks[5].getLocation(); 144d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis SourceLocation fileLsqrLoc = SourceMgr.getSpellingLoc(macroLsqrLoc); 145d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis SourceLocation fileIdLoc = SourceMgr.getSpellingLoc(macroIdLoc); 146d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis SourceLocation fileRsqrLoc = SourceMgr.getSpellingLoc(macroRsqrLoc); 147d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis 148a83f4d2315dbeb3914868f1ccb8e74fb2ccdbb0cArgyrios Kyrtzidis range = Lexer::makeFileCharRange( 149a83f4d2315dbeb3914868f1ccb8e74fb2ccdbb0cArgyrios Kyrtzidis CharSourceRange::getTokenRange(macroLsqrLoc, macroIdLoc), 150a83f4d2315dbeb3914868f1ccb8e74fb2ccdbb0cArgyrios Kyrtzidis SourceMgr, LangOpts); 151d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis EXPECT_EQ(SourceRange(fileLsqrLoc, fileIdLoc.getLocWithOffset(3)), 152d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis range.getAsRange()); 153d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis 154a83f4d2315dbeb3914868f1ccb8e74fb2ccdbb0cArgyrios Kyrtzidis range = Lexer::makeFileCharRange(CharSourceRange::getTokenRange(macroIdLoc, macroRsqrLoc), 155d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis SourceMgr, LangOpts); 156d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis EXPECT_EQ(SourceRange(fileIdLoc, fileRsqrLoc.getLocWithOffset(1)), 157d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis range.getAsRange()); 158d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis 159d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis macroPair = SourceMgr.getExpansionRange(macroLsqrLoc); 160a83f4d2315dbeb3914868f1ccb8e74fb2ccdbb0cArgyrios Kyrtzidis range = Lexer::makeFileCharRange( 161a83f4d2315dbeb3914868f1ccb8e74fb2ccdbb0cArgyrios Kyrtzidis CharSourceRange::getTokenRange(macroLsqrLoc, macroRsqrLoc), 162a83f4d2315dbeb3914868f1ccb8e74fb2ccdbb0cArgyrios Kyrtzidis SourceMgr, LangOpts); 163d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis EXPECT_EQ(SourceRange(macroPair.first, macroPair.second.getLocWithOffset(1)), 164d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis range.getAsRange()); 165d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis 166d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis text = Lexer::getSourceText( 167d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis CharSourceRange::getTokenRange(SourceRange(macroLsqrLoc, macroIdLoc)), 168d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis SourceMgr, LangOpts); 169d9806c912ae3e870a733acfd83c26e8a1f6a5ffcArgyrios Kyrtzidis EXPECT_EQ(text, "[bar"); 1707f6cf9764b33381e03fcf7c44f7985a333212b06Argyrios Kyrtzidis 1717f6cf9764b33381e03fcf7c44f7985a333212b06Argyrios Kyrtzidis 1727f6cf9764b33381e03fcf7c44f7985a333212b06Argyrios Kyrtzidis SourceLocation idLoc1 = toks[6].getLocation(); 1737f6cf9764b33381e03fcf7c44f7985a333212b06Argyrios Kyrtzidis SourceLocation idLoc2 = toks[7].getLocation(); 1747f6cf9764b33381e03fcf7c44f7985a333212b06Argyrios Kyrtzidis SourceLocation idLoc3 = toks[8].getLocation(); 1757f6cf9764b33381e03fcf7c44f7985a333212b06Argyrios Kyrtzidis SourceLocation idLoc4 = toks[9].getLocation(); 1767f6cf9764b33381e03fcf7c44f7985a333212b06Argyrios Kyrtzidis EXPECT_EQ("INN", Lexer::getImmediateMacroName(idLoc1, SourceMgr, LangOpts)); 1777f6cf9764b33381e03fcf7c44f7985a333212b06Argyrios Kyrtzidis EXPECT_EQ("INN", Lexer::getImmediateMacroName(idLoc2, SourceMgr, LangOpts)); 1787f6cf9764b33381e03fcf7c44f7985a333212b06Argyrios Kyrtzidis EXPECT_EQ("NOF2", Lexer::getImmediateMacroName(idLoc3, SourceMgr, LangOpts)); 1797f6cf9764b33381e03fcf7c44f7985a333212b06Argyrios Kyrtzidis EXPECT_EQ("N", Lexer::getImmediateMacroName(idLoc4, SourceMgr, LangOpts)); 18019d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis} 18119d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis 18219d5aea478b4f542e1ef7c36741e719c660bcc20Argyrios Kyrtzidis} // anonymous namespace 183