blob: 34b5fe21833dc62c81ae2241052d22f4cf702154 [file] [log] [blame]
Reid Spencer5f016e22007-07-11 17:01:13 +00001//===--- Preprocess.cpp - C Language Family Preprocessor Implementation ---===//
2//
3// The LLVM Compiler Infrastructure
4//
Chris Lattner0bc735f2007-12-29 19:59:25 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Reid Spencer5f016e22007-07-11 17:01:13 +00007//
8//===----------------------------------------------------------------------===//
9//
10// This file implements the Preprocessor interface.
11//
12//===----------------------------------------------------------------------===//
13//
14// Options to support:
15// -H - Print the name of each header file used.
16// -d[MDNI] - Dump various things.
17// -fworking-directory - #line's with preprocessor's working dir.
18// -fpreprocessed
19// -dependency-file,-M,-MM,-MF,-MG,-MP,-MT,-MQ,-MD,-MMD
20// -W*
21// -w
22//
23// Messages to emit:
24// "Multiple include guards may be useful for:\n"
25//
26//===----------------------------------------------------------------------===//
27
28#include "clang/Lex/Preprocessor.h"
29#include "clang/Lex/HeaderSearch.h"
30#include "clang/Lex/MacroInfo.h"
31#include "clang/Lex/PPCallbacks.h"
32#include "clang/Lex/Pragma.h"
33#include "clang/Lex/ScratchBuffer.h"
34#include "clang/Basic/Diagnostic.h"
35#include "clang/Basic/FileManager.h"
36#include "clang/Basic/SourceManager.h"
37#include "clang/Basic/TargetInfo.h"
38#include "llvm/ADT/SmallVector.h"
Chris Lattner97ba77c2007-07-16 06:48:38 +000039#include "llvm/Support/MemoryBuffer.h"
Ted Kremenekbdd30c22008-01-14 16:44:48 +000040#include "llvm/Support/Streams.h"
Chris Lattner77034d32007-09-03 18:30:32 +000041#include <ctime>
Reid Spencer5f016e22007-07-11 17:01:13 +000042using namespace clang;
43
44//===----------------------------------------------------------------------===//
45
46Preprocessor::Preprocessor(Diagnostic &diags, const LangOptions &opts,
47 TargetInfo &target, SourceManager &SM,
48 HeaderSearch &Headers)
49 : Diags(diags), Features(opts), Target(target), FileMgr(Headers.getFileMgr()),
50 SourceMgr(SM), HeaderInfo(Headers), Identifiers(opts),
51 CurLexer(0), CurDirLookup(0), CurMacroExpander(0), Callbacks(0) {
52 ScratchBuf = new ScratchBuffer(SourceMgr);
Chris Lattner9594acf2007-07-15 00:25:26 +000053
Reid Spencer5f016e22007-07-11 17:01:13 +000054 // Clear stats.
55 NumDirectives = NumDefined = NumUndefined = NumPragma = 0;
56 NumIf = NumElse = NumEndif = 0;
57 NumEnteredSourceFiles = 0;
58 NumMacroExpanded = NumFnMacroExpanded = NumBuiltinMacroExpanded = 0;
59 NumFastMacroExpanded = NumTokenPaste = NumFastTokenPaste = 0;
60 MaxIncludeStackDepth = 0;
61 NumSkipped = 0;
62
63 // Default to discarding comments.
64 KeepComments = false;
65 KeepMacroComments = false;
66
67 // Macro expansion is enabled.
68 DisableMacroExpansion = false;
69 InMacroArgs = false;
Chris Lattner9594acf2007-07-15 00:25:26 +000070 NumCachedMacroExpanders = 0;
Reid Spencer5f016e22007-07-11 17:01:13 +000071
72 // "Poison" __VA_ARGS__, which can only appear in the expansion of a macro.
73 // This gets unpoisoned where it is allowed.
74 (Ident__VA_ARGS__ = getIdentifierInfo("__VA_ARGS__"))->setIsPoisoned();
75
Chris Lattner53b0dab2007-10-09 22:10:18 +000076 Predefines = 0;
77
Reid Spencer5f016e22007-07-11 17:01:13 +000078 // Initialize the pragma handlers.
79 PragmaHandlers = new PragmaNamespace(0);
80 RegisterBuiltinPragmas();
81
82 // Initialize builtin macros like __LINE__ and friends.
83 RegisterBuiltinMacros();
84}
85
86Preprocessor::~Preprocessor() {
87 // Free any active lexers.
88 delete CurLexer;
89
90 while (!IncludeMacroStack.empty()) {
91 delete IncludeMacroStack.back().TheLexer;
92 delete IncludeMacroStack.back().TheMacroExpander;
93 IncludeMacroStack.pop_back();
94 }
Chris Lattnercc1a8752007-10-07 08:44:20 +000095
96 // Free any macro definitions.
97 for (llvm::DenseMap<IdentifierInfo*, MacroInfo*>::iterator I =
98 Macros.begin(), E = Macros.end(); I != E; ++I) {
99 // Free the macro definition.
100 delete I->second;
101 I->second = 0;
102 I->first->setHasMacroDefinition(false);
103 }
Reid Spencer5f016e22007-07-11 17:01:13 +0000104
Chris Lattner9594acf2007-07-15 00:25:26 +0000105 // Free any cached macro expanders.
106 for (unsigned i = 0, e = NumCachedMacroExpanders; i != e; ++i)
107 delete MacroExpanderCache[i];
108
Reid Spencer5f016e22007-07-11 17:01:13 +0000109 // Release pragma information.
110 delete PragmaHandlers;
111
112 // Delete the scratch buffer info.
113 delete ScratchBuf;
114}
115
116PPCallbacks::~PPCallbacks() {
117}
118
119/// Diag - Forwarding function for diagnostics. This emits a diagnostic at
Chris Lattnerd2177732007-07-20 16:59:19 +0000120/// the specified Token's location, translating the token's start
Reid Spencer5f016e22007-07-11 17:01:13 +0000121/// position in the current buffer into a SourcePosition object for rendering.
122void Preprocessor::Diag(SourceLocation Loc, unsigned DiagID) {
Ted Kremenek9c728dc2007-12-12 22:39:36 +0000123 Diags.Report(getFullLoc(Loc), DiagID);
Reid Spencer5f016e22007-07-11 17:01:13 +0000124}
125
126void Preprocessor::Diag(SourceLocation Loc, unsigned DiagID,
127 const std::string &Msg) {
Ted Kremenek9c728dc2007-12-12 22:39:36 +0000128 Diags.Report(getFullLoc(Loc), DiagID, &Msg, 1);
Reid Spencer5f016e22007-07-11 17:01:13 +0000129}
130
Chris Lattnerd2177732007-07-20 16:59:19 +0000131void Preprocessor::DumpToken(const Token &Tok, bool DumpFlags) const {
Ted Kremenekbdd30c22008-01-14 16:44:48 +0000132 llvm::cerr << tok::getTokenName(Tok.getKind()) << " '"
133 << getSpelling(Tok) << "'";
Reid Spencer5f016e22007-07-11 17:01:13 +0000134
135 if (!DumpFlags) return;
Chris Lattnerc3d8d572007-12-09 20:31:55 +0000136
Ted Kremenekbdd30c22008-01-14 16:44:48 +0000137 llvm::cerr << "\t";
Reid Spencer5f016e22007-07-11 17:01:13 +0000138 if (Tok.isAtStartOfLine())
Ted Kremenekbdd30c22008-01-14 16:44:48 +0000139 llvm::cerr << " [StartOfLine]";
Reid Spencer5f016e22007-07-11 17:01:13 +0000140 if (Tok.hasLeadingSpace())
Ted Kremenekbdd30c22008-01-14 16:44:48 +0000141 llvm::cerr << " [LeadingSpace]";
Reid Spencer5f016e22007-07-11 17:01:13 +0000142 if (Tok.isExpandDisabled())
Ted Kremenekbdd30c22008-01-14 16:44:48 +0000143 llvm::cerr << " [ExpandDisabled]";
Reid Spencer5f016e22007-07-11 17:01:13 +0000144 if (Tok.needsCleaning()) {
145 const char *Start = SourceMgr.getCharacterData(Tok.getLocation());
Ted Kremenekbdd30c22008-01-14 16:44:48 +0000146 llvm::cerr << " [UnClean='" << std::string(Start, Start+Tok.getLength())
147 << "']";
Reid Spencer5f016e22007-07-11 17:01:13 +0000148 }
Chris Lattnerc3d8d572007-12-09 20:31:55 +0000149
Ted Kremenekbdd30c22008-01-14 16:44:48 +0000150 llvm::cerr << "\tLoc=<";
Chris Lattnerc3d8d572007-12-09 20:31:55 +0000151 DumpLocation(Tok.getLocation());
Ted Kremenekbdd30c22008-01-14 16:44:48 +0000152 llvm::cerr << ">";
Chris Lattnerc3d8d572007-12-09 20:31:55 +0000153}
154
155void Preprocessor::DumpLocation(SourceLocation Loc) const {
156 SourceLocation LogLoc = SourceMgr.getLogicalLoc(Loc);
Ted Kremenekbdd30c22008-01-14 16:44:48 +0000157 llvm::cerr << SourceMgr.getSourceName(LogLoc) << ':'
158 << SourceMgr.getLineNumber(LogLoc) << ':'
159 << SourceMgr.getLineNumber(LogLoc);
Chris Lattnerc3d8d572007-12-09 20:31:55 +0000160
161 SourceLocation PhysLoc = SourceMgr.getPhysicalLoc(Loc);
162 if (PhysLoc != LogLoc) {
Ted Kremenekbdd30c22008-01-14 16:44:48 +0000163 llvm::cerr << " <PhysLoc=";
Chris Lattnerc3d8d572007-12-09 20:31:55 +0000164 DumpLocation(PhysLoc);
Ted Kremenekbdd30c22008-01-14 16:44:48 +0000165 llvm::cerr << ">";
Chris Lattnerc3d8d572007-12-09 20:31:55 +0000166 }
Reid Spencer5f016e22007-07-11 17:01:13 +0000167}
168
169void Preprocessor::DumpMacro(const MacroInfo &MI) const {
Ted Kremenekbdd30c22008-01-14 16:44:48 +0000170 llvm::cerr << "MACRO: ";
Reid Spencer5f016e22007-07-11 17:01:13 +0000171 for (unsigned i = 0, e = MI.getNumTokens(); i != e; ++i) {
172 DumpToken(MI.getReplacementToken(i));
Ted Kremenekbdd30c22008-01-14 16:44:48 +0000173 llvm::cerr << " ";
Reid Spencer5f016e22007-07-11 17:01:13 +0000174 }
Ted Kremenekbdd30c22008-01-14 16:44:48 +0000175 llvm::cerr << "\n";
Reid Spencer5f016e22007-07-11 17:01:13 +0000176}
177
178void Preprocessor::PrintStats() {
Ted Kremenekbdd30c22008-01-14 16:44:48 +0000179 llvm::cerr << "\n*** Preprocessor Stats:\n";
180 llvm::cerr << NumDirectives << " directives found:\n";
181 llvm::cerr << " " << NumDefined << " #define.\n";
182 llvm::cerr << " " << NumUndefined << " #undef.\n";
183 llvm::cerr << " #include/#include_next/#import:\n";
184 llvm::cerr << " " << NumEnteredSourceFiles << " source files entered.\n";
185 llvm::cerr << " " << MaxIncludeStackDepth << " max include stack depth\n";
186 llvm::cerr << " " << NumIf << " #if/#ifndef/#ifdef.\n";
187 llvm::cerr << " " << NumElse << " #else/#elif.\n";
188 llvm::cerr << " " << NumEndif << " #endif.\n";
189 llvm::cerr << " " << NumPragma << " #pragma.\n";
190 llvm::cerr << NumSkipped << " #if/#ifndef#ifdef regions skipped\n";
Reid Spencer5f016e22007-07-11 17:01:13 +0000191
Ted Kremenekbdd30c22008-01-14 16:44:48 +0000192 llvm::cerr << NumMacroExpanded << "/" << NumFnMacroExpanded << "/"
193 << NumBuiltinMacroExpanded << " obj/fn/builtin macros expanded, "
194 << NumFastMacroExpanded << " on the fast path.\n";
195 llvm::cerr << (NumFastTokenPaste+NumTokenPaste)
196 << " token paste (##) operations performed, "
197 << NumFastTokenPaste << " on the fast path.\n";
Reid Spencer5f016e22007-07-11 17:01:13 +0000198}
199
200//===----------------------------------------------------------------------===//
201// Token Spelling
202//===----------------------------------------------------------------------===//
203
204
205/// getSpelling() - Return the 'spelling' of this token. The spelling of a
206/// token are the characters used to represent the token in the source file
207/// after trigraph expansion and escaped-newline folding. In particular, this
208/// wants to get the true, uncanonicalized, spelling of things like digraphs
209/// UCNs, etc.
Chris Lattnerd2177732007-07-20 16:59:19 +0000210std::string Preprocessor::getSpelling(const Token &Tok) const {
Reid Spencer5f016e22007-07-11 17:01:13 +0000211 assert((int)Tok.getLength() >= 0 && "Token character range is bogus!");
212
213 // If this token contains nothing interesting, return it directly.
214 const char *TokStart = SourceMgr.getCharacterData(Tok.getLocation());
215 if (!Tok.needsCleaning())
216 return std::string(TokStart, TokStart+Tok.getLength());
217
218 std::string Result;
219 Result.reserve(Tok.getLength());
220
221 // Otherwise, hard case, relex the characters into the string.
222 for (const char *Ptr = TokStart, *End = TokStart+Tok.getLength();
223 Ptr != End; ) {
224 unsigned CharSize;
225 Result.push_back(Lexer::getCharAndSizeNoWarn(Ptr, CharSize, Features));
226 Ptr += CharSize;
227 }
228 assert(Result.size() != unsigned(Tok.getLength()) &&
229 "NeedsCleaning flag set on something that didn't need cleaning!");
230 return Result;
231}
232
233/// getSpelling - This method is used to get the spelling of a token into a
234/// preallocated buffer, instead of as an std::string. The caller is required
235/// to allocate enough space for the token, which is guaranteed to be at least
236/// Tok.getLength() bytes long. The actual length of the token is returned.
237///
238/// Note that this method may do two possible things: it may either fill in
239/// the buffer specified with characters, or it may *change the input pointer*
240/// to point to a constant buffer with the data already in it (avoiding a
241/// copy). The caller is not allowed to modify the returned buffer pointer
242/// if an internal buffer is returned.
Chris Lattnerd2177732007-07-20 16:59:19 +0000243unsigned Preprocessor::getSpelling(const Token &Tok,
Reid Spencer5f016e22007-07-11 17:01:13 +0000244 const char *&Buffer) const {
245 assert((int)Tok.getLength() >= 0 && "Token character range is bogus!");
246
247 // If this token is an identifier, just return the string from the identifier
248 // table, which is very quick.
249 if (const IdentifierInfo *II = Tok.getIdentifierInfo()) {
250 Buffer = II->getName();
Chris Lattner0f670322007-07-22 22:50:09 +0000251
252 // Return the length of the token. If the token needed cleaning, don't
253 // include the size of the newlines or trigraphs in it.
254 if (!Tok.needsCleaning())
255 return Tok.getLength();
256 else
257 return strlen(Buffer);
Reid Spencer5f016e22007-07-11 17:01:13 +0000258 }
259
260 // Otherwise, compute the start of the token in the input lexer buffer.
261 const char *TokStart = SourceMgr.getCharacterData(Tok.getLocation());
262
263 // If this token contains nothing interesting, return it directly.
264 if (!Tok.needsCleaning()) {
265 Buffer = TokStart;
266 return Tok.getLength();
267 }
268 // Otherwise, hard case, relex the characters into the string.
269 char *OutBuf = const_cast<char*>(Buffer);
270 for (const char *Ptr = TokStart, *End = TokStart+Tok.getLength();
271 Ptr != End; ) {
272 unsigned CharSize;
273 *OutBuf++ = Lexer::getCharAndSizeNoWarn(Ptr, CharSize, Features);
274 Ptr += CharSize;
275 }
276 assert(unsigned(OutBuf-Buffer) != Tok.getLength() &&
277 "NeedsCleaning flag set on something that didn't need cleaning!");
278
279 return OutBuf-Buffer;
280}
281
282
283/// CreateString - Plop the specified string into a scratch buffer and return a
284/// location for it. If specified, the source location provides a source
285/// location for the token.
286SourceLocation Preprocessor::
287CreateString(const char *Buf, unsigned Len, SourceLocation SLoc) {
288 if (SLoc.isValid())
289 return ScratchBuf->getToken(Buf, Len, SLoc);
290 return ScratchBuf->getToken(Buf, Len);
291}
292
293
Chris Lattner97ba77c2007-07-16 06:48:38 +0000294/// AdvanceToTokenCharacter - Given a location that specifies the start of a
295/// token, return a new location that specifies a character within the token.
296SourceLocation Preprocessor::AdvanceToTokenCharacter(SourceLocation TokStart,
297 unsigned CharNo) {
Chris Lattner9dc1f532007-07-20 16:37:10 +0000298 // If they request the first char of the token, we're trivially done. If this
299 // is a macro expansion, it doesn't make sense to point to a character within
300 // the instantiation point (the name). We could point to the source
301 // character, but without also pointing to instantiation info, this is
302 // confusing.
303 if (CharNo == 0 || TokStart.isMacroID()) return TokStart;
Chris Lattner97ba77c2007-07-16 06:48:38 +0000304
305 // Figure out how many physical characters away the specified logical
306 // character is. This needs to take into consideration newlines and
307 // trigraphs.
Chris Lattner9dc1f532007-07-20 16:37:10 +0000308 const char *TokPtr = SourceMgr.getCharacterData(TokStart);
309 unsigned PhysOffset = 0;
Chris Lattner97ba77c2007-07-16 06:48:38 +0000310
311 // The usual case is that tokens don't contain anything interesting. Skip
312 // over the uninteresting characters. If a token only consists of simple
313 // chars, this method is extremely fast.
314 while (CharNo && Lexer::isObviouslySimpleCharacter(*TokPtr))
Chris Lattner9dc1f532007-07-20 16:37:10 +0000315 ++TokPtr, --CharNo, ++PhysOffset;
Chris Lattner97ba77c2007-07-16 06:48:38 +0000316
317 // If we have a character that may be a trigraph or escaped newline, create a
318 // lexer to parse it correctly.
Chris Lattner97ba77c2007-07-16 06:48:38 +0000319 if (CharNo != 0) {
320 // Create a lexer starting at this token position.
Chris Lattner25bdb512007-07-20 16:52:03 +0000321 Lexer TheLexer(TokStart, *this, TokPtr);
Chris Lattnerd2177732007-07-20 16:59:19 +0000322 Token Tok;
Chris Lattner97ba77c2007-07-16 06:48:38 +0000323 // Skip over characters the remaining characters.
Chris Lattner9dc1f532007-07-20 16:37:10 +0000324 const char *TokStartPtr = TokPtr;
Chris Lattner97ba77c2007-07-16 06:48:38 +0000325 for (; CharNo; --CharNo)
326 TheLexer.getAndAdvanceChar(TokPtr, Tok);
Chris Lattner9dc1f532007-07-20 16:37:10 +0000327
328 PhysOffset += TokPtr-TokStartPtr;
Chris Lattner97ba77c2007-07-16 06:48:38 +0000329 }
Chris Lattner9dc1f532007-07-20 16:37:10 +0000330
331 return TokStart.getFileLocWithOffset(PhysOffset);
Chris Lattner97ba77c2007-07-16 06:48:38 +0000332}
333
334
Chris Lattner53b0dab2007-10-09 22:10:18 +0000335//===----------------------------------------------------------------------===//
336// Preprocessor Initialization Methods
337//===----------------------------------------------------------------------===//
338
339// Append a #define line to Buf for Macro. Macro should be of the form XXX,
340// in which case we emit "#define XXX 1" or "XXX=Y z W" in which case we emit
341// "#define XXX Y z W". To get a #define with no value, use "XXX=".
342static void DefineBuiltinMacro(std::vector<char> &Buf, const char *Macro,
343 const char *Command = "#define ") {
344 Buf.insert(Buf.end(), Command, Command+strlen(Command));
345 if (const char *Equal = strchr(Macro, '=')) {
346 // Turn the = into ' '.
347 Buf.insert(Buf.end(), Macro, Equal);
348 Buf.push_back(' ');
349 Buf.insert(Buf.end(), Equal+1, Equal+strlen(Equal));
350 } else {
351 // Push "macroname 1".
352 Buf.insert(Buf.end(), Macro, Macro+strlen(Macro));
353 Buf.push_back(' ');
354 Buf.push_back('1');
355 }
356 Buf.push_back('\n');
357}
358
359
360static void InitializePredefinedMacros(Preprocessor &PP,
361 std::vector<char> &Buf) {
362 // FIXME: Implement magic like cpp_init_builtins for things like __STDC__
363 // and __DATE__ etc.
364#if 0
365 /* __STDC__ has the value 1 under normal circumstances.
366 However, if (a) we are in a system header, (b) the option
367 stdc_0_in_system_headers is true (set by target config), and
368 (c) we are not in strictly conforming mode, then it has the
369 value 0. (b) and (c) are already checked in cpp_init_builtins. */
370 //case BT_STDC:
371 if (cpp_in_system_header (pfile))
372 number = 0;
373 else
374 number = 1;
375 break;
376#endif
377 // These should all be defined in the preprocessor according to the
378 // current language configuration.
379 DefineBuiltinMacro(Buf, "__STDC__=1");
380 //DefineBuiltinMacro(Buf, "__ASSEMBLER__=1");
381 if (PP.getLangOptions().C99 && !PP.getLangOptions().CPlusPlus)
382 DefineBuiltinMacro(Buf, "__STDC_VERSION__=199901L");
383 else if (0) // STDC94 ?
384 DefineBuiltinMacro(Buf, "__STDC_VERSION__=199409L");
385
386 DefineBuiltinMacro(Buf, "__STDC_HOSTED__=1");
387 if (PP.getLangOptions().ObjC1)
388 DefineBuiltinMacro(Buf, "__OBJC__=1");
389 if (PP.getLangOptions().ObjC2)
390 DefineBuiltinMacro(Buf, "__OBJC2__=1");
Steve Naroff8ee529b2007-10-31 18:42:27 +0000391
Chris Lattnerd19144b2007-10-10 17:48:53 +0000392 // Add __builtin_va_list typedef.
393 {
394 const char *VAList = PP.getTargetInfo().getVAListDeclaration();
395 Buf.insert(Buf.end(), VAList, VAList+strlen(VAList));
396 Buf.push_back('\n');
397 }
Chris Lattner53b0dab2007-10-09 22:10:18 +0000398
399 // Get the target #defines.
400 PP.getTargetInfo().getTargetDefines(Buf);
401
402 // Compiler set macros.
403 DefineBuiltinMacro(Buf, "__APPLE_CC__=5250");
Steve Naroff39d0a272007-11-10 18:06:36 +0000404 DefineBuiltinMacro(Buf, "__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__=1050");
Chris Lattner53b0dab2007-10-09 22:10:18 +0000405 DefineBuiltinMacro(Buf, "__GNUC_MINOR__=0");
406 DefineBuiltinMacro(Buf, "__GNUC_PATCHLEVEL__=1");
407 DefineBuiltinMacro(Buf, "__GNUC__=4");
408 DefineBuiltinMacro(Buf, "__GXX_ABI_VERSION=1002");
409 DefineBuiltinMacro(Buf, "__VERSION__=\"4.0.1 (Apple Computer, Inc. "
410 "build 5250)\"");
411
412 // Build configuration options.
413 DefineBuiltinMacro(Buf, "__DYNAMIC__=1");
414 DefineBuiltinMacro(Buf, "__FINITE_MATH_ONLY__=0");
415 DefineBuiltinMacro(Buf, "__NO_INLINE__=1");
416 DefineBuiltinMacro(Buf, "__PIC__=1");
417
418
419 if (PP.getLangOptions().CPlusPlus) {
420 DefineBuiltinMacro(Buf, "__DEPRECATED=1");
421 DefineBuiltinMacro(Buf, "__EXCEPTIONS=1");
422 DefineBuiltinMacro(Buf, "__GNUG__=4");
423 DefineBuiltinMacro(Buf, "__GXX_WEAK__=1");
424 DefineBuiltinMacro(Buf, "__cplusplus=1");
425 DefineBuiltinMacro(Buf, "__private_extern__=extern");
426 }
427
428 // FIXME: Should emit a #line directive here.
429}
430
431
432/// EnterMainSourceFile - Enter the specified FileID as the main source file,
Nate Begeman6b616022008-01-07 04:01:26 +0000433/// which implicitly adds the builtin defines etc.
Ted Kremenek95041a22007-12-19 22:51:13 +0000434void Preprocessor::EnterMainSourceFile() {
435
436 unsigned MainFileID = SourceMgr.getMainFileID();
437
Chris Lattner53b0dab2007-10-09 22:10:18 +0000438 // Enter the main file source buffer.
439 EnterSourceFile(MainFileID, 0);
440
Chris Lattnerb2832982007-11-15 19:07:47 +0000441 // Tell the header info that the main file was entered. If the file is later
442 // #imported, it won't be re-entered.
443 if (const FileEntry *FE =
444 SourceMgr.getFileEntryForLoc(SourceLocation::getFileLoc(MainFileID, 0)))
445 HeaderInfo.IncrementIncludeCount(FE);
446
Chris Lattner53b0dab2007-10-09 22:10:18 +0000447 std::vector<char> PrologFile;
448 PrologFile.reserve(4080);
449
450 // Install things like __POWERPC__, __GNUC__, etc into the macro table.
451 InitializePredefinedMacros(*this, PrologFile);
452
453 // Add on the predefines from the driver.
454 PrologFile.insert(PrologFile.end(), Predefines,Predefines+strlen(Predefines));
455
456 // Memory buffer must end with a null byte!
457 PrologFile.push_back(0);
458
459 // Now that we have emitted the predefined macros, #includes, etc into
460 // PrologFile, preprocess it to populate the initial preprocessor state.
461 llvm::MemoryBuffer *SB =
462 llvm::MemoryBuffer::getMemBufferCopy(&PrologFile.front(),&PrologFile.back(),
463 "<predefines>");
464 assert(SB && "Cannot fail to create predefined source buffer");
465 unsigned FileID = SourceMgr.createFileIDForMemBuffer(SB);
466 assert(FileID && "Could not create FileID for predefines?");
467
468 // Start parsing the predefines.
469 EnterSourceFile(FileID, 0);
470}
Chris Lattner97ba77c2007-07-16 06:48:38 +0000471
Reid Spencer5f016e22007-07-11 17:01:13 +0000472//===----------------------------------------------------------------------===//
473// Source File Location Methods.
474//===----------------------------------------------------------------------===//
475
476/// LookupFile - Given a "foo" or <foo> reference, look up the indicated file,
477/// return null on failure. isAngled indicates whether the file reference is
478/// for system #include's or not (i.e. using <> instead of "").
479const FileEntry *Preprocessor::LookupFile(const char *FilenameStart,
480 const char *FilenameEnd,
481 bool isAngled,
482 const DirectoryLookup *FromDir,
483 const DirectoryLookup *&CurDir) {
484 // If the header lookup mechanism may be relative to the current file, pass in
485 // info about where the current file is.
486 const FileEntry *CurFileEnt = 0;
487 if (!FromDir) {
Chris Lattner9dc1f532007-07-20 16:37:10 +0000488 SourceLocation FileLoc = getCurrentFileLexer()->getFileLoc();
489 CurFileEnt = SourceMgr.getFileEntryForLoc(FileLoc);
Reid Spencer5f016e22007-07-11 17:01:13 +0000490 }
491
492 // Do a standard file entry lookup.
493 CurDir = CurDirLookup;
494 const FileEntry *FE =
495 HeaderInfo.LookupFile(FilenameStart, FilenameEnd,
496 isAngled, FromDir, CurDir, CurFileEnt);
497 if (FE) return FE;
498
499 // Otherwise, see if this is a subframework header. If so, this is relative
500 // to one of the headers on the #include stack. Walk the list of the current
501 // headers on the #include stack and pass them to HeaderInfo.
502 if (CurLexer && !CurLexer->Is_PragmaLexer) {
Chris Lattner9dc1f532007-07-20 16:37:10 +0000503 CurFileEnt = SourceMgr.getFileEntryForLoc(CurLexer->getFileLoc());
Reid Spencer5f016e22007-07-11 17:01:13 +0000504 if ((FE = HeaderInfo.LookupSubframeworkHeader(FilenameStart, FilenameEnd,
505 CurFileEnt)))
506 return FE;
507 }
508
509 for (unsigned i = 0, e = IncludeMacroStack.size(); i != e; ++i) {
510 IncludeStackInfo &ISEntry = IncludeMacroStack[e-i-1];
511 if (ISEntry.TheLexer && !ISEntry.TheLexer->Is_PragmaLexer) {
Chris Lattner9dc1f532007-07-20 16:37:10 +0000512 CurFileEnt = SourceMgr.getFileEntryForLoc(ISEntry.TheLexer->getFileLoc());
Reid Spencer5f016e22007-07-11 17:01:13 +0000513 if ((FE = HeaderInfo.LookupSubframeworkHeader(FilenameStart, FilenameEnd,
514 CurFileEnt)))
515 return FE;
516 }
517 }
518
519 // Otherwise, we really couldn't find the file.
520 return 0;
521}
522
523/// isInPrimaryFile - Return true if we're in the top-level file, not in a
524/// #include.
525bool Preprocessor::isInPrimaryFile() const {
526 if (CurLexer && !CurLexer->Is_PragmaLexer)
Chris Lattner53b0dab2007-10-09 22:10:18 +0000527 return IncludeMacroStack.empty();
Reid Spencer5f016e22007-07-11 17:01:13 +0000528
529 // If there are any stacked lexers, we're in a #include.
Chris Lattner53b0dab2007-10-09 22:10:18 +0000530 assert(IncludeMacroStack[0].TheLexer &&
531 !IncludeMacroStack[0].TheLexer->Is_PragmaLexer &&
532 "Top level include stack isn't our primary lexer?");
533 for (unsigned i = 1, e = IncludeMacroStack.size(); i != e; ++i)
Reid Spencer5f016e22007-07-11 17:01:13 +0000534 if (IncludeMacroStack[i].TheLexer &&
535 !IncludeMacroStack[i].TheLexer->Is_PragmaLexer)
Chris Lattner53b0dab2007-10-09 22:10:18 +0000536 return false;
537 return true;
Reid Spencer5f016e22007-07-11 17:01:13 +0000538}
539
540/// getCurrentLexer - Return the current file lexer being lexed from. Note
541/// that this ignores any potentially active macro expansions and _Pragma
542/// expansions going on at the time.
543Lexer *Preprocessor::getCurrentFileLexer() const {
544 if (CurLexer && !CurLexer->Is_PragmaLexer) return CurLexer;
545
546 // Look for a stacked lexer.
547 for (unsigned i = IncludeMacroStack.size(); i != 0; --i) {
548 Lexer *L = IncludeMacroStack[i-1].TheLexer;
549 if (L && !L->Is_PragmaLexer) // Ignore macro & _Pragma expansions.
550 return L;
551 }
552 return 0;
553}
554
555
556/// EnterSourceFile - Add a source file to the top of the include stack and
557/// start lexing tokens from it instead of the current buffer. Return true
558/// on failure.
559void Preprocessor::EnterSourceFile(unsigned FileID,
Chris Lattner53b0dab2007-10-09 22:10:18 +0000560 const DirectoryLookup *CurDir) {
Reid Spencer5f016e22007-07-11 17:01:13 +0000561 assert(CurMacroExpander == 0 && "Cannot #include a file inside a macro!");
562 ++NumEnteredSourceFiles;
563
564 if (MaxIncludeStackDepth < IncludeMacroStack.size())
565 MaxIncludeStackDepth = IncludeMacroStack.size();
566
Chris Lattner25bdb512007-07-20 16:52:03 +0000567 Lexer *TheLexer = new Lexer(SourceLocation::getFileLoc(FileID, 0), *this);
Reid Spencer5f016e22007-07-11 17:01:13 +0000568 EnterSourceFileWithLexer(TheLexer, CurDir);
569}
570
571/// EnterSourceFile - Add a source file to the top of the include stack and
572/// start lexing tokens from it instead of the current buffer.
573void Preprocessor::EnterSourceFileWithLexer(Lexer *TheLexer,
574 const DirectoryLookup *CurDir) {
575
576 // Add the current lexer to the include stack.
577 if (CurLexer || CurMacroExpander)
578 IncludeMacroStack.push_back(IncludeStackInfo(CurLexer, CurDirLookup,
579 CurMacroExpander));
580
581 CurLexer = TheLexer;
582 CurDirLookup = CurDir;
583 CurMacroExpander = 0;
584
585 // Notify the client, if desired, that we are in a new source file.
586 if (Callbacks && !CurLexer->Is_PragmaLexer) {
587 DirectoryLookup::DirType FileType = DirectoryLookup::NormalHeaderDir;
588
589 // Get the file entry for the current file.
590 if (const FileEntry *FE =
Chris Lattner9dc1f532007-07-20 16:37:10 +0000591 SourceMgr.getFileEntryForLoc(CurLexer->getFileLoc()))
Reid Spencer5f016e22007-07-11 17:01:13 +0000592 FileType = HeaderInfo.getFileDirFlavor(FE);
593
Chris Lattner9dc1f532007-07-20 16:37:10 +0000594 Callbacks->FileChanged(CurLexer->getFileLoc(),
Reid Spencer5f016e22007-07-11 17:01:13 +0000595 PPCallbacks::EnterFile, FileType);
596 }
597}
598
599
600
601/// EnterMacro - Add a Macro to the top of the include stack and start lexing
602/// tokens from it instead of the current buffer.
Chris Lattnerd2177732007-07-20 16:59:19 +0000603void Preprocessor::EnterMacro(Token &Tok, MacroArgs *Args) {
Reid Spencer5f016e22007-07-11 17:01:13 +0000604 IncludeMacroStack.push_back(IncludeStackInfo(CurLexer, CurDirLookup,
605 CurMacroExpander));
606 CurLexer = 0;
607 CurDirLookup = 0;
608
Chris Lattner9594acf2007-07-15 00:25:26 +0000609 if (NumCachedMacroExpanders == 0) {
610 CurMacroExpander = new MacroExpander(Tok, Args, *this);
611 } else {
612 CurMacroExpander = MacroExpanderCache[--NumCachedMacroExpanders];
613 CurMacroExpander->Init(Tok, Args);
614 }
Reid Spencer5f016e22007-07-11 17:01:13 +0000615}
616
617/// EnterTokenStream - Add a "macro" context to the top of the include stack,
618/// which will cause the lexer to start returning the specified tokens. Note
619/// that these tokens will be re-macro-expanded when/if expansion is enabled.
620/// This method assumes that the specified stream of tokens has a permanent
621/// owner somewhere, so they do not need to be copied.
Chris Lattnerd2177732007-07-20 16:59:19 +0000622void Preprocessor::EnterTokenStream(const Token *Toks, unsigned NumToks) {
Reid Spencer5f016e22007-07-11 17:01:13 +0000623 // Save our current state.
624 IncludeMacroStack.push_back(IncludeStackInfo(CurLexer, CurDirLookup,
625 CurMacroExpander));
626 CurLexer = 0;
627 CurDirLookup = 0;
628
629 // Create a macro expander to expand from the specified token stream.
Chris Lattner9594acf2007-07-15 00:25:26 +0000630 if (NumCachedMacroExpanders == 0) {
631 CurMacroExpander = new MacroExpander(Toks, NumToks, *this);
632 } else {
633 CurMacroExpander = MacroExpanderCache[--NumCachedMacroExpanders];
634 CurMacroExpander->Init(Toks, NumToks);
635 }
Reid Spencer5f016e22007-07-11 17:01:13 +0000636}
637
638/// RemoveTopOfLexerStack - Pop the current lexer/macro exp off the top of the
639/// lexer stack. This should only be used in situations where the current
640/// state of the top-of-stack lexer is known.
641void Preprocessor::RemoveTopOfLexerStack() {
642 assert(!IncludeMacroStack.empty() && "Ran out of stack entries to load");
Chris Lattner9594acf2007-07-15 00:25:26 +0000643
644 if (CurMacroExpander) {
645 // Delete or cache the now-dead macro expander.
646 if (NumCachedMacroExpanders == MacroExpanderCacheSize)
647 delete CurMacroExpander;
648 else
649 MacroExpanderCache[NumCachedMacroExpanders++] = CurMacroExpander;
650 } else {
651 delete CurLexer;
652 }
Reid Spencer5f016e22007-07-11 17:01:13 +0000653 CurLexer = IncludeMacroStack.back().TheLexer;
654 CurDirLookup = IncludeMacroStack.back().TheDirLookup;
655 CurMacroExpander = IncludeMacroStack.back().TheMacroExpander;
656 IncludeMacroStack.pop_back();
657}
658
659//===----------------------------------------------------------------------===//
660// Macro Expansion Handling.
661//===----------------------------------------------------------------------===//
662
Chris Lattnercc1a8752007-10-07 08:44:20 +0000663/// setMacroInfo - Specify a macro for this identifier.
664///
665void Preprocessor::setMacroInfo(IdentifierInfo *II, MacroInfo *MI) {
666 if (MI == 0) {
667 if (II->hasMacroDefinition()) {
668 Macros.erase(II);
669 II->setHasMacroDefinition(false);
670 }
671 } else {
672 Macros[II] = MI;
673 II->setHasMacroDefinition(true);
674 }
675}
676
Reid Spencer5f016e22007-07-11 17:01:13 +0000677/// RegisterBuiltinMacro - Register the specified identifier in the identifier
678/// table and mark it as a builtin macro to be expanded.
679IdentifierInfo *Preprocessor::RegisterBuiltinMacro(const char *Name) {
680 // Get the identifier.
681 IdentifierInfo *Id = getIdentifierInfo(Name);
682
683 // Mark it as being a macro that is builtin.
684 MacroInfo *MI = new MacroInfo(SourceLocation());
685 MI->setIsBuiltinMacro();
Chris Lattnercc1a8752007-10-07 08:44:20 +0000686 setMacroInfo(Id, MI);
Reid Spencer5f016e22007-07-11 17:01:13 +0000687 return Id;
688}
689
690
691/// RegisterBuiltinMacros - Register builtin macros, such as __LINE__ with the
692/// identifier table.
693void Preprocessor::RegisterBuiltinMacros() {
694 Ident__LINE__ = RegisterBuiltinMacro("__LINE__");
695 Ident__FILE__ = RegisterBuiltinMacro("__FILE__");
696 Ident__DATE__ = RegisterBuiltinMacro("__DATE__");
697 Ident__TIME__ = RegisterBuiltinMacro("__TIME__");
698 Ident_Pragma = RegisterBuiltinMacro("_Pragma");
699
700 // GCC Extensions.
701 Ident__BASE_FILE__ = RegisterBuiltinMacro("__BASE_FILE__");
702 Ident__INCLUDE_LEVEL__ = RegisterBuiltinMacro("__INCLUDE_LEVEL__");
703 Ident__TIMESTAMP__ = RegisterBuiltinMacro("__TIMESTAMP__");
704}
705
706/// isTrivialSingleTokenExpansion - Return true if MI, which has a single token
707/// in its expansion, currently expands to that token literally.
708static bool isTrivialSingleTokenExpansion(const MacroInfo *MI,
Chris Lattnercc1a8752007-10-07 08:44:20 +0000709 const IdentifierInfo *MacroIdent,
710 Preprocessor &PP) {
Reid Spencer5f016e22007-07-11 17:01:13 +0000711 IdentifierInfo *II = MI->getReplacementToken(0).getIdentifierInfo();
712
713 // If the token isn't an identifier, it's always literally expanded.
714 if (II == 0) return true;
715
716 // If the identifier is a macro, and if that macro is enabled, it may be
717 // expanded so it's not a trivial expansion.
Chris Lattnercc1a8752007-10-07 08:44:20 +0000718 if (II->hasMacroDefinition() && PP.getMacroInfo(II)->isEnabled() &&
Reid Spencer5f016e22007-07-11 17:01:13 +0000719 // Fast expanding "#define X X" is ok, because X would be disabled.
720 II != MacroIdent)
721 return false;
722
723 // If this is an object-like macro invocation, it is safe to trivially expand
724 // it.
725 if (MI->isObjectLike()) return true;
726
727 // If this is a function-like macro invocation, it's safe to trivially expand
728 // as long as the identifier is not a macro argument.
729 for (MacroInfo::arg_iterator I = MI->arg_begin(), E = MI->arg_end();
730 I != E; ++I)
731 if (*I == II)
732 return false; // Identifier is a macro argument.
733
734 return true;
735}
736
737
738/// isNextPPTokenLParen - Determine whether the next preprocessor token to be
739/// lexed is a '('. If so, consume the token and return true, if not, this
740/// method should have no observable side-effect on the lexed tokens.
741bool Preprocessor::isNextPPTokenLParen() {
742 // Do some quick tests for rejection cases.
743 unsigned Val;
744 if (CurLexer)
745 Val = CurLexer->isNextPPTokenLParen();
746 else
747 Val = CurMacroExpander->isNextTokenLParen();
748
749 if (Val == 2) {
Chris Lattner0ea793e2007-07-19 00:07:36 +0000750 // We have run off the end. If it's a source file we don't
751 // examine enclosing ones (C99 5.1.1.2p4). Otherwise walk up the
752 // macro stack.
753 if (CurLexer)
754 return false;
755 for (unsigned i = IncludeMacroStack.size(); i != 0; --i) {
Reid Spencer5f016e22007-07-11 17:01:13 +0000756 IncludeStackInfo &Entry = IncludeMacroStack[i-1];
757 if (Entry.TheLexer)
758 Val = Entry.TheLexer->isNextPPTokenLParen();
759 else
760 Val = Entry.TheMacroExpander->isNextTokenLParen();
Chris Lattner0ea793e2007-07-19 00:07:36 +0000761
762 if (Val != 2)
763 break;
764
765 // Ran off the end of a source file?
766 if (Entry.TheLexer)
767 return false;
Reid Spencer5f016e22007-07-11 17:01:13 +0000768 }
769 }
770
771 // Okay, if we know that the token is a '(', lex it and return. Otherwise we
772 // have found something that isn't a '(' or we found the end of the
773 // translation unit. In either case, return false.
774 if (Val != 1)
775 return false;
776
Chris Lattnerd2177732007-07-20 16:59:19 +0000777 Token Tok;
Reid Spencer5f016e22007-07-11 17:01:13 +0000778 LexUnexpandedToken(Tok);
Chris Lattner22f6bbc2007-10-09 18:02:16 +0000779 assert(Tok.is(tok::l_paren) && "Error computing l-paren-ness?");
Reid Spencer5f016e22007-07-11 17:01:13 +0000780 return true;
781}
782
783/// HandleMacroExpandedIdentifier - If an identifier token is read that is to be
784/// expanded as a macro, handle it and return the next token as 'Identifier'.
Chris Lattnerd2177732007-07-20 16:59:19 +0000785bool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier,
Reid Spencer5f016e22007-07-11 17:01:13 +0000786 MacroInfo *MI) {
Chris Lattner4d730462008-01-07 19:50:27 +0000787 // If this is a macro exapnsion in the "#if !defined(x)" line for the file,
788 // then the macro could expand to different things in other contexts, we need
789 // to disable the optimization in this case.
790 if (CurLexer) CurLexer->MIOpt.ExpandedMacro();
Reid Spencer5f016e22007-07-11 17:01:13 +0000791
792 // If this is a builtin macro, like __LINE__ or _Pragma, handle it specially.
793 if (MI->isBuiltinMacro()) {
794 ExpandBuiltinMacro(Identifier);
795 return false;
796 }
797
798 // If this is the first use of a target-specific macro, warn about it.
799 if (MI->isTargetSpecific()) {
800 MI->setIsTargetSpecific(false); // Don't warn on second use.
Ted Kremenek9c728dc2007-12-12 22:39:36 +0000801 getTargetInfo().DiagnoseNonPortability(getFullLoc(Identifier.getLocation()),
Reid Spencer5f016e22007-07-11 17:01:13 +0000802 diag::port_target_macro_use);
803 }
804
805 /// Args - If this is a function-like macro expansion, this contains,
806 /// for each macro argument, the list of tokens that were provided to the
807 /// invocation.
808 MacroArgs *Args = 0;
809
810 // If this is a function-like macro, read the arguments.
811 if (MI->isFunctionLike()) {
812 // C99 6.10.3p10: If the preprocessing token immediately after the the macro
Chris Lattner2b64fdc2007-07-19 16:11:58 +0000813 // name isn't a '(', this macro should not be expanded. Otherwise, consume
814 // it.
Reid Spencer5f016e22007-07-11 17:01:13 +0000815 if (!isNextPPTokenLParen())
816 return true;
817
818 // Remember that we are now parsing the arguments to a macro invocation.
819 // Preprocessor directives used inside macro arguments are not portable, and
820 // this enables the warning.
821 InMacroArgs = true;
822 Args = ReadFunctionLikeMacroArgs(Identifier, MI);
823
824 // Finished parsing args.
825 InMacroArgs = false;
826
827 // If there was an error parsing the arguments, bail out.
828 if (Args == 0) return false;
829
830 ++NumFnMacroExpanded;
831 } else {
832 ++NumMacroExpanded;
833 }
834
835 // Notice that this macro has been used.
836 MI->setIsUsed(true);
837
838 // If we started lexing a macro, enter the macro expansion body.
839
840 // If this macro expands to no tokens, don't bother to push it onto the
841 // expansion stack, only to take it right back off.
842 if (MI->getNumTokens() == 0) {
843 // No need for arg info.
844 if (Args) Args->destroy();
845
846 // Ignore this macro use, just return the next token in the current
847 // buffer.
848 bool HadLeadingSpace = Identifier.hasLeadingSpace();
849 bool IsAtStartOfLine = Identifier.isAtStartOfLine();
850
851 Lex(Identifier);
852
853 // If the identifier isn't on some OTHER line, inherit the leading
854 // whitespace/first-on-a-line property of this token. This handles
855 // stuff like "! XX," -> "! ," and " XX," -> " ,", when XX is
856 // empty.
857 if (!Identifier.isAtStartOfLine()) {
Chris Lattnerd2177732007-07-20 16:59:19 +0000858 if (IsAtStartOfLine) Identifier.setFlag(Token::StartOfLine);
859 if (HadLeadingSpace) Identifier.setFlag(Token::LeadingSpace);
Reid Spencer5f016e22007-07-11 17:01:13 +0000860 }
861 ++NumFastMacroExpanded;
862 return false;
863
864 } else if (MI->getNumTokens() == 1 &&
Chris Lattnercc1a8752007-10-07 08:44:20 +0000865 isTrivialSingleTokenExpansion(MI, Identifier.getIdentifierInfo(),
866 *this)){
Reid Spencer5f016e22007-07-11 17:01:13 +0000867 // Otherwise, if this macro expands into a single trivially-expanded
868 // token: expand it now. This handles common cases like
869 // "#define VAL 42".
870
871 // Propagate the isAtStartOfLine/hasLeadingSpace markers of the macro
872 // identifier to the expanded token.
873 bool isAtStartOfLine = Identifier.isAtStartOfLine();
874 bool hasLeadingSpace = Identifier.hasLeadingSpace();
875
876 // Remember where the token is instantiated.
877 SourceLocation InstantiateLoc = Identifier.getLocation();
878
879 // Replace the result token.
880 Identifier = MI->getReplacementToken(0);
881
882 // Restore the StartOfLine/LeadingSpace markers.
Chris Lattnerd2177732007-07-20 16:59:19 +0000883 Identifier.setFlagValue(Token::StartOfLine , isAtStartOfLine);
884 Identifier.setFlagValue(Token::LeadingSpace, hasLeadingSpace);
Reid Spencer5f016e22007-07-11 17:01:13 +0000885
886 // Update the tokens location to include both its logical and physical
887 // locations.
888 SourceLocation Loc =
889 SourceMgr.getInstantiationLoc(Identifier.getLocation(), InstantiateLoc);
890 Identifier.setLocation(Loc);
891
892 // If this is #define X X, we must mark the result as unexpandible.
893 if (IdentifierInfo *NewII = Identifier.getIdentifierInfo())
Chris Lattnercc1a8752007-10-07 08:44:20 +0000894 if (getMacroInfo(NewII) == MI)
Chris Lattnerd2177732007-07-20 16:59:19 +0000895 Identifier.setFlag(Token::DisableExpand);
Reid Spencer5f016e22007-07-11 17:01:13 +0000896
897 // Since this is not an identifier token, it can't be macro expanded, so
898 // we're done.
899 ++NumFastMacroExpanded;
900 return false;
901 }
902
903 // Start expanding the macro.
904 EnterMacro(Identifier, Args);
905
906 // Now that the macro is at the top of the include stack, ask the
907 // preprocessor to read the next token from it.
908 Lex(Identifier);
909 return false;
910}
911
912/// ReadFunctionLikeMacroArgs - After reading "MACRO(", this method is
913/// invoked to read all of the actual arguments specified for the macro
914/// invocation. This returns null on error.
Chris Lattnerd2177732007-07-20 16:59:19 +0000915MacroArgs *Preprocessor::ReadFunctionLikeMacroArgs(Token &MacroName,
Reid Spencer5f016e22007-07-11 17:01:13 +0000916 MacroInfo *MI) {
917 // The number of fixed arguments to parse.
918 unsigned NumFixedArgsLeft = MI->getNumArgs();
919 bool isVariadic = MI->isVariadic();
920
921 // Outer loop, while there are more arguments, keep reading them.
Chris Lattnerd2177732007-07-20 16:59:19 +0000922 Token Tok;
Reid Spencer5f016e22007-07-11 17:01:13 +0000923 Tok.setKind(tok::comma);
924 --NumFixedArgsLeft; // Start reading the first arg.
925
926 // ArgTokens - Build up a list of tokens that make up each argument. Each
927 // argument is separated by an EOF token. Use a SmallVector so we can avoid
928 // heap allocations in the common case.
Chris Lattnerd2177732007-07-20 16:59:19 +0000929 llvm::SmallVector<Token, 64> ArgTokens;
Reid Spencer5f016e22007-07-11 17:01:13 +0000930
931 unsigned NumActuals = 0;
Chris Lattner22f6bbc2007-10-09 18:02:16 +0000932 while (Tok.is(tok::comma)) {
Chris Lattner2b64fdc2007-07-19 16:11:58 +0000933 // C99 6.10.3p11: Keep track of the number of l_parens we have seen. Note
934 // that we already consumed the first one.
Reid Spencer5f016e22007-07-11 17:01:13 +0000935 unsigned NumParens = 0;
936
937 while (1) {
938 // Read arguments as unexpanded tokens. This avoids issues, e.g., where
939 // an argument value in a macro could expand to ',' or '(' or ')'.
940 LexUnexpandedToken(Tok);
941
Chris Lattnerc21d9e42008-01-22 19:34:51 +0000942 if (Tok.is(tok::eof) || Tok.is(tok::eom)) { // "#if f(<eof>" & "#if f(\n"
Reid Spencer5f016e22007-07-11 17:01:13 +0000943 Diag(MacroName, diag::err_unterm_macro_invoc);
Chris Lattnerc21d9e42008-01-22 19:34:51 +0000944 // Do not lose the EOF/EOM. Return it to the client.
Reid Spencer5f016e22007-07-11 17:01:13 +0000945 MacroName = Tok;
946 return 0;
Chris Lattner22f6bbc2007-10-09 18:02:16 +0000947 } else if (Tok.is(tok::r_paren)) {
Reid Spencer5f016e22007-07-11 17:01:13 +0000948 // If we found the ) token, the macro arg list is done.
949 if (NumParens-- == 0)
950 break;
Chris Lattner22f6bbc2007-10-09 18:02:16 +0000951 } else if (Tok.is(tok::l_paren)) {
Reid Spencer5f016e22007-07-11 17:01:13 +0000952 ++NumParens;
Chris Lattner22f6bbc2007-10-09 18:02:16 +0000953 } else if (Tok.is(tok::comma) && NumParens == 0) {
Reid Spencer5f016e22007-07-11 17:01:13 +0000954 // Comma ends this argument if there are more fixed arguments expected.
955 if (NumFixedArgsLeft)
956 break;
957
958 // If this is not a variadic macro, too many args were specified.
959 if (!isVariadic) {
960 // Emit the diagnostic at the macro name in case there is a missing ).
961 // Emitting it at the , could be far away from the macro name.
962 Diag(MacroName, diag::err_too_many_args_in_macro_invoc);
963 return 0;
964 }
965 // Otherwise, continue to add the tokens to this variable argument.
Chris Lattner22f6bbc2007-10-09 18:02:16 +0000966 } else if (Tok.is(tok::comment) && !KeepMacroComments) {
Reid Spencer5f016e22007-07-11 17:01:13 +0000967 // If this is a comment token in the argument list and we're just in
968 // -C mode (not -CC mode), discard the comment.
969 continue;
Chris Lattner0c3eb292007-11-23 06:50:21 +0000970 } else if (Tok.is(tok::identifier)) {
971 // Reading macro arguments can cause macros that we are currently
972 // expanding from to be popped off the expansion stack. Doing so causes
973 // them to be reenabled for expansion. Here we record whether any
974 // identifiers we lex as macro arguments correspond to disabled macros.
975 // If so, we mark the token as noexpand. This is a subtle aspect of
976 // C99 6.10.3.4p2.
977 if (MacroInfo *MI = getMacroInfo(Tok.getIdentifierInfo()))
978 if (!MI->isEnabled())
979 Tok.setFlag(Token::DisableExpand);
Reid Spencer5f016e22007-07-11 17:01:13 +0000980 }
981
982 ArgTokens.push_back(Tok);
983 }
984
985 // Empty arguments are standard in C99 and supported as an extension in
986 // other modes.
987 if (ArgTokens.empty() && !Features.C99)
988 Diag(Tok, diag::ext_empty_fnmacro_arg);
989
990 // Add a marker EOF token to the end of the token list for this argument.
Chris Lattnerd2177732007-07-20 16:59:19 +0000991 Token EOFTok;
Reid Spencer5f016e22007-07-11 17:01:13 +0000992 EOFTok.startToken();
993 EOFTok.setKind(tok::eof);
994 EOFTok.setLocation(Tok.getLocation());
995 EOFTok.setLength(0);
996 ArgTokens.push_back(EOFTok);
997 ++NumActuals;
998 --NumFixedArgsLeft;
999 };
1000
1001 // Okay, we either found the r_paren. Check to see if we parsed too few
1002 // arguments.
1003 unsigned MinArgsExpected = MI->getNumArgs();
1004
1005 // See MacroArgs instance var for description of this.
1006 bool isVarargsElided = false;
1007
1008 if (NumActuals < MinArgsExpected) {
1009 // There are several cases where too few arguments is ok, handle them now.
1010 if (NumActuals+1 == MinArgsExpected && MI->isVariadic()) {
1011 // Varargs where the named vararg parameter is missing: ok as extension.
1012 // #define A(x, ...)
1013 // A("blah")
1014 Diag(Tok, diag::ext_missing_varargs_arg);
1015
1016 // Remember this occurred if this is a C99 macro invocation with at least
1017 // one actual argument.
1018 isVarargsElided = MI->isC99Varargs() && MI->getNumArgs() > 1;
1019 } else if (MI->getNumArgs() == 1) {
1020 // #define A(x)
1021 // A()
1022 // is ok because it is an empty argument.
1023
1024 // Empty arguments are standard in C99 and supported as an extension in
1025 // other modes.
1026 if (ArgTokens.empty() && !Features.C99)
1027 Diag(Tok, diag::ext_empty_fnmacro_arg);
1028 } else {
1029 // Otherwise, emit the error.
1030 Diag(Tok, diag::err_too_few_args_in_macro_invoc);
1031 return 0;
1032 }
1033
1034 // Add a marker EOF token to the end of the token list for this argument.
1035 SourceLocation EndLoc = Tok.getLocation();
1036 Tok.startToken();
1037 Tok.setKind(tok::eof);
1038 Tok.setLocation(EndLoc);
1039 Tok.setLength(0);
1040 ArgTokens.push_back(Tok);
1041 }
1042
1043 return MacroArgs::create(MI, &ArgTokens[0], ArgTokens.size(),isVarargsElided);
1044}
1045
1046/// ComputeDATE_TIME - Compute the current time, enter it into the specified
1047/// scratch buffer, then return DATELoc/TIMELoc locations with the position of
1048/// the identifier tokens inserted.
1049static void ComputeDATE_TIME(SourceLocation &DATELoc, SourceLocation &TIMELoc,
1050 Preprocessor &PP) {
1051 time_t TT = time(0);
1052 struct tm *TM = localtime(&TT);
1053
1054 static const char * const Months[] = {
1055 "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
1056 };
1057
1058 char TmpBuffer[100];
1059 sprintf(TmpBuffer, "\"%s %2d %4d\"", Months[TM->tm_mon], TM->tm_mday,
1060 TM->tm_year+1900);
1061 DATELoc = PP.CreateString(TmpBuffer, strlen(TmpBuffer));
1062
1063 sprintf(TmpBuffer, "\"%02d:%02d:%02d\"", TM->tm_hour, TM->tm_min, TM->tm_sec);
1064 TIMELoc = PP.CreateString(TmpBuffer, strlen(TmpBuffer));
1065}
1066
1067/// ExpandBuiltinMacro - If an identifier token is read that is to be expanded
1068/// as a builtin macro, handle it and return the next token as 'Tok'.
Chris Lattnerd2177732007-07-20 16:59:19 +00001069void Preprocessor::ExpandBuiltinMacro(Token &Tok) {
Reid Spencer5f016e22007-07-11 17:01:13 +00001070 // Figure out which token this is.
1071 IdentifierInfo *II = Tok.getIdentifierInfo();
1072 assert(II && "Can't be a macro without id info!");
1073
1074 // If this is an _Pragma directive, expand it, invoke the pragma handler, then
1075 // lex the token after it.
1076 if (II == Ident_Pragma)
1077 return Handle_Pragma(Tok);
1078
1079 ++NumBuiltinMacroExpanded;
1080
1081 char TmpBuffer[100];
1082
1083 // Set up the return result.
1084 Tok.setIdentifierInfo(0);
Chris Lattnerd2177732007-07-20 16:59:19 +00001085 Tok.clearFlag(Token::NeedsCleaning);
Reid Spencer5f016e22007-07-11 17:01:13 +00001086
1087 if (II == Ident__LINE__) {
1088 // __LINE__ expands to a simple numeric value.
Chris Lattner9dc1f532007-07-20 16:37:10 +00001089 sprintf(TmpBuffer, "%u", SourceMgr.getLogicalLineNumber(Tok.getLocation()));
Reid Spencer5f016e22007-07-11 17:01:13 +00001090 unsigned Length = strlen(TmpBuffer);
1091 Tok.setKind(tok::numeric_constant);
1092 Tok.setLength(Length);
1093 Tok.setLocation(CreateString(TmpBuffer, Length, Tok.getLocation()));
1094 } else if (II == Ident__FILE__ || II == Ident__BASE_FILE__) {
1095 SourceLocation Loc = Tok.getLocation();
1096 if (II == Ident__BASE_FILE__) {
1097 Diag(Tok, diag::ext_pp_base_file);
Chris Lattner9dc1f532007-07-20 16:37:10 +00001098 SourceLocation NextLoc = SourceMgr.getIncludeLoc(Loc);
1099 while (NextLoc.isValid()) {
Reid Spencer5f016e22007-07-11 17:01:13 +00001100 Loc = NextLoc;
Chris Lattner9dc1f532007-07-20 16:37:10 +00001101 NextLoc = SourceMgr.getIncludeLoc(Loc);
Reid Spencer5f016e22007-07-11 17:01:13 +00001102 }
1103 }
1104
1105 // Escape this filename. Turn '\' -> '\\' '"' -> '\"'
Chris Lattner9dc1f532007-07-20 16:37:10 +00001106 std::string FN = SourceMgr.getSourceName(SourceMgr.getLogicalLoc(Loc));
Reid Spencer5f016e22007-07-11 17:01:13 +00001107 FN = '"' + Lexer::Stringify(FN) + '"';
1108 Tok.setKind(tok::string_literal);
1109 Tok.setLength(FN.size());
1110 Tok.setLocation(CreateString(&FN[0], FN.size(), Tok.getLocation()));
1111 } else if (II == Ident__DATE__) {
1112 if (!DATELoc.isValid())
1113 ComputeDATE_TIME(DATELoc, TIMELoc, *this);
1114 Tok.setKind(tok::string_literal);
1115 Tok.setLength(strlen("\"Mmm dd yyyy\""));
1116 Tok.setLocation(SourceMgr.getInstantiationLoc(DATELoc, Tok.getLocation()));
1117 } else if (II == Ident__TIME__) {
1118 if (!TIMELoc.isValid())
1119 ComputeDATE_TIME(DATELoc, TIMELoc, *this);
1120 Tok.setKind(tok::string_literal);
1121 Tok.setLength(strlen("\"hh:mm:ss\""));
1122 Tok.setLocation(SourceMgr.getInstantiationLoc(TIMELoc, Tok.getLocation()));
1123 } else if (II == Ident__INCLUDE_LEVEL__) {
1124 Diag(Tok, diag::ext_pp_include_level);
1125
1126 // Compute the include depth of this token.
1127 unsigned Depth = 0;
Chris Lattner9dc1f532007-07-20 16:37:10 +00001128 SourceLocation Loc = SourceMgr.getIncludeLoc(Tok.getLocation());
1129 for (; Loc.isValid(); ++Depth)
1130 Loc = SourceMgr.getIncludeLoc(Loc);
Reid Spencer5f016e22007-07-11 17:01:13 +00001131
1132 // __INCLUDE_LEVEL__ expands to a simple numeric value.
1133 sprintf(TmpBuffer, "%u", Depth);
1134 unsigned Length = strlen(TmpBuffer);
1135 Tok.setKind(tok::numeric_constant);
1136 Tok.setLength(Length);
1137 Tok.setLocation(CreateString(TmpBuffer, Length, Tok.getLocation()));
1138 } else if (II == Ident__TIMESTAMP__) {
1139 // MSVC, ICC, GCC, VisualAge C++ extension. The generated string should be
1140 // of the form "Ddd Mmm dd hh::mm::ss yyyy", which is returned by asctime.
1141 Diag(Tok, diag::ext_pp_timestamp);
1142
1143 // Get the file that we are lexing out of. If we're currently lexing from
1144 // a macro, dig into the include stack.
1145 const FileEntry *CurFile = 0;
1146 Lexer *TheLexer = getCurrentFileLexer();
1147
1148 if (TheLexer)
Chris Lattner9dc1f532007-07-20 16:37:10 +00001149 CurFile = SourceMgr.getFileEntryForLoc(TheLexer->getFileLoc());
Reid Spencer5f016e22007-07-11 17:01:13 +00001150
1151 // If this file is older than the file it depends on, emit a diagnostic.
1152 const char *Result;
1153 if (CurFile) {
1154 time_t TT = CurFile->getModificationTime();
1155 struct tm *TM = localtime(&TT);
1156 Result = asctime(TM);
1157 } else {
1158 Result = "??? ??? ?? ??:??:?? ????\n";
1159 }
1160 TmpBuffer[0] = '"';
1161 strcpy(TmpBuffer+1, Result);
1162 unsigned Len = strlen(TmpBuffer);
1163 TmpBuffer[Len-1] = '"'; // Replace the newline with a quote.
1164 Tok.setKind(tok::string_literal);
1165 Tok.setLength(Len);
1166 Tok.setLocation(CreateString(TmpBuffer, Len, Tok.getLocation()));
1167 } else {
1168 assert(0 && "Unknown identifier!");
Chris Lattnerc3d8d572007-12-09 20:31:55 +00001169 }
Reid Spencer5f016e22007-07-11 17:01:13 +00001170}
1171
1172//===----------------------------------------------------------------------===//
1173// Lexer Event Handling.
1174//===----------------------------------------------------------------------===//
1175
1176/// LookUpIdentifierInfo - Given a tok::identifier token, look up the
1177/// identifier information for the token and install it into the token.
Chris Lattnerd2177732007-07-20 16:59:19 +00001178IdentifierInfo *Preprocessor::LookUpIdentifierInfo(Token &Identifier,
Reid Spencer5f016e22007-07-11 17:01:13 +00001179 const char *BufPtr) {
Chris Lattner22f6bbc2007-10-09 18:02:16 +00001180 assert(Identifier.is(tok::identifier) && "Not an identifier!");
Reid Spencer5f016e22007-07-11 17:01:13 +00001181 assert(Identifier.getIdentifierInfo() == 0 && "Identinfo already exists!");
1182
1183 // Look up this token, see if it is a macro, or if it is a language keyword.
1184 IdentifierInfo *II;
1185 if (BufPtr && !Identifier.needsCleaning()) {
1186 // No cleaning needed, just use the characters from the lexed buffer.
1187 II = getIdentifierInfo(BufPtr, BufPtr+Identifier.getLength());
1188 } else {
1189 // Cleaning needed, alloca a buffer, clean into it, then use the buffer.
Chris Lattnerc35717a2007-07-13 17:10:38 +00001190 llvm::SmallVector<char, 64> IdentifierBuffer;
1191 IdentifierBuffer.resize(Identifier.getLength());
1192 const char *TmpBuf = &IdentifierBuffer[0];
Reid Spencer5f016e22007-07-11 17:01:13 +00001193 unsigned Size = getSpelling(Identifier, TmpBuf);
1194 II = getIdentifierInfo(TmpBuf, TmpBuf+Size);
1195 }
1196 Identifier.setIdentifierInfo(II);
1197 return II;
1198}
1199
1200
1201/// HandleIdentifier - This callback is invoked when the lexer reads an
1202/// identifier. This callback looks up the identifier in the map and/or
1203/// potentially macro expands it or turns it into a named token (like 'for').
Chris Lattnerd2177732007-07-20 16:59:19 +00001204void Preprocessor::HandleIdentifier(Token &Identifier) {
Reid Spencer5f016e22007-07-11 17:01:13 +00001205 assert(Identifier.getIdentifierInfo() &&
1206 "Can't handle identifiers without identifier info!");
1207
1208 IdentifierInfo &II = *Identifier.getIdentifierInfo();
1209
1210 // If this identifier was poisoned, and if it was not produced from a macro
1211 // expansion, emit an error.
1212 if (II.isPoisoned() && CurLexer) {
1213 if (&II != Ident__VA_ARGS__) // We warn about __VA_ARGS__ with poisoning.
1214 Diag(Identifier, diag::err_pp_used_poisoned_id);
1215 else
1216 Diag(Identifier, diag::ext_pp_bad_vaargs_use);
1217 }
1218
1219 // If this is a macro to be expanded, do it.
Chris Lattnercc1a8752007-10-07 08:44:20 +00001220 if (MacroInfo *MI = getMacroInfo(&II)) {
Reid Spencer5f016e22007-07-11 17:01:13 +00001221 if (!DisableMacroExpansion && !Identifier.isExpandDisabled()) {
1222 if (MI->isEnabled()) {
1223 if (!HandleMacroExpandedIdentifier(Identifier, MI))
1224 return;
1225 } else {
1226 // C99 6.10.3.4p2 says that a disabled macro may never again be
1227 // expanded, even if it's in a context where it could be expanded in the
1228 // future.
Chris Lattnerd2177732007-07-20 16:59:19 +00001229 Identifier.setFlag(Token::DisableExpand);
Reid Spencer5f016e22007-07-11 17:01:13 +00001230 }
1231 }
1232 } else if (II.isOtherTargetMacro() && !DisableMacroExpansion) {
1233 // If this identifier is a macro on some other target, emit a diagnostic.
1234 // This diagnosic is only emitted when macro expansion is enabled, because
1235 // the macro would not have been expanded for the other target either.
1236 II.setIsOtherTargetMacro(false); // Don't warn on second use.
Ted Kremenek9c728dc2007-12-12 22:39:36 +00001237 getTargetInfo().DiagnoseNonPortability(getFullLoc(Identifier.getLocation()),
Reid Spencer5f016e22007-07-11 17:01:13 +00001238 diag::port_target_macro_use);
1239
1240 }
1241
1242 // C++ 2.11p2: If this is an alternative representation of a C++ operator,
1243 // then we act as if it is the actual operator and not the textual
1244 // representation of it.
1245 if (II.isCPlusPlusOperatorKeyword())
1246 Identifier.setIdentifierInfo(0);
1247
1248 // Change the kind of this identifier to the appropriate token kind, e.g.
1249 // turning "for" into a keyword.
1250 Identifier.setKind(II.getTokenID());
1251
1252 // If this is an extension token, diagnose its use.
1253 // FIXME: tried (unsuccesfully) to shut this up when compiling with gnu99
1254 // For now, I'm just commenting it out (while I work on attributes).
1255 if (II.isExtensionToken() && Features.C99)
1256 Diag(Identifier, diag::ext_token_used);
1257}
1258
1259/// HandleEndOfFile - This callback is invoked when the lexer hits the end of
1260/// the current file. This either returns the EOF token or pops a level off
1261/// the include stack and keeps going.
Chris Lattnerd2177732007-07-20 16:59:19 +00001262bool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {
Reid Spencer5f016e22007-07-11 17:01:13 +00001263 assert(!CurMacroExpander &&
1264 "Ending a file when currently in a macro!");
1265
1266 // See if this file had a controlling macro.
1267 if (CurLexer) { // Not ending a macro, ignore it.
1268 if (const IdentifierInfo *ControllingMacro =
1269 CurLexer->MIOpt.GetControllingMacroAtEndOfFile()) {
1270 // Okay, this has a controlling macro, remember in PerFileInfo.
1271 if (const FileEntry *FE =
Chris Lattner9dc1f532007-07-20 16:37:10 +00001272 SourceMgr.getFileEntryForLoc(CurLexer->getFileLoc()))
Reid Spencer5f016e22007-07-11 17:01:13 +00001273 HeaderInfo.SetFileControllingMacro(FE, ControllingMacro);
1274 }
1275 }
1276
1277 // If this is a #include'd file, pop it off the include stack and continue
1278 // lexing the #includer file.
1279 if (!IncludeMacroStack.empty()) {
1280 // We're done with the #included file.
1281 RemoveTopOfLexerStack();
1282
1283 // Notify the client, if desired, that we are in a new source file.
1284 if (Callbacks && !isEndOfMacro && CurLexer) {
1285 DirectoryLookup::DirType FileType = DirectoryLookup::NormalHeaderDir;
1286
1287 // Get the file entry for the current file.
1288 if (const FileEntry *FE =
Chris Lattner9dc1f532007-07-20 16:37:10 +00001289 SourceMgr.getFileEntryForLoc(CurLexer->getFileLoc()))
Reid Spencer5f016e22007-07-11 17:01:13 +00001290 FileType = HeaderInfo.getFileDirFlavor(FE);
1291
1292 Callbacks->FileChanged(CurLexer->getSourceLocation(CurLexer->BufferPtr),
1293 PPCallbacks::ExitFile, FileType);
1294 }
1295
1296 // Client should lex another token.
1297 return false;
1298 }
Chris Lattner09cf90f2008-01-25 00:00:30 +00001299
1300 // If the file ends with a newline, form the EOF token on the newline itself,
1301 // rather than "on the line following it", which doesn't exist. This makes
1302 // diagnostics relating to the end of file include the last file that the user
1303 // actually typed, which is goodness.
1304 const char *EndPos = CurLexer->BufferEnd;
1305 if (EndPos != CurLexer->BufferStart &&
1306 (EndPos[-1] == '\n' || EndPos[-1] == '\r')) {
1307 --EndPos;
1308
1309 // Handle \n\r and \r\n:
1310 if (EndPos != CurLexer->BufferStart &&
1311 (EndPos[-1] == '\n' || EndPos[-1] == '\r') &&
1312 EndPos[-1] != EndPos[0])
1313 --EndPos;
1314 }
Reid Spencer5f016e22007-07-11 17:01:13 +00001315
1316 Result.startToken();
Chris Lattner09cf90f2008-01-25 00:00:30 +00001317 CurLexer->BufferPtr = EndPos;
1318 CurLexer->FormTokenWithChars(Result, EndPos);
Reid Spencer5f016e22007-07-11 17:01:13 +00001319 Result.setKind(tok::eof);
1320
1321 // We're done with the #included file.
1322 delete CurLexer;
1323 CurLexer = 0;
1324
1325 // This is the end of the top-level file. If the diag::pp_macro_not_used
Chris Lattnercc1a8752007-10-07 08:44:20 +00001326 // diagnostic is enabled, look for macros that have not been used.
Reid Spencer5f016e22007-07-11 17:01:13 +00001327 if (Diags.getDiagnosticLevel(diag::pp_macro_not_used) != Diagnostic::Ignored){
Chris Lattnercc1a8752007-10-07 08:44:20 +00001328 for (llvm::DenseMap<IdentifierInfo*, MacroInfo*>::iterator I =
1329 Macros.begin(), E = Macros.end(); I != E; ++I) {
1330 if (!I->second->isUsed())
1331 Diag(I->second->getDefinitionLoc(), diag::pp_macro_not_used);
Reid Spencer5f016e22007-07-11 17:01:13 +00001332 }
1333 }
Reid Spencer5f016e22007-07-11 17:01:13 +00001334 return true;
1335}
1336
1337/// HandleEndOfMacro - This callback is invoked when the lexer hits the end of
1338/// the current macro expansion or token stream expansion.
Chris Lattnerd2177732007-07-20 16:59:19 +00001339bool Preprocessor::HandleEndOfMacro(Token &Result) {
Reid Spencer5f016e22007-07-11 17:01:13 +00001340 assert(CurMacroExpander && !CurLexer &&
1341 "Ending a macro when currently in a #include file!");
1342
Chris Lattner9594acf2007-07-15 00:25:26 +00001343 // Delete or cache the now-dead macro expander.
1344 if (NumCachedMacroExpanders == MacroExpanderCacheSize)
1345 delete CurMacroExpander;
1346 else
1347 MacroExpanderCache[NumCachedMacroExpanders++] = CurMacroExpander;
Reid Spencer5f016e22007-07-11 17:01:13 +00001348
1349 // Handle this like a #include file being popped off the stack.
1350 CurMacroExpander = 0;
1351 return HandleEndOfFile(Result, true);
1352}
1353
1354
1355//===----------------------------------------------------------------------===//
1356// Utility Methods for Preprocessor Directive Handling.
1357//===----------------------------------------------------------------------===//
1358
1359/// DiscardUntilEndOfDirective - Read and discard all tokens remaining on the
1360/// current line until the tok::eom token is found.
1361void Preprocessor::DiscardUntilEndOfDirective() {
Chris Lattnerd2177732007-07-20 16:59:19 +00001362 Token Tmp;
Reid Spencer5f016e22007-07-11 17:01:13 +00001363 do {
1364 LexUnexpandedToken(Tmp);
Chris Lattner22f6bbc2007-10-09 18:02:16 +00001365 } while (Tmp.isNot(tok::eom));
Reid Spencer5f016e22007-07-11 17:01:13 +00001366}
1367
1368/// isCXXNamedOperator - Returns "true" if the token is a named operator in C++.
1369static bool isCXXNamedOperator(const std::string &Spelling) {
1370 return Spelling == "and" || Spelling == "bitand" || Spelling == "bitor" ||
1371 Spelling == "compl" || Spelling == "not" || Spelling == "not_eq" ||
1372 Spelling == "or" || Spelling == "xor";
1373}
1374
1375/// ReadMacroName - Lex and validate a macro name, which occurs after a
1376/// #define or #undef. This sets the token kind to eom and discards the rest
1377/// of the macro line if the macro name is invalid. isDefineUndef is 1 if
1378/// this is due to a a #define, 2 if #undef directive, 0 if it is something
1379/// else (e.g. #ifdef).
Chris Lattnerd2177732007-07-20 16:59:19 +00001380void Preprocessor::ReadMacroName(Token &MacroNameTok, char isDefineUndef) {
Reid Spencer5f016e22007-07-11 17:01:13 +00001381 // Read the token, don't allow macro expansion on it.
1382 LexUnexpandedToken(MacroNameTok);
1383
1384 // Missing macro name?
Chris Lattner22f6bbc2007-10-09 18:02:16 +00001385 if (MacroNameTok.is(tok::eom))
Reid Spencer5f016e22007-07-11 17:01:13 +00001386 return Diag(MacroNameTok, diag::err_pp_missing_macro_name);
1387
1388 IdentifierInfo *II = MacroNameTok.getIdentifierInfo();
1389 if (II == 0) {
1390 std::string Spelling = getSpelling(MacroNameTok);
1391 if (isCXXNamedOperator(Spelling))
1392 // C++ 2.5p2: Alternative tokens behave the same as its primary token
1393 // except for their spellings.
1394 Diag(MacroNameTok, diag::err_pp_operator_used_as_macro_name, Spelling);
1395 else
1396 Diag(MacroNameTok, diag::err_pp_macro_not_identifier);
1397 // Fall through on error.
1398 } else if (isDefineUndef && II->getPPKeywordID() == tok::pp_defined) {
1399 // Error if defining "defined": C99 6.10.8.4.
1400 Diag(MacroNameTok, diag::err_defined_macro_name);
Chris Lattner0edde552007-10-07 08:04:56 +00001401 } else if (isDefineUndef && II->hasMacroDefinition() &&
Chris Lattnercc1a8752007-10-07 08:44:20 +00001402 getMacroInfo(II)->isBuiltinMacro()) {
Reid Spencer5f016e22007-07-11 17:01:13 +00001403 // Error if defining "__LINE__" and other builtins: C99 6.10.8.4.
1404 if (isDefineUndef == 1)
1405 Diag(MacroNameTok, diag::pp_redef_builtin_macro);
1406 else
1407 Diag(MacroNameTok, diag::pp_undef_builtin_macro);
1408 } else {
1409 // Okay, we got a good identifier node. Return it.
1410 return;
1411 }
1412
1413 // Invalid macro name, read and discard the rest of the line. Then set the
1414 // token kind to tok::eom.
1415 MacroNameTok.setKind(tok::eom);
1416 return DiscardUntilEndOfDirective();
1417}
1418
1419/// CheckEndOfDirective - Ensure that the next token is a tok::eom token. If
1420/// not, emit a diagnostic and consume up until the eom.
1421void Preprocessor::CheckEndOfDirective(const char *DirType) {
Chris Lattnerd2177732007-07-20 16:59:19 +00001422 Token Tmp;
Reid Spencer5f016e22007-07-11 17:01:13 +00001423 Lex(Tmp);
1424 // There should be no tokens after the directive, but we allow them as an
1425 // extension.
Chris Lattner22f6bbc2007-10-09 18:02:16 +00001426 while (Tmp.is(tok::comment)) // Skip comments in -C mode.
Reid Spencer5f016e22007-07-11 17:01:13 +00001427 Lex(Tmp);
1428
Chris Lattner22f6bbc2007-10-09 18:02:16 +00001429 if (Tmp.isNot(tok::eom)) {
Reid Spencer5f016e22007-07-11 17:01:13 +00001430 Diag(Tmp, diag::ext_pp_extra_tokens_at_eol, DirType);
1431 DiscardUntilEndOfDirective();
1432 }
1433}
1434
1435
1436
1437/// SkipExcludedConditionalBlock - We just read a #if or related directive and
1438/// decided that the subsequent tokens are in the #if'd out portion of the
1439/// file. Lex the rest of the file, until we see an #endif. If
1440/// FoundNonSkipPortion is true, then we have already emitted code for part of
1441/// this #if directive, so #else/#elif blocks should never be entered. If ElseOk
1442/// is true, then #else directives are ok, if not, then we have already seen one
1443/// so a #else directive is a duplicate. When this returns, the caller can lex
1444/// the first valid token.
1445void Preprocessor::SkipExcludedConditionalBlock(SourceLocation IfTokenLoc,
1446 bool FoundNonSkipPortion,
1447 bool FoundElse) {
1448 ++NumSkipped;
1449 assert(CurMacroExpander == 0 && CurLexer &&
1450 "Lexing a macro, not a file?");
1451
1452 CurLexer->pushConditionalLevel(IfTokenLoc, /*isSkipping*/false,
1453 FoundNonSkipPortion, FoundElse);
1454
1455 // Enter raw mode to disable identifier lookup (and thus macro expansion),
1456 // disabling warnings, etc.
1457 CurLexer->LexingRawMode = true;
Chris Lattnerd2177732007-07-20 16:59:19 +00001458 Token Tok;
Reid Spencer5f016e22007-07-11 17:01:13 +00001459 while (1) {
1460 CurLexer->Lex(Tok);
1461
1462 // If this is the end of the buffer, we have an error.
Chris Lattner22f6bbc2007-10-09 18:02:16 +00001463 if (Tok.is(tok::eof)) {
Reid Spencer5f016e22007-07-11 17:01:13 +00001464 // Emit errors for each unterminated conditional on the stack, including
1465 // the current one.
1466 while (!CurLexer->ConditionalStack.empty()) {
1467 Diag(CurLexer->ConditionalStack.back().IfLoc,
1468 diag::err_pp_unterminated_conditional);
1469 CurLexer->ConditionalStack.pop_back();
1470 }
1471
1472 // Just return and let the caller lex after this #include.
1473 break;
1474 }
1475
1476 // If this token is not a preprocessor directive, just skip it.
Chris Lattner22f6bbc2007-10-09 18:02:16 +00001477 if (Tok.isNot(tok::hash) || !Tok.isAtStartOfLine())
Reid Spencer5f016e22007-07-11 17:01:13 +00001478 continue;
1479
1480 // We just parsed a # character at the start of a line, so we're in
1481 // directive mode. Tell the lexer this so any newlines we see will be
1482 // converted into an EOM token (this terminates the macro).
1483 CurLexer->ParsingPreprocessorDirective = true;
1484 CurLexer->KeepCommentMode = false;
1485
1486
1487 // Read the next token, the directive flavor.
1488 LexUnexpandedToken(Tok);
1489
1490 // If this isn't an identifier directive (e.g. is "# 1\n" or "#\n", or
1491 // something bogus), skip it.
Chris Lattner22f6bbc2007-10-09 18:02:16 +00001492 if (Tok.isNot(tok::identifier)) {
Reid Spencer5f016e22007-07-11 17:01:13 +00001493 CurLexer->ParsingPreprocessorDirective = false;
1494 // Restore comment saving mode.
1495 CurLexer->KeepCommentMode = KeepComments;
1496 continue;
1497 }
1498
1499 // If the first letter isn't i or e, it isn't intesting to us. We know that
1500 // this is safe in the face of spelling differences, because there is no way
1501 // to spell an i/e in a strange way that is another letter. Skipping this
1502 // allows us to avoid looking up the identifier info for #define/#undef and
1503 // other common directives.
1504 const char *RawCharData = SourceMgr.getCharacterData(Tok.getLocation());
1505 char FirstChar = RawCharData[0];
1506 if (FirstChar >= 'a' && FirstChar <= 'z' &&
1507 FirstChar != 'i' && FirstChar != 'e') {
1508 CurLexer->ParsingPreprocessorDirective = false;
1509 // Restore comment saving mode.
1510 CurLexer->KeepCommentMode = KeepComments;
1511 continue;
1512 }
1513
1514 // Get the identifier name without trigraphs or embedded newlines. Note
1515 // that we can't use Tok.getIdentifierInfo() because its lookup is disabled
1516 // when skipping.
1517 // TODO: could do this with zero copies in the no-clean case by using
1518 // strncmp below.
1519 char Directive[20];
1520 unsigned IdLen;
1521 if (!Tok.needsCleaning() && Tok.getLength() < 20) {
1522 IdLen = Tok.getLength();
1523 memcpy(Directive, RawCharData, IdLen);
1524 Directive[IdLen] = 0;
1525 } else {
1526 std::string DirectiveStr = getSpelling(Tok);
1527 IdLen = DirectiveStr.size();
1528 if (IdLen >= 20) {
1529 CurLexer->ParsingPreprocessorDirective = false;
1530 // Restore comment saving mode.
1531 CurLexer->KeepCommentMode = KeepComments;
1532 continue;
1533 }
1534 memcpy(Directive, &DirectiveStr[0], IdLen);
1535 Directive[IdLen] = 0;
1536 }
1537
1538 if (FirstChar == 'i' && Directive[1] == 'f') {
1539 if ((IdLen == 2) || // "if"
1540 (IdLen == 5 && !strcmp(Directive+2, "def")) || // "ifdef"
1541 (IdLen == 6 && !strcmp(Directive+2, "ndef"))) { // "ifndef"
1542 // We know the entire #if/#ifdef/#ifndef block will be skipped, don't
1543 // bother parsing the condition.
1544 DiscardUntilEndOfDirective();
1545 CurLexer->pushConditionalLevel(Tok.getLocation(), /*wasskipping*/true,
1546 /*foundnonskip*/false,
1547 /*fnddelse*/false);
1548 }
1549 } else if (FirstChar == 'e') {
1550 if (IdLen == 5 && !strcmp(Directive+1, "ndif")) { // "endif"
1551 CheckEndOfDirective("#endif");
1552 PPConditionalInfo CondInfo;
1553 CondInfo.WasSkipping = true; // Silence bogus warning.
1554 bool InCond = CurLexer->popConditionalLevel(CondInfo);
1555 InCond = InCond; // Silence warning in no-asserts mode.
1556 assert(!InCond && "Can't be skipping if not in a conditional!");
1557
1558 // If we popped the outermost skipping block, we're done skipping!
1559 if (!CondInfo.WasSkipping)
1560 break;
1561 } else if (IdLen == 4 && !strcmp(Directive+1, "lse")) { // "else".
1562 // #else directive in a skipping conditional. If not in some other
1563 // skipping conditional, and if #else hasn't already been seen, enter it
1564 // as a non-skipping conditional.
1565 CheckEndOfDirective("#else");
1566 PPConditionalInfo &CondInfo = CurLexer->peekConditionalLevel();
1567
1568 // If this is a #else with a #else before it, report the error.
1569 if (CondInfo.FoundElse) Diag(Tok, diag::pp_err_else_after_else);
1570
1571 // Note that we've seen a #else in this conditional.
1572 CondInfo.FoundElse = true;
1573
1574 // If the conditional is at the top level, and the #if block wasn't
1575 // entered, enter the #else block now.
1576 if (!CondInfo.WasSkipping && !CondInfo.FoundNonSkip) {
1577 CondInfo.FoundNonSkip = true;
1578 break;
1579 }
1580 } else if (IdLen == 4 && !strcmp(Directive+1, "lif")) { // "elif".
1581 PPConditionalInfo &CondInfo = CurLexer->peekConditionalLevel();
1582
1583 bool ShouldEnter;
1584 // If this is in a skipping block or if we're already handled this #if
1585 // block, don't bother parsing the condition.
1586 if (CondInfo.WasSkipping || CondInfo.FoundNonSkip) {
1587 DiscardUntilEndOfDirective();
1588 ShouldEnter = false;
1589 } else {
1590 // Restore the value of LexingRawMode so that identifiers are
1591 // looked up, etc, inside the #elif expression.
1592 assert(CurLexer->LexingRawMode && "We have to be skipping here!");
1593 CurLexer->LexingRawMode = false;
1594 IdentifierInfo *IfNDefMacro = 0;
1595 ShouldEnter = EvaluateDirectiveExpression(IfNDefMacro);
1596 CurLexer->LexingRawMode = true;
1597 }
1598
1599 // If this is a #elif with a #else before it, report the error.
1600 if (CondInfo.FoundElse) Diag(Tok, diag::pp_err_elif_after_else);
1601
1602 // If this condition is true, enter it!
1603 if (ShouldEnter) {
1604 CondInfo.FoundNonSkip = true;
1605 break;
1606 }
1607 }
1608 }
1609
1610 CurLexer->ParsingPreprocessorDirective = false;
1611 // Restore comment saving mode.
1612 CurLexer->KeepCommentMode = KeepComments;
1613 }
1614
1615 // Finally, if we are out of the conditional (saw an #endif or ran off the end
1616 // of the file, just stop skipping and return to lexing whatever came after
1617 // the #if block.
1618 CurLexer->LexingRawMode = false;
1619}
1620
1621//===----------------------------------------------------------------------===//
1622// Preprocessor Directive Handling.
1623//===----------------------------------------------------------------------===//
1624
1625/// HandleDirective - This callback is invoked when the lexer sees a # token
1626/// at the start of a line. This consumes the directive, modifies the
1627/// lexer/preprocessor state, and advances the lexer(s) so that the next token
1628/// read is the correct one.
Chris Lattnerd2177732007-07-20 16:59:19 +00001629void Preprocessor::HandleDirective(Token &Result) {
Reid Spencer5f016e22007-07-11 17:01:13 +00001630 // FIXME: Traditional: # with whitespace before it not recognized by K&R?
1631
1632 // We just parsed a # character at the start of a line, so we're in directive
1633 // mode. Tell the lexer this so any newlines we see will be converted into an
1634 // EOM token (which terminates the directive).
1635 CurLexer->ParsingPreprocessorDirective = true;
1636
1637 ++NumDirectives;
1638
1639 // We are about to read a token. For the multiple-include optimization FA to
1640 // work, we have to remember if we had read any tokens *before* this
1641 // pp-directive.
1642 bool ReadAnyTokensBeforeDirective = CurLexer->MIOpt.getHasReadAnyTokensVal();
1643
1644 // Read the next token, the directive flavor. This isn't expanded due to
1645 // C99 6.10.3p8.
1646 LexUnexpandedToken(Result);
1647
1648 // C99 6.10.3p11: Is this preprocessor directive in macro invocation? e.g.:
1649 // #define A(x) #x
1650 // A(abc
1651 // #warning blah
1652 // def)
1653 // If so, the user is relying on non-portable behavior, emit a diagnostic.
1654 if (InMacroArgs)
1655 Diag(Result, diag::ext_embedded_directive);
1656
1657TryAgain:
1658 switch (Result.getKind()) {
1659 case tok::eom:
1660 return; // null directive.
1661 case tok::comment:
1662 // Handle stuff like "# /*foo*/ define X" in -E -C mode.
1663 LexUnexpandedToken(Result);
1664 goto TryAgain;
1665
1666 case tok::numeric_constant:
1667 // FIXME: implement # 7 line numbers!
1668 DiscardUntilEndOfDirective();
1669 return;
1670 default:
1671 IdentifierInfo *II = Result.getIdentifierInfo();
1672 if (II == 0) break; // Not an identifier.
1673
1674 // Ask what the preprocessor keyword ID is.
1675 switch (II->getPPKeywordID()) {
1676 default: break;
1677 // C99 6.10.1 - Conditional Inclusion.
1678 case tok::pp_if:
1679 return HandleIfDirective(Result, ReadAnyTokensBeforeDirective);
1680 case tok::pp_ifdef:
1681 return HandleIfdefDirective(Result, false, true/*not valid for miopt*/);
1682 case tok::pp_ifndef:
1683 return HandleIfdefDirective(Result, true, ReadAnyTokensBeforeDirective);
1684 case tok::pp_elif:
1685 return HandleElifDirective(Result);
1686 case tok::pp_else:
1687 return HandleElseDirective(Result);
1688 case tok::pp_endif:
1689 return HandleEndifDirective(Result);
1690
1691 // C99 6.10.2 - Source File Inclusion.
1692 case tok::pp_include:
1693 return HandleIncludeDirective(Result); // Handle #include.
1694
1695 // C99 6.10.3 - Macro Replacement.
1696 case tok::pp_define:
1697 return HandleDefineDirective(Result, false);
1698 case tok::pp_undef:
1699 return HandleUndefDirective(Result);
1700
1701 // C99 6.10.4 - Line Control.
1702 case tok::pp_line:
1703 // FIXME: implement #line
1704 DiscardUntilEndOfDirective();
1705 return;
1706
1707 // C99 6.10.5 - Error Directive.
1708 case tok::pp_error:
1709 return HandleUserDiagnosticDirective(Result, false);
1710
1711 // C99 6.10.6 - Pragma Directive.
1712 case tok::pp_pragma:
1713 return HandlePragmaDirective();
1714
1715 // GNU Extensions.
1716 case tok::pp_import:
1717 return HandleImportDirective(Result);
1718 case tok::pp_include_next:
1719 return HandleIncludeNextDirective(Result);
1720
1721 case tok::pp_warning:
1722 Diag(Result, diag::ext_pp_warning_directive);
1723 return HandleUserDiagnosticDirective(Result, true);
1724 case tok::pp_ident:
1725 return HandleIdentSCCSDirective(Result);
1726 case tok::pp_sccs:
1727 return HandleIdentSCCSDirective(Result);
1728 case tok::pp_assert:
1729 //isExtension = true; // FIXME: implement #assert
1730 break;
1731 case tok::pp_unassert:
1732 //isExtension = true; // FIXME: implement #unassert
1733 break;
1734
1735 // clang extensions.
1736 case tok::pp_define_target:
1737 return HandleDefineDirective(Result, true);
1738 case tok::pp_define_other_target:
1739 return HandleDefineOtherTargetDirective(Result);
1740 }
1741 break;
1742 }
1743
1744 // If we reached here, the preprocessing token is not valid!
1745 Diag(Result, diag::err_pp_invalid_directive);
1746
1747 // Read the rest of the PP line.
1748 DiscardUntilEndOfDirective();
1749
1750 // Okay, we're done parsing the directive.
1751}
1752
Chris Lattnerd2177732007-07-20 16:59:19 +00001753void Preprocessor::HandleUserDiagnosticDirective(Token &Tok,
Reid Spencer5f016e22007-07-11 17:01:13 +00001754 bool isWarning) {
1755 // Read the rest of the line raw. We do this because we don't want macros
1756 // to be expanded and we don't require that the tokens be valid preprocessing
1757 // tokens. For example, this is allowed: "#warning ` 'foo". GCC does
1758 // collapse multiple consequtive white space between tokens, but this isn't
1759 // specified by the standard.
1760 std::string Message = CurLexer->ReadToEndOfLine();
1761
1762 unsigned DiagID = isWarning ? diag::pp_hash_warning : diag::err_pp_hash_error;
1763 return Diag(Tok, DiagID, Message);
1764}
1765
1766/// HandleIdentSCCSDirective - Handle a #ident/#sccs directive.
1767///
Chris Lattnerd2177732007-07-20 16:59:19 +00001768void Preprocessor::HandleIdentSCCSDirective(Token &Tok) {
Reid Spencer5f016e22007-07-11 17:01:13 +00001769 // Yes, this directive is an extension.
1770 Diag(Tok, diag::ext_pp_ident_directive);
1771
1772 // Read the string argument.
Chris Lattnerd2177732007-07-20 16:59:19 +00001773 Token StrTok;
Reid Spencer5f016e22007-07-11 17:01:13 +00001774 Lex(StrTok);
1775
1776 // If the token kind isn't a string, it's a malformed directive.
Chris Lattner22f6bbc2007-10-09 18:02:16 +00001777 if (StrTok.isNot(tok::string_literal) &&
1778 StrTok.isNot(tok::wide_string_literal))
Reid Spencer5f016e22007-07-11 17:01:13 +00001779 return Diag(StrTok, diag::err_pp_malformed_ident);
1780
1781 // Verify that there is nothing after the string, other than EOM.
1782 CheckEndOfDirective("#ident");
1783
1784 if (Callbacks)
1785 Callbacks->Ident(Tok.getLocation(), getSpelling(StrTok));
1786}
1787
1788//===----------------------------------------------------------------------===//
1789// Preprocessor Include Directive Handling.
1790//===----------------------------------------------------------------------===//
1791
1792/// GetIncludeFilenameSpelling - Turn the specified lexer token into a fully
1793/// checked and spelled filename, e.g. as an operand of #include. This returns
1794/// true if the input filename was in <>'s or false if it were in ""'s. The
1795/// caller is expected to provide a buffer that is large enough to hold the
1796/// spelling of the filename, but is also expected to handle the case when
1797/// this method decides to use a different buffer.
Chris Lattnerf1c99ac2007-07-23 04:15:27 +00001798bool Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc,
Reid Spencer5f016e22007-07-11 17:01:13 +00001799 const char *&BufStart,
1800 const char *&BufEnd) {
1801 // Get the text form of the filename.
Reid Spencer5f016e22007-07-11 17:01:13 +00001802 assert(BufStart != BufEnd && "Can't have tokens with empty spellings!");
1803
1804 // Make sure the filename is <x> or "x".
1805 bool isAngled;
1806 if (BufStart[0] == '<') {
1807 if (BufEnd[-1] != '>') {
Chris Lattnerf1c99ac2007-07-23 04:15:27 +00001808 Diag(Loc, diag::err_pp_expects_filename);
Reid Spencer5f016e22007-07-11 17:01:13 +00001809 BufStart = 0;
1810 return true;
1811 }
1812 isAngled = true;
1813 } else if (BufStart[0] == '"') {
1814 if (BufEnd[-1] != '"') {
Chris Lattnerf1c99ac2007-07-23 04:15:27 +00001815 Diag(Loc, diag::err_pp_expects_filename);
Reid Spencer5f016e22007-07-11 17:01:13 +00001816 BufStart = 0;
1817 return true;
1818 }
1819 isAngled = false;
1820 } else {
Chris Lattnerf1c99ac2007-07-23 04:15:27 +00001821 Diag(Loc, diag::err_pp_expects_filename);
Reid Spencer5f016e22007-07-11 17:01:13 +00001822 BufStart = 0;
1823 return true;
1824 }
1825
1826 // Diagnose #include "" as invalid.
1827 if (BufEnd-BufStart <= 2) {
Chris Lattnerf1c99ac2007-07-23 04:15:27 +00001828 Diag(Loc, diag::err_pp_empty_filename);
Reid Spencer5f016e22007-07-11 17:01:13 +00001829 BufStart = 0;
1830 return "";
1831 }
1832
1833 // Skip the brackets.
1834 ++BufStart;
1835 --BufEnd;
1836 return isAngled;
1837}
1838
Chris Lattner706ab502007-07-23 04:56:47 +00001839/// ConcatenateIncludeName - Handle cases where the #include name is expanded
1840/// from a macro as multiple tokens, which need to be glued together. This
1841/// occurs for code like:
1842/// #define FOO <a/b.h>
1843/// #include FOO
1844/// because in this case, "<a/b.h>" is returned as 7 tokens, not one.
1845///
1846/// This code concatenates and consumes tokens up to the '>' token. It returns
1847/// false if the > was found, otherwise it returns true if it finds and consumes
1848/// the EOM marker.
1849static bool ConcatenateIncludeName(llvm::SmallVector<char, 128> &FilenameBuffer,
1850 Preprocessor &PP) {
1851 Token CurTok;
1852
1853 PP.Lex(CurTok);
Chris Lattner22f6bbc2007-10-09 18:02:16 +00001854 while (CurTok.isNot(tok::eom)) {
Chris Lattner706ab502007-07-23 04:56:47 +00001855 // Append the spelling of this token to the buffer. If there was a space
1856 // before it, add it now.
1857 if (CurTok.hasLeadingSpace())
1858 FilenameBuffer.push_back(' ');
1859
1860 // Get the spelling of the token, directly into FilenameBuffer if possible.
1861 unsigned PreAppendSize = FilenameBuffer.size();
1862 FilenameBuffer.resize(PreAppendSize+CurTok.getLength());
1863
1864 const char *BufPtr = &FilenameBuffer[PreAppendSize];
1865 unsigned ActualLen = PP.getSpelling(CurTok, BufPtr);
1866
1867 // If the token was spelled somewhere else, copy it into FilenameBuffer.
1868 if (BufPtr != &FilenameBuffer[PreAppendSize])
1869 memcpy(&FilenameBuffer[PreAppendSize], BufPtr, ActualLen);
1870
1871 // Resize FilenameBuffer to the correct size.
1872 if (CurTok.getLength() != ActualLen)
1873 FilenameBuffer.resize(PreAppendSize+ActualLen);
1874
1875 // If we found the '>' marker, return success.
Chris Lattner22f6bbc2007-10-09 18:02:16 +00001876 if (CurTok.is(tok::greater))
Chris Lattner706ab502007-07-23 04:56:47 +00001877 return false;
1878
1879 PP.Lex(CurTok);
1880 }
1881
1882 // If we hit the eom marker, emit an error and return true so that the caller
1883 // knows the EOM has been read.
1884 PP.Diag(CurTok.getLocation(), diag::err_pp_expects_filename);
1885 return true;
1886}
1887
Reid Spencer5f016e22007-07-11 17:01:13 +00001888/// HandleIncludeDirective - The "#include" tokens have just been read, read the
1889/// file to be included from the lexer, then include it! This is a common
1890/// routine with functionality shared between #include, #include_next and
1891/// #import.
Chris Lattnerd2177732007-07-20 16:59:19 +00001892void Preprocessor::HandleIncludeDirective(Token &IncludeTok,
Reid Spencer5f016e22007-07-11 17:01:13 +00001893 const DirectoryLookup *LookupFrom,
1894 bool isImport) {
1895
Chris Lattnerd2177732007-07-20 16:59:19 +00001896 Token FilenameTok;
Reid Spencer5f016e22007-07-11 17:01:13 +00001897 CurLexer->LexIncludeFilename(FilenameTok);
1898
Reid Spencer5f016e22007-07-11 17:01:13 +00001899 // Reserve a buffer to get the spelling.
1900 llvm::SmallVector<char, 128> FilenameBuffer;
Chris Lattner706ab502007-07-23 04:56:47 +00001901 const char *FilenameStart, *FilenameEnd;
1902
1903 switch (FilenameTok.getKind()) {
1904 case tok::eom:
1905 // If the token kind is EOM, the error has already been diagnosed.
1906 return;
Reid Spencer5f016e22007-07-11 17:01:13 +00001907
Chris Lattner706ab502007-07-23 04:56:47 +00001908 case tok::angle_string_literal:
Chris Lattnerf11ccfc2007-07-23 22:23:52 +00001909 case tok::string_literal: {
Chris Lattner706ab502007-07-23 04:56:47 +00001910 FilenameBuffer.resize(FilenameTok.getLength());
1911 FilenameStart = &FilenameBuffer[0];
1912 unsigned Len = getSpelling(FilenameTok, FilenameStart);
1913 FilenameEnd = FilenameStart+Len;
1914 break;
Chris Lattnerf11ccfc2007-07-23 22:23:52 +00001915 }
Chris Lattner706ab502007-07-23 04:56:47 +00001916
1917 case tok::less:
1918 // This could be a <foo/bar.h> file coming from a macro expansion. In this
1919 // case, glue the tokens together into FilenameBuffer and interpret those.
1920 FilenameBuffer.push_back('<');
1921 if (ConcatenateIncludeName(FilenameBuffer, *this))
1922 return; // Found <eom> but no ">"? Diagnostic already emitted.
1923 FilenameStart = &FilenameBuffer[0];
1924 FilenameEnd = &FilenameBuffer[FilenameBuffer.size()];
1925 break;
1926 default:
1927 Diag(FilenameTok.getLocation(), diag::err_pp_expects_filename);
1928 DiscardUntilEndOfDirective();
1929 return;
1930 }
1931
Chris Lattnerf1c99ac2007-07-23 04:15:27 +00001932 bool isAngled = GetIncludeFilenameSpelling(FilenameTok.getLocation(),
Reid Spencer5f016e22007-07-11 17:01:13 +00001933 FilenameStart, FilenameEnd);
1934 // If GetIncludeFilenameSpelling set the start ptr to null, there was an
1935 // error.
Chris Lattner706ab502007-07-23 04:56:47 +00001936 if (FilenameStart == 0) {
1937 DiscardUntilEndOfDirective();
Reid Spencer5f016e22007-07-11 17:01:13 +00001938 return;
Chris Lattner706ab502007-07-23 04:56:47 +00001939 }
Reid Spencer5f016e22007-07-11 17:01:13 +00001940
1941 // Verify that there is nothing after the filename, other than EOM. Use the
1942 // preprocessor to lex this in case lexing the filename entered a macro.
1943 CheckEndOfDirective("#include");
1944
1945 // Check that we don't have infinite #include recursion.
1946 if (IncludeMacroStack.size() == MaxAllowedIncludeStackDepth-1)
1947 return Diag(FilenameTok, diag::err_pp_include_too_deep);
1948
1949 // Search include directories.
1950 const DirectoryLookup *CurDir;
1951 const FileEntry *File = LookupFile(FilenameStart, FilenameEnd,
1952 isAngled, LookupFrom, CurDir);
1953 if (File == 0)
1954 return Diag(FilenameTok, diag::err_pp_file_not_found,
1955 std::string(FilenameStart, FilenameEnd));
1956
1957 // Ask HeaderInfo if we should enter this #include file.
1958 if (!HeaderInfo.ShouldEnterIncludeFile(File, isImport)) {
1959 // If it returns true, #including this file will have no effect.
1960 return;
1961 }
1962
1963 // Look up the file, create a File ID for it.
1964 unsigned FileID = SourceMgr.createFileID(File, FilenameTok.getLocation());
1965 if (FileID == 0)
1966 return Diag(FilenameTok, diag::err_pp_file_not_found,
1967 std::string(FilenameStart, FilenameEnd));
1968
1969 // Finally, if all is good, enter the new file!
1970 EnterSourceFile(FileID, CurDir);
1971}
1972
1973/// HandleIncludeNextDirective - Implements #include_next.
1974///
Chris Lattnerd2177732007-07-20 16:59:19 +00001975void Preprocessor::HandleIncludeNextDirective(Token &IncludeNextTok) {
Reid Spencer5f016e22007-07-11 17:01:13 +00001976 Diag(IncludeNextTok, diag::ext_pp_include_next_directive);
1977
1978 // #include_next is like #include, except that we start searching after
1979 // the current found directory. If we can't do this, issue a
1980 // diagnostic.
1981 const DirectoryLookup *Lookup = CurDirLookup;
1982 if (isInPrimaryFile()) {
1983 Lookup = 0;
1984 Diag(IncludeNextTok, diag::pp_include_next_in_primary);
1985 } else if (Lookup == 0) {
1986 Diag(IncludeNextTok, diag::pp_include_next_absolute_path);
1987 } else {
1988 // Start looking up in the next directory.
1989 ++Lookup;
1990 }
1991
1992 return HandleIncludeDirective(IncludeNextTok, Lookup);
1993}
1994
1995/// HandleImportDirective - Implements #import.
1996///
Chris Lattnerd2177732007-07-20 16:59:19 +00001997void Preprocessor::HandleImportDirective(Token &ImportTok) {
Reid Spencer5f016e22007-07-11 17:01:13 +00001998 Diag(ImportTok, diag::ext_pp_import_directive);
1999
2000 return HandleIncludeDirective(ImportTok, 0, true);
2001}
2002
2003//===----------------------------------------------------------------------===//
2004// Preprocessor Macro Directive Handling.
2005//===----------------------------------------------------------------------===//
2006
2007/// ReadMacroDefinitionArgList - The ( starting an argument list of a macro
2008/// definition has just been read. Lex the rest of the arguments and the
2009/// closing ), updating MI with what we learn. Return true if an error occurs
2010/// parsing the arg list.
2011bool Preprocessor::ReadMacroDefinitionArgList(MacroInfo *MI) {
Chris Lattner25c96482007-07-14 22:46:43 +00002012 llvm::SmallVector<IdentifierInfo*, 32> Arguments;
2013
Chris Lattnerd2177732007-07-20 16:59:19 +00002014 Token Tok;
Reid Spencer5f016e22007-07-11 17:01:13 +00002015 while (1) {
2016 LexUnexpandedToken(Tok);
2017 switch (Tok.getKind()) {
2018 case tok::r_paren:
2019 // Found the end of the argument list.
Chris Lattner25c96482007-07-14 22:46:43 +00002020 if (Arguments.empty()) { // #define FOO()
2021 MI->setArgumentList(Arguments.begin(), Arguments.end());
2022 return false;
2023 }
Reid Spencer5f016e22007-07-11 17:01:13 +00002024 // Otherwise we have #define FOO(A,)
2025 Diag(Tok, diag::err_pp_expected_ident_in_arg_list);
2026 return true;
2027 case tok::ellipsis: // #define X(... -> C99 varargs
2028 // Warn if use of C99 feature in non-C99 mode.
2029 if (!Features.C99) Diag(Tok, diag::ext_variadic_macro);
2030
2031 // Lex the token after the identifier.
2032 LexUnexpandedToken(Tok);
Chris Lattner22f6bbc2007-10-09 18:02:16 +00002033 if (Tok.isNot(tok::r_paren)) {
Reid Spencer5f016e22007-07-11 17:01:13 +00002034 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);
2035 return true;
2036 }
2037 // Add the __VA_ARGS__ identifier as an argument.
Chris Lattner25c96482007-07-14 22:46:43 +00002038 Arguments.push_back(Ident__VA_ARGS__);
Reid Spencer5f016e22007-07-11 17:01:13 +00002039 MI->setIsC99Varargs();
Chris Lattner25c96482007-07-14 22:46:43 +00002040 MI->setArgumentList(Arguments.begin(), Arguments.end());
Reid Spencer5f016e22007-07-11 17:01:13 +00002041 return false;
2042 case tok::eom: // #define X(
2043 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);
2044 return true;
2045 default:
2046 // Handle keywords and identifiers here to accept things like
2047 // #define Foo(for) for.
2048 IdentifierInfo *II = Tok.getIdentifierInfo();
2049 if (II == 0) {
2050 // #define X(1
2051 Diag(Tok, diag::err_pp_invalid_tok_in_arg_list);
2052 return true;
2053 }
2054
2055 // If this is already used as an argument, it is used multiple times (e.g.
2056 // #define X(A,A.
Chris Lattner25c96482007-07-14 22:46:43 +00002057 if (std::find(Arguments.begin(), Arguments.end(), II) !=
2058 Arguments.end()) { // C99 6.10.3p6
Reid Spencer5f016e22007-07-11 17:01:13 +00002059 Diag(Tok, diag::err_pp_duplicate_name_in_arg_list, II->getName());
2060 return true;
2061 }
2062
2063 // Add the argument to the macro info.
Chris Lattner25c96482007-07-14 22:46:43 +00002064 Arguments.push_back(II);
Reid Spencer5f016e22007-07-11 17:01:13 +00002065
2066 // Lex the token after the identifier.
2067 LexUnexpandedToken(Tok);
2068
2069 switch (Tok.getKind()) {
2070 default: // #define X(A B
2071 Diag(Tok, diag::err_pp_expected_comma_in_arg_list);
2072 return true;
2073 case tok::r_paren: // #define X(A)
Chris Lattner25c96482007-07-14 22:46:43 +00002074 MI->setArgumentList(Arguments.begin(), Arguments.end());
Reid Spencer5f016e22007-07-11 17:01:13 +00002075 return false;
2076 case tok::comma: // #define X(A,
2077 break;
2078 case tok::ellipsis: // #define X(A... -> GCC extension
2079 // Diagnose extension.
2080 Diag(Tok, diag::ext_named_variadic_macro);
2081
2082 // Lex the token after the identifier.
2083 LexUnexpandedToken(Tok);
Chris Lattner22f6bbc2007-10-09 18:02:16 +00002084 if (Tok.isNot(tok::r_paren)) {
Reid Spencer5f016e22007-07-11 17:01:13 +00002085 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);
2086 return true;
2087 }
2088
2089 MI->setIsGNUVarargs();
Chris Lattner25c96482007-07-14 22:46:43 +00002090 MI->setArgumentList(Arguments.begin(), Arguments.end());
Reid Spencer5f016e22007-07-11 17:01:13 +00002091 return false;
2092 }
2093 }
2094 }
2095}
2096
2097/// HandleDefineDirective - Implements #define. This consumes the entire macro
2098/// line then lets the caller lex the next real token. If 'isTargetSpecific' is
2099/// true, then this is a "#define_target", otherwise this is a "#define".
2100///
Chris Lattnerd2177732007-07-20 16:59:19 +00002101void Preprocessor::HandleDefineDirective(Token &DefineTok,
Reid Spencer5f016e22007-07-11 17:01:13 +00002102 bool isTargetSpecific) {
2103 ++NumDefined;
2104
Chris Lattnerd2177732007-07-20 16:59:19 +00002105 Token MacroNameTok;
Reid Spencer5f016e22007-07-11 17:01:13 +00002106 ReadMacroName(MacroNameTok, 1);
2107
2108 // Error reading macro name? If so, diagnostic already issued.
Chris Lattner22f6bbc2007-10-09 18:02:16 +00002109 if (MacroNameTok.is(tok::eom))
Reid Spencer5f016e22007-07-11 17:01:13 +00002110 return;
Chris Lattnerc215bd62007-07-14 22:11:41 +00002111
Reid Spencer5f016e22007-07-11 17:01:13 +00002112 // If we are supposed to keep comments in #defines, reenable comment saving
2113 // mode.
2114 CurLexer->KeepCommentMode = KeepMacroComments;
2115
2116 // Create the new macro.
2117 MacroInfo *MI = new MacroInfo(MacroNameTok.getLocation());
2118 if (isTargetSpecific) MI->setIsTargetSpecific();
2119
2120 // If the identifier is an 'other target' macro, clear this bit.
2121 MacroNameTok.getIdentifierInfo()->setIsOtherTargetMacro(false);
2122
2123
Chris Lattnerd2177732007-07-20 16:59:19 +00002124 Token Tok;
Reid Spencer5f016e22007-07-11 17:01:13 +00002125 LexUnexpandedToken(Tok);
2126
2127 // If this is a function-like macro definition, parse the argument list,
2128 // marking each of the identifiers as being used as macro arguments. Also,
2129 // check other constraints on the first token of the macro body.
Chris Lattner22f6bbc2007-10-09 18:02:16 +00002130 if (Tok.is(tok::eom)) {
Reid Spencer5f016e22007-07-11 17:01:13 +00002131 // If there is no body to this macro, we have no special handling here.
Chris Lattner22f6bbc2007-10-09 18:02:16 +00002132 } else if (Tok.is(tok::l_paren) && !Tok.hasLeadingSpace()) {
Reid Spencer5f016e22007-07-11 17:01:13 +00002133 // This is a function-like macro definition. Read the argument list.
2134 MI->setIsFunctionLike();
2135 if (ReadMacroDefinitionArgList(MI)) {
2136 // Forget about MI.
2137 delete MI;
2138 // Throw away the rest of the line.
2139 if (CurLexer->ParsingPreprocessorDirective)
2140 DiscardUntilEndOfDirective();
2141 return;
2142 }
2143
2144 // Read the first token after the arg list for down below.
2145 LexUnexpandedToken(Tok);
2146 } else if (!Tok.hasLeadingSpace()) {
2147 // C99 requires whitespace between the macro definition and the body. Emit
2148 // a diagnostic for something like "#define X+".
2149 if (Features.C99) {
2150 Diag(Tok, diag::ext_c99_whitespace_required_after_macro_name);
2151 } else {
2152 // FIXME: C90/C++ do not get this diagnostic, but it does get a similar
2153 // one in some cases!
2154 }
2155 } else {
2156 // This is a normal token with leading space. Clear the leading space
2157 // marker on the first token to get proper expansion.
Chris Lattnerd2177732007-07-20 16:59:19 +00002158 Tok.clearFlag(Token::LeadingSpace);
Reid Spencer5f016e22007-07-11 17:01:13 +00002159 }
2160
2161 // If this is a definition of a variadic C99 function-like macro, not using
2162 // the GNU named varargs extension, enabled __VA_ARGS__.
2163
2164 // "Poison" __VA_ARGS__, which can only appear in the expansion of a macro.
2165 // This gets unpoisoned where it is allowed.
2166 assert(Ident__VA_ARGS__->isPoisoned() && "__VA_ARGS__ should be poisoned!");
2167 if (MI->isC99Varargs())
2168 Ident__VA_ARGS__->setIsPoisoned(false);
2169
2170 // Read the rest of the macro body.
Chris Lattnerb5e240f2007-07-14 21:54:03 +00002171 if (MI->isObjectLike()) {
2172 // Object-like macros are very simple, just read their body.
Chris Lattner22f6bbc2007-10-09 18:02:16 +00002173 while (Tok.isNot(tok::eom)) {
Chris Lattnerb5e240f2007-07-14 21:54:03 +00002174 MI->AddTokenToBody(Tok);
Reid Spencer5f016e22007-07-11 17:01:13 +00002175 // Get the next token of the macro.
2176 LexUnexpandedToken(Tok);
Reid Spencer5f016e22007-07-11 17:01:13 +00002177 }
2178
Chris Lattnerb5e240f2007-07-14 21:54:03 +00002179 } else {
2180 // Otherwise, read the body of a function-like macro. This has to validate
2181 // the # (stringize) operator.
Chris Lattner22f6bbc2007-10-09 18:02:16 +00002182 while (Tok.isNot(tok::eom)) {
Chris Lattnerb5e240f2007-07-14 21:54:03 +00002183 MI->AddTokenToBody(Tok);
Reid Spencer5f016e22007-07-11 17:01:13 +00002184
Chris Lattnerb5e240f2007-07-14 21:54:03 +00002185 // Check C99 6.10.3.2p1: ensure that # operators are followed by macro
2186 // parameters in function-like macro expansions.
Chris Lattner22f6bbc2007-10-09 18:02:16 +00002187 if (Tok.isNot(tok::hash)) {
Chris Lattnerb5e240f2007-07-14 21:54:03 +00002188 // Get the next token of the macro.
2189 LexUnexpandedToken(Tok);
2190 continue;
2191 }
2192
2193 // Get the next token of the macro.
2194 LexUnexpandedToken(Tok);
2195
2196 // Not a macro arg identifier?
2197 if (!Tok.getIdentifierInfo() ||
2198 MI->getArgumentNum(Tok.getIdentifierInfo()) == -1) {
2199 Diag(Tok, diag::err_pp_stringize_not_parameter);
2200 delete MI;
2201
2202 // Disable __VA_ARGS__ again.
2203 Ident__VA_ARGS__->setIsPoisoned(true);
2204 return;
2205 }
2206
2207 // Things look ok, add the param name token to the macro.
2208 MI->AddTokenToBody(Tok);
2209
2210 // Get the next token of the macro.
2211 LexUnexpandedToken(Tok);
2212 }
Reid Spencer5f016e22007-07-11 17:01:13 +00002213 }
2214
Chris Lattnerc215bd62007-07-14 22:11:41 +00002215
Reid Spencer5f016e22007-07-11 17:01:13 +00002216 // Disable __VA_ARGS__ again.
2217 Ident__VA_ARGS__->setIsPoisoned(true);
2218
2219 // Check that there is no paste (##) operator at the begining or end of the
2220 // replacement list.
2221 unsigned NumTokens = MI->getNumTokens();
2222 if (NumTokens != 0) {
Chris Lattner22f6bbc2007-10-09 18:02:16 +00002223 if (MI->getReplacementToken(0).is(tok::hashhash)) {
Reid Spencer5f016e22007-07-11 17:01:13 +00002224 Diag(MI->getReplacementToken(0), diag::err_paste_at_start);
2225 delete MI;
2226 return;
2227 }
Chris Lattner22f6bbc2007-10-09 18:02:16 +00002228 if (MI->getReplacementToken(NumTokens-1).is(tok::hashhash)) {
Reid Spencer5f016e22007-07-11 17:01:13 +00002229 Diag(MI->getReplacementToken(NumTokens-1), diag::err_paste_at_end);
2230 delete MI;
2231 return;
2232 }
2233 }
2234
2235 // If this is the primary source file, remember that this macro hasn't been
2236 // used yet.
2237 if (isInPrimaryFile())
2238 MI->setIsUsed(false);
2239
2240 // Finally, if this identifier already had a macro defined for it, verify that
2241 // the macro bodies are identical and free the old definition.
Chris Lattnercc1a8752007-10-07 08:44:20 +00002242 if (MacroInfo *OtherMI = getMacroInfo(MacroNameTok.getIdentifierInfo())) {
Reid Spencer5f016e22007-07-11 17:01:13 +00002243 if (!OtherMI->isUsed())
2244 Diag(OtherMI->getDefinitionLoc(), diag::pp_macro_not_used);
2245
2246 // Macros must be identical. This means all tokes and whitespace separation
2247 // must be the same. C99 6.10.3.2.
2248 if (!MI->isIdenticalTo(*OtherMI, *this)) {
2249 Diag(MI->getDefinitionLoc(), diag::ext_pp_macro_redef,
2250 MacroNameTok.getIdentifierInfo()->getName());
2251 Diag(OtherMI->getDefinitionLoc(), diag::ext_pp_macro_redef2);
2252 }
2253 delete OtherMI;
2254 }
2255
Chris Lattnercc1a8752007-10-07 08:44:20 +00002256 setMacroInfo(MacroNameTok.getIdentifierInfo(), MI);
Reid Spencer5f016e22007-07-11 17:01:13 +00002257}
2258
2259/// HandleDefineOtherTargetDirective - Implements #define_other_target.
Chris Lattnerd2177732007-07-20 16:59:19 +00002260void Preprocessor::HandleDefineOtherTargetDirective(Token &Tok) {
2261 Token MacroNameTok;
Reid Spencer5f016e22007-07-11 17:01:13 +00002262 ReadMacroName(MacroNameTok, 1);
2263
2264 // Error reading macro name? If so, diagnostic already issued.
Chris Lattner22f6bbc2007-10-09 18:02:16 +00002265 if (MacroNameTok.is(tok::eom))
Reid Spencer5f016e22007-07-11 17:01:13 +00002266 return;
2267
2268 // Check to see if this is the last token on the #undef line.
2269 CheckEndOfDirective("#define_other_target");
2270
2271 // If there is already a macro defined by this name, turn it into a
2272 // target-specific define.
Chris Lattnercc1a8752007-10-07 08:44:20 +00002273 if (MacroInfo *MI = getMacroInfo(MacroNameTok.getIdentifierInfo())) {
Reid Spencer5f016e22007-07-11 17:01:13 +00002274 MI->setIsTargetSpecific(true);
2275 return;
2276 }
2277
2278 // Mark the identifier as being a macro on some other target.
2279 MacroNameTok.getIdentifierInfo()->setIsOtherTargetMacro();
2280}
2281
2282
2283/// HandleUndefDirective - Implements #undef.
2284///
Chris Lattnerd2177732007-07-20 16:59:19 +00002285void Preprocessor::HandleUndefDirective(Token &UndefTok) {
Reid Spencer5f016e22007-07-11 17:01:13 +00002286 ++NumUndefined;
2287
Chris Lattnerd2177732007-07-20 16:59:19 +00002288 Token MacroNameTok;
Reid Spencer5f016e22007-07-11 17:01:13 +00002289 ReadMacroName(MacroNameTok, 2);
2290
2291 // Error reading macro name? If so, diagnostic already issued.
Chris Lattner22f6bbc2007-10-09 18:02:16 +00002292 if (MacroNameTok.is(tok::eom))
Reid Spencer5f016e22007-07-11 17:01:13 +00002293 return;
2294
2295 // Check to see if this is the last token on the #undef line.
2296 CheckEndOfDirective("#undef");
2297
2298 // Okay, we finally have a valid identifier to undef.
Chris Lattnercc1a8752007-10-07 08:44:20 +00002299 MacroInfo *MI = getMacroInfo(MacroNameTok.getIdentifierInfo());
Reid Spencer5f016e22007-07-11 17:01:13 +00002300
2301 // #undef untaints an identifier if it were marked by define_other_target.
2302 MacroNameTok.getIdentifierInfo()->setIsOtherTargetMacro(false);
2303
2304 // If the macro is not defined, this is a noop undef, just return.
2305 if (MI == 0) return;
2306
2307 if (!MI->isUsed())
2308 Diag(MI->getDefinitionLoc(), diag::pp_macro_not_used);
2309
2310 // Free macro definition.
2311 delete MI;
Chris Lattnercc1a8752007-10-07 08:44:20 +00002312 setMacroInfo(MacroNameTok.getIdentifierInfo(), 0);
Reid Spencer5f016e22007-07-11 17:01:13 +00002313}
2314
2315
2316//===----------------------------------------------------------------------===//
2317// Preprocessor Conditional Directive Handling.
2318//===----------------------------------------------------------------------===//
2319
2320/// HandleIfdefDirective - Implements the #ifdef/#ifndef directive. isIfndef is
2321/// true when this is a #ifndef directive. ReadAnyTokensBeforeDirective is true
2322/// if any tokens have been returned or pp-directives activated before this
2323/// #ifndef has been lexed.
2324///
Chris Lattnerd2177732007-07-20 16:59:19 +00002325void Preprocessor::HandleIfdefDirective(Token &Result, bool isIfndef,
Reid Spencer5f016e22007-07-11 17:01:13 +00002326 bool ReadAnyTokensBeforeDirective) {
2327 ++NumIf;
Chris Lattnerd2177732007-07-20 16:59:19 +00002328 Token DirectiveTok = Result;
Reid Spencer5f016e22007-07-11 17:01:13 +00002329
Chris Lattnerd2177732007-07-20 16:59:19 +00002330 Token MacroNameTok;
Reid Spencer5f016e22007-07-11 17:01:13 +00002331 ReadMacroName(MacroNameTok);
2332
2333 // Error reading macro name? If so, diagnostic already issued.
Chris Lattner22f6bbc2007-10-09 18:02:16 +00002334 if (MacroNameTok.is(tok::eom)) {
Chris Lattnerf37bb252007-09-24 05:14:57 +00002335 // Skip code until we get to #endif. This helps with recovery by not
2336 // emitting an error when the #endif is reached.
2337 SkipExcludedConditionalBlock(DirectiveTok.getLocation(),
2338 /*Foundnonskip*/false, /*FoundElse*/false);
Reid Spencer5f016e22007-07-11 17:01:13 +00002339 return;
Chris Lattnerf37bb252007-09-24 05:14:57 +00002340 }
Reid Spencer5f016e22007-07-11 17:01:13 +00002341
2342 // Check to see if this is the last token on the #if[n]def line.
2343 CheckEndOfDirective(isIfndef ? "#ifndef" : "#ifdef");
2344
2345 // If the start of a top-level #ifdef, inform MIOpt.
2346 if (!ReadAnyTokensBeforeDirective &&
2347 CurLexer->getConditionalStackDepth() == 0) {
2348 assert(isIfndef && "#ifdef shouldn't reach here");
2349 CurLexer->MIOpt.EnterTopLevelIFNDEF(MacroNameTok.getIdentifierInfo());
2350 }
2351
2352 IdentifierInfo *MII = MacroNameTok.getIdentifierInfo();
Chris Lattnercc1a8752007-10-07 08:44:20 +00002353 MacroInfo *MI = getMacroInfo(MII);
Reid Spencer5f016e22007-07-11 17:01:13 +00002354
2355 // If there is a macro, process it.
2356 if (MI) {
2357 // Mark it used.
2358 MI->setIsUsed(true);
2359
2360 // If this is the first use of a target-specific macro, warn about it.
2361 if (MI->isTargetSpecific()) {
2362 MI->setIsTargetSpecific(false); // Don't warn on second use.
Ted Kremenek9c728dc2007-12-12 22:39:36 +00002363 getTargetInfo().DiagnoseNonPortability(
2364 getFullLoc(MacroNameTok.getLocation()),
2365 diag::port_target_macro_use);
Reid Spencer5f016e22007-07-11 17:01:13 +00002366 }
2367 } else {
2368 // Use of a target-specific macro for some other target? If so, warn.
2369 if (MII->isOtherTargetMacro()) {
2370 MII->setIsOtherTargetMacro(false); // Don't warn on second use.
Ted Kremenek9c728dc2007-12-12 22:39:36 +00002371 getTargetInfo().DiagnoseNonPortability(
2372 getFullLoc(MacroNameTok.getLocation()),
2373 diag::port_target_macro_use);
Reid Spencer5f016e22007-07-11 17:01:13 +00002374 }
2375 }
2376
2377 // Should we include the stuff contained by this directive?
2378 if (!MI == isIfndef) {
2379 // Yes, remember that we are inside a conditional, then lex the next token.
2380 CurLexer->pushConditionalLevel(DirectiveTok.getLocation(), /*wasskip*/false,
2381 /*foundnonskip*/true, /*foundelse*/false);
2382 } else {
2383 // No, skip the contents of this block and return the first token after it.
2384 SkipExcludedConditionalBlock(DirectiveTok.getLocation(),
2385 /*Foundnonskip*/false,
2386 /*FoundElse*/false);
2387 }
2388}
2389
2390/// HandleIfDirective - Implements the #if directive.
2391///
Chris Lattnerd2177732007-07-20 16:59:19 +00002392void Preprocessor::HandleIfDirective(Token &IfToken,
Reid Spencer5f016e22007-07-11 17:01:13 +00002393 bool ReadAnyTokensBeforeDirective) {
2394 ++NumIf;
2395
2396 // Parse and evaluation the conditional expression.
2397 IdentifierInfo *IfNDefMacro = 0;
2398 bool ConditionalTrue = EvaluateDirectiveExpression(IfNDefMacro);
2399
2400 // Should we include the stuff contained by this directive?
2401 if (ConditionalTrue) {
2402 // If this condition is equivalent to #ifndef X, and if this is the first
2403 // directive seen, handle it for the multiple-include optimization.
2404 if (!ReadAnyTokensBeforeDirective &&
2405 CurLexer->getConditionalStackDepth() == 0 && IfNDefMacro)
2406 CurLexer->MIOpt.EnterTopLevelIFNDEF(IfNDefMacro);
2407
2408 // Yes, remember that we are inside a conditional, then lex the next token.
2409 CurLexer->pushConditionalLevel(IfToken.getLocation(), /*wasskip*/false,
2410 /*foundnonskip*/true, /*foundelse*/false);
2411 } else {
2412 // No, skip the contents of this block and return the first token after it.
2413 SkipExcludedConditionalBlock(IfToken.getLocation(), /*Foundnonskip*/false,
2414 /*FoundElse*/false);
2415 }
2416}
2417
2418/// HandleEndifDirective - Implements the #endif directive.
2419///
Chris Lattnerd2177732007-07-20 16:59:19 +00002420void Preprocessor::HandleEndifDirective(Token &EndifToken) {
Reid Spencer5f016e22007-07-11 17:01:13 +00002421 ++NumEndif;
2422
2423 // Check that this is the whole directive.
2424 CheckEndOfDirective("#endif");
2425
2426 PPConditionalInfo CondInfo;
2427 if (CurLexer->popConditionalLevel(CondInfo)) {
2428 // No conditionals on the stack: this is an #endif without an #if.
2429 return Diag(EndifToken, diag::err_pp_endif_without_if);
2430 }
2431
2432 // If this the end of a top-level #endif, inform MIOpt.
2433 if (CurLexer->getConditionalStackDepth() == 0)
2434 CurLexer->MIOpt.ExitTopLevelConditional();
2435
2436 assert(!CondInfo.WasSkipping && !CurLexer->LexingRawMode &&
2437 "This code should only be reachable in the non-skipping case!");
2438}
2439
2440
Chris Lattnerd2177732007-07-20 16:59:19 +00002441void Preprocessor::HandleElseDirective(Token &Result) {
Reid Spencer5f016e22007-07-11 17:01:13 +00002442 ++NumElse;
2443
2444 // #else directive in a non-skipping conditional... start skipping.
2445 CheckEndOfDirective("#else");
2446
2447 PPConditionalInfo CI;
2448 if (CurLexer->popConditionalLevel(CI))
2449 return Diag(Result, diag::pp_err_else_without_if);
2450
2451 // If this is a top-level #else, inform the MIOpt.
2452 if (CurLexer->getConditionalStackDepth() == 0)
2453 CurLexer->MIOpt.FoundTopLevelElse();
2454
2455 // If this is a #else with a #else before it, report the error.
2456 if (CI.FoundElse) Diag(Result, diag::pp_err_else_after_else);
2457
2458 // Finally, skip the rest of the contents of this block and return the first
2459 // token after it.
2460 return SkipExcludedConditionalBlock(CI.IfLoc, /*Foundnonskip*/true,
2461 /*FoundElse*/true);
2462}
2463
Chris Lattnerd2177732007-07-20 16:59:19 +00002464void Preprocessor::HandleElifDirective(Token &ElifToken) {
Reid Spencer5f016e22007-07-11 17:01:13 +00002465 ++NumElse;
2466
2467 // #elif directive in a non-skipping conditional... start skipping.
2468 // We don't care what the condition is, because we will always skip it (since
2469 // the block immediately before it was included).
2470 DiscardUntilEndOfDirective();
2471
2472 PPConditionalInfo CI;
2473 if (CurLexer->popConditionalLevel(CI))
2474 return Diag(ElifToken, diag::pp_err_elif_without_if);
2475
2476 // If this is a top-level #elif, inform the MIOpt.
2477 if (CurLexer->getConditionalStackDepth() == 0)
2478 CurLexer->MIOpt.FoundTopLevelElse();
2479
2480 // If this is a #elif with a #else before it, report the error.
2481 if (CI.FoundElse) Diag(ElifToken, diag::pp_err_elif_after_else);
2482
2483 // Finally, skip the rest of the contents of this block and return the first
2484 // token after it.
2485 return SkipExcludedConditionalBlock(CI.IfLoc, /*Foundnonskip*/true,
2486 /*FoundElse*/CI.FoundElse);
2487}
2488