blob: 0970590afe9d44b65f790277b4edf6890e3dd84f [file] [log] [blame]
Chris Lattner22eb9722006-06-18 05:43:12 +00001//===--- Preprocess.cpp - C Language Family Preprocessor Implementation ---===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file was developed by Chris Lattner and is distributed under
6// the University of Illinois Open Source License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This file implements the Preprocessor interface.
11//
12//===----------------------------------------------------------------------===//
13//
Chris Lattner22eb9722006-06-18 05:43:12 +000014// Options to support:
15// -H - Print the name of each header file used.
Chris Lattner22eb9722006-06-18 05:43:12 +000016// -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//
Chris Lattner22eb9722006-06-18 05:43:12 +000026//===----------------------------------------------------------------------===//
27
28#include "clang/Lex/Preprocessor.h"
Chris Lattner07b019a2006-10-22 07:28:56 +000029#include "clang/Lex/HeaderSearch.h"
Chris Lattner22eb9722006-06-18 05:43:12 +000030#include "clang/Lex/MacroInfo.h"
Chris Lattnerb8d6d5a2006-11-21 04:09:30 +000031#include "clang/Lex/PPCallbacks.h"
Chris Lattnerb8761832006-06-24 21:31:03 +000032#include "clang/Lex/Pragma.h"
Chris Lattner0b8cfc22006-06-28 06:49:17 +000033#include "clang/Lex/ScratchBuffer.h"
Chris Lattner22eb9722006-06-18 05:43:12 +000034#include "clang/Basic/Diagnostic.h"
35#include "clang/Basic/FileManager.h"
36#include "clang/Basic/SourceManager.h"
Chris Lattner81278c62006-10-14 19:03:49 +000037#include "clang/Basic/TargetInfo.h"
Chris Lattner7a4af3b2006-07-26 06:26:52 +000038#include "llvm/ADT/SmallVector.h"
Chris Lattner8a7003c2007-07-16 06:48:38 +000039#include "llvm/Support/MemoryBuffer.h"
Chris Lattner22eb9722006-06-18 05:43:12 +000040#include <iostream>
Chris Lattnera2633932007-09-03 18:30:32 +000041#include <ctime>
Chris Lattner22eb9722006-06-18 05:43:12 +000042using namespace clang;
43
44//===----------------------------------------------------------------------===//
45
Chris Lattner02dffbd2006-10-14 07:50:21 +000046Preprocessor::Preprocessor(Diagnostic &diags, const LangOptions &opts,
Chris Lattnerad7cdd32006-11-21 06:08:20 +000047 TargetInfo &target, SourceManager &SM,
Chris Lattner59a9ebd2006-10-18 05:34:33 +000048 HeaderSearch &Headers)
Chris Lattnerad7cdd32006-11-21 06:08:20 +000049 : Diags(diags), Features(opts), Target(target), FileMgr(Headers.getFileMgr()),
50 SourceMgr(SM), HeaderInfo(Headers), Identifiers(opts),
Chris Lattnerb8d6d5a2006-11-21 04:09:30 +000051 CurLexer(0), CurDirLookup(0), CurMacroExpander(0), Callbacks(0) {
Chris Lattner0b8cfc22006-06-28 06:49:17 +000052 ScratchBuf = new ScratchBuffer(SourceMgr);
Chris Lattnerc02c4ab2007-07-15 00:25:26 +000053
Chris Lattner22eb9722006-06-18 05:43:12 +000054 // Clear stats.
Chris Lattner59a9ebd2006-10-18 05:34:33 +000055 NumDirectives = NumDefined = NumUndefined = NumPragma = 0;
Chris Lattner22eb9722006-06-18 05:43:12 +000056 NumIf = NumElse = NumEndif = 0;
Chris Lattner78186052006-07-09 00:45:31 +000057 NumEnteredSourceFiles = 0;
58 NumMacroExpanded = NumFnMacroExpanded = NumBuiltinMacroExpanded = 0;
Chris Lattner510ab612006-07-20 04:47:30 +000059 NumFastMacroExpanded = NumTokenPaste = NumFastTokenPaste = 0;
Chris Lattner59a9ebd2006-10-18 05:34:33 +000060 MaxIncludeStackDepth = 0;
Chris Lattner22eb9722006-06-18 05:43:12 +000061 NumSkipped = 0;
Chris Lattnerb352e3e2006-11-21 06:17:10 +000062
63 // Default to discarding comments.
64 KeepComments = false;
65 KeepMacroComments = false;
66
Chris Lattner22eb9722006-06-18 05:43:12 +000067 // Macro expansion is enabled.
68 DisableMacroExpansion = false;
Chris Lattneree8760b2006-07-15 07:42:55 +000069 InMacroArgs = false;
Chris Lattnerc02c4ab2007-07-15 00:25:26 +000070 NumCachedMacroExpanders = 0;
Chris Lattner0c885f52006-06-21 06:50:18 +000071
Chris Lattner8ff71992006-07-06 05:17:39 +000072 // "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 Lattner1f1b0db2007-10-09 22:10:18 +000076 Predefines = 0;
77
Chris Lattnerb8761832006-06-24 21:31:03 +000078 // Initialize the pragma handlers.
79 PragmaHandlers = new PragmaNamespace(0);
80 RegisterBuiltinPragmas();
Chris Lattner677757a2006-06-28 05:26:32 +000081
82 // Initialize builtin macros like __LINE__ and friends.
83 RegisterBuiltinMacros();
Chris Lattner22eb9722006-06-18 05:43:12 +000084}
85
86Preprocessor::~Preprocessor() {
87 // Free any active lexers.
88 delete CurLexer;
89
Chris Lattner69772b02006-07-02 20:34:39 +000090 while (!IncludeMacroStack.empty()) {
91 delete IncludeMacroStack.back().TheLexer;
92 delete IncludeMacroStack.back().TheMacroExpander;
93 IncludeMacroStack.pop_back();
Chris Lattner22eb9722006-06-18 05:43:12 +000094 }
Chris Lattnerc43ddc82007-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 }
Chris Lattnerb8761832006-06-24 21:31:03 +0000104
Chris Lattnerc02c4ab2007-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
Chris Lattnerb8761832006-06-24 21:31:03 +0000109 // Release pragma information.
110 delete PragmaHandlers;
Chris Lattner0b8cfc22006-06-28 06:49:17 +0000111
112 // Delete the scratch buffer info.
113 delete ScratchBuf;
Chris Lattner22eb9722006-06-18 05:43:12 +0000114}
115
Chris Lattnerb8d6d5a2006-11-21 04:09:30 +0000116PPCallbacks::~PPCallbacks() {
117}
Chris Lattner87d3bec2006-10-17 03:44:32 +0000118
Chris Lattner22eb9722006-06-18 05:43:12 +0000119/// Diag - Forwarding function for diagnostics. This emits a diagnostic at
Chris Lattner146762e2007-07-20 16:59:19 +0000120/// the specified Token's location, translating the token's start
Chris Lattner22eb9722006-06-18 05:43:12 +0000121/// position in the current buffer into a SourcePosition object for rendering.
Chris Lattner36982e42007-05-16 17:49:37 +0000122void Preprocessor::Diag(SourceLocation Loc, unsigned DiagID) {
123 Diags.Report(Loc, DiagID);
124}
125
Chris Lattnercb283342006-06-18 06:48:37 +0000126void Preprocessor::Diag(SourceLocation Loc, unsigned DiagID,
Chris Lattner22eb9722006-06-18 05:43:12 +0000127 const std::string &Msg) {
Chris Lattner36982e42007-05-16 17:49:37 +0000128 Diags.Report(Loc, DiagID, &Msg, 1);
Chris Lattner22eb9722006-06-18 05:43:12 +0000129}
Chris Lattnerd01e2912006-06-18 16:22:51 +0000130
Chris Lattner146762e2007-07-20 16:59:19 +0000131void Preprocessor::DumpToken(const Token &Tok, bool DumpFlags) const {
Chris Lattnerd01e2912006-06-18 16:22:51 +0000132 std::cerr << tok::getTokenName(Tok.getKind()) << " '"
133 << getSpelling(Tok) << "'";
134
135 if (!DumpFlags) return;
136 std::cerr << "\t";
137 if (Tok.isAtStartOfLine())
138 std::cerr << " [StartOfLine]";
139 if (Tok.hasLeadingSpace())
140 std::cerr << " [LeadingSpace]";
Chris Lattner6e4bf522006-07-27 06:59:25 +0000141 if (Tok.isExpandDisabled())
142 std::cerr << " [ExpandDisabled]";
Chris Lattnerd01e2912006-06-18 16:22:51 +0000143 if (Tok.needsCleaning()) {
Chris Lattner50b497e2006-06-18 16:32:35 +0000144 const char *Start = SourceMgr.getCharacterData(Tok.getLocation());
Chris Lattnerd01e2912006-06-18 16:22:51 +0000145 std::cerr << " [UnClean='" << std::string(Start, Start+Tok.getLength())
146 << "']";
147 }
148}
149
150void Preprocessor::DumpMacro(const MacroInfo &MI) const {
151 std::cerr << "MACRO: ";
152 for (unsigned i = 0, e = MI.getNumTokens(); i != e; ++i) {
153 DumpToken(MI.getReplacementToken(i));
154 std::cerr << " ";
155 }
156 std::cerr << "\n";
157}
158
Chris Lattner22eb9722006-06-18 05:43:12 +0000159void Preprocessor::PrintStats() {
160 std::cerr << "\n*** Preprocessor Stats:\n";
Chris Lattner22eb9722006-06-18 05:43:12 +0000161 std::cerr << NumDirectives << " directives found:\n";
162 std::cerr << " " << NumDefined << " #define.\n";
163 std::cerr << " " << NumUndefined << " #undef.\n";
Chris Lattner59a9ebd2006-10-18 05:34:33 +0000164 std::cerr << " #include/#include_next/#import:\n";
Chris Lattner22eb9722006-06-18 05:43:12 +0000165 std::cerr << " " << NumEnteredSourceFiles << " source files entered.\n";
166 std::cerr << " " << MaxIncludeStackDepth << " max include stack depth\n";
167 std::cerr << " " << NumIf << " #if/#ifndef/#ifdef.\n";
168 std::cerr << " " << NumElse << " #else/#elif.\n";
169 std::cerr << " " << NumEndif << " #endif.\n";
170 std::cerr << " " << NumPragma << " #pragma.\n";
171 std::cerr << NumSkipped << " #if/#ifndef#ifdef regions skipped\n";
172
Chris Lattner78186052006-07-09 00:45:31 +0000173 std::cerr << NumMacroExpanded << "/" << NumFnMacroExpanded << "/"
174 << NumBuiltinMacroExpanded << " obj/fn/builtin macros expanded, "
Chris Lattner22eb9722006-06-18 05:43:12 +0000175 << NumFastMacroExpanded << " on the fast path.\n";
Chris Lattner510ab612006-07-20 04:47:30 +0000176 std::cerr << (NumFastTokenPaste+NumTokenPaste)
177 << " token paste (##) operations performed, "
178 << NumFastTokenPaste << " on the fast path.\n";
Chris Lattner22eb9722006-06-18 05:43:12 +0000179}
180
181//===----------------------------------------------------------------------===//
Chris Lattnerd01e2912006-06-18 16:22:51 +0000182// Token Spelling
183//===----------------------------------------------------------------------===//
184
185
186/// getSpelling() - Return the 'spelling' of this token. The spelling of a
187/// token are the characters used to represent the token in the source file
188/// after trigraph expansion and escaped-newline folding. In particular, this
189/// wants to get the true, uncanonicalized, spelling of things like digraphs
190/// UCNs, etc.
Chris Lattner146762e2007-07-20 16:59:19 +0000191std::string Preprocessor::getSpelling(const Token &Tok) const {
Chris Lattnerd01e2912006-06-18 16:22:51 +0000192 assert((int)Tok.getLength() >= 0 && "Token character range is bogus!");
193
194 // If this token contains nothing interesting, return it directly.
Chris Lattner50b497e2006-06-18 16:32:35 +0000195 const char *TokStart = SourceMgr.getCharacterData(Tok.getLocation());
Chris Lattnerd01e2912006-06-18 16:22:51 +0000196 if (!Tok.needsCleaning())
197 return std::string(TokStart, TokStart+Tok.getLength());
198
Chris Lattnerd01e2912006-06-18 16:22:51 +0000199 std::string Result;
200 Result.reserve(Tok.getLength());
201
Chris Lattneref9eae12006-07-04 22:33:12 +0000202 // Otherwise, hard case, relex the characters into the string.
Chris Lattnerd01e2912006-06-18 16:22:51 +0000203 for (const char *Ptr = TokStart, *End = TokStart+Tok.getLength();
204 Ptr != End; ) {
205 unsigned CharSize;
206 Result.push_back(Lexer::getCharAndSizeNoWarn(Ptr, CharSize, Features));
207 Ptr += CharSize;
208 }
209 assert(Result.size() != unsigned(Tok.getLength()) &&
210 "NeedsCleaning flag set on something that didn't need cleaning!");
211 return Result;
212}
213
214/// getSpelling - This method is used to get the spelling of a token into a
215/// preallocated buffer, instead of as an std::string. The caller is required
216/// to allocate enough space for the token, which is guaranteed to be at least
217/// Tok.getLength() bytes long. The actual length of the token is returned.
Chris Lattneref9eae12006-07-04 22:33:12 +0000218///
219/// Note that this method may do two possible things: it may either fill in
220/// the buffer specified with characters, or it may *change the input pointer*
221/// to point to a constant buffer with the data already in it (avoiding a
222/// copy). The caller is not allowed to modify the returned buffer pointer
223/// if an internal buffer is returned.
Chris Lattner146762e2007-07-20 16:59:19 +0000224unsigned Preprocessor::getSpelling(const Token &Tok,
Chris Lattneref9eae12006-07-04 22:33:12 +0000225 const char *&Buffer) const {
Chris Lattnerd01e2912006-06-18 16:22:51 +0000226 assert((int)Tok.getLength() >= 0 && "Token character range is bogus!");
227
Chris Lattnerd3a15f72006-07-04 23:01:03 +0000228 // If this token is an identifier, just return the string from the identifier
229 // table, which is very quick.
230 if (const IdentifierInfo *II = Tok.getIdentifierInfo()) {
231 Buffer = II->getName();
Chris Lattner32e6d642007-07-22 22:50:09 +0000232
233 // Return the length of the token. If the token needed cleaning, don't
234 // include the size of the newlines or trigraphs in it.
235 if (!Tok.needsCleaning())
236 return Tok.getLength();
237 else
238 return strlen(Buffer);
Chris Lattnerd3a15f72006-07-04 23:01:03 +0000239 }
240
241 // Otherwise, compute the start of the token in the input lexer buffer.
Chris Lattner50b497e2006-06-18 16:32:35 +0000242 const char *TokStart = SourceMgr.getCharacterData(Tok.getLocation());
Chris Lattnerd01e2912006-06-18 16:22:51 +0000243
244 // If this token contains nothing interesting, return it directly.
245 if (!Tok.needsCleaning()) {
Chris Lattneref9eae12006-07-04 22:33:12 +0000246 Buffer = TokStart;
247 return Tok.getLength();
Chris Lattnerd01e2912006-06-18 16:22:51 +0000248 }
249 // Otherwise, hard case, relex the characters into the string.
Chris Lattneref9eae12006-07-04 22:33:12 +0000250 char *OutBuf = const_cast<char*>(Buffer);
Chris Lattnerd01e2912006-06-18 16:22:51 +0000251 for (const char *Ptr = TokStart, *End = TokStart+Tok.getLength();
252 Ptr != End; ) {
253 unsigned CharSize;
254 *OutBuf++ = Lexer::getCharAndSizeNoWarn(Ptr, CharSize, Features);
255 Ptr += CharSize;
256 }
257 assert(unsigned(OutBuf-Buffer) != Tok.getLength() &&
258 "NeedsCleaning flag set on something that didn't need cleaning!");
259
260 return OutBuf-Buffer;
261}
262
Chris Lattnerb94ec7b2006-07-14 06:54:10 +0000263
264/// CreateString - Plop the specified string into a scratch buffer and return a
265/// location for it. If specified, the source location provides a source
266/// location for the token.
267SourceLocation Preprocessor::
268CreateString(const char *Buf, unsigned Len, SourceLocation SLoc) {
269 if (SLoc.isValid())
270 return ScratchBuf->getToken(Buf, Len, SLoc);
271 return ScratchBuf->getToken(Buf, Len);
272}
273
274
Chris Lattner8a7003c2007-07-16 06:48:38 +0000275/// AdvanceToTokenCharacter - Given a location that specifies the start of a
276/// token, return a new location that specifies a character within the token.
277SourceLocation Preprocessor::AdvanceToTokenCharacter(SourceLocation TokStart,
278 unsigned CharNo) {
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000279 // If they request the first char of the token, we're trivially done. If this
280 // is a macro expansion, it doesn't make sense to point to a character within
281 // the instantiation point (the name). We could point to the source
282 // character, but without also pointing to instantiation info, this is
283 // confusing.
284 if (CharNo == 0 || TokStart.isMacroID()) return TokStart;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000285
286 // Figure out how many physical characters away the specified logical
287 // character is. This needs to take into consideration newlines and
288 // trigraphs.
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000289 const char *TokPtr = SourceMgr.getCharacterData(TokStart);
290 unsigned PhysOffset = 0;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000291
292 // The usual case is that tokens don't contain anything interesting. Skip
293 // over the uninteresting characters. If a token only consists of simple
294 // chars, this method is extremely fast.
295 while (CharNo && Lexer::isObviouslySimpleCharacter(*TokPtr))
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000296 ++TokPtr, --CharNo, ++PhysOffset;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000297
298 // If we have a character that may be a trigraph or escaped newline, create a
299 // lexer to parse it correctly.
Chris Lattner8a7003c2007-07-16 06:48:38 +0000300 if (CharNo != 0) {
301 // Create a lexer starting at this token position.
Chris Lattner77e9de52007-07-20 16:52:03 +0000302 Lexer TheLexer(TokStart, *this, TokPtr);
Chris Lattner146762e2007-07-20 16:59:19 +0000303 Token Tok;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000304 // Skip over characters the remaining characters.
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000305 const char *TokStartPtr = TokPtr;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000306 for (; CharNo; --CharNo)
307 TheLexer.getAndAdvanceChar(TokPtr, Tok);
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000308
309 PhysOffset += TokPtr-TokStartPtr;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000310 }
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000311
312 return TokStart.getFileLocWithOffset(PhysOffset);
Chris Lattner8a7003c2007-07-16 06:48:38 +0000313}
314
315
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000316//===----------------------------------------------------------------------===//
317// Preprocessor Initialization Methods
318//===----------------------------------------------------------------------===//
319
320// Append a #define line to Buf for Macro. Macro should be of the form XXX,
321// in which case we emit "#define XXX 1" or "XXX=Y z W" in which case we emit
322// "#define XXX Y z W". To get a #define with no value, use "XXX=".
323static void DefineBuiltinMacro(std::vector<char> &Buf, const char *Macro,
324 const char *Command = "#define ") {
325 Buf.insert(Buf.end(), Command, Command+strlen(Command));
326 if (const char *Equal = strchr(Macro, '=')) {
327 // Turn the = into ' '.
328 Buf.insert(Buf.end(), Macro, Equal);
329 Buf.push_back(' ');
330 Buf.insert(Buf.end(), Equal+1, Equal+strlen(Equal));
331 } else {
332 // Push "macroname 1".
333 Buf.insert(Buf.end(), Macro, Macro+strlen(Macro));
334 Buf.push_back(' ');
335 Buf.push_back('1');
336 }
337 Buf.push_back('\n');
338}
339
340
341static void InitializePredefinedMacros(Preprocessor &PP,
342 std::vector<char> &Buf) {
343 // FIXME: Implement magic like cpp_init_builtins for things like __STDC__
344 // and __DATE__ etc.
345#if 0
346 /* __STDC__ has the value 1 under normal circumstances.
347 However, if (a) we are in a system header, (b) the option
348 stdc_0_in_system_headers is true (set by target config), and
349 (c) we are not in strictly conforming mode, then it has the
350 value 0. (b) and (c) are already checked in cpp_init_builtins. */
351 //case BT_STDC:
352 if (cpp_in_system_header (pfile))
353 number = 0;
354 else
355 number = 1;
356 break;
357#endif
358 // These should all be defined in the preprocessor according to the
359 // current language configuration.
360 DefineBuiltinMacro(Buf, "__STDC__=1");
361 //DefineBuiltinMacro(Buf, "__ASSEMBLER__=1");
362 if (PP.getLangOptions().C99 && !PP.getLangOptions().CPlusPlus)
363 DefineBuiltinMacro(Buf, "__STDC_VERSION__=199901L");
364 else if (0) // STDC94 ?
365 DefineBuiltinMacro(Buf, "__STDC_VERSION__=199409L");
366
367 DefineBuiltinMacro(Buf, "__STDC_HOSTED__=1");
368 if (PP.getLangOptions().ObjC1)
369 DefineBuiltinMacro(Buf, "__OBJC__=1");
370 if (PP.getLangOptions().ObjC2)
371 DefineBuiltinMacro(Buf, "__OBJC2__=1");
Steve Naroff6d40db02007-10-31 18:42:27 +0000372
Chris Lattnered2a9eb2007-10-10 17:48:53 +0000373 // Add __builtin_va_list typedef.
374 {
375 const char *VAList = PP.getTargetInfo().getVAListDeclaration();
376 Buf.insert(Buf.end(), VAList, VAList+strlen(VAList));
377 Buf.push_back('\n');
378 }
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000379
380 // Get the target #defines.
381 PP.getTargetInfo().getTargetDefines(Buf);
382
383 // Compiler set macros.
384 DefineBuiltinMacro(Buf, "__APPLE_CC__=5250");
Steve Naroff68754c52007-11-10 18:06:36 +0000385 DefineBuiltinMacro(Buf, "__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__=1050");
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000386 DefineBuiltinMacro(Buf, "__GNUC_MINOR__=0");
387 DefineBuiltinMacro(Buf, "__GNUC_PATCHLEVEL__=1");
388 DefineBuiltinMacro(Buf, "__GNUC__=4");
389 DefineBuiltinMacro(Buf, "__GXX_ABI_VERSION=1002");
390 DefineBuiltinMacro(Buf, "__VERSION__=\"4.0.1 (Apple Computer, Inc. "
391 "build 5250)\"");
392
393 // Build configuration options.
394 DefineBuiltinMacro(Buf, "__DYNAMIC__=1");
395 DefineBuiltinMacro(Buf, "__FINITE_MATH_ONLY__=0");
396 DefineBuiltinMacro(Buf, "__NO_INLINE__=1");
397 DefineBuiltinMacro(Buf, "__PIC__=1");
398
399
400 if (PP.getLangOptions().CPlusPlus) {
401 DefineBuiltinMacro(Buf, "__DEPRECATED=1");
402 DefineBuiltinMacro(Buf, "__EXCEPTIONS=1");
403 DefineBuiltinMacro(Buf, "__GNUG__=4");
404 DefineBuiltinMacro(Buf, "__GXX_WEAK__=1");
405 DefineBuiltinMacro(Buf, "__cplusplus=1");
406 DefineBuiltinMacro(Buf, "__private_extern__=extern");
407 }
408
409 // FIXME: Should emit a #line directive here.
410}
411
412
413/// EnterMainSourceFile - Enter the specified FileID as the main source file,
414/// which implicitly adds the builting defines etc.
415void Preprocessor::EnterMainSourceFile(unsigned MainFileID) {
416 // Enter the main file source buffer.
417 EnterSourceFile(MainFileID, 0);
418
Chris Lattner609d4132007-11-15 19:07:47 +0000419 // Tell the header info that the main file was entered. If the file is later
420 // #imported, it won't be re-entered.
421 if (const FileEntry *FE =
422 SourceMgr.getFileEntryForLoc(SourceLocation::getFileLoc(MainFileID, 0)))
423 HeaderInfo.IncrementIncludeCount(FE);
424
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000425 std::vector<char> PrologFile;
426 PrologFile.reserve(4080);
427
428 // Install things like __POWERPC__, __GNUC__, etc into the macro table.
429 InitializePredefinedMacros(*this, PrologFile);
430
431 // Add on the predefines from the driver.
432 PrologFile.insert(PrologFile.end(), Predefines,Predefines+strlen(Predefines));
433
434 // Memory buffer must end with a null byte!
435 PrologFile.push_back(0);
436
437 // Now that we have emitted the predefined macros, #includes, etc into
438 // PrologFile, preprocess it to populate the initial preprocessor state.
439 llvm::MemoryBuffer *SB =
440 llvm::MemoryBuffer::getMemBufferCopy(&PrologFile.front(),&PrologFile.back(),
441 "<predefines>");
442 assert(SB && "Cannot fail to create predefined source buffer");
443 unsigned FileID = SourceMgr.createFileIDForMemBuffer(SB);
444 assert(FileID && "Could not create FileID for predefines?");
445
446 // Start parsing the predefines.
447 EnterSourceFile(FileID, 0);
448}
Chris Lattner8a7003c2007-07-16 06:48:38 +0000449
Chris Lattnerd01e2912006-06-18 16:22:51 +0000450//===----------------------------------------------------------------------===//
Chris Lattner22eb9722006-06-18 05:43:12 +0000451// Source File Location Methods.
452//===----------------------------------------------------------------------===//
453
Chris Lattner22eb9722006-06-18 05:43:12 +0000454/// LookupFile - Given a "foo" or <foo> reference, look up the indicated file,
455/// return null on failure. isAngled indicates whether the file reference is
456/// for system #include's or not (i.e. using <> instead of "").
Chris Lattnerb8b94f12006-10-30 05:38:06 +0000457const FileEntry *Preprocessor::LookupFile(const char *FilenameStart,
458 const char *FilenameEnd,
Chris Lattnerc8997182006-06-22 05:52:16 +0000459 bool isAngled,
Chris Lattner22eb9722006-06-18 05:43:12 +0000460 const DirectoryLookup *FromDir,
Chris Lattnerc8997182006-06-22 05:52:16 +0000461 const DirectoryLookup *&CurDir) {
Chris Lattner59a9ebd2006-10-18 05:34:33 +0000462 // If the header lookup mechanism may be relative to the current file, pass in
463 // info about where the current file is.
464 const FileEntry *CurFileEnt = 0;
Chris Lattner63dd32b2006-10-20 04:42:40 +0000465 if (!FromDir) {
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000466 SourceLocation FileLoc = getCurrentFileLexer()->getFileLoc();
467 CurFileEnt = SourceMgr.getFileEntryForLoc(FileLoc);
Chris Lattner22eb9722006-06-18 05:43:12 +0000468 }
469
Chris Lattner63dd32b2006-10-20 04:42:40 +0000470 // Do a standard file entry lookup.
Chris Lattner59a9ebd2006-10-18 05:34:33 +0000471 CurDir = CurDirLookup;
Chris Lattner63dd32b2006-10-20 04:42:40 +0000472 const FileEntry *FE =
Chris Lattner7cdbad92006-10-30 05:33:15 +0000473 HeaderInfo.LookupFile(FilenameStart, FilenameEnd,
474 isAngled, FromDir, CurDir, CurFileEnt);
Chris Lattner63dd32b2006-10-20 04:42:40 +0000475 if (FE) return FE;
476
477 // Otherwise, see if this is a subframework header. If so, this is relative
478 // to one of the headers on the #include stack. Walk the list of the current
479 // headers on the #include stack and pass them to HeaderInfo.
Chris Lattner5c683b22006-10-20 05:12:14 +0000480 if (CurLexer && !CurLexer->Is_PragmaLexer) {
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000481 CurFileEnt = SourceMgr.getFileEntryForLoc(CurLexer->getFileLoc());
Chris Lattner7cdbad92006-10-30 05:33:15 +0000482 if ((FE = HeaderInfo.LookupSubframeworkHeader(FilenameStart, FilenameEnd,
483 CurFileEnt)))
Chris Lattner63dd32b2006-10-20 04:42:40 +0000484 return FE;
485 }
486
487 for (unsigned i = 0, e = IncludeMacroStack.size(); i != e; ++i) {
488 IncludeStackInfo &ISEntry = IncludeMacroStack[e-i-1];
Chris Lattner5c683b22006-10-20 05:12:14 +0000489 if (ISEntry.TheLexer && !ISEntry.TheLexer->Is_PragmaLexer) {
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000490 CurFileEnt = SourceMgr.getFileEntryForLoc(ISEntry.TheLexer->getFileLoc());
Chris Lattner7cdbad92006-10-30 05:33:15 +0000491 if ((FE = HeaderInfo.LookupSubframeworkHeader(FilenameStart, FilenameEnd,
492 CurFileEnt)))
Chris Lattner63dd32b2006-10-20 04:42:40 +0000493 return FE;
494 }
495 }
496
497 // Otherwise, we really couldn't find the file.
498 return 0;
Chris Lattner22eb9722006-06-18 05:43:12 +0000499}
500
Chris Lattnerecfeafe2006-07-02 21:26:45 +0000501/// isInPrimaryFile - Return true if we're in the top-level file, not in a
502/// #include.
503bool Preprocessor::isInPrimaryFile() const {
Chris Lattnerecfeafe2006-07-02 21:26:45 +0000504 if (CurLexer && !CurLexer->Is_PragmaLexer)
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000505 return IncludeMacroStack.empty();
Chris Lattnerecfeafe2006-07-02 21:26:45 +0000506
Chris Lattner13044d92006-07-03 05:16:44 +0000507 // If there are any stacked lexers, we're in a #include.
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000508 assert(IncludeMacroStack[0].TheLexer &&
509 !IncludeMacroStack[0].TheLexer->Is_PragmaLexer &&
510 "Top level include stack isn't our primary lexer?");
511 for (unsigned i = 1, e = IncludeMacroStack.size(); i != e; ++i)
Chris Lattner13044d92006-07-03 05:16:44 +0000512 if (IncludeMacroStack[i].TheLexer &&
513 !IncludeMacroStack[i].TheLexer->Is_PragmaLexer)
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000514 return false;
515 return true;
Chris Lattnerecfeafe2006-07-02 21:26:45 +0000516}
517
518/// getCurrentLexer - Return the current file lexer being lexed from. Note
519/// that this ignores any potentially active macro expansions and _Pragma
520/// expansions going on at the time.
521Lexer *Preprocessor::getCurrentFileLexer() const {
522 if (CurLexer && !CurLexer->Is_PragmaLexer) return CurLexer;
523
524 // Look for a stacked lexer.
525 for (unsigned i = IncludeMacroStack.size(); i != 0; --i) {
Chris Lattnerf88c53a2006-07-03 05:26:05 +0000526 Lexer *L = IncludeMacroStack[i-1].TheLexer;
Chris Lattnerecfeafe2006-07-02 21:26:45 +0000527 if (L && !L->Is_PragmaLexer) // Ignore macro & _Pragma expansions.
528 return L;
529 }
530 return 0;
531}
532
533
Chris Lattner22eb9722006-06-18 05:43:12 +0000534/// EnterSourceFile - Add a source file to the top of the include stack and
535/// start lexing tokens from it instead of the current buffer. Return true
536/// on failure.
537void Preprocessor::EnterSourceFile(unsigned FileID,
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000538 const DirectoryLookup *CurDir) {
Chris Lattner69772b02006-07-02 20:34:39 +0000539 assert(CurMacroExpander == 0 && "Cannot #include a file inside a macro!");
Chris Lattner22eb9722006-06-18 05:43:12 +0000540 ++NumEnteredSourceFiles;
541
Chris Lattner69772b02006-07-02 20:34:39 +0000542 if (MaxIncludeStackDepth < IncludeMacroStack.size())
543 MaxIncludeStackDepth = IncludeMacroStack.size();
Chris Lattner22eb9722006-06-18 05:43:12 +0000544
Chris Lattner77e9de52007-07-20 16:52:03 +0000545 Lexer *TheLexer = new Lexer(SourceLocation::getFileLoc(FileID, 0), *this);
Chris Lattner69772b02006-07-02 20:34:39 +0000546 EnterSourceFileWithLexer(TheLexer, CurDir);
547}
Chris Lattner22eb9722006-06-18 05:43:12 +0000548
Chris Lattner69772b02006-07-02 20:34:39 +0000549/// EnterSourceFile - Add a source file to the top of the include stack and
550/// start lexing tokens from it instead of the current buffer.
551void Preprocessor::EnterSourceFileWithLexer(Lexer *TheLexer,
552 const DirectoryLookup *CurDir) {
553
554 // Add the current lexer to the include stack.
555 if (CurLexer || CurMacroExpander)
556 IncludeMacroStack.push_back(IncludeStackInfo(CurLexer, CurDirLookup,
557 CurMacroExpander));
558
559 CurLexer = TheLexer;
Chris Lattnerc8997182006-06-22 05:52:16 +0000560 CurDirLookup = CurDir;
Chris Lattner69772b02006-07-02 20:34:39 +0000561 CurMacroExpander = 0;
Chris Lattner0c885f52006-06-21 06:50:18 +0000562
563 // Notify the client, if desired, that we are in a new source file.
Chris Lattnerb8d6d5a2006-11-21 04:09:30 +0000564 if (Callbacks && !CurLexer->Is_PragmaLexer) {
Chris Lattnerc8997182006-06-22 05:52:16 +0000565 DirectoryLookup::DirType FileType = DirectoryLookup::NormalHeaderDir;
566
567 // Get the file entry for the current file.
568 if (const FileEntry *FE =
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000569 SourceMgr.getFileEntryForLoc(CurLexer->getFileLoc()))
Chris Lattner59a9ebd2006-10-18 05:34:33 +0000570 FileType = HeaderInfo.getFileDirFlavor(FE);
Chris Lattnerc8997182006-06-22 05:52:16 +0000571
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000572 Callbacks->FileChanged(CurLexer->getFileLoc(),
Chris Lattnerb8d6d5a2006-11-21 04:09:30 +0000573 PPCallbacks::EnterFile, FileType);
Chris Lattnerc8997182006-06-22 05:52:16 +0000574 }
Chris Lattner22eb9722006-06-18 05:43:12 +0000575}
576
Chris Lattner69772b02006-07-02 20:34:39 +0000577
578
Chris Lattner22eb9722006-06-18 05:43:12 +0000579/// EnterMacro - Add a Macro to the top of the include stack and start lexing
Chris Lattnercb283342006-06-18 06:48:37 +0000580/// tokens from it instead of the current buffer.
Chris Lattner146762e2007-07-20 16:59:19 +0000581void Preprocessor::EnterMacro(Token &Tok, MacroArgs *Args) {
Chris Lattner69772b02006-07-02 20:34:39 +0000582 IncludeMacroStack.push_back(IncludeStackInfo(CurLexer, CurDirLookup,
583 CurMacroExpander));
584 CurLexer = 0;
585 CurDirLookup = 0;
Chris Lattner22eb9722006-06-18 05:43:12 +0000586
Chris Lattnerc02c4ab2007-07-15 00:25:26 +0000587 if (NumCachedMacroExpanders == 0) {
588 CurMacroExpander = new MacroExpander(Tok, Args, *this);
589 } else {
590 CurMacroExpander = MacroExpanderCache[--NumCachedMacroExpanders];
591 CurMacroExpander->Init(Tok, Args);
592 }
Chris Lattner22eb9722006-06-18 05:43:12 +0000593}
594
Chris Lattner7667d0d2006-07-16 18:16:58 +0000595/// EnterTokenStream - Add a "macro" context to the top of the include stack,
596/// which will cause the lexer to start returning the specified tokens. Note
597/// that these tokens will be re-macro-expanded when/if expansion is enabled.
598/// This method assumes that the specified stream of tokens has a permanent
599/// owner somewhere, so they do not need to be copied.
Chris Lattner146762e2007-07-20 16:59:19 +0000600void Preprocessor::EnterTokenStream(const Token *Toks, unsigned NumToks) {
Chris Lattner7667d0d2006-07-16 18:16:58 +0000601 // Save our current state.
602 IncludeMacroStack.push_back(IncludeStackInfo(CurLexer, CurDirLookup,
603 CurMacroExpander));
604 CurLexer = 0;
605 CurDirLookup = 0;
606
607 // Create a macro expander to expand from the specified token stream.
Chris Lattnerc02c4ab2007-07-15 00:25:26 +0000608 if (NumCachedMacroExpanders == 0) {
609 CurMacroExpander = new MacroExpander(Toks, NumToks, *this);
610 } else {
611 CurMacroExpander = MacroExpanderCache[--NumCachedMacroExpanders];
612 CurMacroExpander->Init(Toks, NumToks);
613 }
Chris Lattner7667d0d2006-07-16 18:16:58 +0000614}
615
616/// RemoveTopOfLexerStack - Pop the current lexer/macro exp off the top of the
617/// lexer stack. This should only be used in situations where the current
618/// state of the top-of-stack lexer is known.
619void Preprocessor::RemoveTopOfLexerStack() {
620 assert(!IncludeMacroStack.empty() && "Ran out of stack entries to load");
Chris Lattnerc02c4ab2007-07-15 00:25:26 +0000621
622 if (CurMacroExpander) {
623 // Delete or cache the now-dead macro expander.
624 if (NumCachedMacroExpanders == MacroExpanderCacheSize)
625 delete CurMacroExpander;
626 else
627 MacroExpanderCache[NumCachedMacroExpanders++] = CurMacroExpander;
628 } else {
629 delete CurLexer;
630 }
Chris Lattner7667d0d2006-07-16 18:16:58 +0000631 CurLexer = IncludeMacroStack.back().TheLexer;
632 CurDirLookup = IncludeMacroStack.back().TheDirLookup;
633 CurMacroExpander = IncludeMacroStack.back().TheMacroExpander;
634 IncludeMacroStack.pop_back();
635}
636
Chris Lattner22eb9722006-06-18 05:43:12 +0000637//===----------------------------------------------------------------------===//
Chris Lattner677757a2006-06-28 05:26:32 +0000638// Macro Expansion Handling.
Chris Lattner22eb9722006-06-18 05:43:12 +0000639//===----------------------------------------------------------------------===//
640
Chris Lattnerc43ddc82007-10-07 08:44:20 +0000641/// setMacroInfo - Specify a macro for this identifier.
642///
643void Preprocessor::setMacroInfo(IdentifierInfo *II, MacroInfo *MI) {
644 if (MI == 0) {
645 if (II->hasMacroDefinition()) {
646 Macros.erase(II);
647 II->setHasMacroDefinition(false);
648 }
649 } else {
650 Macros[II] = MI;
651 II->setHasMacroDefinition(true);
652 }
653}
654
Chris Lattner0b8cfc22006-06-28 06:49:17 +0000655/// RegisterBuiltinMacro - Register the specified identifier in the identifier
656/// table and mark it as a builtin macro to be expanded.
Chris Lattnerc79f6fb2006-07-04 17:53:21 +0000657IdentifierInfo *Preprocessor::RegisterBuiltinMacro(const char *Name) {
Chris Lattner0b8cfc22006-06-28 06:49:17 +0000658 // Get the identifier.
Chris Lattnerc79f6fb2006-07-04 17:53:21 +0000659 IdentifierInfo *Id = getIdentifierInfo(Name);
Chris Lattner0b8cfc22006-06-28 06:49:17 +0000660
661 // Mark it as being a macro that is builtin.
662 MacroInfo *MI = new MacroInfo(SourceLocation());
663 MI->setIsBuiltinMacro();
Chris Lattnerc43ddc82007-10-07 08:44:20 +0000664 setMacroInfo(Id, MI);
Chris Lattner0b8cfc22006-06-28 06:49:17 +0000665 return Id;
666}
667
668
Chris Lattner677757a2006-06-28 05:26:32 +0000669/// RegisterBuiltinMacros - Register builtin macros, such as __LINE__ with the
670/// identifier table.
671void Preprocessor::RegisterBuiltinMacros() {
Chris Lattner0b8cfc22006-06-28 06:49:17 +0000672 Ident__LINE__ = RegisterBuiltinMacro("__LINE__");
Chris Lattner630b33c2006-07-01 22:46:53 +0000673 Ident__FILE__ = RegisterBuiltinMacro("__FILE__");
Chris Lattnerc673f902006-06-30 06:10:41 +0000674 Ident__DATE__ = RegisterBuiltinMacro("__DATE__");
675 Ident__TIME__ = RegisterBuiltinMacro("__TIME__");
Chris Lattner69772b02006-07-02 20:34:39 +0000676 Ident_Pragma = RegisterBuiltinMacro("_Pragma");
Chris Lattnerc1283b92006-07-01 23:16:30 +0000677
678 // GCC Extensions.
679 Ident__BASE_FILE__ = RegisterBuiltinMacro("__BASE_FILE__");
680 Ident__INCLUDE_LEVEL__ = RegisterBuiltinMacro("__INCLUDE_LEVEL__");
Chris Lattner847e0e42006-07-01 23:49:16 +0000681 Ident__TIMESTAMP__ = RegisterBuiltinMacro("__TIMESTAMP__");
Chris Lattner22eb9722006-06-18 05:43:12 +0000682}
683
Chris Lattnerc2395832006-07-09 00:57:04 +0000684/// isTrivialSingleTokenExpansion - Return true if MI, which has a single token
685/// in its expansion, currently expands to that token literally.
Chris Lattner3ce1d1a2006-07-09 01:00:18 +0000686static bool isTrivialSingleTokenExpansion(const MacroInfo *MI,
Chris Lattnerc43ddc82007-10-07 08:44:20 +0000687 const IdentifierInfo *MacroIdent,
688 Preprocessor &PP) {
Chris Lattnerc2395832006-07-09 00:57:04 +0000689 IdentifierInfo *II = MI->getReplacementToken(0).getIdentifierInfo();
690
691 // If the token isn't an identifier, it's always literally expanded.
692 if (II == 0) return true;
693
694 // If the identifier is a macro, and if that macro is enabled, it may be
695 // expanded so it's not a trivial expansion.
Chris Lattnerc43ddc82007-10-07 08:44:20 +0000696 if (II->hasMacroDefinition() && PP.getMacroInfo(II)->isEnabled() &&
Chris Lattner3ce1d1a2006-07-09 01:00:18 +0000697 // Fast expanding "#define X X" is ok, because X would be disabled.
698 II != MacroIdent)
Chris Lattnerc2395832006-07-09 00:57:04 +0000699 return false;
700
701 // If this is an object-like macro invocation, it is safe to trivially expand
702 // it.
703 if (MI->isObjectLike()) return true;
704
705 // If this is a function-like macro invocation, it's safe to trivially expand
706 // as long as the identifier is not a macro argument.
707 for (MacroInfo::arg_iterator I = MI->arg_begin(), E = MI->arg_end();
708 I != E; ++I)
709 if (*I == II)
710 return false; // Identifier is a macro argument.
Chris Lattner273ddd52006-07-29 07:33:01 +0000711
Chris Lattnerc2395832006-07-09 00:57:04 +0000712 return true;
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000713}
714
Chris Lattnerc2395832006-07-09 00:57:04 +0000715
Chris Lattnerafe603f2006-07-11 04:02:46 +0000716/// isNextPPTokenLParen - Determine whether the next preprocessor token to be
717/// lexed is a '('. If so, consume the token and return true, if not, this
718/// method should have no observable side-effect on the lexed tokens.
719bool Preprocessor::isNextPPTokenLParen() {
Chris Lattnerafe603f2006-07-11 04:02:46 +0000720 // Do some quick tests for rejection cases.
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000721 unsigned Val;
722 if (CurLexer)
Chris Lattner678c8802006-07-11 05:46:12 +0000723 Val = CurLexer->isNextPPTokenLParen();
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000724 else
725 Val = CurMacroExpander->isNextTokenLParen();
726
727 if (Val == 2) {
Chris Lattner5c983792007-07-19 00:07:36 +0000728 // We have run off the end. If it's a source file we don't
729 // examine enclosing ones (C99 5.1.1.2p4). Otherwise walk up the
730 // macro stack.
731 if (CurLexer)
732 return false;
733 for (unsigned i = IncludeMacroStack.size(); i != 0; --i) {
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000734 IncludeStackInfo &Entry = IncludeMacroStack[i-1];
735 if (Entry.TheLexer)
Chris Lattner678c8802006-07-11 05:46:12 +0000736 Val = Entry.TheLexer->isNextPPTokenLParen();
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000737 else
738 Val = Entry.TheMacroExpander->isNextTokenLParen();
Chris Lattner5c983792007-07-19 00:07:36 +0000739
740 if (Val != 2)
741 break;
742
743 // Ran off the end of a source file?
744 if (Entry.TheLexer)
745 return false;
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000746 }
Chris Lattnerafe603f2006-07-11 04:02:46 +0000747 }
748
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000749 // Okay, if we know that the token is a '(', lex it and return. Otherwise we
750 // have found something that isn't a '(' or we found the end of the
751 // translation unit. In either case, return false.
752 if (Val != 1)
753 return false;
Chris Lattnerafe603f2006-07-11 04:02:46 +0000754
Chris Lattner146762e2007-07-20 16:59:19 +0000755 Token Tok;
Chris Lattnerafe603f2006-07-11 04:02:46 +0000756 LexUnexpandedToken(Tok);
Chris Lattner98c1f7c2007-10-09 18:02:16 +0000757 assert(Tok.is(tok::l_paren) && "Error computing l-paren-ness?");
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000758 return true;
Chris Lattnerafe603f2006-07-11 04:02:46 +0000759}
Chris Lattner677757a2006-06-28 05:26:32 +0000760
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000761/// HandleMacroExpandedIdentifier - If an identifier token is read that is to be
762/// expanded as a macro, handle it and return the next token as 'Identifier'.
Chris Lattner146762e2007-07-20 16:59:19 +0000763bool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier,
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000764 MacroInfo *MI) {
Chris Lattner78186052006-07-09 00:45:31 +0000765
766 // If this is a builtin macro, like __LINE__ or _Pragma, handle it specially.
767 if (MI->isBuiltinMacro()) {
768 ExpandBuiltinMacro(Identifier);
769 return false;
770 }
771
Chris Lattner81278c62006-10-14 19:03:49 +0000772 // If this is the first use of a target-specific macro, warn about it.
773 if (MI->isTargetSpecific()) {
774 MI->setIsTargetSpecific(false); // Don't warn on second use.
775 getTargetInfo().DiagnoseNonPortability(Identifier.getLocation(),
776 diag::port_target_macro_use);
777 }
778
Chris Lattneree8760b2006-07-15 07:42:55 +0000779 /// Args - If this is a function-like macro expansion, this contains,
Chris Lattner78186052006-07-09 00:45:31 +0000780 /// for each macro argument, the list of tokens that were provided to the
781 /// invocation.
Chris Lattneree8760b2006-07-15 07:42:55 +0000782 MacroArgs *Args = 0;
Chris Lattner78186052006-07-09 00:45:31 +0000783
784 // If this is a function-like macro, read the arguments.
785 if (MI->isFunctionLike()) {
Chris Lattner78186052006-07-09 00:45:31 +0000786 // C99 6.10.3p10: If the preprocessing token immediately after the the macro
Chris Lattner24dbee72007-07-19 16:11:58 +0000787 // name isn't a '(', this macro should not be expanded. Otherwise, consume
788 // it.
Chris Lattnerafe603f2006-07-11 04:02:46 +0000789 if (!isNextPPTokenLParen())
Chris Lattner78186052006-07-09 00:45:31 +0000790 return true;
791
Chris Lattner78186052006-07-09 00:45:31 +0000792 // Remember that we are now parsing the arguments to a macro invocation.
793 // Preprocessor directives used inside macro arguments are not portable, and
794 // this enables the warning.
Chris Lattneree8760b2006-07-15 07:42:55 +0000795 InMacroArgs = true;
796 Args = ReadFunctionLikeMacroArgs(Identifier, MI);
Chris Lattner78186052006-07-09 00:45:31 +0000797
798 // Finished parsing args.
Chris Lattneree8760b2006-07-15 07:42:55 +0000799 InMacroArgs = false;
Chris Lattner78186052006-07-09 00:45:31 +0000800
801 // If there was an error parsing the arguments, bail out.
Chris Lattneree8760b2006-07-15 07:42:55 +0000802 if (Args == 0) return false;
Chris Lattner78186052006-07-09 00:45:31 +0000803
804 ++NumFnMacroExpanded;
805 } else {
806 ++NumMacroExpanded;
807 }
Chris Lattner13044d92006-07-03 05:16:44 +0000808
809 // Notice that this macro has been used.
810 MI->setIsUsed(true);
Chris Lattner69772b02006-07-02 20:34:39 +0000811
812 // If we started lexing a macro, enter the macro expansion body.
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000813
814 // If this macro expands to no tokens, don't bother to push it onto the
815 // expansion stack, only to take it right back off.
816 if (MI->getNumTokens() == 0) {
Chris Lattner2ada5d32006-07-15 07:51:24 +0000817 // No need for arg info.
Chris Lattnerc1410dc2006-07-26 05:22:49 +0000818 if (Args) Args->destroy();
Chris Lattner78186052006-07-09 00:45:31 +0000819
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000820 // Ignore this macro use, just return the next token in the current
821 // buffer.
822 bool HadLeadingSpace = Identifier.hasLeadingSpace();
823 bool IsAtStartOfLine = Identifier.isAtStartOfLine();
824
825 Lex(Identifier);
826
827 // If the identifier isn't on some OTHER line, inherit the leading
828 // whitespace/first-on-a-line property of this token. This handles
829 // stuff like "! XX," -> "! ," and " XX," -> " ,", when XX is
830 // empty.
831 if (!Identifier.isAtStartOfLine()) {
Chris Lattner146762e2007-07-20 16:59:19 +0000832 if (IsAtStartOfLine) Identifier.setFlag(Token::StartOfLine);
833 if (HadLeadingSpace) Identifier.setFlag(Token::LeadingSpace);
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000834 }
835 ++NumFastMacroExpanded;
Chris Lattner78186052006-07-09 00:45:31 +0000836 return false;
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000837
Chris Lattner3ce1d1a2006-07-09 01:00:18 +0000838 } else if (MI->getNumTokens() == 1 &&
Chris Lattnerc43ddc82007-10-07 08:44:20 +0000839 isTrivialSingleTokenExpansion(MI, Identifier.getIdentifierInfo(),
840 *this)){
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000841 // Otherwise, if this macro expands into a single trivially-expanded
842 // token: expand it now. This handles common cases like
843 // "#define VAL 42".
844
845 // Propagate the isAtStartOfLine/hasLeadingSpace markers of the macro
846 // identifier to the expanded token.
847 bool isAtStartOfLine = Identifier.isAtStartOfLine();
848 bool hasLeadingSpace = Identifier.hasLeadingSpace();
849
850 // Remember where the token is instantiated.
851 SourceLocation InstantiateLoc = Identifier.getLocation();
852
853 // Replace the result token.
854 Identifier = MI->getReplacementToken(0);
855
856 // Restore the StartOfLine/LeadingSpace markers.
Chris Lattner146762e2007-07-20 16:59:19 +0000857 Identifier.setFlagValue(Token::StartOfLine , isAtStartOfLine);
858 Identifier.setFlagValue(Token::LeadingSpace, hasLeadingSpace);
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000859
860 // Update the tokens location to include both its logical and physical
861 // locations.
862 SourceLocation Loc =
Chris Lattnerc673f902006-06-30 06:10:41 +0000863 SourceMgr.getInstantiationLoc(Identifier.getLocation(), InstantiateLoc);
Chris Lattner8c204872006-10-14 05:19:21 +0000864 Identifier.setLocation(Loc);
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000865
Chris Lattner6e4bf522006-07-27 06:59:25 +0000866 // If this is #define X X, we must mark the result as unexpandible.
867 if (IdentifierInfo *NewII = Identifier.getIdentifierInfo())
Chris Lattnerc43ddc82007-10-07 08:44:20 +0000868 if (getMacroInfo(NewII) == MI)
Chris Lattner146762e2007-07-20 16:59:19 +0000869 Identifier.setFlag(Token::DisableExpand);
Chris Lattner6e4bf522006-07-27 06:59:25 +0000870
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000871 // Since this is not an identifier token, it can't be macro expanded, so
872 // we're done.
873 ++NumFastMacroExpanded;
Chris Lattner78186052006-07-09 00:45:31 +0000874 return false;
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000875 }
876
Chris Lattner78186052006-07-09 00:45:31 +0000877 // Start expanding the macro.
Chris Lattneree8760b2006-07-15 07:42:55 +0000878 EnterMacro(Identifier, Args);
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000879
880 // Now that the macro is at the top of the include stack, ask the
881 // preprocessor to read the next token from it.
Chris Lattner78186052006-07-09 00:45:31 +0000882 Lex(Identifier);
883 return false;
884}
885
Chris Lattneree8760b2006-07-15 07:42:55 +0000886/// ReadFunctionLikeMacroArgs - After reading "MACRO(", this method is
Chris Lattner2ada5d32006-07-15 07:51:24 +0000887/// invoked to read all of the actual arguments specified for the macro
Chris Lattner78186052006-07-09 00:45:31 +0000888/// invocation. This returns null on error.
Chris Lattner146762e2007-07-20 16:59:19 +0000889MacroArgs *Preprocessor::ReadFunctionLikeMacroArgs(Token &MacroName,
Chris Lattneree8760b2006-07-15 07:42:55 +0000890 MacroInfo *MI) {
Chris Lattner78186052006-07-09 00:45:31 +0000891 // The number of fixed arguments to parse.
892 unsigned NumFixedArgsLeft = MI->getNumArgs();
893 bool isVariadic = MI->isVariadic();
894
Chris Lattner78186052006-07-09 00:45:31 +0000895 // Outer loop, while there are more arguments, keep reading them.
Chris Lattner146762e2007-07-20 16:59:19 +0000896 Token Tok;
Chris Lattner8c204872006-10-14 05:19:21 +0000897 Tok.setKind(tok::comma);
Chris Lattner78186052006-07-09 00:45:31 +0000898 --NumFixedArgsLeft; // Start reading the first arg.
Chris Lattner36b6e812006-07-21 06:38:30 +0000899
900 // ArgTokens - Build up a list of tokens that make up each argument. Each
Chris Lattner7a4af3b2006-07-26 06:26:52 +0000901 // argument is separated by an EOF token. Use a SmallVector so we can avoid
902 // heap allocations in the common case.
Chris Lattner146762e2007-07-20 16:59:19 +0000903 llvm::SmallVector<Token, 64> ArgTokens;
Chris Lattner36b6e812006-07-21 06:38:30 +0000904
905 unsigned NumActuals = 0;
Chris Lattner98c1f7c2007-10-09 18:02:16 +0000906 while (Tok.is(tok::comma)) {
Chris Lattner24dbee72007-07-19 16:11:58 +0000907 // C99 6.10.3p11: Keep track of the number of l_parens we have seen. Note
908 // that we already consumed the first one.
Chris Lattner78186052006-07-09 00:45:31 +0000909 unsigned NumParens = 0;
Chris Lattner36b6e812006-07-21 06:38:30 +0000910
Chris Lattner78186052006-07-09 00:45:31 +0000911 while (1) {
Chris Lattnerafe603f2006-07-11 04:02:46 +0000912 // Read arguments as unexpanded tokens. This avoids issues, e.g., where
913 // an argument value in a macro could expand to ',' or '(' or ')'.
Chris Lattner78186052006-07-09 00:45:31 +0000914 LexUnexpandedToken(Tok);
915
Chris Lattner98c1f7c2007-10-09 18:02:16 +0000916 if (Tok.is(tok::eof)) {
Chris Lattner78186052006-07-09 00:45:31 +0000917 Diag(MacroName, diag::err_unterm_macro_invoc);
918 // Do not lose the EOF. Return it to the client.
919 MacroName = Tok;
920 return 0;
Chris Lattner98c1f7c2007-10-09 18:02:16 +0000921 } else if (Tok.is(tok::r_paren)) {
Chris Lattner78186052006-07-09 00:45:31 +0000922 // If we found the ) token, the macro arg list is done.
923 if (NumParens-- == 0)
924 break;
Chris Lattner98c1f7c2007-10-09 18:02:16 +0000925 } else if (Tok.is(tok::l_paren)) {
Chris Lattner78186052006-07-09 00:45:31 +0000926 ++NumParens;
Chris Lattner98c1f7c2007-10-09 18:02:16 +0000927 } else if (Tok.is(tok::comma) && NumParens == 0) {
Chris Lattner78186052006-07-09 00:45:31 +0000928 // Comma ends this argument if there are more fixed arguments expected.
929 if (NumFixedArgsLeft)
930 break;
931
Chris Lattner2ada5d32006-07-15 07:51:24 +0000932 // If this is not a variadic macro, too many args were specified.
Chris Lattner78186052006-07-09 00:45:31 +0000933 if (!isVariadic) {
934 // Emit the diagnostic at the macro name in case there is a missing ).
935 // Emitting it at the , could be far away from the macro name.
Chris Lattner2ada5d32006-07-15 07:51:24 +0000936 Diag(MacroName, diag::err_too_many_args_in_macro_invoc);
Chris Lattner78186052006-07-09 00:45:31 +0000937 return 0;
938 }
939 // Otherwise, continue to add the tokens to this variable argument.
Chris Lattner98c1f7c2007-10-09 18:02:16 +0000940 } else if (Tok.is(tok::comment) && !KeepMacroComments) {
Chris Lattner457fc152006-07-29 06:30:25 +0000941 // If this is a comment token in the argument list and we're just in
942 // -C mode (not -CC mode), discard the comment.
943 continue;
Chris Lattner78186052006-07-09 00:45:31 +0000944 }
945
946 ArgTokens.push_back(Tok);
947 }
948
Chris Lattnera12dd152006-07-11 04:09:02 +0000949 // Empty arguments are standard in C99 and supported as an extension in
950 // other modes.
951 if (ArgTokens.empty() && !Features.C99)
952 Diag(Tok, diag::ext_empty_fnmacro_arg);
Chris Lattnerafe603f2006-07-11 04:02:46 +0000953
Chris Lattner36b6e812006-07-21 06:38:30 +0000954 // Add a marker EOF token to the end of the token list for this argument.
Chris Lattner146762e2007-07-20 16:59:19 +0000955 Token EOFTok;
Chris Lattner8c204872006-10-14 05:19:21 +0000956 EOFTok.startToken();
957 EOFTok.setKind(tok::eof);
958 EOFTok.setLocation(Tok.getLocation());
959 EOFTok.setLength(0);
Chris Lattner36b6e812006-07-21 06:38:30 +0000960 ArgTokens.push_back(EOFTok);
961 ++NumActuals;
Chris Lattner78186052006-07-09 00:45:31 +0000962 --NumFixedArgsLeft;
963 };
964
965 // Okay, we either found the r_paren. Check to see if we parsed too few
966 // arguments.
Chris Lattner78186052006-07-09 00:45:31 +0000967 unsigned MinArgsExpected = MI->getNumArgs();
968
Chris Lattner775d8322006-07-29 04:39:41 +0000969 // See MacroArgs instance var for description of this.
970 bool isVarargsElided = false;
971
Chris Lattner2ada5d32006-07-15 07:51:24 +0000972 if (NumActuals < MinArgsExpected) {
Chris Lattner78186052006-07-09 00:45:31 +0000973 // There are several cases where too few arguments is ok, handle them now.
Chris Lattner2ada5d32006-07-15 07:51:24 +0000974 if (NumActuals+1 == MinArgsExpected && MI->isVariadic()) {
Chris Lattner78186052006-07-09 00:45:31 +0000975 // Varargs where the named vararg parameter is missing: ok as extension.
976 // #define A(x, ...)
977 // A("blah")
978 Diag(Tok, diag::ext_missing_varargs_arg);
Chris Lattner775d8322006-07-29 04:39:41 +0000979
980 // Remember this occurred if this is a C99 macro invocation with at least
981 // one actual argument.
Chris Lattner95a06b32006-07-30 08:40:43 +0000982 isVarargsElided = MI->isC99Varargs() && MI->getNumArgs() > 1;
Chris Lattner78186052006-07-09 00:45:31 +0000983 } else if (MI->getNumArgs() == 1) {
984 // #define A(x)
985 // A()
Chris Lattnere7a51302006-07-29 01:25:12 +0000986 // is ok because it is an empty argument.
Chris Lattnera12dd152006-07-11 04:09:02 +0000987
988 // Empty arguments are standard in C99 and supported as an extension in
989 // other modes.
990 if (ArgTokens.empty() && !Features.C99)
991 Diag(Tok, diag::ext_empty_fnmacro_arg);
Chris Lattner78186052006-07-09 00:45:31 +0000992 } else {
993 // Otherwise, emit the error.
Chris Lattner2ada5d32006-07-15 07:51:24 +0000994 Diag(Tok, diag::err_too_few_args_in_macro_invoc);
Chris Lattner78186052006-07-09 00:45:31 +0000995 return 0;
996 }
Chris Lattnere7a51302006-07-29 01:25:12 +0000997
998 // Add a marker EOF token to the end of the token list for this argument.
999 SourceLocation EndLoc = Tok.getLocation();
Chris Lattner8c204872006-10-14 05:19:21 +00001000 Tok.startToken();
1001 Tok.setKind(tok::eof);
1002 Tok.setLocation(EndLoc);
1003 Tok.setLength(0);
Chris Lattnere7a51302006-07-29 01:25:12 +00001004 ArgTokens.push_back(Tok);
Chris Lattner78186052006-07-09 00:45:31 +00001005 }
1006
Chris Lattner775d8322006-07-29 04:39:41 +00001007 return MacroArgs::create(MI, &ArgTokens[0], ArgTokens.size(),isVarargsElided);
Chris Lattnerf373a4a2006-06-26 06:16:29 +00001008}
1009
Chris Lattnerc673f902006-06-30 06:10:41 +00001010/// ComputeDATE_TIME - Compute the current time, enter it into the specified
1011/// scratch buffer, then return DATELoc/TIMELoc locations with the position of
1012/// the identifier tokens inserted.
1013static void ComputeDATE_TIME(SourceLocation &DATELoc, SourceLocation &TIMELoc,
Chris Lattnerb94ec7b2006-07-14 06:54:10 +00001014 Preprocessor &PP) {
Chris Lattnerc673f902006-06-30 06:10:41 +00001015 time_t TT = time(0);
1016 struct tm *TM = localtime(&TT);
1017
1018 static const char * const Months[] = {
1019 "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
1020 };
1021
1022 char TmpBuffer[100];
1023 sprintf(TmpBuffer, "\"%s %2d %4d\"", Months[TM->tm_mon], TM->tm_mday,
1024 TM->tm_year+1900);
Chris Lattnerb94ec7b2006-07-14 06:54:10 +00001025 DATELoc = PP.CreateString(TmpBuffer, strlen(TmpBuffer));
Chris Lattnerc673f902006-06-30 06:10:41 +00001026
1027 sprintf(TmpBuffer, "\"%02d:%02d:%02d\"", TM->tm_hour, TM->tm_min, TM->tm_sec);
Chris Lattnerb94ec7b2006-07-14 06:54:10 +00001028 TIMELoc = PP.CreateString(TmpBuffer, strlen(TmpBuffer));
Chris Lattnerc673f902006-06-30 06:10:41 +00001029}
1030
Chris Lattner0b8cfc22006-06-28 06:49:17 +00001031/// ExpandBuiltinMacro - If an identifier token is read that is to be expanded
1032/// as a builtin macro, handle it and return the next token as 'Tok'.
Chris Lattner146762e2007-07-20 16:59:19 +00001033void Preprocessor::ExpandBuiltinMacro(Token &Tok) {
Chris Lattner0b8cfc22006-06-28 06:49:17 +00001034 // Figure out which token this is.
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001035 IdentifierInfo *II = Tok.getIdentifierInfo();
1036 assert(II && "Can't be a macro without id info!");
Chris Lattner69772b02006-07-02 20:34:39 +00001037
1038 // If this is an _Pragma directive, expand it, invoke the pragma handler, then
1039 // lex the token after it.
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001040 if (II == Ident_Pragma)
Chris Lattner69772b02006-07-02 20:34:39 +00001041 return Handle_Pragma(Tok);
1042
Chris Lattner78186052006-07-09 00:45:31 +00001043 ++NumBuiltinMacroExpanded;
1044
Chris Lattner0b8cfc22006-06-28 06:49:17 +00001045 char TmpBuffer[100];
Chris Lattner69772b02006-07-02 20:34:39 +00001046
1047 // Set up the return result.
Chris Lattner8c204872006-10-14 05:19:21 +00001048 Tok.setIdentifierInfo(0);
Chris Lattner146762e2007-07-20 16:59:19 +00001049 Tok.clearFlag(Token::NeedsCleaning);
Chris Lattner630b33c2006-07-01 22:46:53 +00001050
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001051 if (II == Ident__LINE__) {
Chris Lattner0b8cfc22006-06-28 06:49:17 +00001052 // __LINE__ expands to a simple numeric value.
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001053 sprintf(TmpBuffer, "%u", SourceMgr.getLogicalLineNumber(Tok.getLocation()));
Chris Lattner0b8cfc22006-06-28 06:49:17 +00001054 unsigned Length = strlen(TmpBuffer);
Chris Lattner8c204872006-10-14 05:19:21 +00001055 Tok.setKind(tok::numeric_constant);
1056 Tok.setLength(Length);
1057 Tok.setLocation(CreateString(TmpBuffer, Length, Tok.getLocation()));
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001058 } else if (II == Ident__FILE__ || II == Ident__BASE_FILE__) {
Chris Lattnerc1283b92006-07-01 23:16:30 +00001059 SourceLocation Loc = Tok.getLocation();
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001060 if (II == Ident__BASE_FILE__) {
Chris Lattnerc1283b92006-07-01 23:16:30 +00001061 Diag(Tok, diag::ext_pp_base_file);
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001062 SourceLocation NextLoc = SourceMgr.getIncludeLoc(Loc);
1063 while (NextLoc.isValid()) {
Chris Lattnerc1283b92006-07-01 23:16:30 +00001064 Loc = NextLoc;
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001065 NextLoc = SourceMgr.getIncludeLoc(Loc);
Chris Lattnerc1283b92006-07-01 23:16:30 +00001066 }
1067 }
1068
Chris Lattner0766e592006-07-03 01:07:01 +00001069 // Escape this filename. Turn '\' -> '\\' '"' -> '\"'
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001070 std::string FN = SourceMgr.getSourceName(SourceMgr.getLogicalLoc(Loc));
Chris Lattnerecc39e92006-07-15 05:23:31 +00001071 FN = '"' + Lexer::Stringify(FN) + '"';
Chris Lattner8c204872006-10-14 05:19:21 +00001072 Tok.setKind(tok::string_literal);
1073 Tok.setLength(FN.size());
1074 Tok.setLocation(CreateString(&FN[0], FN.size(), Tok.getLocation()));
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001075 } else if (II == Ident__DATE__) {
Chris Lattnerc673f902006-06-30 06:10:41 +00001076 if (!DATELoc.isValid())
Chris Lattnerb94ec7b2006-07-14 06:54:10 +00001077 ComputeDATE_TIME(DATELoc, TIMELoc, *this);
Chris Lattner8c204872006-10-14 05:19:21 +00001078 Tok.setKind(tok::string_literal);
1079 Tok.setLength(strlen("\"Mmm dd yyyy\""));
1080 Tok.setLocation(SourceMgr.getInstantiationLoc(DATELoc, Tok.getLocation()));
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001081 } else if (II == Ident__TIME__) {
Chris Lattnerc673f902006-06-30 06:10:41 +00001082 if (!TIMELoc.isValid())
Chris Lattnerb94ec7b2006-07-14 06:54:10 +00001083 ComputeDATE_TIME(DATELoc, TIMELoc, *this);
Chris Lattner8c204872006-10-14 05:19:21 +00001084 Tok.setKind(tok::string_literal);
1085 Tok.setLength(strlen("\"hh:mm:ss\""));
1086 Tok.setLocation(SourceMgr.getInstantiationLoc(TIMELoc, Tok.getLocation()));
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001087 } else if (II == Ident__INCLUDE_LEVEL__) {
Chris Lattnerc1283b92006-07-01 23:16:30 +00001088 Diag(Tok, diag::ext_pp_include_level);
1089
1090 // Compute the include depth of this token.
1091 unsigned Depth = 0;
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001092 SourceLocation Loc = SourceMgr.getIncludeLoc(Tok.getLocation());
1093 for (; Loc.isValid(); ++Depth)
1094 Loc = SourceMgr.getIncludeLoc(Loc);
Chris Lattnerc1283b92006-07-01 23:16:30 +00001095
1096 // __INCLUDE_LEVEL__ expands to a simple numeric value.
1097 sprintf(TmpBuffer, "%u", Depth);
1098 unsigned Length = strlen(TmpBuffer);
Chris Lattner8c204872006-10-14 05:19:21 +00001099 Tok.setKind(tok::numeric_constant);
1100 Tok.setLength(Length);
1101 Tok.setLocation(CreateString(TmpBuffer, Length, Tok.getLocation()));
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001102 } else if (II == Ident__TIMESTAMP__) {
Chris Lattner847e0e42006-07-01 23:49:16 +00001103 // MSVC, ICC, GCC, VisualAge C++ extension. The generated string should be
1104 // of the form "Ddd Mmm dd hh::mm::ss yyyy", which is returned by asctime.
1105 Diag(Tok, diag::ext_pp_timestamp);
1106
1107 // Get the file that we are lexing out of. If we're currently lexing from
1108 // a macro, dig into the include stack.
1109 const FileEntry *CurFile = 0;
Chris Lattnerecfeafe2006-07-02 21:26:45 +00001110 Lexer *TheLexer = getCurrentFileLexer();
Chris Lattner847e0e42006-07-01 23:49:16 +00001111
1112 if (TheLexer)
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001113 CurFile = SourceMgr.getFileEntryForLoc(TheLexer->getFileLoc());
Chris Lattner847e0e42006-07-01 23:49:16 +00001114
1115 // If this file is older than the file it depends on, emit a diagnostic.
1116 const char *Result;
1117 if (CurFile) {
1118 time_t TT = CurFile->getModificationTime();
1119 struct tm *TM = localtime(&TT);
1120 Result = asctime(TM);
1121 } else {
1122 Result = "??? ??? ?? ??:??:?? ????\n";
1123 }
1124 TmpBuffer[0] = '"';
1125 strcpy(TmpBuffer+1, Result);
1126 unsigned Len = strlen(TmpBuffer);
1127 TmpBuffer[Len-1] = '"'; // Replace the newline with a quote.
Chris Lattner8c204872006-10-14 05:19:21 +00001128 Tok.setKind(tok::string_literal);
1129 Tok.setLength(Len);
1130 Tok.setLocation(CreateString(TmpBuffer, Len, Tok.getLocation()));
Chris Lattner0b8cfc22006-06-28 06:49:17 +00001131 } else {
1132 assert(0 && "Unknown identifier!");
1133 }
1134}
Chris Lattner677757a2006-06-28 05:26:32 +00001135
1136//===----------------------------------------------------------------------===//
1137// Lexer Event Handling.
1138//===----------------------------------------------------------------------===//
1139
Chris Lattnercefc7682006-07-08 08:28:12 +00001140/// LookUpIdentifierInfo - Given a tok::identifier token, look up the
1141/// identifier information for the token and install it into the token.
Chris Lattner146762e2007-07-20 16:59:19 +00001142IdentifierInfo *Preprocessor::LookUpIdentifierInfo(Token &Identifier,
Chris Lattnercefc7682006-07-08 08:28:12 +00001143 const char *BufPtr) {
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001144 assert(Identifier.is(tok::identifier) && "Not an identifier!");
Chris Lattnercefc7682006-07-08 08:28:12 +00001145 assert(Identifier.getIdentifierInfo() == 0 && "Identinfo already exists!");
1146
1147 // Look up this token, see if it is a macro, or if it is a language keyword.
1148 IdentifierInfo *II;
1149 if (BufPtr && !Identifier.needsCleaning()) {
1150 // No cleaning needed, just use the characters from the lexed buffer.
1151 II = getIdentifierInfo(BufPtr, BufPtr+Identifier.getLength());
1152 } else {
1153 // Cleaning needed, alloca a buffer, clean into it, then use the buffer.
Chris Lattnerf9aba2c2007-07-13 17:10:38 +00001154 llvm::SmallVector<char, 64> IdentifierBuffer;
1155 IdentifierBuffer.resize(Identifier.getLength());
1156 const char *TmpBuf = &IdentifierBuffer[0];
Chris Lattnercefc7682006-07-08 08:28:12 +00001157 unsigned Size = getSpelling(Identifier, TmpBuf);
1158 II = getIdentifierInfo(TmpBuf, TmpBuf+Size);
1159 }
Chris Lattner8c204872006-10-14 05:19:21 +00001160 Identifier.setIdentifierInfo(II);
Chris Lattnercefc7682006-07-08 08:28:12 +00001161 return II;
1162}
1163
1164
Chris Lattner677757a2006-06-28 05:26:32 +00001165/// HandleIdentifier - This callback is invoked when the lexer reads an
1166/// identifier. This callback looks up the identifier in the map and/or
1167/// potentially macro expands it or turns it into a named token (like 'for').
Chris Lattner146762e2007-07-20 16:59:19 +00001168void Preprocessor::HandleIdentifier(Token &Identifier) {
Chris Lattner0f1f5052006-07-20 04:16:23 +00001169 assert(Identifier.getIdentifierInfo() &&
1170 "Can't handle identifiers without identifier info!");
1171
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001172 IdentifierInfo &II = *Identifier.getIdentifierInfo();
Chris Lattner677757a2006-06-28 05:26:32 +00001173
1174 // If this identifier was poisoned, and if it was not produced from a macro
1175 // expansion, emit an error.
Chris Lattner8ff71992006-07-06 05:17:39 +00001176 if (II.isPoisoned() && CurLexer) {
1177 if (&II != Ident__VA_ARGS__) // We warn about __VA_ARGS__ with poisoning.
1178 Diag(Identifier, diag::err_pp_used_poisoned_id);
1179 else
1180 Diag(Identifier, diag::ext_pp_bad_vaargs_use);
1181 }
Chris Lattner677757a2006-06-28 05:26:32 +00001182
Chris Lattner78186052006-07-09 00:45:31 +00001183 // If this is a macro to be expanded, do it.
Chris Lattnerc43ddc82007-10-07 08:44:20 +00001184 if (MacroInfo *MI = getMacroInfo(&II)) {
Chris Lattner6e4bf522006-07-27 06:59:25 +00001185 if (!DisableMacroExpansion && !Identifier.isExpandDisabled()) {
1186 if (MI->isEnabled()) {
1187 if (!HandleMacroExpandedIdentifier(Identifier, MI))
1188 return;
1189 } else {
1190 // C99 6.10.3.4p2 says that a disabled macro may never again be
1191 // expanded, even if it's in a context where it could be expanded in the
1192 // future.
Chris Lattner146762e2007-07-20 16:59:19 +00001193 Identifier.setFlag(Token::DisableExpand);
Chris Lattner6e4bf522006-07-27 06:59:25 +00001194 }
1195 }
Chris Lattner063400e2006-10-14 19:54:15 +00001196 } else if (II.isOtherTargetMacro() && !DisableMacroExpansion) {
1197 // If this identifier is a macro on some other target, emit a diagnostic.
1198 // This diagnosic is only emitted when macro expansion is enabled, because
1199 // the macro would not have been expanded for the other target either.
1200 II.setIsOtherTargetMacro(false); // Don't warn on second use.
1201 getTargetInfo().DiagnoseNonPortability(Identifier.getLocation(),
1202 diag::port_target_macro_use);
1203
1204 }
Chris Lattner677757a2006-06-28 05:26:32 +00001205
Chris Lattner5b9f4892006-11-21 17:23:33 +00001206 // C++ 2.11p2: If this is an alternative representation of a C++ operator,
1207 // then we act as if it is the actual operator and not the textual
1208 // representation of it.
1209 if (II.isCPlusPlusOperatorKeyword())
1210 Identifier.setIdentifierInfo(0);
1211
Chris Lattner677757a2006-06-28 05:26:32 +00001212 // Change the kind of this identifier to the appropriate token kind, e.g.
1213 // turning "for" into a keyword.
Chris Lattner8c204872006-10-14 05:19:21 +00001214 Identifier.setKind(II.getTokenID());
Chris Lattner677757a2006-06-28 05:26:32 +00001215
1216 // If this is an extension token, diagnose its use.
Steve Naroffa8fd9732007-06-11 00:35:03 +00001217 // FIXME: tried (unsuccesfully) to shut this up when compiling with gnu99
1218 // For now, I'm just commenting it out (while I work on attributes).
Chris Lattner53621a52007-06-13 20:44:40 +00001219 if (II.isExtensionToken() && Features.C99)
1220 Diag(Identifier, diag::ext_token_used);
Chris Lattner677757a2006-06-28 05:26:32 +00001221}
1222
Chris Lattner22eb9722006-06-18 05:43:12 +00001223/// HandleEndOfFile - This callback is invoked when the lexer hits the end of
1224/// the current file. This either returns the EOF token or pops a level off
1225/// the include stack and keeps going.
Chris Lattner146762e2007-07-20 16:59:19 +00001226bool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {
Chris Lattner22eb9722006-06-18 05:43:12 +00001227 assert(!CurMacroExpander &&
1228 "Ending a file when currently in a macro!");
1229
Chris Lattner371ac8a2006-07-04 07:11:10 +00001230 // See if this file had a controlling macro.
Chris Lattner3665f162006-07-04 07:26:10 +00001231 if (CurLexer) { // Not ending a macro, ignore it.
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001232 if (const IdentifierInfo *ControllingMacro =
Chris Lattner371ac8a2006-07-04 07:11:10 +00001233 CurLexer->MIOpt.GetControllingMacroAtEndOfFile()) {
Chris Lattner3665f162006-07-04 07:26:10 +00001234 // Okay, this has a controlling macro, remember in PerFileInfo.
1235 if (const FileEntry *FE =
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001236 SourceMgr.getFileEntryForLoc(CurLexer->getFileLoc()))
Chris Lattner59a9ebd2006-10-18 05:34:33 +00001237 HeaderInfo.SetFileControllingMacro(FE, ControllingMacro);
Chris Lattner371ac8a2006-07-04 07:11:10 +00001238 }
1239 }
1240
Chris Lattner22eb9722006-06-18 05:43:12 +00001241 // If this is a #include'd file, pop it off the include stack and continue
1242 // lexing the #includer file.
Chris Lattner69772b02006-07-02 20:34:39 +00001243 if (!IncludeMacroStack.empty()) {
Chris Lattner22eb9722006-06-18 05:43:12 +00001244 // We're done with the #included file.
Chris Lattner7667d0d2006-07-16 18:16:58 +00001245 RemoveTopOfLexerStack();
Chris Lattner0c885f52006-06-21 06:50:18 +00001246
1247 // Notify the client, if desired, that we are in a new source file.
Chris Lattnerb8d6d5a2006-11-21 04:09:30 +00001248 if (Callbacks && !isEndOfMacro && CurLexer) {
Chris Lattnerc8997182006-06-22 05:52:16 +00001249 DirectoryLookup::DirType FileType = DirectoryLookup::NormalHeaderDir;
1250
1251 // Get the file entry for the current file.
1252 if (const FileEntry *FE =
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001253 SourceMgr.getFileEntryForLoc(CurLexer->getFileLoc()))
Chris Lattner59a9ebd2006-10-18 05:34:33 +00001254 FileType = HeaderInfo.getFileDirFlavor(FE);
Chris Lattnerc8997182006-06-22 05:52:16 +00001255
Chris Lattnerb8d6d5a2006-11-21 04:09:30 +00001256 Callbacks->FileChanged(CurLexer->getSourceLocation(CurLexer->BufferPtr),
1257 PPCallbacks::ExitFile, FileType);
Chris Lattnerc8997182006-06-22 05:52:16 +00001258 }
Chris Lattner2183a6e2006-07-18 06:36:12 +00001259
1260 // Client should lex another token.
1261 return false;
Chris Lattner22eb9722006-06-18 05:43:12 +00001262 }
1263
Chris Lattner8c204872006-10-14 05:19:21 +00001264 Result.startToken();
Chris Lattnerd01e2912006-06-18 16:22:51 +00001265 CurLexer->BufferPtr = CurLexer->BufferEnd;
1266 CurLexer->FormTokenWithChars(Result, CurLexer->BufferEnd);
Chris Lattner8c204872006-10-14 05:19:21 +00001267 Result.setKind(tok::eof);
Chris Lattner22eb9722006-06-18 05:43:12 +00001268
1269 // We're done with the #included file.
1270 delete CurLexer;
1271 CurLexer = 0;
Chris Lattner13044d92006-07-03 05:16:44 +00001272
Chris Lattner03f83482006-07-10 06:16:26 +00001273 // This is the end of the top-level file. If the diag::pp_macro_not_used
Chris Lattnerc43ddc82007-10-07 08:44:20 +00001274 // diagnostic is enabled, look for macros that have not been used.
Chris Lattnerb055f2d2007-02-11 08:19:57 +00001275 if (Diags.getDiagnosticLevel(diag::pp_macro_not_used) != Diagnostic::Ignored){
Chris Lattnerc43ddc82007-10-07 08:44:20 +00001276 for (llvm::DenseMap<IdentifierInfo*, MacroInfo*>::iterator I =
1277 Macros.begin(), E = Macros.end(); I != E; ++I) {
1278 if (!I->second->isUsed())
1279 Diag(I->second->getDefinitionLoc(), diag::pp_macro_not_used);
Chris Lattnerb055f2d2007-02-11 08:19:57 +00001280 }
1281 }
Chris Lattner2183a6e2006-07-18 06:36:12 +00001282 return true;
Chris Lattner22eb9722006-06-18 05:43:12 +00001283}
1284
1285/// HandleEndOfMacro - This callback is invoked when the lexer hits the end of
Chris Lattner7667d0d2006-07-16 18:16:58 +00001286/// the current macro expansion or token stream expansion.
Chris Lattner146762e2007-07-20 16:59:19 +00001287bool Preprocessor::HandleEndOfMacro(Token &Result) {
Chris Lattner22eb9722006-06-18 05:43:12 +00001288 assert(CurMacroExpander && !CurLexer &&
1289 "Ending a macro when currently in a #include file!");
1290
Chris Lattnerc02c4ab2007-07-15 00:25:26 +00001291 // Delete or cache the now-dead macro expander.
1292 if (NumCachedMacroExpanders == MacroExpanderCacheSize)
1293 delete CurMacroExpander;
1294 else
1295 MacroExpanderCache[NumCachedMacroExpanders++] = CurMacroExpander;
Chris Lattner22eb9722006-06-18 05:43:12 +00001296
Chris Lattner69772b02006-07-02 20:34:39 +00001297 // Handle this like a #include file being popped off the stack.
1298 CurMacroExpander = 0;
1299 return HandleEndOfFile(Result, true);
Chris Lattner22eb9722006-06-18 05:43:12 +00001300}
1301
1302
1303//===----------------------------------------------------------------------===//
1304// Utility Methods for Preprocessor Directive Handling.
1305//===----------------------------------------------------------------------===//
1306
1307/// DiscardUntilEndOfDirective - Read and discard all tokens remaining on the
1308/// current line until the tok::eom token is found.
Chris Lattnercb283342006-06-18 06:48:37 +00001309void Preprocessor::DiscardUntilEndOfDirective() {
Chris Lattner146762e2007-07-20 16:59:19 +00001310 Token Tmp;
Chris Lattner22eb9722006-06-18 05:43:12 +00001311 do {
Chris Lattnercb283342006-06-18 06:48:37 +00001312 LexUnexpandedToken(Tmp);
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001313 } while (Tmp.isNot(tok::eom));
Chris Lattner22eb9722006-06-18 05:43:12 +00001314}
1315
Chris Lattner652c1692006-11-21 23:47:30 +00001316/// isCXXNamedOperator - Returns "true" if the token is a named operator in C++.
1317static bool isCXXNamedOperator(const std::string &Spelling) {
1318 return Spelling == "and" || Spelling == "bitand" || Spelling == "bitor" ||
1319 Spelling == "compl" || Spelling == "not" || Spelling == "not_eq" ||
1320 Spelling == "or" || Spelling == "xor";
1321}
1322
Chris Lattner22eb9722006-06-18 05:43:12 +00001323/// ReadMacroName - Lex and validate a macro name, which occurs after a
1324/// #define or #undef. This sets the token kind to eom and discards the rest
Chris Lattnere8eef322006-07-08 07:01:00 +00001325/// of the macro line if the macro name is invalid. isDefineUndef is 1 if
1326/// this is due to a a #define, 2 if #undef directive, 0 if it is something
Chris Lattner44f8a662006-07-03 01:27:27 +00001327/// else (e.g. #ifdef).
Chris Lattner146762e2007-07-20 16:59:19 +00001328void Preprocessor::ReadMacroName(Token &MacroNameTok, char isDefineUndef) {
Chris Lattner22eb9722006-06-18 05:43:12 +00001329 // Read the token, don't allow macro expansion on it.
Chris Lattnercb283342006-06-18 06:48:37 +00001330 LexUnexpandedToken(MacroNameTok);
Chris Lattner22eb9722006-06-18 05:43:12 +00001331
1332 // Missing macro name?
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001333 if (MacroNameTok.is(tok::eom))
Chris Lattner22eb9722006-06-18 05:43:12 +00001334 return Diag(MacroNameTok, diag::err_pp_missing_macro_name);
1335
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001336 IdentifierInfo *II = MacroNameTok.getIdentifierInfo();
1337 if (II == 0) {
Chris Lattner652c1692006-11-21 23:47:30 +00001338 std::string Spelling = getSpelling(MacroNameTok);
1339 if (isCXXNamedOperator(Spelling))
1340 // C++ 2.5p2: Alternative tokens behave the same as its primary token
1341 // except for their spellings.
1342 Diag(MacroNameTok, diag::err_pp_operator_used_as_macro_name, Spelling);
1343 else
1344 Diag(MacroNameTok, diag::err_pp_macro_not_identifier);
Chris Lattner22eb9722006-06-18 05:43:12 +00001345 // Fall through on error.
Chris Lattner2bb8a952006-11-21 22:24:17 +00001346 } else if (isDefineUndef && II->getPPKeywordID() == tok::pp_defined) {
Chris Lattner44f8a662006-07-03 01:27:27 +00001347 // Error if defining "defined": C99 6.10.8.4.
Chris Lattneraaf09112006-07-03 01:17:59 +00001348 Diag(MacroNameTok, diag::err_defined_macro_name);
Chris Lattner259716a2007-10-07 08:04:56 +00001349 } else if (isDefineUndef && II->hasMacroDefinition() &&
Chris Lattnerc43ddc82007-10-07 08:44:20 +00001350 getMacroInfo(II)->isBuiltinMacro()) {
Chris Lattner44f8a662006-07-03 01:27:27 +00001351 // Error if defining "__LINE__" and other builtins: C99 6.10.8.4.
Chris Lattnere8eef322006-07-08 07:01:00 +00001352 if (isDefineUndef == 1)
1353 Diag(MacroNameTok, diag::pp_redef_builtin_macro);
1354 else
1355 Diag(MacroNameTok, diag::pp_undef_builtin_macro);
Chris Lattner22eb9722006-06-18 05:43:12 +00001356 } else {
1357 // Okay, we got a good identifier node. Return it.
Chris Lattnercb283342006-06-18 06:48:37 +00001358 return;
Chris Lattner22eb9722006-06-18 05:43:12 +00001359 }
1360
Chris Lattner22eb9722006-06-18 05:43:12 +00001361 // Invalid macro name, read and discard the rest of the line. Then set the
1362 // token kind to tok::eom.
Chris Lattner8c204872006-10-14 05:19:21 +00001363 MacroNameTok.setKind(tok::eom);
Chris Lattner22eb9722006-06-18 05:43:12 +00001364 return DiscardUntilEndOfDirective();
1365}
1366
1367/// CheckEndOfDirective - Ensure that the next token is a tok::eom token. If
1368/// not, emit a diagnostic and consume up until the eom.
Chris Lattnercb283342006-06-18 06:48:37 +00001369void Preprocessor::CheckEndOfDirective(const char *DirType) {
Chris Lattner146762e2007-07-20 16:59:19 +00001370 Token Tmp;
Chris Lattnercb283342006-06-18 06:48:37 +00001371 Lex(Tmp);
Chris Lattner22eb9722006-06-18 05:43:12 +00001372 // There should be no tokens after the directive, but we allow them as an
1373 // extension.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001374 while (Tmp.is(tok::comment)) // Skip comments in -C mode.
Chris Lattnerbcb416b2006-10-27 05:43:50 +00001375 Lex(Tmp);
1376
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001377 if (Tmp.isNot(tok::eom)) {
Chris Lattnercb283342006-06-18 06:48:37 +00001378 Diag(Tmp, diag::ext_pp_extra_tokens_at_eol, DirType);
1379 DiscardUntilEndOfDirective();
Chris Lattner22eb9722006-06-18 05:43:12 +00001380 }
Chris Lattner22eb9722006-06-18 05:43:12 +00001381}
1382
1383
1384
1385/// SkipExcludedConditionalBlock - We just read a #if or related directive and
1386/// decided that the subsequent tokens are in the #if'd out portion of the
1387/// file. Lex the rest of the file, until we see an #endif. If
1388/// FoundNonSkipPortion is true, then we have already emitted code for part of
1389/// this #if directive, so #else/#elif blocks should never be entered. If ElseOk
1390/// is true, then #else directives are ok, if not, then we have already seen one
1391/// so a #else directive is a duplicate. When this returns, the caller can lex
1392/// the first valid token.
Chris Lattnerd01e2912006-06-18 16:22:51 +00001393void Preprocessor::SkipExcludedConditionalBlock(SourceLocation IfTokenLoc,
Chris Lattner22eb9722006-06-18 05:43:12 +00001394 bool FoundNonSkipPortion,
1395 bool FoundElse) {
1396 ++NumSkipped;
Chris Lattner69772b02006-07-02 20:34:39 +00001397 assert(CurMacroExpander == 0 && CurLexer &&
Chris Lattner22eb9722006-06-18 05:43:12 +00001398 "Lexing a macro, not a file?");
1399
1400 CurLexer->pushConditionalLevel(IfTokenLoc, /*isSkipping*/false,
1401 FoundNonSkipPortion, FoundElse);
1402
Chris Lattner3ebcf4e2006-07-11 05:39:23 +00001403 // Enter raw mode to disable identifier lookup (and thus macro expansion),
1404 // disabling warnings, etc.
1405 CurLexer->LexingRawMode = true;
Chris Lattner146762e2007-07-20 16:59:19 +00001406 Token Tok;
Chris Lattner22eb9722006-06-18 05:43:12 +00001407 while (1) {
Chris Lattnercb283342006-06-18 06:48:37 +00001408 CurLexer->Lex(Tok);
Chris Lattner22eb9722006-06-18 05:43:12 +00001409
Chris Lattnerd8aee0e2006-07-11 05:04:55 +00001410 // If this is the end of the buffer, we have an error.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001411 if (Tok.is(tok::eof)) {
Chris Lattnerd8aee0e2006-07-11 05:04:55 +00001412 // Emit errors for each unterminated conditional on the stack, including
1413 // the current one.
1414 while (!CurLexer->ConditionalStack.empty()) {
1415 Diag(CurLexer->ConditionalStack.back().IfLoc,
1416 diag::err_pp_unterminated_conditional);
1417 CurLexer->ConditionalStack.pop_back();
1418 }
1419
1420 // Just return and let the caller lex after this #include.
1421 break;
1422 }
Chris Lattner22eb9722006-06-18 05:43:12 +00001423
1424 // If this token is not a preprocessor directive, just skip it.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001425 if (Tok.isNot(tok::hash) || !Tok.isAtStartOfLine())
Chris Lattner22eb9722006-06-18 05:43:12 +00001426 continue;
1427
1428 // We just parsed a # character at the start of a line, so we're in
1429 // directive mode. Tell the lexer this so any newlines we see will be
1430 // converted into an EOM token (this terminates the macro).
1431 CurLexer->ParsingPreprocessorDirective = true;
Chris Lattner457fc152006-07-29 06:30:25 +00001432 CurLexer->KeepCommentMode = false;
1433
Chris Lattner22eb9722006-06-18 05:43:12 +00001434
1435 // Read the next token, the directive flavor.
Chris Lattnercb283342006-06-18 06:48:37 +00001436 LexUnexpandedToken(Tok);
Chris Lattner22eb9722006-06-18 05:43:12 +00001437
1438 // If this isn't an identifier directive (e.g. is "# 1\n" or "#\n", or
1439 // something bogus), skip it.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001440 if (Tok.isNot(tok::identifier)) {
Chris Lattner22eb9722006-06-18 05:43:12 +00001441 CurLexer->ParsingPreprocessorDirective = false;
Chris Lattner457fc152006-07-29 06:30:25 +00001442 // Restore comment saving mode.
Chris Lattnerb352e3e2006-11-21 06:17:10 +00001443 CurLexer->KeepCommentMode = KeepComments;
Chris Lattner22eb9722006-06-18 05:43:12 +00001444 continue;
1445 }
Chris Lattnere60165f2006-06-22 06:36:29 +00001446
Chris Lattner22eb9722006-06-18 05:43:12 +00001447 // If the first letter isn't i or e, it isn't intesting to us. We know that
1448 // this is safe in the face of spelling differences, because there is no way
1449 // to spell an i/e in a strange way that is another letter. Skipping this
Chris Lattnere60165f2006-06-22 06:36:29 +00001450 // allows us to avoid looking up the identifier info for #define/#undef and
1451 // other common directives.
1452 const char *RawCharData = SourceMgr.getCharacterData(Tok.getLocation());
1453 char FirstChar = RawCharData[0];
Chris Lattner22eb9722006-06-18 05:43:12 +00001454 if (FirstChar >= 'a' && FirstChar <= 'z' &&
1455 FirstChar != 'i' && FirstChar != 'e') {
1456 CurLexer->ParsingPreprocessorDirective = false;
Chris Lattner457fc152006-07-29 06:30:25 +00001457 // Restore comment saving mode.
Chris Lattnerb352e3e2006-11-21 06:17:10 +00001458 CurLexer->KeepCommentMode = KeepComments;
Chris Lattner22eb9722006-06-18 05:43:12 +00001459 continue;
1460 }
1461
Chris Lattnere60165f2006-06-22 06:36:29 +00001462 // Get the identifier name without trigraphs or embedded newlines. Note
1463 // that we can't use Tok.getIdentifierInfo() because its lookup is disabled
1464 // when skipping.
1465 // TODO: could do this with zero copies in the no-clean case by using
1466 // strncmp below.
1467 char Directive[20];
1468 unsigned IdLen;
1469 if (!Tok.needsCleaning() && Tok.getLength() < 20) {
1470 IdLen = Tok.getLength();
1471 memcpy(Directive, RawCharData, IdLen);
1472 Directive[IdLen] = 0;
1473 } else {
1474 std::string DirectiveStr = getSpelling(Tok);
1475 IdLen = DirectiveStr.size();
1476 if (IdLen >= 20) {
1477 CurLexer->ParsingPreprocessorDirective = false;
Chris Lattner457fc152006-07-29 06:30:25 +00001478 // Restore comment saving mode.
Chris Lattnerb352e3e2006-11-21 06:17:10 +00001479 CurLexer->KeepCommentMode = KeepComments;
Chris Lattnere60165f2006-06-22 06:36:29 +00001480 continue;
1481 }
1482 memcpy(Directive, &DirectiveStr[0], IdLen);
1483 Directive[IdLen] = 0;
1484 }
1485
Chris Lattner22eb9722006-06-18 05:43:12 +00001486 if (FirstChar == 'i' && Directive[1] == 'f') {
Chris Lattnere60165f2006-06-22 06:36:29 +00001487 if ((IdLen == 2) || // "if"
1488 (IdLen == 5 && !strcmp(Directive+2, "def")) || // "ifdef"
1489 (IdLen == 6 && !strcmp(Directive+2, "ndef"))) { // "ifndef"
Chris Lattner22eb9722006-06-18 05:43:12 +00001490 // We know the entire #if/#ifdef/#ifndef block will be skipped, don't
1491 // bother parsing the condition.
Chris Lattnercb283342006-06-18 06:48:37 +00001492 DiscardUntilEndOfDirective();
Chris Lattner50b497e2006-06-18 16:32:35 +00001493 CurLexer->pushConditionalLevel(Tok.getLocation(), /*wasskipping*/true,
Chris Lattnerd01e2912006-06-18 16:22:51 +00001494 /*foundnonskip*/false,
1495 /*fnddelse*/false);
Chris Lattner22eb9722006-06-18 05:43:12 +00001496 }
1497 } else if (FirstChar == 'e') {
Chris Lattnere60165f2006-06-22 06:36:29 +00001498 if (IdLen == 5 && !strcmp(Directive+1, "ndif")) { // "endif"
Chris Lattnercb283342006-06-18 06:48:37 +00001499 CheckEndOfDirective("#endif");
Chris Lattner22eb9722006-06-18 05:43:12 +00001500 PPConditionalInfo CondInfo;
1501 CondInfo.WasSkipping = true; // Silence bogus warning.
1502 bool InCond = CurLexer->popConditionalLevel(CondInfo);
Chris Lattnercf6bc662006-11-05 07:59:08 +00001503 InCond = InCond; // Silence warning in no-asserts mode.
Chris Lattner22eb9722006-06-18 05:43:12 +00001504 assert(!InCond && "Can't be skipping if not in a conditional!");
1505
1506 // If we popped the outermost skipping block, we're done skipping!
1507 if (!CondInfo.WasSkipping)
1508 break;
Chris Lattnere60165f2006-06-22 06:36:29 +00001509 } else if (IdLen == 4 && !strcmp(Directive+1, "lse")) { // "else".
Chris Lattner22eb9722006-06-18 05:43:12 +00001510 // #else directive in a skipping conditional. If not in some other
1511 // skipping conditional, and if #else hasn't already been seen, enter it
1512 // as a non-skipping conditional.
Chris Lattnercb283342006-06-18 06:48:37 +00001513 CheckEndOfDirective("#else");
Chris Lattner22eb9722006-06-18 05:43:12 +00001514 PPConditionalInfo &CondInfo = CurLexer->peekConditionalLevel();
1515
1516 // If this is a #else with a #else before it, report the error.
Chris Lattnercb283342006-06-18 06:48:37 +00001517 if (CondInfo.FoundElse) Diag(Tok, diag::pp_err_else_after_else);
Chris Lattner22eb9722006-06-18 05:43:12 +00001518
1519 // Note that we've seen a #else in this conditional.
1520 CondInfo.FoundElse = true;
1521
1522 // If the conditional is at the top level, and the #if block wasn't
1523 // entered, enter the #else block now.
1524 if (!CondInfo.WasSkipping && !CondInfo.FoundNonSkip) {
1525 CondInfo.FoundNonSkip = true;
1526 break;
1527 }
Chris Lattnere60165f2006-06-22 06:36:29 +00001528 } else if (IdLen == 4 && !strcmp(Directive+1, "lif")) { // "elif".
Chris Lattner22eb9722006-06-18 05:43:12 +00001529 PPConditionalInfo &CondInfo = CurLexer->peekConditionalLevel();
1530
1531 bool ShouldEnter;
1532 // If this is in a skipping block or if we're already handled this #if
1533 // block, don't bother parsing the condition.
1534 if (CondInfo.WasSkipping || CondInfo.FoundNonSkip) {
Chris Lattnercb283342006-06-18 06:48:37 +00001535 DiscardUntilEndOfDirective();
Chris Lattner22eb9722006-06-18 05:43:12 +00001536 ShouldEnter = false;
1537 } else {
Chris Lattner3ebcf4e2006-07-11 05:39:23 +00001538 // Restore the value of LexingRawMode so that identifiers are
Chris Lattner22eb9722006-06-18 05:43:12 +00001539 // looked up, etc, inside the #elif expression.
Chris Lattner3ebcf4e2006-07-11 05:39:23 +00001540 assert(CurLexer->LexingRawMode && "We have to be skipping here!");
1541 CurLexer->LexingRawMode = false;
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001542 IdentifierInfo *IfNDefMacro = 0;
Chris Lattnera8654ca2006-07-04 17:42:08 +00001543 ShouldEnter = EvaluateDirectiveExpression(IfNDefMacro);
Chris Lattner3ebcf4e2006-07-11 05:39:23 +00001544 CurLexer->LexingRawMode = true;
Chris Lattner22eb9722006-06-18 05:43:12 +00001545 }
1546
1547 // If this is a #elif with a #else before it, report the error.
Chris Lattnercb283342006-06-18 06:48:37 +00001548 if (CondInfo.FoundElse) Diag(Tok, diag::pp_err_elif_after_else);
Chris Lattner22eb9722006-06-18 05:43:12 +00001549
1550 // If this condition is true, enter it!
1551 if (ShouldEnter) {
1552 CondInfo.FoundNonSkip = true;
1553 break;
1554 }
1555 }
1556 }
1557
1558 CurLexer->ParsingPreprocessorDirective = false;
Chris Lattner457fc152006-07-29 06:30:25 +00001559 // Restore comment saving mode.
Chris Lattnerb352e3e2006-11-21 06:17:10 +00001560 CurLexer->KeepCommentMode = KeepComments;
Chris Lattner22eb9722006-06-18 05:43:12 +00001561 }
1562
1563 // Finally, if we are out of the conditional (saw an #endif or ran off the end
1564 // of the file, just stop skipping and return to lexing whatever came after
1565 // the #if block.
Chris Lattner3ebcf4e2006-07-11 05:39:23 +00001566 CurLexer->LexingRawMode = false;
Chris Lattner22eb9722006-06-18 05:43:12 +00001567}
1568
1569//===----------------------------------------------------------------------===//
1570// Preprocessor Directive Handling.
1571//===----------------------------------------------------------------------===//
1572
1573/// HandleDirective - This callback is invoked when the lexer sees a # token
1574/// at the start of a line. This consumes the directive, modifies the
1575/// lexer/preprocessor state, and advances the lexer(s) so that the next token
1576/// read is the correct one.
Chris Lattner146762e2007-07-20 16:59:19 +00001577void Preprocessor::HandleDirective(Token &Result) {
Chris Lattner4d5e1a72006-07-03 01:01:29 +00001578 // FIXME: Traditional: # with whitespace before it not recognized by K&R?
Chris Lattner22eb9722006-06-18 05:43:12 +00001579
1580 // We just parsed a # character at the start of a line, so we're in directive
1581 // mode. Tell the lexer this so any newlines we see will be converted into an
Chris Lattner78186052006-07-09 00:45:31 +00001582 // EOM token (which terminates the directive).
Chris Lattner22eb9722006-06-18 05:43:12 +00001583 CurLexer->ParsingPreprocessorDirective = true;
1584
1585 ++NumDirectives;
1586
Chris Lattner371ac8a2006-07-04 07:11:10 +00001587 // We are about to read a token. For the multiple-include optimization FA to
1588 // work, we have to remember if we had read any tokens *before* this
1589 // pp-directive.
1590 bool ReadAnyTokensBeforeDirective = CurLexer->MIOpt.getHasReadAnyTokensVal();
1591
Chris Lattner78186052006-07-09 00:45:31 +00001592 // Read the next token, the directive flavor. This isn't expanded due to
1593 // C99 6.10.3p8.
Chris Lattnercb283342006-06-18 06:48:37 +00001594 LexUnexpandedToken(Result);
Chris Lattner22eb9722006-06-18 05:43:12 +00001595
Chris Lattner78186052006-07-09 00:45:31 +00001596 // C99 6.10.3p11: Is this preprocessor directive in macro invocation? e.g.:
1597 // #define A(x) #x
1598 // A(abc
1599 // #warning blah
1600 // def)
1601 // If so, the user is relying on non-portable behavior, emit a diagnostic.
Chris Lattneree8760b2006-07-15 07:42:55 +00001602 if (InMacroArgs)
Chris Lattner78186052006-07-09 00:45:31 +00001603 Diag(Result, diag::ext_embedded_directive);
1604
Chris Lattnerbcb416b2006-10-27 05:43:50 +00001605TryAgain:
Chris Lattner22eb9722006-06-18 05:43:12 +00001606 switch (Result.getKind()) {
Chris Lattner22eb9722006-06-18 05:43:12 +00001607 case tok::eom:
Chris Lattnercb283342006-06-18 06:48:37 +00001608 return; // null directive.
Chris Lattnerbcb416b2006-10-27 05:43:50 +00001609 case tok::comment:
1610 // Handle stuff like "# /*foo*/ define X" in -E -C mode.
1611 LexUnexpandedToken(Result);
1612 goto TryAgain;
Chris Lattner22eb9722006-06-18 05:43:12 +00001613
Chris Lattner22eb9722006-06-18 05:43:12 +00001614 case tok::numeric_constant:
1615 // FIXME: implement # 7 line numbers!
Chris Lattner6e5b2a02006-10-17 02:53:32 +00001616 DiscardUntilEndOfDirective();
1617 return;
Chris Lattner87d3bec2006-10-17 03:44:32 +00001618 default:
1619 IdentifierInfo *II = Result.getIdentifierInfo();
1620 if (II == 0) break; // Not an identifier.
1621
1622 // Ask what the preprocessor keyword ID is.
1623 switch (II->getPPKeywordID()) {
1624 default: break;
1625 // C99 6.10.1 - Conditional Inclusion.
1626 case tok::pp_if:
1627 return HandleIfDirective(Result, ReadAnyTokensBeforeDirective);
1628 case tok::pp_ifdef:
1629 return HandleIfdefDirective(Result, false, true/*not valid for miopt*/);
1630 case tok::pp_ifndef:
1631 return HandleIfdefDirective(Result, true, ReadAnyTokensBeforeDirective);
1632 case tok::pp_elif:
1633 return HandleElifDirective(Result);
1634 case tok::pp_else:
1635 return HandleElseDirective(Result);
1636 case tok::pp_endif:
1637 return HandleEndifDirective(Result);
1638
1639 // C99 6.10.2 - Source File Inclusion.
1640 case tok::pp_include:
1641 return HandleIncludeDirective(Result); // Handle #include.
1642
1643 // C99 6.10.3 - Macro Replacement.
1644 case tok::pp_define:
1645 return HandleDefineDirective(Result, false);
1646 case tok::pp_undef:
1647 return HandleUndefDirective(Result);
1648
1649 // C99 6.10.4 - Line Control.
1650 case tok::pp_line:
1651 // FIXME: implement #line
1652 DiscardUntilEndOfDirective();
1653 return;
1654
1655 // C99 6.10.5 - Error Directive.
1656 case tok::pp_error:
1657 return HandleUserDiagnosticDirective(Result, false);
1658
1659 // C99 6.10.6 - Pragma Directive.
1660 case tok::pp_pragma:
1661 return HandlePragmaDirective();
1662
1663 // GNU Extensions.
1664 case tok::pp_import:
1665 return HandleImportDirective(Result);
1666 case tok::pp_include_next:
1667 return HandleIncludeNextDirective(Result);
1668
1669 case tok::pp_warning:
1670 Diag(Result, diag::ext_pp_warning_directive);
1671 return HandleUserDiagnosticDirective(Result, true);
1672 case tok::pp_ident:
1673 return HandleIdentSCCSDirective(Result);
1674 case tok::pp_sccs:
1675 return HandleIdentSCCSDirective(Result);
1676 case tok::pp_assert:
1677 //isExtension = true; // FIXME: implement #assert
Chris Lattner22eb9722006-06-18 05:43:12 +00001678 break;
Chris Lattner87d3bec2006-10-17 03:44:32 +00001679 case tok::pp_unassert:
1680 //isExtension = true; // FIXME: implement #unassert
Chris Lattner22eb9722006-06-18 05:43:12 +00001681 break;
Chris Lattner87d3bec2006-10-17 03:44:32 +00001682
1683 // clang extensions.
1684 case tok::pp_define_target:
1685 return HandleDefineDirective(Result, true);
1686 case tok::pp_define_other_target:
1687 return HandleDefineOtherTargetDirective(Result);
Chris Lattner22eb9722006-06-18 05:43:12 +00001688 }
1689 break;
1690 }
1691
1692 // If we reached here, the preprocessing token is not valid!
Chris Lattnercb283342006-06-18 06:48:37 +00001693 Diag(Result, diag::err_pp_invalid_directive);
Chris Lattner22eb9722006-06-18 05:43:12 +00001694
1695 // Read the rest of the PP line.
Chris Lattner371ac8a2006-07-04 07:11:10 +00001696 DiscardUntilEndOfDirective();
Chris Lattner22eb9722006-06-18 05:43:12 +00001697
1698 // Okay, we're done parsing the directive.
Chris Lattner22eb9722006-06-18 05:43:12 +00001699}
1700
Chris Lattner146762e2007-07-20 16:59:19 +00001701void Preprocessor::HandleUserDiagnosticDirective(Token &Tok,
Chris Lattner22eb9722006-06-18 05:43:12 +00001702 bool isWarning) {
1703 // Read the rest of the line raw. We do this because we don't want macros
1704 // to be expanded and we don't require that the tokens be valid preprocessing
1705 // tokens. For example, this is allowed: "#warning ` 'foo". GCC does
1706 // collapse multiple consequtive white space between tokens, but this isn't
1707 // specified by the standard.
1708 std::string Message = CurLexer->ReadToEndOfLine();
1709
1710 unsigned DiagID = isWarning ? diag::pp_hash_warning : diag::err_pp_hash_error;
Chris Lattner01d66cc2006-07-03 22:16:27 +00001711 return Diag(Tok, DiagID, Message);
1712}
1713
1714/// HandleIdentSCCSDirective - Handle a #ident/#sccs directive.
1715///
Chris Lattner146762e2007-07-20 16:59:19 +00001716void Preprocessor::HandleIdentSCCSDirective(Token &Tok) {
Chris Lattner371ac8a2006-07-04 07:11:10 +00001717 // Yes, this directive is an extension.
Chris Lattner01d66cc2006-07-03 22:16:27 +00001718 Diag(Tok, diag::ext_pp_ident_directive);
1719
Chris Lattner371ac8a2006-07-04 07:11:10 +00001720 // Read the string argument.
Chris Lattner146762e2007-07-20 16:59:19 +00001721 Token StrTok;
Chris Lattner01d66cc2006-07-03 22:16:27 +00001722 Lex(StrTok);
1723
1724 // If the token kind isn't a string, it's a malformed directive.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001725 if (StrTok.isNot(tok::string_literal) &&
1726 StrTok.isNot(tok::wide_string_literal))
Chris Lattner01d66cc2006-07-03 22:16:27 +00001727 return Diag(StrTok, diag::err_pp_malformed_ident);
1728
1729 // Verify that there is nothing after the string, other than EOM.
1730 CheckEndOfDirective("#ident");
1731
Chris Lattnerb8d6d5a2006-11-21 04:09:30 +00001732 if (Callbacks)
1733 Callbacks->Ident(Tok.getLocation(), getSpelling(StrTok));
Chris Lattner22eb9722006-06-18 05:43:12 +00001734}
1735
Chris Lattnerb8761832006-06-24 21:31:03 +00001736//===----------------------------------------------------------------------===//
1737// Preprocessor Include Directive Handling.
1738//===----------------------------------------------------------------------===//
1739
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001740/// GetIncludeFilenameSpelling - Turn the specified lexer token into a fully
1741/// checked and spelled filename, e.g. as an operand of #include. This returns
1742/// true if the input filename was in <>'s or false if it were in ""'s. The
1743/// caller is expected to provide a buffer that is large enough to hold the
1744/// spelling of the filename, but is also expected to handle the case when
1745/// this method decides to use a different buffer.
Chris Lattner93ab9f12007-07-23 04:15:27 +00001746bool Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc,
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001747 const char *&BufStart,
1748 const char *&BufEnd) {
1749 // Get the text form of the filename.
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001750 assert(BufStart != BufEnd && "Can't have tokens with empty spellings!");
1751
1752 // Make sure the filename is <x> or "x".
1753 bool isAngled;
1754 if (BufStart[0] == '<') {
1755 if (BufEnd[-1] != '>') {
Chris Lattner93ab9f12007-07-23 04:15:27 +00001756 Diag(Loc, diag::err_pp_expects_filename);
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001757 BufStart = 0;
1758 return true;
1759 }
1760 isAngled = true;
1761 } else if (BufStart[0] == '"') {
1762 if (BufEnd[-1] != '"') {
Chris Lattner93ab9f12007-07-23 04:15:27 +00001763 Diag(Loc, diag::err_pp_expects_filename);
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001764 BufStart = 0;
1765 return true;
1766 }
1767 isAngled = false;
1768 } else {
Chris Lattner93ab9f12007-07-23 04:15:27 +00001769 Diag(Loc, diag::err_pp_expects_filename);
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001770 BufStart = 0;
1771 return true;
1772 }
1773
1774 // Diagnose #include "" as invalid.
1775 if (BufEnd-BufStart <= 2) {
Chris Lattner93ab9f12007-07-23 04:15:27 +00001776 Diag(Loc, diag::err_pp_empty_filename);
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001777 BufStart = 0;
1778 return "";
1779 }
1780
1781 // Skip the brackets.
1782 ++BufStart;
1783 --BufEnd;
1784 return isAngled;
1785}
1786
Chris Lattner43eafb42007-07-23 04:56:47 +00001787/// ConcatenateIncludeName - Handle cases where the #include name is expanded
1788/// from a macro as multiple tokens, which need to be glued together. This
1789/// occurs for code like:
1790/// #define FOO <a/b.h>
1791/// #include FOO
1792/// because in this case, "<a/b.h>" is returned as 7 tokens, not one.
1793///
1794/// This code concatenates and consumes tokens up to the '>' token. It returns
1795/// false if the > was found, otherwise it returns true if it finds and consumes
1796/// the EOM marker.
1797static bool ConcatenateIncludeName(llvm::SmallVector<char, 128> &FilenameBuffer,
1798 Preprocessor &PP) {
1799 Token CurTok;
1800
1801 PP.Lex(CurTok);
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001802 while (CurTok.isNot(tok::eom)) {
Chris Lattner43eafb42007-07-23 04:56:47 +00001803 // Append the spelling of this token to the buffer. If there was a space
1804 // before it, add it now.
1805 if (CurTok.hasLeadingSpace())
1806 FilenameBuffer.push_back(' ');
1807
1808 // Get the spelling of the token, directly into FilenameBuffer if possible.
1809 unsigned PreAppendSize = FilenameBuffer.size();
1810 FilenameBuffer.resize(PreAppendSize+CurTok.getLength());
1811
1812 const char *BufPtr = &FilenameBuffer[PreAppendSize];
1813 unsigned ActualLen = PP.getSpelling(CurTok, BufPtr);
1814
1815 // If the token was spelled somewhere else, copy it into FilenameBuffer.
1816 if (BufPtr != &FilenameBuffer[PreAppendSize])
1817 memcpy(&FilenameBuffer[PreAppendSize], BufPtr, ActualLen);
1818
1819 // Resize FilenameBuffer to the correct size.
1820 if (CurTok.getLength() != ActualLen)
1821 FilenameBuffer.resize(PreAppendSize+ActualLen);
1822
1823 // If we found the '>' marker, return success.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001824 if (CurTok.is(tok::greater))
Chris Lattner43eafb42007-07-23 04:56:47 +00001825 return false;
1826
1827 PP.Lex(CurTok);
1828 }
1829
1830 // If we hit the eom marker, emit an error and return true so that the caller
1831 // knows the EOM has been read.
1832 PP.Diag(CurTok.getLocation(), diag::err_pp_expects_filename);
1833 return true;
1834}
1835
Chris Lattner22eb9722006-06-18 05:43:12 +00001836/// HandleIncludeDirective - The "#include" tokens have just been read, read the
1837/// file to be included from the lexer, then include it! This is a common
1838/// routine with functionality shared between #include, #include_next and
1839/// #import.
Chris Lattner146762e2007-07-20 16:59:19 +00001840void Preprocessor::HandleIncludeDirective(Token &IncludeTok,
Chris Lattner22eb9722006-06-18 05:43:12 +00001841 const DirectoryLookup *LookupFrom,
1842 bool isImport) {
Chris Lattner371ac8a2006-07-04 07:11:10 +00001843
Chris Lattner146762e2007-07-20 16:59:19 +00001844 Token FilenameTok;
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001845 CurLexer->LexIncludeFilename(FilenameTok);
Chris Lattner22eb9722006-06-18 05:43:12 +00001846
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001847 // Reserve a buffer to get the spelling.
Chris Lattner23b7eb62007-06-15 23:05:46 +00001848 llvm::SmallVector<char, 128> FilenameBuffer;
Chris Lattner43eafb42007-07-23 04:56:47 +00001849 const char *FilenameStart, *FilenameEnd;
1850
1851 switch (FilenameTok.getKind()) {
1852 case tok::eom:
1853 // If the token kind is EOM, the error has already been diagnosed.
1854 return;
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001855
Chris Lattner43eafb42007-07-23 04:56:47 +00001856 case tok::angle_string_literal:
Chris Lattnerf97dbcb2007-07-23 22:23:52 +00001857 case tok::string_literal: {
Chris Lattner43eafb42007-07-23 04:56:47 +00001858 FilenameBuffer.resize(FilenameTok.getLength());
1859 FilenameStart = &FilenameBuffer[0];
1860 unsigned Len = getSpelling(FilenameTok, FilenameStart);
1861 FilenameEnd = FilenameStart+Len;
1862 break;
Chris Lattnerf97dbcb2007-07-23 22:23:52 +00001863 }
Chris Lattner43eafb42007-07-23 04:56:47 +00001864
1865 case tok::less:
1866 // This could be a <foo/bar.h> file coming from a macro expansion. In this
1867 // case, glue the tokens together into FilenameBuffer and interpret those.
1868 FilenameBuffer.push_back('<');
1869 if (ConcatenateIncludeName(FilenameBuffer, *this))
1870 return; // Found <eom> but no ">"? Diagnostic already emitted.
1871 FilenameStart = &FilenameBuffer[0];
1872 FilenameEnd = &FilenameBuffer[FilenameBuffer.size()];
1873 break;
1874 default:
1875 Diag(FilenameTok.getLocation(), diag::err_pp_expects_filename);
1876 DiscardUntilEndOfDirective();
1877 return;
1878 }
1879
Chris Lattner93ab9f12007-07-23 04:15:27 +00001880 bool isAngled = GetIncludeFilenameSpelling(FilenameTok.getLocation(),
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001881 FilenameStart, FilenameEnd);
1882 // If GetIncludeFilenameSpelling set the start ptr to null, there was an
1883 // error.
Chris Lattner43eafb42007-07-23 04:56:47 +00001884 if (FilenameStart == 0) {
1885 DiscardUntilEndOfDirective();
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001886 return;
Chris Lattner43eafb42007-07-23 04:56:47 +00001887 }
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001888
Chris Lattner269c2322006-06-25 06:23:00 +00001889 // Verify that there is nothing after the filename, other than EOM. Use the
1890 // preprocessor to lex this in case lexing the filename entered a macro.
1891 CheckEndOfDirective("#include");
Chris Lattner22eb9722006-06-18 05:43:12 +00001892
1893 // Check that we don't have infinite #include recursion.
Chris Lattner69772b02006-07-02 20:34:39 +00001894 if (IncludeMacroStack.size() == MaxAllowedIncludeStackDepth-1)
Chris Lattner22eb9722006-06-18 05:43:12 +00001895 return Diag(FilenameTok, diag::err_pp_include_too_deep);
1896
Chris Lattner22eb9722006-06-18 05:43:12 +00001897 // Search include directories.
Chris Lattnerc8997182006-06-22 05:52:16 +00001898 const DirectoryLookup *CurDir;
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001899 const FileEntry *File = LookupFile(FilenameStart, FilenameEnd,
Chris Lattnerb8b94f12006-10-30 05:38:06 +00001900 isAngled, LookupFrom, CurDir);
Chris Lattner22eb9722006-06-18 05:43:12 +00001901 if (File == 0)
Chris Lattner7c718bd2007-04-10 06:02:46 +00001902 return Diag(FilenameTok, diag::err_pp_file_not_found,
1903 std::string(FilenameStart, FilenameEnd));
Chris Lattner22eb9722006-06-18 05:43:12 +00001904
Chris Lattner59a9ebd2006-10-18 05:34:33 +00001905 // Ask HeaderInfo if we should enter this #include file.
1906 if (!HeaderInfo.ShouldEnterIncludeFile(File, isImport)) {
1907 // If it returns true, #including this file will have no effect.
Chris Lattner3665f162006-07-04 07:26:10 +00001908 return;
1909 }
Chris Lattner22eb9722006-06-18 05:43:12 +00001910
1911 // Look up the file, create a File ID for it.
Chris Lattner371ac8a2006-07-04 07:11:10 +00001912 unsigned FileID = SourceMgr.createFileID(File, FilenameTok.getLocation());
Chris Lattner22eb9722006-06-18 05:43:12 +00001913 if (FileID == 0)
Chris Lattner7c718bd2007-04-10 06:02:46 +00001914 return Diag(FilenameTok, diag::err_pp_file_not_found,
1915 std::string(FilenameStart, FilenameEnd));
Chris Lattner22eb9722006-06-18 05:43:12 +00001916
1917 // Finally, if all is good, enter the new file!
Chris Lattnerc8997182006-06-22 05:52:16 +00001918 EnterSourceFile(FileID, CurDir);
Chris Lattner22eb9722006-06-18 05:43:12 +00001919}
1920
1921/// HandleIncludeNextDirective - Implements #include_next.
1922///
Chris Lattner146762e2007-07-20 16:59:19 +00001923void Preprocessor::HandleIncludeNextDirective(Token &IncludeNextTok) {
Chris Lattnercb283342006-06-18 06:48:37 +00001924 Diag(IncludeNextTok, diag::ext_pp_include_next_directive);
Chris Lattner22eb9722006-06-18 05:43:12 +00001925
1926 // #include_next is like #include, except that we start searching after
1927 // the current found directory. If we can't do this, issue a
1928 // diagnostic.
Chris Lattnerc8997182006-06-22 05:52:16 +00001929 const DirectoryLookup *Lookup = CurDirLookup;
Chris Lattner69772b02006-07-02 20:34:39 +00001930 if (isInPrimaryFile()) {
Chris Lattner22eb9722006-06-18 05:43:12 +00001931 Lookup = 0;
Chris Lattnercb283342006-06-18 06:48:37 +00001932 Diag(IncludeNextTok, diag::pp_include_next_in_primary);
Chris Lattner22eb9722006-06-18 05:43:12 +00001933 } else if (Lookup == 0) {
Chris Lattnercb283342006-06-18 06:48:37 +00001934 Diag(IncludeNextTok, diag::pp_include_next_absolute_path);
Chris Lattnerc8997182006-06-22 05:52:16 +00001935 } else {
1936 // Start looking up in the next directory.
1937 ++Lookup;
Chris Lattner22eb9722006-06-18 05:43:12 +00001938 }
1939
1940 return HandleIncludeDirective(IncludeNextTok, Lookup);
1941}
1942
1943/// HandleImportDirective - Implements #import.
1944///
Chris Lattner146762e2007-07-20 16:59:19 +00001945void Preprocessor::HandleImportDirective(Token &ImportTok) {
Chris Lattnercb283342006-06-18 06:48:37 +00001946 Diag(ImportTok, diag::ext_pp_import_directive);
Chris Lattner22eb9722006-06-18 05:43:12 +00001947
1948 return HandleIncludeDirective(ImportTok, 0, true);
1949}
1950
Chris Lattnerb8761832006-06-24 21:31:03 +00001951//===----------------------------------------------------------------------===//
1952// Preprocessor Macro Directive Handling.
1953//===----------------------------------------------------------------------===//
1954
Chris Lattnercefc7682006-07-08 08:28:12 +00001955/// ReadMacroDefinitionArgList - The ( starting an argument list of a macro
1956/// definition has just been read. Lex the rest of the arguments and the
1957/// closing ), updating MI with what we learn. Return true if an error occurs
1958/// parsing the arg list.
1959bool Preprocessor::ReadMacroDefinitionArgList(MacroInfo *MI) {
Chris Lattner564f4782007-07-14 22:46:43 +00001960 llvm::SmallVector<IdentifierInfo*, 32> Arguments;
1961
Chris Lattner146762e2007-07-20 16:59:19 +00001962 Token Tok;
Chris Lattnercefc7682006-07-08 08:28:12 +00001963 while (1) {
1964 LexUnexpandedToken(Tok);
1965 switch (Tok.getKind()) {
1966 case tok::r_paren:
1967 // Found the end of the argument list.
Chris Lattner564f4782007-07-14 22:46:43 +00001968 if (Arguments.empty()) { // #define FOO()
1969 MI->setArgumentList(Arguments.begin(), Arguments.end());
1970 return false;
1971 }
Chris Lattnercefc7682006-07-08 08:28:12 +00001972 // Otherwise we have #define FOO(A,)
1973 Diag(Tok, diag::err_pp_expected_ident_in_arg_list);
1974 return true;
1975 case tok::ellipsis: // #define X(... -> C99 varargs
1976 // Warn if use of C99 feature in non-C99 mode.
1977 if (!Features.C99) Diag(Tok, diag::ext_variadic_macro);
1978
1979 // Lex the token after the identifier.
1980 LexUnexpandedToken(Tok);
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001981 if (Tok.isNot(tok::r_paren)) {
Chris Lattnercefc7682006-07-08 08:28:12 +00001982 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);
1983 return true;
1984 }
Chris Lattner95a06b32006-07-30 08:40:43 +00001985 // Add the __VA_ARGS__ identifier as an argument.
Chris Lattner564f4782007-07-14 22:46:43 +00001986 Arguments.push_back(Ident__VA_ARGS__);
Chris Lattnercefc7682006-07-08 08:28:12 +00001987 MI->setIsC99Varargs();
Chris Lattner564f4782007-07-14 22:46:43 +00001988 MI->setArgumentList(Arguments.begin(), Arguments.end());
Chris Lattnercefc7682006-07-08 08:28:12 +00001989 return false;
1990 case tok::eom: // #define X(
1991 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);
1992 return true;
Chris Lattner62aa0d42006-10-20 05:08:24 +00001993 default:
1994 // Handle keywords and identifiers here to accept things like
1995 // #define Foo(for) for.
Chris Lattner6e0d42c2006-07-08 20:32:52 +00001996 IdentifierInfo *II = Tok.getIdentifierInfo();
Chris Lattner62aa0d42006-10-20 05:08:24 +00001997 if (II == 0) {
1998 // #define X(1
1999 Diag(Tok, diag::err_pp_invalid_tok_in_arg_list);
2000 return true;
2001 }
Chris Lattner6e0d42c2006-07-08 20:32:52 +00002002
2003 // If this is already used as an argument, it is used multiple times (e.g.
2004 // #define X(A,A.
Chris Lattner564f4782007-07-14 22:46:43 +00002005 if (std::find(Arguments.begin(), Arguments.end(), II) !=
2006 Arguments.end()) { // C99 6.10.3p6
Chris Lattner6e0d42c2006-07-08 20:32:52 +00002007 Diag(Tok, diag::err_pp_duplicate_name_in_arg_list, II->getName());
2008 return true;
2009 }
2010
2011 // Add the argument to the macro info.
Chris Lattner564f4782007-07-14 22:46:43 +00002012 Arguments.push_back(II);
Chris Lattnercefc7682006-07-08 08:28:12 +00002013
2014 // Lex the token after the identifier.
2015 LexUnexpandedToken(Tok);
2016
2017 switch (Tok.getKind()) {
2018 default: // #define X(A B
2019 Diag(Tok, diag::err_pp_expected_comma_in_arg_list);
2020 return true;
2021 case tok::r_paren: // #define X(A)
Chris Lattner564f4782007-07-14 22:46:43 +00002022 MI->setArgumentList(Arguments.begin(), Arguments.end());
Chris Lattnercefc7682006-07-08 08:28:12 +00002023 return false;
2024 case tok::comma: // #define X(A,
2025 break;
2026 case tok::ellipsis: // #define X(A... -> GCC extension
2027 // Diagnose extension.
2028 Diag(Tok, diag::ext_named_variadic_macro);
2029
2030 // Lex the token after the identifier.
2031 LexUnexpandedToken(Tok);
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002032 if (Tok.isNot(tok::r_paren)) {
Chris Lattnercefc7682006-07-08 08:28:12 +00002033 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);
2034 return true;
2035 }
2036
2037 MI->setIsGNUVarargs();
Chris Lattner564f4782007-07-14 22:46:43 +00002038 MI->setArgumentList(Arguments.begin(), Arguments.end());
Chris Lattnercefc7682006-07-08 08:28:12 +00002039 return false;
2040 }
2041 }
2042 }
2043}
2044
Chris Lattner22eb9722006-06-18 05:43:12 +00002045/// HandleDefineDirective - Implements #define. This consumes the entire macro
Chris Lattner81278c62006-10-14 19:03:49 +00002046/// line then lets the caller lex the next real token. If 'isTargetSpecific' is
2047/// true, then this is a "#define_target", otherwise this is a "#define".
Chris Lattner22eb9722006-06-18 05:43:12 +00002048///
Chris Lattner146762e2007-07-20 16:59:19 +00002049void Preprocessor::HandleDefineDirective(Token &DefineTok,
Chris Lattner81278c62006-10-14 19:03:49 +00002050 bool isTargetSpecific) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002051 ++NumDefined;
Chris Lattner371ac8a2006-07-04 07:11:10 +00002052
Chris Lattner146762e2007-07-20 16:59:19 +00002053 Token MacroNameTok;
Chris Lattnere8eef322006-07-08 07:01:00 +00002054 ReadMacroName(MacroNameTok, 1);
Chris Lattner22eb9722006-06-18 05:43:12 +00002055
2056 // Error reading macro name? If so, diagnostic already issued.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002057 if (MacroNameTok.is(tok::eom))
Chris Lattnercb283342006-06-18 06:48:37 +00002058 return;
Chris Lattnerf40fe992007-07-14 22:11:41 +00002059
Chris Lattner457fc152006-07-29 06:30:25 +00002060 // If we are supposed to keep comments in #defines, reenable comment saving
2061 // mode.
Chris Lattnerb352e3e2006-11-21 06:17:10 +00002062 CurLexer->KeepCommentMode = KeepMacroComments;
Chris Lattner457fc152006-07-29 06:30:25 +00002063
Chris Lattner063400e2006-10-14 19:54:15 +00002064 // Create the new macro.
Chris Lattner50b497e2006-06-18 16:32:35 +00002065 MacroInfo *MI = new MacroInfo(MacroNameTok.getLocation());
Chris Lattner81278c62006-10-14 19:03:49 +00002066 if (isTargetSpecific) MI->setIsTargetSpecific();
Chris Lattner22eb9722006-06-18 05:43:12 +00002067
Chris Lattner063400e2006-10-14 19:54:15 +00002068 // If the identifier is an 'other target' macro, clear this bit.
2069 MacroNameTok.getIdentifierInfo()->setIsOtherTargetMacro(false);
2070
2071
Chris Lattner146762e2007-07-20 16:59:19 +00002072 Token Tok;
Chris Lattnercb283342006-06-18 06:48:37 +00002073 LexUnexpandedToken(Tok);
Chris Lattner22eb9722006-06-18 05:43:12 +00002074
Chris Lattner6e0d42c2006-07-08 20:32:52 +00002075 // If this is a function-like macro definition, parse the argument list,
2076 // marking each of the identifiers as being used as macro arguments. Also,
2077 // check other constraints on the first token of the macro body.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002078 if (Tok.is(tok::eom)) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002079 // If there is no body to this macro, we have no special handling here.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002080 } else if (Tok.is(tok::l_paren) && !Tok.hasLeadingSpace()) {
Chris Lattnercefc7682006-07-08 08:28:12 +00002081 // This is a function-like macro definition. Read the argument list.
2082 MI->setIsFunctionLike();
2083 if (ReadMacroDefinitionArgList(MI)) {
Chris Lattner6e0d42c2006-07-08 20:32:52 +00002084 // Forget about MI.
Chris Lattnercefc7682006-07-08 08:28:12 +00002085 delete MI;
Chris Lattner6e0d42c2006-07-08 20:32:52 +00002086 // Throw away the rest of the line.
Chris Lattnercefc7682006-07-08 08:28:12 +00002087 if (CurLexer->ParsingPreprocessorDirective)
2088 DiscardUntilEndOfDirective();
2089 return;
2090 }
Chris Lattner22eb9722006-06-18 05:43:12 +00002091
Chris Lattner815a1f92006-07-08 20:48:04 +00002092 // Read the first token after the arg list for down below.
2093 LexUnexpandedToken(Tok);
Chris Lattner22eb9722006-06-18 05:43:12 +00002094 } else if (!Tok.hasLeadingSpace()) {
2095 // C99 requires whitespace between the macro definition and the body. Emit
2096 // a diagnostic for something like "#define X+".
2097 if (Features.C99) {
Chris Lattnercb283342006-06-18 06:48:37 +00002098 Diag(Tok, diag::ext_c99_whitespace_required_after_macro_name);
Chris Lattner22eb9722006-06-18 05:43:12 +00002099 } else {
2100 // FIXME: C90/C++ do not get this diagnostic, but it does get a similar
2101 // one in some cases!
2102 }
2103 } else {
2104 // This is a normal token with leading space. Clear the leading space
2105 // marker on the first token to get proper expansion.
Chris Lattner146762e2007-07-20 16:59:19 +00002106 Tok.clearFlag(Token::LeadingSpace);
Chris Lattner22eb9722006-06-18 05:43:12 +00002107 }
2108
Chris Lattner7e374832006-07-29 03:46:57 +00002109 // If this is a definition of a variadic C99 function-like macro, not using
2110 // the GNU named varargs extension, enabled __VA_ARGS__.
2111
2112 // "Poison" __VA_ARGS__, which can only appear in the expansion of a macro.
2113 // This gets unpoisoned where it is allowed.
2114 assert(Ident__VA_ARGS__->isPoisoned() && "__VA_ARGS__ should be poisoned!");
2115 if (MI->isC99Varargs())
2116 Ident__VA_ARGS__->setIsPoisoned(false);
2117
Chris Lattner22eb9722006-06-18 05:43:12 +00002118 // Read the rest of the macro body.
Chris Lattnera3834342007-07-14 21:54:03 +00002119 if (MI->isObjectLike()) {
2120 // Object-like macros are very simple, just read their body.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002121 while (Tok.isNot(tok::eom)) {
Chris Lattnera3834342007-07-14 21:54:03 +00002122 MI->AddTokenToBody(Tok);
Chris Lattner815a1f92006-07-08 20:48:04 +00002123 // Get the next token of the macro.
2124 LexUnexpandedToken(Tok);
Chris Lattner815a1f92006-07-08 20:48:04 +00002125 }
Chris Lattner22eb9722006-06-18 05:43:12 +00002126
Chris Lattnera3834342007-07-14 21:54:03 +00002127 } else {
2128 // Otherwise, read the body of a function-like macro. This has to validate
2129 // the # (stringize) operator.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002130 while (Tok.isNot(tok::eom)) {
Chris Lattnera3834342007-07-14 21:54:03 +00002131 MI->AddTokenToBody(Tok);
Chris Lattnerbff18d52006-07-06 04:49:18 +00002132
Chris Lattnera3834342007-07-14 21:54:03 +00002133 // Check C99 6.10.3.2p1: ensure that # operators are followed by macro
2134 // parameters in function-like macro expansions.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002135 if (Tok.isNot(tok::hash)) {
Chris Lattnera3834342007-07-14 21:54:03 +00002136 // Get the next token of the macro.
2137 LexUnexpandedToken(Tok);
2138 continue;
2139 }
2140
2141 // Get the next token of the macro.
2142 LexUnexpandedToken(Tok);
2143
2144 // Not a macro arg identifier?
2145 if (!Tok.getIdentifierInfo() ||
2146 MI->getArgumentNum(Tok.getIdentifierInfo()) == -1) {
2147 Diag(Tok, diag::err_pp_stringize_not_parameter);
2148 delete MI;
2149
2150 // Disable __VA_ARGS__ again.
2151 Ident__VA_ARGS__->setIsPoisoned(true);
2152 return;
2153 }
2154
2155 // Things look ok, add the param name token to the macro.
2156 MI->AddTokenToBody(Tok);
2157
2158 // Get the next token of the macro.
2159 LexUnexpandedToken(Tok);
2160 }
Chris Lattner22eb9722006-06-18 05:43:12 +00002161 }
Chris Lattner7e374832006-07-29 03:46:57 +00002162
Chris Lattnerf40fe992007-07-14 22:11:41 +00002163
Chris Lattner7e374832006-07-29 03:46:57 +00002164 // Disable __VA_ARGS__ again.
2165 Ident__VA_ARGS__->setIsPoisoned(true);
Chris Lattnerbff18d52006-07-06 04:49:18 +00002166
Chris Lattnerbff18d52006-07-06 04:49:18 +00002167 // Check that there is no paste (##) operator at the begining or end of the
2168 // replacement list.
Chris Lattner78186052006-07-09 00:45:31 +00002169 unsigned NumTokens = MI->getNumTokens();
Chris Lattnerbff18d52006-07-06 04:49:18 +00002170 if (NumTokens != 0) {
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002171 if (MI->getReplacementToken(0).is(tok::hashhash)) {
Chris Lattner815a1f92006-07-08 20:48:04 +00002172 Diag(MI->getReplacementToken(0), diag::err_paste_at_start);
Chris Lattnerbff18d52006-07-06 04:49:18 +00002173 delete MI;
Chris Lattner815a1f92006-07-08 20:48:04 +00002174 return;
Chris Lattnerbff18d52006-07-06 04:49:18 +00002175 }
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002176 if (MI->getReplacementToken(NumTokens-1).is(tok::hashhash)) {
Chris Lattner815a1f92006-07-08 20:48:04 +00002177 Diag(MI->getReplacementToken(NumTokens-1), diag::err_paste_at_end);
Chris Lattnerbff18d52006-07-06 04:49:18 +00002178 delete MI;
Chris Lattner815a1f92006-07-08 20:48:04 +00002179 return;
Chris Lattnerbff18d52006-07-06 04:49:18 +00002180 }
2181 }
2182
Chris Lattner13044d92006-07-03 05:16:44 +00002183 // If this is the primary source file, remember that this macro hasn't been
2184 // used yet.
2185 if (isInPrimaryFile())
2186 MI->setIsUsed(false);
2187
Chris Lattner22eb9722006-06-18 05:43:12 +00002188 // Finally, if this identifier already had a macro defined for it, verify that
2189 // the macro bodies are identical and free the old definition.
Chris Lattnerc43ddc82007-10-07 08:44:20 +00002190 if (MacroInfo *OtherMI = getMacroInfo(MacroNameTok.getIdentifierInfo())) {
Chris Lattner13044d92006-07-03 05:16:44 +00002191 if (!OtherMI->isUsed())
2192 Diag(OtherMI->getDefinitionLoc(), diag::pp_macro_not_used);
2193
Chris Lattner22eb9722006-06-18 05:43:12 +00002194 // Macros must be identical. This means all tokes and whitespace separation
Chris Lattner21284df2006-07-08 07:16:08 +00002195 // must be the same. C99 6.10.3.2.
2196 if (!MI->isIdenticalTo(*OtherMI, *this)) {
Chris Lattnere8eef322006-07-08 07:01:00 +00002197 Diag(MI->getDefinitionLoc(), diag::ext_pp_macro_redef,
2198 MacroNameTok.getIdentifierInfo()->getName());
2199 Diag(OtherMI->getDefinitionLoc(), diag::ext_pp_macro_redef2);
2200 }
Chris Lattner22eb9722006-06-18 05:43:12 +00002201 delete OtherMI;
2202 }
2203
Chris Lattnerc43ddc82007-10-07 08:44:20 +00002204 setMacroInfo(MacroNameTok.getIdentifierInfo(), MI);
Chris Lattner22eb9722006-06-18 05:43:12 +00002205}
2206
Chris Lattner063400e2006-10-14 19:54:15 +00002207/// HandleDefineOtherTargetDirective - Implements #define_other_target.
Chris Lattner146762e2007-07-20 16:59:19 +00002208void Preprocessor::HandleDefineOtherTargetDirective(Token &Tok) {
2209 Token MacroNameTok;
Chris Lattner063400e2006-10-14 19:54:15 +00002210 ReadMacroName(MacroNameTok, 1);
2211
2212 // Error reading macro name? If so, diagnostic already issued.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002213 if (MacroNameTok.is(tok::eom))
Chris Lattner063400e2006-10-14 19:54:15 +00002214 return;
2215
2216 // Check to see if this is the last token on the #undef line.
2217 CheckEndOfDirective("#define_other_target");
2218
2219 // If there is already a macro defined by this name, turn it into a
2220 // target-specific define.
Chris Lattnerc43ddc82007-10-07 08:44:20 +00002221 if (MacroInfo *MI = getMacroInfo(MacroNameTok.getIdentifierInfo())) {
Chris Lattner063400e2006-10-14 19:54:15 +00002222 MI->setIsTargetSpecific(true);
2223 return;
2224 }
2225
2226 // Mark the identifier as being a macro on some other target.
2227 MacroNameTok.getIdentifierInfo()->setIsOtherTargetMacro();
2228}
2229
Chris Lattner22eb9722006-06-18 05:43:12 +00002230
2231/// HandleUndefDirective - Implements #undef.
2232///
Chris Lattner146762e2007-07-20 16:59:19 +00002233void Preprocessor::HandleUndefDirective(Token &UndefTok) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002234 ++NumUndefined;
Chris Lattner371ac8a2006-07-04 07:11:10 +00002235
Chris Lattner146762e2007-07-20 16:59:19 +00002236 Token MacroNameTok;
Chris Lattnere8eef322006-07-08 07:01:00 +00002237 ReadMacroName(MacroNameTok, 2);
Chris Lattner22eb9722006-06-18 05:43:12 +00002238
2239 // Error reading macro name? If so, diagnostic already issued.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002240 if (MacroNameTok.is(tok::eom))
Chris Lattnercb283342006-06-18 06:48:37 +00002241 return;
Chris Lattner22eb9722006-06-18 05:43:12 +00002242
2243 // Check to see if this is the last token on the #undef line.
Chris Lattnercb283342006-06-18 06:48:37 +00002244 CheckEndOfDirective("#undef");
Chris Lattner22eb9722006-06-18 05:43:12 +00002245
2246 // Okay, we finally have a valid identifier to undef.
Chris Lattnerc43ddc82007-10-07 08:44:20 +00002247 MacroInfo *MI = getMacroInfo(MacroNameTok.getIdentifierInfo());
Chris Lattner22eb9722006-06-18 05:43:12 +00002248
Chris Lattner063400e2006-10-14 19:54:15 +00002249 // #undef untaints an identifier if it were marked by define_other_target.
2250 MacroNameTok.getIdentifierInfo()->setIsOtherTargetMacro(false);
2251
Chris Lattner22eb9722006-06-18 05:43:12 +00002252 // If the macro is not defined, this is a noop undef, just return.
Chris Lattnercb283342006-06-18 06:48:37 +00002253 if (MI == 0) return;
Chris Lattner677757a2006-06-28 05:26:32 +00002254
Chris Lattner13044d92006-07-03 05:16:44 +00002255 if (!MI->isUsed())
2256 Diag(MI->getDefinitionLoc(), diag::pp_macro_not_used);
Chris Lattner22eb9722006-06-18 05:43:12 +00002257
2258 // Free macro definition.
2259 delete MI;
Chris Lattnerc43ddc82007-10-07 08:44:20 +00002260 setMacroInfo(MacroNameTok.getIdentifierInfo(), 0);
Chris Lattner22eb9722006-06-18 05:43:12 +00002261}
2262
2263
Chris Lattnerb8761832006-06-24 21:31:03 +00002264//===----------------------------------------------------------------------===//
2265// Preprocessor Conditional Directive Handling.
2266//===----------------------------------------------------------------------===//
2267
Chris Lattner22eb9722006-06-18 05:43:12 +00002268/// HandleIfdefDirective - Implements the #ifdef/#ifndef directive. isIfndef is
Chris Lattner371ac8a2006-07-04 07:11:10 +00002269/// true when this is a #ifndef directive. ReadAnyTokensBeforeDirective is true
2270/// if any tokens have been returned or pp-directives activated before this
2271/// #ifndef has been lexed.
Chris Lattner22eb9722006-06-18 05:43:12 +00002272///
Chris Lattner146762e2007-07-20 16:59:19 +00002273void Preprocessor::HandleIfdefDirective(Token &Result, bool isIfndef,
Chris Lattner371ac8a2006-07-04 07:11:10 +00002274 bool ReadAnyTokensBeforeDirective) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002275 ++NumIf;
Chris Lattner146762e2007-07-20 16:59:19 +00002276 Token DirectiveTok = Result;
Chris Lattner371ac8a2006-07-04 07:11:10 +00002277
Chris Lattner146762e2007-07-20 16:59:19 +00002278 Token MacroNameTok;
Chris Lattnercb283342006-06-18 06:48:37 +00002279 ReadMacroName(MacroNameTok);
Chris Lattner22eb9722006-06-18 05:43:12 +00002280
2281 // Error reading macro name? If so, diagnostic already issued.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002282 if (MacroNameTok.is(tok::eom)) {
Chris Lattnerd05e44e2007-09-24 05:14:57 +00002283 // Skip code until we get to #endif. This helps with recovery by not
2284 // emitting an error when the #endif is reached.
2285 SkipExcludedConditionalBlock(DirectiveTok.getLocation(),
2286 /*Foundnonskip*/false, /*FoundElse*/false);
Chris Lattnercb283342006-06-18 06:48:37 +00002287 return;
Chris Lattnerd05e44e2007-09-24 05:14:57 +00002288 }
Chris Lattner22eb9722006-06-18 05:43:12 +00002289
2290 // Check to see if this is the last token on the #if[n]def line.
Chris Lattner371ac8a2006-07-04 07:11:10 +00002291 CheckEndOfDirective(isIfndef ? "#ifndef" : "#ifdef");
2292
2293 // If the start of a top-level #ifdef, inform MIOpt.
2294 if (!ReadAnyTokensBeforeDirective &&
2295 CurLexer->getConditionalStackDepth() == 0) {
2296 assert(isIfndef && "#ifdef shouldn't reach here");
2297 CurLexer->MIOpt.EnterTopLevelIFNDEF(MacroNameTok.getIdentifierInfo());
2298 }
Chris Lattner22eb9722006-06-18 05:43:12 +00002299
Chris Lattner063400e2006-10-14 19:54:15 +00002300 IdentifierInfo *MII = MacroNameTok.getIdentifierInfo();
Chris Lattnerc43ddc82007-10-07 08:44:20 +00002301 MacroInfo *MI = getMacroInfo(MII);
Chris Lattnera78a97e2006-07-03 05:42:18 +00002302
Chris Lattner81278c62006-10-14 19:03:49 +00002303 // If there is a macro, process it.
2304 if (MI) {
2305 // Mark it used.
2306 MI->setIsUsed(true);
2307
2308 // If this is the first use of a target-specific macro, warn about it.
2309 if (MI->isTargetSpecific()) {
2310 MI->setIsTargetSpecific(false); // Don't warn on second use.
2311 getTargetInfo().DiagnoseNonPortability(MacroNameTok.getLocation(),
2312 diag::port_target_macro_use);
2313 }
Chris Lattner063400e2006-10-14 19:54:15 +00002314 } else {
2315 // Use of a target-specific macro for some other target? If so, warn.
2316 if (MII->isOtherTargetMacro()) {
2317 MII->setIsOtherTargetMacro(false); // Don't warn on second use.
2318 getTargetInfo().DiagnoseNonPortability(MacroNameTok.getLocation(),
2319 diag::port_target_macro_use);
2320 }
Chris Lattner81278c62006-10-14 19:03:49 +00002321 }
Chris Lattnera78a97e2006-07-03 05:42:18 +00002322
Chris Lattner22eb9722006-06-18 05:43:12 +00002323 // Should we include the stuff contained by this directive?
Chris Lattnera78a97e2006-07-03 05:42:18 +00002324 if (!MI == isIfndef) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002325 // Yes, remember that we are inside a conditional, then lex the next token.
Chris Lattner50b497e2006-06-18 16:32:35 +00002326 CurLexer->pushConditionalLevel(DirectiveTok.getLocation(), /*wasskip*/false,
Chris Lattner22eb9722006-06-18 05:43:12 +00002327 /*foundnonskip*/true, /*foundelse*/false);
Chris Lattner22eb9722006-06-18 05:43:12 +00002328 } else {
2329 // No, skip the contents of this block and return the first token after it.
Chris Lattner50b497e2006-06-18 16:32:35 +00002330 SkipExcludedConditionalBlock(DirectiveTok.getLocation(),
Chris Lattnercb283342006-06-18 06:48:37 +00002331 /*Foundnonskip*/false,
2332 /*FoundElse*/false);
Chris Lattner22eb9722006-06-18 05:43:12 +00002333 }
2334}
2335
2336/// HandleIfDirective - Implements the #if directive.
2337///
Chris Lattner146762e2007-07-20 16:59:19 +00002338void Preprocessor::HandleIfDirective(Token &IfToken,
Chris Lattnera8654ca2006-07-04 17:42:08 +00002339 bool ReadAnyTokensBeforeDirective) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002340 ++NumIf;
Chris Lattner371ac8a2006-07-04 07:11:10 +00002341
Chris Lattner371ac8a2006-07-04 07:11:10 +00002342 // Parse and evaluation the conditional expression.
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00002343 IdentifierInfo *IfNDefMacro = 0;
Chris Lattnera8654ca2006-07-04 17:42:08 +00002344 bool ConditionalTrue = EvaluateDirectiveExpression(IfNDefMacro);
Chris Lattner22eb9722006-06-18 05:43:12 +00002345
2346 // Should we include the stuff contained by this directive?
2347 if (ConditionalTrue) {
Chris Lattnera8654ca2006-07-04 17:42:08 +00002348 // If this condition is equivalent to #ifndef X, and if this is the first
2349 // directive seen, handle it for the multiple-include optimization.
2350 if (!ReadAnyTokensBeforeDirective &&
2351 CurLexer->getConditionalStackDepth() == 0 && IfNDefMacro)
2352 CurLexer->MIOpt.EnterTopLevelIFNDEF(IfNDefMacro);
2353
Chris Lattner22eb9722006-06-18 05:43:12 +00002354 // Yes, remember that we are inside a conditional, then lex the next token.
Chris Lattner50b497e2006-06-18 16:32:35 +00002355 CurLexer->pushConditionalLevel(IfToken.getLocation(), /*wasskip*/false,
Chris Lattner22eb9722006-06-18 05:43:12 +00002356 /*foundnonskip*/true, /*foundelse*/false);
Chris Lattner22eb9722006-06-18 05:43:12 +00002357 } else {
2358 // No, skip the contents of this block and return the first token after it.
Chris Lattner50b497e2006-06-18 16:32:35 +00002359 SkipExcludedConditionalBlock(IfToken.getLocation(), /*Foundnonskip*/false,
Chris Lattnercb283342006-06-18 06:48:37 +00002360 /*FoundElse*/false);
Chris Lattner22eb9722006-06-18 05:43:12 +00002361 }
2362}
2363
2364/// HandleEndifDirective - Implements the #endif directive.
2365///
Chris Lattner146762e2007-07-20 16:59:19 +00002366void Preprocessor::HandleEndifDirective(Token &EndifToken) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002367 ++NumEndif;
Chris Lattner371ac8a2006-07-04 07:11:10 +00002368
Chris Lattner22eb9722006-06-18 05:43:12 +00002369 // Check that this is the whole directive.
Chris Lattnercb283342006-06-18 06:48:37 +00002370 CheckEndOfDirective("#endif");
Chris Lattner22eb9722006-06-18 05:43:12 +00002371
2372 PPConditionalInfo CondInfo;
2373 if (CurLexer->popConditionalLevel(CondInfo)) {
2374 // No conditionals on the stack: this is an #endif without an #if.
2375 return Diag(EndifToken, diag::err_pp_endif_without_if);
2376 }
2377
Chris Lattner371ac8a2006-07-04 07:11:10 +00002378 // If this the end of a top-level #endif, inform MIOpt.
2379 if (CurLexer->getConditionalStackDepth() == 0)
2380 CurLexer->MIOpt.ExitTopLevelConditional();
2381
Chris Lattner538d7f32006-07-20 04:31:52 +00002382 assert(!CondInfo.WasSkipping && !CurLexer->LexingRawMode &&
Chris Lattner22eb9722006-06-18 05:43:12 +00002383 "This code should only be reachable in the non-skipping case!");
Chris Lattner22eb9722006-06-18 05:43:12 +00002384}
2385
2386
Chris Lattner146762e2007-07-20 16:59:19 +00002387void Preprocessor::HandleElseDirective(Token &Result) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002388 ++NumElse;
Chris Lattner371ac8a2006-07-04 07:11:10 +00002389
Chris Lattner22eb9722006-06-18 05:43:12 +00002390 // #else directive in a non-skipping conditional... start skipping.
Chris Lattnercb283342006-06-18 06:48:37 +00002391 CheckEndOfDirective("#else");
Chris Lattner22eb9722006-06-18 05:43:12 +00002392
2393 PPConditionalInfo CI;
2394 if (CurLexer->popConditionalLevel(CI))
2395 return Diag(Result, diag::pp_err_else_without_if);
Chris Lattner371ac8a2006-07-04 07:11:10 +00002396
2397 // If this is a top-level #else, inform the MIOpt.
2398 if (CurLexer->getConditionalStackDepth() == 0)
2399 CurLexer->MIOpt.FoundTopLevelElse();
Chris Lattner22eb9722006-06-18 05:43:12 +00002400
2401 // If this is a #else with a #else before it, report the error.
Chris Lattnercb283342006-06-18 06:48:37 +00002402 if (CI.FoundElse) Diag(Result, diag::pp_err_else_after_else);
Chris Lattner22eb9722006-06-18 05:43:12 +00002403
2404 // Finally, skip the rest of the contents of this block and return the first
2405 // token after it.
2406 return SkipExcludedConditionalBlock(CI.IfLoc, /*Foundnonskip*/true,
2407 /*FoundElse*/true);
2408}
2409
Chris Lattner146762e2007-07-20 16:59:19 +00002410void Preprocessor::HandleElifDirective(Token &ElifToken) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002411 ++NumElse;
Chris Lattner371ac8a2006-07-04 07:11:10 +00002412
Chris Lattner22eb9722006-06-18 05:43:12 +00002413 // #elif directive in a non-skipping conditional... start skipping.
2414 // We don't care what the condition is, because we will always skip it (since
2415 // the block immediately before it was included).
Chris Lattnercb283342006-06-18 06:48:37 +00002416 DiscardUntilEndOfDirective();
Chris Lattner22eb9722006-06-18 05:43:12 +00002417
2418 PPConditionalInfo CI;
2419 if (CurLexer->popConditionalLevel(CI))
2420 return Diag(ElifToken, diag::pp_err_elif_without_if);
2421
Chris Lattner371ac8a2006-07-04 07:11:10 +00002422 // If this is a top-level #elif, inform the MIOpt.
2423 if (CurLexer->getConditionalStackDepth() == 0)
2424 CurLexer->MIOpt.FoundTopLevelElse();
2425
Chris Lattner22eb9722006-06-18 05:43:12 +00002426 // If this is a #elif with a #else before it, report the error.
Chris Lattnercb283342006-06-18 06:48:37 +00002427 if (CI.FoundElse) Diag(ElifToken, diag::pp_err_elif_after_else);
Chris Lattner22eb9722006-06-18 05:43:12 +00002428
2429 // Finally, skip the rest of the contents of this block and return the first
2430 // token after it.
2431 return SkipExcludedConditionalBlock(CI.IfLoc, /*Foundnonskip*/true,
2432 /*FoundElse*/CI.FoundElse);
2433}
Chris Lattnerb8761832006-06-24 21:31:03 +00002434