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