blob: cb5a350758ae2cfeceefb89192ad6c55e1643722 [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//
Chris Lattner5b12ab82007-12-29 19:59:25 +00005// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
Chris Lattner22eb9722006-06-18 05:43:12 +00007//
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"
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +000040#include "llvm/Support/Streams.h"
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) {
Ted Kremenek1daa3cf2007-12-12 22:39:36 +0000123 Diags.Report(getFullLoc(Loc), DiagID);
Chris Lattner36982e42007-05-16 17:49:37 +0000124}
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) {
Ted Kremenek1daa3cf2007-12-12 22:39:36 +0000128 Diags.Report(getFullLoc(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 {
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000132 llvm::cerr << tok::getTokenName(Tok.getKind()) << " '"
133 << getSpelling(Tok) << "'";
Chris Lattnerd01e2912006-06-18 16:22:51 +0000134
135 if (!DumpFlags) return;
Chris Lattner615315f2007-12-09 20:31:55 +0000136
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000137 llvm::cerr << "\t";
Chris Lattnerd01e2912006-06-18 16:22:51 +0000138 if (Tok.isAtStartOfLine())
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000139 llvm::cerr << " [StartOfLine]";
Chris Lattnerd01e2912006-06-18 16:22:51 +0000140 if (Tok.hasLeadingSpace())
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000141 llvm::cerr << " [LeadingSpace]";
Chris Lattner6e4bf522006-07-27 06:59:25 +0000142 if (Tok.isExpandDisabled())
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000143 llvm::cerr << " [ExpandDisabled]";
Chris Lattnerd01e2912006-06-18 16:22:51 +0000144 if (Tok.needsCleaning()) {
Chris Lattner50b497e2006-06-18 16:32:35 +0000145 const char *Start = SourceMgr.getCharacterData(Tok.getLocation());
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000146 llvm::cerr << " [UnClean='" << std::string(Start, Start+Tok.getLength())
147 << "']";
Chris Lattnerd01e2912006-06-18 16:22:51 +0000148 }
Chris Lattner615315f2007-12-09 20:31:55 +0000149
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000150 llvm::cerr << "\tLoc=<";
Chris Lattner615315f2007-12-09 20:31:55 +0000151 DumpLocation(Tok.getLocation());
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000152 llvm::cerr << ">";
Chris Lattner615315f2007-12-09 20:31:55 +0000153}
154
155void Preprocessor::DumpLocation(SourceLocation Loc) const {
156 SourceLocation LogLoc = SourceMgr.getLogicalLoc(Loc);
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000157 llvm::cerr << SourceMgr.getSourceName(LogLoc) << ':'
158 << SourceMgr.getLineNumber(LogLoc) << ':'
159 << SourceMgr.getLineNumber(LogLoc);
Chris Lattner615315f2007-12-09 20:31:55 +0000160
161 SourceLocation PhysLoc = SourceMgr.getPhysicalLoc(Loc);
162 if (PhysLoc != LogLoc) {
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000163 llvm::cerr << " <PhysLoc=";
Chris Lattner615315f2007-12-09 20:31:55 +0000164 DumpLocation(PhysLoc);
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000165 llvm::cerr << ">";
Chris Lattner615315f2007-12-09 20:31:55 +0000166 }
Chris Lattnerd01e2912006-06-18 16:22:51 +0000167}
168
169void Preprocessor::DumpMacro(const MacroInfo &MI) const {
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000170 llvm::cerr << "MACRO: ";
Chris Lattnerd01e2912006-06-18 16:22:51 +0000171 for (unsigned i = 0, e = MI.getNumTokens(); i != e; ++i) {
172 DumpToken(MI.getReplacementToken(i));
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000173 llvm::cerr << " ";
Chris Lattnerd01e2912006-06-18 16:22:51 +0000174 }
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000175 llvm::cerr << "\n";
Chris Lattnerd01e2912006-06-18 16:22:51 +0000176}
177
Chris Lattner22eb9722006-06-18 05:43:12 +0000178void Preprocessor::PrintStats() {
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000179 llvm::cerr << "\n*** Preprocessor Stats:\n";
180 llvm::cerr << NumDirectives << " directives found:\n";
181 llvm::cerr << " " << NumDefined << " #define.\n";
182 llvm::cerr << " " << NumUndefined << " #undef.\n";
183 llvm::cerr << " #include/#include_next/#import:\n";
184 llvm::cerr << " " << NumEnteredSourceFiles << " source files entered.\n";
185 llvm::cerr << " " << MaxIncludeStackDepth << " max include stack depth\n";
186 llvm::cerr << " " << NumIf << " #if/#ifndef/#ifdef.\n";
187 llvm::cerr << " " << NumElse << " #else/#elif.\n";
188 llvm::cerr << " " << NumEndif << " #endif.\n";
189 llvm::cerr << " " << NumPragma << " #pragma.\n";
190 llvm::cerr << NumSkipped << " #if/#ifndef#ifdef regions skipped\n";
Chris Lattner22eb9722006-06-18 05:43:12 +0000191
Ted Kremeneka0a3e9b2008-01-14 16:44:48 +0000192 llvm::cerr << NumMacroExpanded << "/" << NumFnMacroExpanded << "/"
193 << NumBuiltinMacroExpanded << " obj/fn/builtin macros expanded, "
194 << NumFastMacroExpanded << " on the fast path.\n";
195 llvm::cerr << (NumFastTokenPaste+NumTokenPaste)
196 << " token paste (##) operations performed, "
197 << NumFastTokenPaste << " on the fast path.\n";
Chris Lattner22eb9722006-06-18 05:43:12 +0000198}
199
200//===----------------------------------------------------------------------===//
Chris Lattnerd01e2912006-06-18 16:22:51 +0000201// Token Spelling
202//===----------------------------------------------------------------------===//
203
204
205/// getSpelling() - Return the 'spelling' of this token. The spelling of a
206/// token are the characters used to represent the token in the source file
207/// after trigraph expansion and escaped-newline folding. In particular, this
208/// wants to get the true, uncanonicalized, spelling of things like digraphs
209/// UCNs, etc.
Chris Lattner146762e2007-07-20 16:59:19 +0000210std::string Preprocessor::getSpelling(const Token &Tok) const {
Chris Lattnerd01e2912006-06-18 16:22:51 +0000211 assert((int)Tok.getLength() >= 0 && "Token character range is bogus!");
212
213 // If this token contains nothing interesting, return it directly.
Chris Lattner50b497e2006-06-18 16:32:35 +0000214 const char *TokStart = SourceMgr.getCharacterData(Tok.getLocation());
Chris Lattnerd01e2912006-06-18 16:22:51 +0000215 if (!Tok.needsCleaning())
216 return std::string(TokStart, TokStart+Tok.getLength());
217
Chris Lattnerd01e2912006-06-18 16:22:51 +0000218 std::string Result;
219 Result.reserve(Tok.getLength());
220
Chris Lattneref9eae12006-07-04 22:33:12 +0000221 // Otherwise, hard case, relex the characters into the string.
Chris Lattnerd01e2912006-06-18 16:22:51 +0000222 for (const char *Ptr = TokStart, *End = TokStart+Tok.getLength();
223 Ptr != End; ) {
224 unsigned CharSize;
225 Result.push_back(Lexer::getCharAndSizeNoWarn(Ptr, CharSize, Features));
226 Ptr += CharSize;
227 }
228 assert(Result.size() != unsigned(Tok.getLength()) &&
229 "NeedsCleaning flag set on something that didn't need cleaning!");
230 return Result;
231}
232
233/// getSpelling - This method is used to get the spelling of a token into a
234/// preallocated buffer, instead of as an std::string. The caller is required
235/// to allocate enough space for the token, which is guaranteed to be at least
236/// Tok.getLength() bytes long. The actual length of the token is returned.
Chris Lattneref9eae12006-07-04 22:33:12 +0000237///
238/// Note that this method may do two possible things: it may either fill in
239/// the buffer specified with characters, or it may *change the input pointer*
240/// to point to a constant buffer with the data already in it (avoiding a
241/// copy). The caller is not allowed to modify the returned buffer pointer
242/// if an internal buffer is returned.
Chris Lattner146762e2007-07-20 16:59:19 +0000243unsigned Preprocessor::getSpelling(const Token &Tok,
Chris Lattneref9eae12006-07-04 22:33:12 +0000244 const char *&Buffer) const {
Chris Lattnerd01e2912006-06-18 16:22:51 +0000245 assert((int)Tok.getLength() >= 0 && "Token character range is bogus!");
246
Chris Lattnerd3a15f72006-07-04 23:01:03 +0000247 // If this token is an identifier, just return the string from the identifier
248 // table, which is very quick.
249 if (const IdentifierInfo *II = Tok.getIdentifierInfo()) {
250 Buffer = II->getName();
Chris Lattner32e6d642007-07-22 22:50:09 +0000251
252 // Return the length of the token. If the token needed cleaning, don't
253 // include the size of the newlines or trigraphs in it.
254 if (!Tok.needsCleaning())
255 return Tok.getLength();
256 else
257 return strlen(Buffer);
Chris Lattnerd3a15f72006-07-04 23:01:03 +0000258 }
259
260 // Otherwise, compute the start of the token in the input lexer buffer.
Chris Lattner50b497e2006-06-18 16:32:35 +0000261 const char *TokStart = SourceMgr.getCharacterData(Tok.getLocation());
Chris Lattnerd01e2912006-06-18 16:22:51 +0000262
263 // If this token contains nothing interesting, return it directly.
264 if (!Tok.needsCleaning()) {
Chris Lattneref9eae12006-07-04 22:33:12 +0000265 Buffer = TokStart;
266 return Tok.getLength();
Chris Lattnerd01e2912006-06-18 16:22:51 +0000267 }
268 // Otherwise, hard case, relex the characters into the string.
Chris Lattneref9eae12006-07-04 22:33:12 +0000269 char *OutBuf = const_cast<char*>(Buffer);
Chris Lattnerd01e2912006-06-18 16:22:51 +0000270 for (const char *Ptr = TokStart, *End = TokStart+Tok.getLength();
271 Ptr != End; ) {
272 unsigned CharSize;
273 *OutBuf++ = Lexer::getCharAndSizeNoWarn(Ptr, CharSize, Features);
274 Ptr += CharSize;
275 }
276 assert(unsigned(OutBuf-Buffer) != Tok.getLength() &&
277 "NeedsCleaning flag set on something that didn't need cleaning!");
278
279 return OutBuf-Buffer;
280}
281
Chris Lattnerb94ec7b2006-07-14 06:54:10 +0000282
283/// CreateString - Plop the specified string into a scratch buffer and return a
284/// location for it. If specified, the source location provides a source
285/// location for the token.
286SourceLocation Preprocessor::
287CreateString(const char *Buf, unsigned Len, SourceLocation SLoc) {
288 if (SLoc.isValid())
289 return ScratchBuf->getToken(Buf, Len, SLoc);
290 return ScratchBuf->getToken(Buf, Len);
291}
292
293
Chris Lattner8a7003c2007-07-16 06:48:38 +0000294/// AdvanceToTokenCharacter - Given a location that specifies the start of a
295/// token, return a new location that specifies a character within the token.
296SourceLocation Preprocessor::AdvanceToTokenCharacter(SourceLocation TokStart,
297 unsigned CharNo) {
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000298 // If they request the first char of the token, we're trivially done. If this
299 // is a macro expansion, it doesn't make sense to point to a character within
300 // the instantiation point (the name). We could point to the source
301 // character, but without also pointing to instantiation info, this is
302 // confusing.
303 if (CharNo == 0 || TokStart.isMacroID()) return TokStart;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000304
305 // Figure out how many physical characters away the specified logical
306 // character is. This needs to take into consideration newlines and
307 // trigraphs.
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000308 const char *TokPtr = SourceMgr.getCharacterData(TokStart);
309 unsigned PhysOffset = 0;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000310
311 // The usual case is that tokens don't contain anything interesting. Skip
312 // over the uninteresting characters. If a token only consists of simple
313 // chars, this method is extremely fast.
314 while (CharNo && Lexer::isObviouslySimpleCharacter(*TokPtr))
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000315 ++TokPtr, --CharNo, ++PhysOffset;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000316
317 // If we have a character that may be a trigraph or escaped newline, create a
318 // lexer to parse it correctly.
Chris Lattner8a7003c2007-07-16 06:48:38 +0000319 if (CharNo != 0) {
320 // Create a lexer starting at this token position.
Chris Lattner77e9de52007-07-20 16:52:03 +0000321 Lexer TheLexer(TokStart, *this, TokPtr);
Chris Lattner146762e2007-07-20 16:59:19 +0000322 Token Tok;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000323 // Skip over characters the remaining characters.
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000324 const char *TokStartPtr = TokPtr;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000325 for (; CharNo; --CharNo)
326 TheLexer.getAndAdvanceChar(TokPtr, Tok);
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000327
328 PhysOffset += TokPtr-TokStartPtr;
Chris Lattner8a7003c2007-07-16 06:48:38 +0000329 }
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000330
331 return TokStart.getFileLocWithOffset(PhysOffset);
Chris Lattner8a7003c2007-07-16 06:48:38 +0000332}
333
334
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000335//===----------------------------------------------------------------------===//
336// Preprocessor Initialization Methods
337//===----------------------------------------------------------------------===//
338
339// Append a #define line to Buf for Macro. Macro should be of the form XXX,
340// in which case we emit "#define XXX 1" or "XXX=Y z W" in which case we emit
341// "#define XXX Y z W". To get a #define with no value, use "XXX=".
342static void DefineBuiltinMacro(std::vector<char> &Buf, const char *Macro,
343 const char *Command = "#define ") {
344 Buf.insert(Buf.end(), Command, Command+strlen(Command));
345 if (const char *Equal = strchr(Macro, '=')) {
346 // Turn the = into ' '.
347 Buf.insert(Buf.end(), Macro, Equal);
348 Buf.push_back(' ');
349 Buf.insert(Buf.end(), Equal+1, Equal+strlen(Equal));
350 } else {
351 // Push "macroname 1".
352 Buf.insert(Buf.end(), Macro, Macro+strlen(Macro));
353 Buf.push_back(' ');
354 Buf.push_back('1');
355 }
356 Buf.push_back('\n');
357}
358
359
360static void InitializePredefinedMacros(Preprocessor &PP,
361 std::vector<char> &Buf) {
362 // FIXME: Implement magic like cpp_init_builtins for things like __STDC__
363 // and __DATE__ etc.
364#if 0
365 /* __STDC__ has the value 1 under normal circumstances.
366 However, if (a) we are in a system header, (b) the option
367 stdc_0_in_system_headers is true (set by target config), and
368 (c) we are not in strictly conforming mode, then it has the
369 value 0. (b) and (c) are already checked in cpp_init_builtins. */
370 //case BT_STDC:
371 if (cpp_in_system_header (pfile))
372 number = 0;
373 else
374 number = 1;
375 break;
376#endif
377 // These should all be defined in the preprocessor according to the
378 // current language configuration.
379 DefineBuiltinMacro(Buf, "__STDC__=1");
380 //DefineBuiltinMacro(Buf, "__ASSEMBLER__=1");
381 if (PP.getLangOptions().C99 && !PP.getLangOptions().CPlusPlus)
382 DefineBuiltinMacro(Buf, "__STDC_VERSION__=199901L");
383 else if (0) // STDC94 ?
384 DefineBuiltinMacro(Buf, "__STDC_VERSION__=199409L");
385
386 DefineBuiltinMacro(Buf, "__STDC_HOSTED__=1");
387 if (PP.getLangOptions().ObjC1)
388 DefineBuiltinMacro(Buf, "__OBJC__=1");
389 if (PP.getLangOptions().ObjC2)
390 DefineBuiltinMacro(Buf, "__OBJC2__=1");
Steve Naroff6d40db02007-10-31 18:42:27 +0000391
Chris Lattnered2a9eb2007-10-10 17:48:53 +0000392 // Add __builtin_va_list typedef.
393 {
394 const char *VAList = PP.getTargetInfo().getVAListDeclaration();
395 Buf.insert(Buf.end(), VAList, VAList+strlen(VAList));
396 Buf.push_back('\n');
397 }
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000398
399 // Get the target #defines.
400 PP.getTargetInfo().getTargetDefines(Buf);
401
402 // Compiler set macros.
403 DefineBuiltinMacro(Buf, "__APPLE_CC__=5250");
Steve Naroff68754c52007-11-10 18:06:36 +0000404 DefineBuiltinMacro(Buf, "__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__=1050");
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000405 DefineBuiltinMacro(Buf, "__GNUC_MINOR__=0");
406 DefineBuiltinMacro(Buf, "__GNUC_PATCHLEVEL__=1");
407 DefineBuiltinMacro(Buf, "__GNUC__=4");
408 DefineBuiltinMacro(Buf, "__GXX_ABI_VERSION=1002");
409 DefineBuiltinMacro(Buf, "__VERSION__=\"4.0.1 (Apple Computer, Inc. "
410 "build 5250)\"");
411
412 // Build configuration options.
413 DefineBuiltinMacro(Buf, "__DYNAMIC__=1");
414 DefineBuiltinMacro(Buf, "__FINITE_MATH_ONLY__=0");
415 DefineBuiltinMacro(Buf, "__NO_INLINE__=1");
416 DefineBuiltinMacro(Buf, "__PIC__=1");
417
418
419 if (PP.getLangOptions().CPlusPlus) {
420 DefineBuiltinMacro(Buf, "__DEPRECATED=1");
421 DefineBuiltinMacro(Buf, "__EXCEPTIONS=1");
422 DefineBuiltinMacro(Buf, "__GNUG__=4");
423 DefineBuiltinMacro(Buf, "__GXX_WEAK__=1");
424 DefineBuiltinMacro(Buf, "__cplusplus=1");
425 DefineBuiltinMacro(Buf, "__private_extern__=extern");
426 }
427
428 // FIXME: Should emit a #line directive here.
429}
430
431
432/// EnterMainSourceFile - Enter the specified FileID as the main source file,
Nate Begemanf7c3ff62008-01-07 04:01:26 +0000433/// which implicitly adds the builtin defines etc.
Ted Kremenek230bd912007-12-19 22:51:13 +0000434void Preprocessor::EnterMainSourceFile() {
435
436 unsigned MainFileID = SourceMgr.getMainFileID();
437
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000438 // Enter the main file source buffer.
439 EnterSourceFile(MainFileID, 0);
440
Chris Lattner609d4132007-11-15 19:07:47 +0000441 // Tell the header info that the main file was entered. If the file is later
442 // #imported, it won't be re-entered.
443 if (const FileEntry *FE =
444 SourceMgr.getFileEntryForLoc(SourceLocation::getFileLoc(MainFileID, 0)))
445 HeaderInfo.IncrementIncludeCount(FE);
446
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000447 std::vector<char> PrologFile;
448 PrologFile.reserve(4080);
449
450 // Install things like __POWERPC__, __GNUC__, etc into the macro table.
451 InitializePredefinedMacros(*this, PrologFile);
452
453 // Add on the predefines from the driver.
454 PrologFile.insert(PrologFile.end(), Predefines,Predefines+strlen(Predefines));
455
456 // Memory buffer must end with a null byte!
457 PrologFile.push_back(0);
458
459 // Now that we have emitted the predefined macros, #includes, etc into
460 // PrologFile, preprocess it to populate the initial preprocessor state.
461 llvm::MemoryBuffer *SB =
462 llvm::MemoryBuffer::getMemBufferCopy(&PrologFile.front(),&PrologFile.back(),
463 "<predefines>");
464 assert(SB && "Cannot fail to create predefined source buffer");
465 unsigned FileID = SourceMgr.createFileIDForMemBuffer(SB);
466 assert(FileID && "Could not create FileID for predefines?");
467
468 // Start parsing the predefines.
469 EnterSourceFile(FileID, 0);
470}
Chris Lattner8a7003c2007-07-16 06:48:38 +0000471
Chris Lattnerd01e2912006-06-18 16:22:51 +0000472//===----------------------------------------------------------------------===//
Chris Lattner22eb9722006-06-18 05:43:12 +0000473// Source File Location Methods.
474//===----------------------------------------------------------------------===//
475
Chris Lattner22eb9722006-06-18 05:43:12 +0000476/// LookupFile - Given a "foo" or <foo> reference, look up the indicated file,
477/// return null on failure. isAngled indicates whether the file reference is
478/// for system #include's or not (i.e. using <> instead of "").
Chris Lattnerb8b94f12006-10-30 05:38:06 +0000479const FileEntry *Preprocessor::LookupFile(const char *FilenameStart,
480 const char *FilenameEnd,
Chris Lattnerc8997182006-06-22 05:52:16 +0000481 bool isAngled,
Chris Lattner22eb9722006-06-18 05:43:12 +0000482 const DirectoryLookup *FromDir,
Chris Lattnerc8997182006-06-22 05:52:16 +0000483 const DirectoryLookup *&CurDir) {
Chris Lattner59a9ebd2006-10-18 05:34:33 +0000484 // If the header lookup mechanism may be relative to the current file, pass in
485 // info about where the current file is.
486 const FileEntry *CurFileEnt = 0;
Chris Lattner63dd32b2006-10-20 04:42:40 +0000487 if (!FromDir) {
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000488 SourceLocation FileLoc = getCurrentFileLexer()->getFileLoc();
489 CurFileEnt = SourceMgr.getFileEntryForLoc(FileLoc);
Chris Lattner22eb9722006-06-18 05:43:12 +0000490 }
491
Chris Lattner63dd32b2006-10-20 04:42:40 +0000492 // Do a standard file entry lookup.
Chris Lattner59a9ebd2006-10-18 05:34:33 +0000493 CurDir = CurDirLookup;
Chris Lattner63dd32b2006-10-20 04:42:40 +0000494 const FileEntry *FE =
Chris Lattner7cdbad92006-10-30 05:33:15 +0000495 HeaderInfo.LookupFile(FilenameStart, FilenameEnd,
496 isAngled, FromDir, CurDir, CurFileEnt);
Chris Lattner63dd32b2006-10-20 04:42:40 +0000497 if (FE) return FE;
498
499 // Otherwise, see if this is a subframework header. If so, this is relative
500 // to one of the headers on the #include stack. Walk the list of the current
501 // headers on the #include stack and pass them to HeaderInfo.
Chris Lattner5c683b22006-10-20 05:12:14 +0000502 if (CurLexer && !CurLexer->Is_PragmaLexer) {
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000503 CurFileEnt = SourceMgr.getFileEntryForLoc(CurLexer->getFileLoc());
Chris Lattner7cdbad92006-10-30 05:33:15 +0000504 if ((FE = HeaderInfo.LookupSubframeworkHeader(FilenameStart, FilenameEnd,
505 CurFileEnt)))
Chris Lattner63dd32b2006-10-20 04:42:40 +0000506 return FE;
507 }
508
509 for (unsigned i = 0, e = IncludeMacroStack.size(); i != e; ++i) {
510 IncludeStackInfo &ISEntry = IncludeMacroStack[e-i-1];
Chris Lattner5c683b22006-10-20 05:12:14 +0000511 if (ISEntry.TheLexer && !ISEntry.TheLexer->Is_PragmaLexer) {
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000512 CurFileEnt = SourceMgr.getFileEntryForLoc(ISEntry.TheLexer->getFileLoc());
Chris Lattner7cdbad92006-10-30 05:33:15 +0000513 if ((FE = HeaderInfo.LookupSubframeworkHeader(FilenameStart, FilenameEnd,
514 CurFileEnt)))
Chris Lattner63dd32b2006-10-20 04:42:40 +0000515 return FE;
516 }
517 }
518
519 // Otherwise, we really couldn't find the file.
520 return 0;
Chris Lattner22eb9722006-06-18 05:43:12 +0000521}
522
Chris Lattnerecfeafe2006-07-02 21:26:45 +0000523/// isInPrimaryFile - Return true if we're in the top-level file, not in a
524/// #include.
525bool Preprocessor::isInPrimaryFile() const {
Chris Lattnerecfeafe2006-07-02 21:26:45 +0000526 if (CurLexer && !CurLexer->Is_PragmaLexer)
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000527 return IncludeMacroStack.empty();
Chris Lattnerecfeafe2006-07-02 21:26:45 +0000528
Chris Lattner13044d92006-07-03 05:16:44 +0000529 // If there are any stacked lexers, we're in a #include.
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000530 assert(IncludeMacroStack[0].TheLexer &&
531 !IncludeMacroStack[0].TheLexer->Is_PragmaLexer &&
532 "Top level include stack isn't our primary lexer?");
533 for (unsigned i = 1, e = IncludeMacroStack.size(); i != e; ++i)
Chris Lattner13044d92006-07-03 05:16:44 +0000534 if (IncludeMacroStack[i].TheLexer &&
535 !IncludeMacroStack[i].TheLexer->Is_PragmaLexer)
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000536 return false;
537 return true;
Chris Lattnerecfeafe2006-07-02 21:26:45 +0000538}
539
540/// getCurrentLexer - Return the current file lexer being lexed from. Note
541/// that this ignores any potentially active macro expansions and _Pragma
542/// expansions going on at the time.
543Lexer *Preprocessor::getCurrentFileLexer() const {
544 if (CurLexer && !CurLexer->Is_PragmaLexer) return CurLexer;
545
546 // Look for a stacked lexer.
547 for (unsigned i = IncludeMacroStack.size(); i != 0; --i) {
Chris Lattnerf88c53a2006-07-03 05:26:05 +0000548 Lexer *L = IncludeMacroStack[i-1].TheLexer;
Chris Lattnerecfeafe2006-07-02 21:26:45 +0000549 if (L && !L->Is_PragmaLexer) // Ignore macro & _Pragma expansions.
550 return L;
551 }
552 return 0;
553}
554
555
Chris Lattner22eb9722006-06-18 05:43:12 +0000556/// EnterSourceFile - Add a source file to the top of the include stack and
557/// start lexing tokens from it instead of the current buffer. Return true
558/// on failure.
559void Preprocessor::EnterSourceFile(unsigned FileID,
Chris Lattner1f1b0db2007-10-09 22:10:18 +0000560 const DirectoryLookup *CurDir) {
Chris Lattner69772b02006-07-02 20:34:39 +0000561 assert(CurMacroExpander == 0 && "Cannot #include a file inside a macro!");
Chris Lattner22eb9722006-06-18 05:43:12 +0000562 ++NumEnteredSourceFiles;
563
Chris Lattner69772b02006-07-02 20:34:39 +0000564 if (MaxIncludeStackDepth < IncludeMacroStack.size())
565 MaxIncludeStackDepth = IncludeMacroStack.size();
Chris Lattner22eb9722006-06-18 05:43:12 +0000566
Chris Lattner77e9de52007-07-20 16:52:03 +0000567 Lexer *TheLexer = new Lexer(SourceLocation::getFileLoc(FileID, 0), *this);
Chris Lattner69772b02006-07-02 20:34:39 +0000568 EnterSourceFileWithLexer(TheLexer, CurDir);
569}
Chris Lattner22eb9722006-06-18 05:43:12 +0000570
Chris Lattner69772b02006-07-02 20:34:39 +0000571/// EnterSourceFile - Add a source file to the top of the include stack and
572/// start lexing tokens from it instead of the current buffer.
573void Preprocessor::EnterSourceFileWithLexer(Lexer *TheLexer,
574 const DirectoryLookup *CurDir) {
575
576 // Add the current lexer to the include stack.
577 if (CurLexer || CurMacroExpander)
578 IncludeMacroStack.push_back(IncludeStackInfo(CurLexer, CurDirLookup,
579 CurMacroExpander));
580
581 CurLexer = TheLexer;
Chris Lattnerc8997182006-06-22 05:52:16 +0000582 CurDirLookup = CurDir;
Chris Lattner69772b02006-07-02 20:34:39 +0000583 CurMacroExpander = 0;
Chris Lattner0c885f52006-06-21 06:50:18 +0000584
585 // Notify the client, if desired, that we are in a new source file.
Chris Lattnerb8d6d5a2006-11-21 04:09:30 +0000586 if (Callbacks && !CurLexer->Is_PragmaLexer) {
Chris Lattnerc8997182006-06-22 05:52:16 +0000587 DirectoryLookup::DirType FileType = DirectoryLookup::NormalHeaderDir;
588
589 // Get the file entry for the current file.
590 if (const FileEntry *FE =
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000591 SourceMgr.getFileEntryForLoc(CurLexer->getFileLoc()))
Chris Lattner59a9ebd2006-10-18 05:34:33 +0000592 FileType = HeaderInfo.getFileDirFlavor(FE);
Chris Lattnerc8997182006-06-22 05:52:16 +0000593
Chris Lattnerdc5c0552007-07-20 16:37:10 +0000594 Callbacks->FileChanged(CurLexer->getFileLoc(),
Chris Lattnerb8d6d5a2006-11-21 04:09:30 +0000595 PPCallbacks::EnterFile, FileType);
Chris Lattnerc8997182006-06-22 05:52:16 +0000596 }
Chris Lattner22eb9722006-06-18 05:43:12 +0000597}
598
Chris Lattner69772b02006-07-02 20:34:39 +0000599
600
Chris Lattner22eb9722006-06-18 05:43:12 +0000601/// EnterMacro - Add a Macro to the top of the include stack and start lexing
Chris Lattnercb283342006-06-18 06:48:37 +0000602/// tokens from it instead of the current buffer.
Chris Lattner146762e2007-07-20 16:59:19 +0000603void Preprocessor::EnterMacro(Token &Tok, MacroArgs *Args) {
Chris Lattner69772b02006-07-02 20:34:39 +0000604 IncludeMacroStack.push_back(IncludeStackInfo(CurLexer, CurDirLookup,
605 CurMacroExpander));
606 CurLexer = 0;
607 CurDirLookup = 0;
Chris Lattner22eb9722006-06-18 05:43:12 +0000608
Chris Lattnerc02c4ab2007-07-15 00:25:26 +0000609 if (NumCachedMacroExpanders == 0) {
610 CurMacroExpander = new MacroExpander(Tok, Args, *this);
611 } else {
612 CurMacroExpander = MacroExpanderCache[--NumCachedMacroExpanders];
613 CurMacroExpander->Init(Tok, Args);
614 }
Chris Lattner22eb9722006-06-18 05:43:12 +0000615}
616
Chris Lattner7667d0d2006-07-16 18:16:58 +0000617/// EnterTokenStream - Add a "macro" context to the top of the include stack,
618/// which will cause the lexer to start returning the specified tokens. Note
619/// that these tokens will be re-macro-expanded when/if expansion is enabled.
620/// This method assumes that the specified stream of tokens has a permanent
621/// owner somewhere, so they do not need to be copied.
Chris Lattner146762e2007-07-20 16:59:19 +0000622void Preprocessor::EnterTokenStream(const Token *Toks, unsigned NumToks) {
Chris Lattner7667d0d2006-07-16 18:16:58 +0000623 // Save our current state.
624 IncludeMacroStack.push_back(IncludeStackInfo(CurLexer, CurDirLookup,
625 CurMacroExpander));
626 CurLexer = 0;
627 CurDirLookup = 0;
628
629 // Create a macro expander to expand from the specified token stream.
Chris Lattnerc02c4ab2007-07-15 00:25:26 +0000630 if (NumCachedMacroExpanders == 0) {
631 CurMacroExpander = new MacroExpander(Toks, NumToks, *this);
632 } else {
633 CurMacroExpander = MacroExpanderCache[--NumCachedMacroExpanders];
634 CurMacroExpander->Init(Toks, NumToks);
635 }
Chris Lattner7667d0d2006-07-16 18:16:58 +0000636}
637
638/// RemoveTopOfLexerStack - Pop the current lexer/macro exp off the top of the
639/// lexer stack. This should only be used in situations where the current
640/// state of the top-of-stack lexer is known.
641void Preprocessor::RemoveTopOfLexerStack() {
642 assert(!IncludeMacroStack.empty() && "Ran out of stack entries to load");
Chris Lattnerc02c4ab2007-07-15 00:25:26 +0000643
644 if (CurMacroExpander) {
645 // Delete or cache the now-dead macro expander.
646 if (NumCachedMacroExpanders == MacroExpanderCacheSize)
647 delete CurMacroExpander;
648 else
649 MacroExpanderCache[NumCachedMacroExpanders++] = CurMacroExpander;
650 } else {
651 delete CurLexer;
652 }
Chris Lattner7667d0d2006-07-16 18:16:58 +0000653 CurLexer = IncludeMacroStack.back().TheLexer;
654 CurDirLookup = IncludeMacroStack.back().TheDirLookup;
655 CurMacroExpander = IncludeMacroStack.back().TheMacroExpander;
656 IncludeMacroStack.pop_back();
657}
658
Chris Lattner22eb9722006-06-18 05:43:12 +0000659//===----------------------------------------------------------------------===//
Chris Lattner677757a2006-06-28 05:26:32 +0000660// Macro Expansion Handling.
Chris Lattner22eb9722006-06-18 05:43:12 +0000661//===----------------------------------------------------------------------===//
662
Chris Lattnerc43ddc82007-10-07 08:44:20 +0000663/// setMacroInfo - Specify a macro for this identifier.
664///
665void Preprocessor::setMacroInfo(IdentifierInfo *II, MacroInfo *MI) {
666 if (MI == 0) {
667 if (II->hasMacroDefinition()) {
668 Macros.erase(II);
669 II->setHasMacroDefinition(false);
670 }
671 } else {
672 Macros[II] = MI;
673 II->setHasMacroDefinition(true);
674 }
675}
676
Chris Lattner0b8cfc22006-06-28 06:49:17 +0000677/// RegisterBuiltinMacro - Register the specified identifier in the identifier
678/// table and mark it as a builtin macro to be expanded.
Chris Lattnerc79f6fb2006-07-04 17:53:21 +0000679IdentifierInfo *Preprocessor::RegisterBuiltinMacro(const char *Name) {
Chris Lattner0b8cfc22006-06-28 06:49:17 +0000680 // Get the identifier.
Chris Lattnerc79f6fb2006-07-04 17:53:21 +0000681 IdentifierInfo *Id = getIdentifierInfo(Name);
Chris Lattner0b8cfc22006-06-28 06:49:17 +0000682
683 // Mark it as being a macro that is builtin.
684 MacroInfo *MI = new MacroInfo(SourceLocation());
685 MI->setIsBuiltinMacro();
Chris Lattnerc43ddc82007-10-07 08:44:20 +0000686 setMacroInfo(Id, MI);
Chris Lattner0b8cfc22006-06-28 06:49:17 +0000687 return Id;
688}
689
690
Chris Lattner677757a2006-06-28 05:26:32 +0000691/// RegisterBuiltinMacros - Register builtin macros, such as __LINE__ with the
692/// identifier table.
693void Preprocessor::RegisterBuiltinMacros() {
Chris Lattner0b8cfc22006-06-28 06:49:17 +0000694 Ident__LINE__ = RegisterBuiltinMacro("__LINE__");
Chris Lattner630b33c2006-07-01 22:46:53 +0000695 Ident__FILE__ = RegisterBuiltinMacro("__FILE__");
Chris Lattnerc673f902006-06-30 06:10:41 +0000696 Ident__DATE__ = RegisterBuiltinMacro("__DATE__");
697 Ident__TIME__ = RegisterBuiltinMacro("__TIME__");
Chris Lattner69772b02006-07-02 20:34:39 +0000698 Ident_Pragma = RegisterBuiltinMacro("_Pragma");
Chris Lattnerc1283b92006-07-01 23:16:30 +0000699
700 // GCC Extensions.
701 Ident__BASE_FILE__ = RegisterBuiltinMacro("__BASE_FILE__");
702 Ident__INCLUDE_LEVEL__ = RegisterBuiltinMacro("__INCLUDE_LEVEL__");
Chris Lattner847e0e42006-07-01 23:49:16 +0000703 Ident__TIMESTAMP__ = RegisterBuiltinMacro("__TIMESTAMP__");
Chris Lattner22eb9722006-06-18 05:43:12 +0000704}
705
Chris Lattnerc2395832006-07-09 00:57:04 +0000706/// isTrivialSingleTokenExpansion - Return true if MI, which has a single token
707/// in its expansion, currently expands to that token literally.
Chris Lattner3ce1d1a2006-07-09 01:00:18 +0000708static bool isTrivialSingleTokenExpansion(const MacroInfo *MI,
Chris Lattnerc43ddc82007-10-07 08:44:20 +0000709 const IdentifierInfo *MacroIdent,
710 Preprocessor &PP) {
Chris Lattnerc2395832006-07-09 00:57:04 +0000711 IdentifierInfo *II = MI->getReplacementToken(0).getIdentifierInfo();
712
713 // If the token isn't an identifier, it's always literally expanded.
714 if (II == 0) return true;
715
716 // If the identifier is a macro, and if that macro is enabled, it may be
717 // expanded so it's not a trivial expansion.
Chris Lattnerc43ddc82007-10-07 08:44:20 +0000718 if (II->hasMacroDefinition() && PP.getMacroInfo(II)->isEnabled() &&
Chris Lattner3ce1d1a2006-07-09 01:00:18 +0000719 // Fast expanding "#define X X" is ok, because X would be disabled.
720 II != MacroIdent)
Chris Lattnerc2395832006-07-09 00:57:04 +0000721 return false;
722
723 // If this is an object-like macro invocation, it is safe to trivially expand
724 // it.
725 if (MI->isObjectLike()) return true;
726
727 // If this is a function-like macro invocation, it's safe to trivially expand
728 // as long as the identifier is not a macro argument.
729 for (MacroInfo::arg_iterator I = MI->arg_begin(), E = MI->arg_end();
730 I != E; ++I)
731 if (*I == II)
732 return false; // Identifier is a macro argument.
Chris Lattner273ddd52006-07-29 07:33:01 +0000733
Chris Lattnerc2395832006-07-09 00:57:04 +0000734 return true;
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000735}
736
Chris Lattnerc2395832006-07-09 00:57:04 +0000737
Chris Lattnerafe603f2006-07-11 04:02:46 +0000738/// isNextPPTokenLParen - Determine whether the next preprocessor token to be
739/// lexed is a '('. If so, consume the token and return true, if not, this
740/// method should have no observable side-effect on the lexed tokens.
741bool Preprocessor::isNextPPTokenLParen() {
Chris Lattnerafe603f2006-07-11 04:02:46 +0000742 // Do some quick tests for rejection cases.
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000743 unsigned Val;
744 if (CurLexer)
Chris Lattner678c8802006-07-11 05:46:12 +0000745 Val = CurLexer->isNextPPTokenLParen();
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000746 else
747 Val = CurMacroExpander->isNextTokenLParen();
748
749 if (Val == 2) {
Chris Lattner5c983792007-07-19 00:07:36 +0000750 // We have run off the end. If it's a source file we don't
751 // examine enclosing ones (C99 5.1.1.2p4). Otherwise walk up the
752 // macro stack.
753 if (CurLexer)
754 return false;
755 for (unsigned i = IncludeMacroStack.size(); i != 0; --i) {
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000756 IncludeStackInfo &Entry = IncludeMacroStack[i-1];
757 if (Entry.TheLexer)
Chris Lattner678c8802006-07-11 05:46:12 +0000758 Val = Entry.TheLexer->isNextPPTokenLParen();
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000759 else
760 Val = Entry.TheMacroExpander->isNextTokenLParen();
Chris Lattner5c983792007-07-19 00:07:36 +0000761
762 if (Val != 2)
763 break;
764
765 // Ran off the end of a source file?
766 if (Entry.TheLexer)
767 return false;
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000768 }
Chris Lattnerafe603f2006-07-11 04:02:46 +0000769 }
770
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000771 // Okay, if we know that the token is a '(', lex it and return. Otherwise we
772 // have found something that isn't a '(' or we found the end of the
773 // translation unit. In either case, return false.
774 if (Val != 1)
775 return false;
Chris Lattnerafe603f2006-07-11 04:02:46 +0000776
Chris Lattner146762e2007-07-20 16:59:19 +0000777 Token Tok;
Chris Lattnerafe603f2006-07-11 04:02:46 +0000778 LexUnexpandedToken(Tok);
Chris Lattner98c1f7c2007-10-09 18:02:16 +0000779 assert(Tok.is(tok::l_paren) && "Error computing l-paren-ness?");
Chris Lattnerd8aee0e2006-07-11 05:04:55 +0000780 return true;
Chris Lattnerafe603f2006-07-11 04:02:46 +0000781}
Chris Lattner677757a2006-06-28 05:26:32 +0000782
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000783/// HandleMacroExpandedIdentifier - If an identifier token is read that is to be
784/// expanded as a macro, handle it and return the next token as 'Identifier'.
Chris Lattner146762e2007-07-20 16:59:19 +0000785bool Preprocessor::HandleMacroExpandedIdentifier(Token &Identifier,
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000786 MacroInfo *MI) {
Chris Lattnera30be592008-01-07 19:50:27 +0000787 // If this is a macro exapnsion in the "#if !defined(x)" line for the file,
788 // then the macro could expand to different things in other contexts, we need
789 // to disable the optimization in this case.
790 if (CurLexer) CurLexer->MIOpt.ExpandedMacro();
Chris Lattner78186052006-07-09 00:45:31 +0000791
792 // If this is a builtin macro, like __LINE__ or _Pragma, handle it specially.
793 if (MI->isBuiltinMacro()) {
794 ExpandBuiltinMacro(Identifier);
795 return false;
796 }
797
Chris Lattner81278c62006-10-14 19:03:49 +0000798 // If this is the first use of a target-specific macro, warn about it.
799 if (MI->isTargetSpecific()) {
800 MI->setIsTargetSpecific(false); // Don't warn on second use.
Ted Kremenek1daa3cf2007-12-12 22:39:36 +0000801 getTargetInfo().DiagnoseNonPortability(getFullLoc(Identifier.getLocation()),
Chris Lattner81278c62006-10-14 19:03:49 +0000802 diag::port_target_macro_use);
803 }
804
Chris Lattneree8760b2006-07-15 07:42:55 +0000805 /// Args - If this is a function-like macro expansion, this contains,
Chris Lattner78186052006-07-09 00:45:31 +0000806 /// for each macro argument, the list of tokens that were provided to the
807 /// invocation.
Chris Lattneree8760b2006-07-15 07:42:55 +0000808 MacroArgs *Args = 0;
Chris Lattner78186052006-07-09 00:45:31 +0000809
810 // If this is a function-like macro, read the arguments.
811 if (MI->isFunctionLike()) {
Chris Lattner78186052006-07-09 00:45:31 +0000812 // C99 6.10.3p10: If the preprocessing token immediately after the the macro
Chris Lattner24dbee72007-07-19 16:11:58 +0000813 // name isn't a '(', this macro should not be expanded. Otherwise, consume
814 // it.
Chris Lattnerafe603f2006-07-11 04:02:46 +0000815 if (!isNextPPTokenLParen())
Chris Lattner78186052006-07-09 00:45:31 +0000816 return true;
817
Chris Lattner78186052006-07-09 00:45:31 +0000818 // Remember that we are now parsing the arguments to a macro invocation.
819 // Preprocessor directives used inside macro arguments are not portable, and
820 // this enables the warning.
Chris Lattneree8760b2006-07-15 07:42:55 +0000821 InMacroArgs = true;
822 Args = ReadFunctionLikeMacroArgs(Identifier, MI);
Chris Lattner78186052006-07-09 00:45:31 +0000823
824 // Finished parsing args.
Chris Lattneree8760b2006-07-15 07:42:55 +0000825 InMacroArgs = false;
Chris Lattner78186052006-07-09 00:45:31 +0000826
827 // If there was an error parsing the arguments, bail out.
Chris Lattneree8760b2006-07-15 07:42:55 +0000828 if (Args == 0) return false;
Chris Lattner78186052006-07-09 00:45:31 +0000829
830 ++NumFnMacroExpanded;
831 } else {
832 ++NumMacroExpanded;
833 }
Chris Lattner13044d92006-07-03 05:16:44 +0000834
835 // Notice that this macro has been used.
836 MI->setIsUsed(true);
Chris Lattner69772b02006-07-02 20:34:39 +0000837
838 // If we started lexing a macro, enter the macro expansion body.
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000839
840 // If this macro expands to no tokens, don't bother to push it onto the
841 // expansion stack, only to take it right back off.
842 if (MI->getNumTokens() == 0) {
Chris Lattner2ada5d32006-07-15 07:51:24 +0000843 // No need for arg info.
Chris Lattnerc1410dc2006-07-26 05:22:49 +0000844 if (Args) Args->destroy();
Chris Lattner78186052006-07-09 00:45:31 +0000845
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000846 // Ignore this macro use, just return the next token in the current
847 // buffer.
848 bool HadLeadingSpace = Identifier.hasLeadingSpace();
849 bool IsAtStartOfLine = Identifier.isAtStartOfLine();
850
851 Lex(Identifier);
852
853 // If the identifier isn't on some OTHER line, inherit the leading
854 // whitespace/first-on-a-line property of this token. This handles
855 // stuff like "! XX," -> "! ," and " XX," -> " ,", when XX is
856 // empty.
857 if (!Identifier.isAtStartOfLine()) {
Chris Lattner146762e2007-07-20 16:59:19 +0000858 if (IsAtStartOfLine) Identifier.setFlag(Token::StartOfLine);
859 if (HadLeadingSpace) Identifier.setFlag(Token::LeadingSpace);
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000860 }
861 ++NumFastMacroExpanded;
Chris Lattner78186052006-07-09 00:45:31 +0000862 return false;
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000863
Chris Lattner3ce1d1a2006-07-09 01:00:18 +0000864 } else if (MI->getNumTokens() == 1 &&
Chris Lattnerc43ddc82007-10-07 08:44:20 +0000865 isTrivialSingleTokenExpansion(MI, Identifier.getIdentifierInfo(),
866 *this)){
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000867 // Otherwise, if this macro expands into a single trivially-expanded
868 // token: expand it now. This handles common cases like
869 // "#define VAL 42".
870
871 // Propagate the isAtStartOfLine/hasLeadingSpace markers of the macro
872 // identifier to the expanded token.
873 bool isAtStartOfLine = Identifier.isAtStartOfLine();
874 bool hasLeadingSpace = Identifier.hasLeadingSpace();
875
876 // Remember where the token is instantiated.
877 SourceLocation InstantiateLoc = Identifier.getLocation();
878
879 // Replace the result token.
880 Identifier = MI->getReplacementToken(0);
881
882 // Restore the StartOfLine/LeadingSpace markers.
Chris Lattner146762e2007-07-20 16:59:19 +0000883 Identifier.setFlagValue(Token::StartOfLine , isAtStartOfLine);
884 Identifier.setFlagValue(Token::LeadingSpace, hasLeadingSpace);
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000885
886 // Update the tokens location to include both its logical and physical
887 // locations.
888 SourceLocation Loc =
Chris Lattnerc673f902006-06-30 06:10:41 +0000889 SourceMgr.getInstantiationLoc(Identifier.getLocation(), InstantiateLoc);
Chris Lattner8c204872006-10-14 05:19:21 +0000890 Identifier.setLocation(Loc);
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000891
Chris Lattner6e4bf522006-07-27 06:59:25 +0000892 // If this is #define X X, we must mark the result as unexpandible.
893 if (IdentifierInfo *NewII = Identifier.getIdentifierInfo())
Chris Lattnerc43ddc82007-10-07 08:44:20 +0000894 if (getMacroInfo(NewII) == MI)
Chris Lattner146762e2007-07-20 16:59:19 +0000895 Identifier.setFlag(Token::DisableExpand);
Chris Lattner6e4bf522006-07-27 06:59:25 +0000896
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000897 // Since this is not an identifier token, it can't be macro expanded, so
898 // we're done.
899 ++NumFastMacroExpanded;
Chris Lattner78186052006-07-09 00:45:31 +0000900 return false;
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000901 }
902
Chris Lattner78186052006-07-09 00:45:31 +0000903 // Start expanding the macro.
Chris Lattneree8760b2006-07-15 07:42:55 +0000904 EnterMacro(Identifier, Args);
Chris Lattnerf373a4a2006-06-26 06:16:29 +0000905
906 // Now that the macro is at the top of the include stack, ask the
907 // preprocessor to read the next token from it.
Chris Lattner78186052006-07-09 00:45:31 +0000908 Lex(Identifier);
909 return false;
910}
911
Chris Lattneree8760b2006-07-15 07:42:55 +0000912/// ReadFunctionLikeMacroArgs - After reading "MACRO(", this method is
Chris Lattner2ada5d32006-07-15 07:51:24 +0000913/// invoked to read all of the actual arguments specified for the macro
Chris Lattner78186052006-07-09 00:45:31 +0000914/// invocation. This returns null on error.
Chris Lattner146762e2007-07-20 16:59:19 +0000915MacroArgs *Preprocessor::ReadFunctionLikeMacroArgs(Token &MacroName,
Chris Lattneree8760b2006-07-15 07:42:55 +0000916 MacroInfo *MI) {
Chris Lattner78186052006-07-09 00:45:31 +0000917 // The number of fixed arguments to parse.
918 unsigned NumFixedArgsLeft = MI->getNumArgs();
919 bool isVariadic = MI->isVariadic();
920
Chris Lattner78186052006-07-09 00:45:31 +0000921 // Outer loop, while there are more arguments, keep reading them.
Chris Lattner146762e2007-07-20 16:59:19 +0000922 Token Tok;
Chris Lattner8c204872006-10-14 05:19:21 +0000923 Tok.setKind(tok::comma);
Chris Lattner78186052006-07-09 00:45:31 +0000924 --NumFixedArgsLeft; // Start reading the first arg.
Chris Lattner36b6e812006-07-21 06:38:30 +0000925
926 // ArgTokens - Build up a list of tokens that make up each argument. Each
Chris Lattner7a4af3b2006-07-26 06:26:52 +0000927 // argument is separated by an EOF token. Use a SmallVector so we can avoid
928 // heap allocations in the common case.
Chris Lattner146762e2007-07-20 16:59:19 +0000929 llvm::SmallVector<Token, 64> ArgTokens;
Chris Lattner36b6e812006-07-21 06:38:30 +0000930
931 unsigned NumActuals = 0;
Chris Lattner98c1f7c2007-10-09 18:02:16 +0000932 while (Tok.is(tok::comma)) {
Chris Lattner24dbee72007-07-19 16:11:58 +0000933 // C99 6.10.3p11: Keep track of the number of l_parens we have seen. Note
934 // that we already consumed the first one.
Chris Lattner78186052006-07-09 00:45:31 +0000935 unsigned NumParens = 0;
Chris Lattner36b6e812006-07-21 06:38:30 +0000936
Chris Lattner78186052006-07-09 00:45:31 +0000937 while (1) {
Chris Lattnerafe603f2006-07-11 04:02:46 +0000938 // Read arguments as unexpanded tokens. This avoids issues, e.g., where
939 // an argument value in a macro could expand to ',' or '(' or ')'.
Chris Lattner78186052006-07-09 00:45:31 +0000940 LexUnexpandedToken(Tok);
941
Chris Lattner98c1f7c2007-10-09 18:02:16 +0000942 if (Tok.is(tok::eof)) {
Chris Lattner78186052006-07-09 00:45:31 +0000943 Diag(MacroName, diag::err_unterm_macro_invoc);
944 // Do not lose the EOF. Return it to the client.
945 MacroName = Tok;
946 return 0;
Chris Lattner98c1f7c2007-10-09 18:02:16 +0000947 } else if (Tok.is(tok::r_paren)) {
Chris Lattner78186052006-07-09 00:45:31 +0000948 // If we found the ) token, the macro arg list is done.
949 if (NumParens-- == 0)
950 break;
Chris Lattner98c1f7c2007-10-09 18:02:16 +0000951 } else if (Tok.is(tok::l_paren)) {
Chris Lattner78186052006-07-09 00:45:31 +0000952 ++NumParens;
Chris Lattner98c1f7c2007-10-09 18:02:16 +0000953 } else if (Tok.is(tok::comma) && NumParens == 0) {
Chris Lattner78186052006-07-09 00:45:31 +0000954 // Comma ends this argument if there are more fixed arguments expected.
955 if (NumFixedArgsLeft)
956 break;
957
Chris Lattner2ada5d32006-07-15 07:51:24 +0000958 // If this is not a variadic macro, too many args were specified.
Chris Lattner78186052006-07-09 00:45:31 +0000959 if (!isVariadic) {
960 // Emit the diagnostic at the macro name in case there is a missing ).
961 // Emitting it at the , could be far away from the macro name.
Chris Lattner2ada5d32006-07-15 07:51:24 +0000962 Diag(MacroName, diag::err_too_many_args_in_macro_invoc);
Chris Lattner78186052006-07-09 00:45:31 +0000963 return 0;
964 }
965 // Otherwise, continue to add the tokens to this variable argument.
Chris Lattner98c1f7c2007-10-09 18:02:16 +0000966 } else if (Tok.is(tok::comment) && !KeepMacroComments) {
Chris Lattner457fc152006-07-29 06:30:25 +0000967 // If this is a comment token in the argument list and we're just in
968 // -C mode (not -CC mode), discard the comment.
969 continue;
Chris Lattner9fcdc522007-11-23 06:50:21 +0000970 } else if (Tok.is(tok::identifier)) {
971 // Reading macro arguments can cause macros that we are currently
972 // expanding from to be popped off the expansion stack. Doing so causes
973 // them to be reenabled for expansion. Here we record whether any
974 // identifiers we lex as macro arguments correspond to disabled macros.
975 // If so, we mark the token as noexpand. This is a subtle aspect of
976 // C99 6.10.3.4p2.
977 if (MacroInfo *MI = getMacroInfo(Tok.getIdentifierInfo()))
978 if (!MI->isEnabled())
979 Tok.setFlag(Token::DisableExpand);
Chris Lattner78186052006-07-09 00:45:31 +0000980 }
981
982 ArgTokens.push_back(Tok);
983 }
984
Chris Lattnera12dd152006-07-11 04:09:02 +0000985 // Empty arguments are standard in C99 and supported as an extension in
986 // other modes.
987 if (ArgTokens.empty() && !Features.C99)
988 Diag(Tok, diag::ext_empty_fnmacro_arg);
Chris Lattnerafe603f2006-07-11 04:02:46 +0000989
Chris Lattner36b6e812006-07-21 06:38:30 +0000990 // Add a marker EOF token to the end of the token list for this argument.
Chris Lattner146762e2007-07-20 16:59:19 +0000991 Token EOFTok;
Chris Lattner8c204872006-10-14 05:19:21 +0000992 EOFTok.startToken();
993 EOFTok.setKind(tok::eof);
994 EOFTok.setLocation(Tok.getLocation());
995 EOFTok.setLength(0);
Chris Lattner36b6e812006-07-21 06:38:30 +0000996 ArgTokens.push_back(EOFTok);
997 ++NumActuals;
Chris Lattner78186052006-07-09 00:45:31 +0000998 --NumFixedArgsLeft;
999 };
1000
1001 // Okay, we either found the r_paren. Check to see if we parsed too few
1002 // arguments.
Chris Lattner78186052006-07-09 00:45:31 +00001003 unsigned MinArgsExpected = MI->getNumArgs();
1004
Chris Lattner775d8322006-07-29 04:39:41 +00001005 // See MacroArgs instance var for description of this.
1006 bool isVarargsElided = false;
1007
Chris Lattner2ada5d32006-07-15 07:51:24 +00001008 if (NumActuals < MinArgsExpected) {
Chris Lattner78186052006-07-09 00:45:31 +00001009 // There are several cases where too few arguments is ok, handle them now.
Chris Lattner2ada5d32006-07-15 07:51:24 +00001010 if (NumActuals+1 == MinArgsExpected && MI->isVariadic()) {
Chris Lattner78186052006-07-09 00:45:31 +00001011 // Varargs where the named vararg parameter is missing: ok as extension.
1012 // #define A(x, ...)
1013 // A("blah")
1014 Diag(Tok, diag::ext_missing_varargs_arg);
Chris Lattner775d8322006-07-29 04:39:41 +00001015
1016 // Remember this occurred if this is a C99 macro invocation with at least
1017 // one actual argument.
Chris Lattner95a06b32006-07-30 08:40:43 +00001018 isVarargsElided = MI->isC99Varargs() && MI->getNumArgs() > 1;
Chris Lattner78186052006-07-09 00:45:31 +00001019 } else if (MI->getNumArgs() == 1) {
1020 // #define A(x)
1021 // A()
Chris Lattnere7a51302006-07-29 01:25:12 +00001022 // is ok because it is an empty argument.
Chris Lattnera12dd152006-07-11 04:09:02 +00001023
1024 // Empty arguments are standard in C99 and supported as an extension in
1025 // other modes.
1026 if (ArgTokens.empty() && !Features.C99)
1027 Diag(Tok, diag::ext_empty_fnmacro_arg);
Chris Lattner78186052006-07-09 00:45:31 +00001028 } else {
1029 // Otherwise, emit the error.
Chris Lattner2ada5d32006-07-15 07:51:24 +00001030 Diag(Tok, diag::err_too_few_args_in_macro_invoc);
Chris Lattner78186052006-07-09 00:45:31 +00001031 return 0;
1032 }
Chris Lattnere7a51302006-07-29 01:25:12 +00001033
1034 // Add a marker EOF token to the end of the token list for this argument.
1035 SourceLocation EndLoc = Tok.getLocation();
Chris Lattner8c204872006-10-14 05:19:21 +00001036 Tok.startToken();
1037 Tok.setKind(tok::eof);
1038 Tok.setLocation(EndLoc);
1039 Tok.setLength(0);
Chris Lattnere7a51302006-07-29 01:25:12 +00001040 ArgTokens.push_back(Tok);
Chris Lattner78186052006-07-09 00:45:31 +00001041 }
1042
Chris Lattner775d8322006-07-29 04:39:41 +00001043 return MacroArgs::create(MI, &ArgTokens[0], ArgTokens.size(),isVarargsElided);
Chris Lattnerf373a4a2006-06-26 06:16:29 +00001044}
1045
Chris Lattnerc673f902006-06-30 06:10:41 +00001046/// ComputeDATE_TIME - Compute the current time, enter it into the specified
1047/// scratch buffer, then return DATELoc/TIMELoc locations with the position of
1048/// the identifier tokens inserted.
1049static void ComputeDATE_TIME(SourceLocation &DATELoc, SourceLocation &TIMELoc,
Chris Lattnerb94ec7b2006-07-14 06:54:10 +00001050 Preprocessor &PP) {
Chris Lattnerc673f902006-06-30 06:10:41 +00001051 time_t TT = time(0);
1052 struct tm *TM = localtime(&TT);
1053
1054 static const char * const Months[] = {
1055 "Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"
1056 };
1057
1058 char TmpBuffer[100];
1059 sprintf(TmpBuffer, "\"%s %2d %4d\"", Months[TM->tm_mon], TM->tm_mday,
1060 TM->tm_year+1900);
Chris Lattnerb94ec7b2006-07-14 06:54:10 +00001061 DATELoc = PP.CreateString(TmpBuffer, strlen(TmpBuffer));
Chris Lattnerc673f902006-06-30 06:10:41 +00001062
1063 sprintf(TmpBuffer, "\"%02d:%02d:%02d\"", TM->tm_hour, TM->tm_min, TM->tm_sec);
Chris Lattnerb94ec7b2006-07-14 06:54:10 +00001064 TIMELoc = PP.CreateString(TmpBuffer, strlen(TmpBuffer));
Chris Lattnerc673f902006-06-30 06:10:41 +00001065}
1066
Chris Lattner0b8cfc22006-06-28 06:49:17 +00001067/// ExpandBuiltinMacro - If an identifier token is read that is to be expanded
1068/// as a builtin macro, handle it and return the next token as 'Tok'.
Chris Lattner146762e2007-07-20 16:59:19 +00001069void Preprocessor::ExpandBuiltinMacro(Token &Tok) {
Chris Lattner0b8cfc22006-06-28 06:49:17 +00001070 // Figure out which token this is.
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001071 IdentifierInfo *II = Tok.getIdentifierInfo();
1072 assert(II && "Can't be a macro without id info!");
Chris Lattner69772b02006-07-02 20:34:39 +00001073
1074 // If this is an _Pragma directive, expand it, invoke the pragma handler, then
1075 // lex the token after it.
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001076 if (II == Ident_Pragma)
Chris Lattner69772b02006-07-02 20:34:39 +00001077 return Handle_Pragma(Tok);
1078
Chris Lattner78186052006-07-09 00:45:31 +00001079 ++NumBuiltinMacroExpanded;
1080
Chris Lattner0b8cfc22006-06-28 06:49:17 +00001081 char TmpBuffer[100];
Chris Lattner69772b02006-07-02 20:34:39 +00001082
1083 // Set up the return result.
Chris Lattner8c204872006-10-14 05:19:21 +00001084 Tok.setIdentifierInfo(0);
Chris Lattner146762e2007-07-20 16:59:19 +00001085 Tok.clearFlag(Token::NeedsCleaning);
Chris Lattner630b33c2006-07-01 22:46:53 +00001086
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001087 if (II == Ident__LINE__) {
Chris Lattner0b8cfc22006-06-28 06:49:17 +00001088 // __LINE__ expands to a simple numeric value.
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001089 sprintf(TmpBuffer, "%u", SourceMgr.getLogicalLineNumber(Tok.getLocation()));
Chris Lattner0b8cfc22006-06-28 06:49:17 +00001090 unsigned Length = strlen(TmpBuffer);
Chris Lattner8c204872006-10-14 05:19:21 +00001091 Tok.setKind(tok::numeric_constant);
1092 Tok.setLength(Length);
1093 Tok.setLocation(CreateString(TmpBuffer, Length, Tok.getLocation()));
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001094 } else if (II == Ident__FILE__ || II == Ident__BASE_FILE__) {
Chris Lattnerc1283b92006-07-01 23:16:30 +00001095 SourceLocation Loc = Tok.getLocation();
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001096 if (II == Ident__BASE_FILE__) {
Chris Lattnerc1283b92006-07-01 23:16:30 +00001097 Diag(Tok, diag::ext_pp_base_file);
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001098 SourceLocation NextLoc = SourceMgr.getIncludeLoc(Loc);
1099 while (NextLoc.isValid()) {
Chris Lattnerc1283b92006-07-01 23:16:30 +00001100 Loc = NextLoc;
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001101 NextLoc = SourceMgr.getIncludeLoc(Loc);
Chris Lattnerc1283b92006-07-01 23:16:30 +00001102 }
1103 }
1104
Chris Lattner0766e592006-07-03 01:07:01 +00001105 // Escape this filename. Turn '\' -> '\\' '"' -> '\"'
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001106 std::string FN = SourceMgr.getSourceName(SourceMgr.getLogicalLoc(Loc));
Chris Lattnerecc39e92006-07-15 05:23:31 +00001107 FN = '"' + Lexer::Stringify(FN) + '"';
Chris Lattner8c204872006-10-14 05:19:21 +00001108 Tok.setKind(tok::string_literal);
1109 Tok.setLength(FN.size());
1110 Tok.setLocation(CreateString(&FN[0], FN.size(), Tok.getLocation()));
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001111 } else if (II == Ident__DATE__) {
Chris Lattnerc673f902006-06-30 06:10:41 +00001112 if (!DATELoc.isValid())
Chris Lattnerb94ec7b2006-07-14 06:54:10 +00001113 ComputeDATE_TIME(DATELoc, TIMELoc, *this);
Chris Lattner8c204872006-10-14 05:19:21 +00001114 Tok.setKind(tok::string_literal);
1115 Tok.setLength(strlen("\"Mmm dd yyyy\""));
1116 Tok.setLocation(SourceMgr.getInstantiationLoc(DATELoc, Tok.getLocation()));
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001117 } else if (II == Ident__TIME__) {
Chris Lattnerc673f902006-06-30 06:10:41 +00001118 if (!TIMELoc.isValid())
Chris Lattnerb94ec7b2006-07-14 06:54:10 +00001119 ComputeDATE_TIME(DATELoc, TIMELoc, *this);
Chris Lattner8c204872006-10-14 05:19:21 +00001120 Tok.setKind(tok::string_literal);
1121 Tok.setLength(strlen("\"hh:mm:ss\""));
1122 Tok.setLocation(SourceMgr.getInstantiationLoc(TIMELoc, Tok.getLocation()));
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001123 } else if (II == Ident__INCLUDE_LEVEL__) {
Chris Lattnerc1283b92006-07-01 23:16:30 +00001124 Diag(Tok, diag::ext_pp_include_level);
1125
1126 // Compute the include depth of this token.
1127 unsigned Depth = 0;
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001128 SourceLocation Loc = SourceMgr.getIncludeLoc(Tok.getLocation());
1129 for (; Loc.isValid(); ++Depth)
1130 Loc = SourceMgr.getIncludeLoc(Loc);
Chris Lattnerc1283b92006-07-01 23:16:30 +00001131
1132 // __INCLUDE_LEVEL__ expands to a simple numeric value.
1133 sprintf(TmpBuffer, "%u", Depth);
1134 unsigned Length = strlen(TmpBuffer);
Chris Lattner8c204872006-10-14 05:19:21 +00001135 Tok.setKind(tok::numeric_constant);
1136 Tok.setLength(Length);
1137 Tok.setLocation(CreateString(TmpBuffer, Length, Tok.getLocation()));
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001138 } else if (II == Ident__TIMESTAMP__) {
Chris Lattner847e0e42006-07-01 23:49:16 +00001139 // MSVC, ICC, GCC, VisualAge C++ extension. The generated string should be
1140 // of the form "Ddd Mmm dd hh::mm::ss yyyy", which is returned by asctime.
1141 Diag(Tok, diag::ext_pp_timestamp);
1142
1143 // Get the file that we are lexing out of. If we're currently lexing from
1144 // a macro, dig into the include stack.
1145 const FileEntry *CurFile = 0;
Chris Lattnerecfeafe2006-07-02 21:26:45 +00001146 Lexer *TheLexer = getCurrentFileLexer();
Chris Lattner847e0e42006-07-01 23:49:16 +00001147
1148 if (TheLexer)
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001149 CurFile = SourceMgr.getFileEntryForLoc(TheLexer->getFileLoc());
Chris Lattner847e0e42006-07-01 23:49:16 +00001150
1151 // If this file is older than the file it depends on, emit a diagnostic.
1152 const char *Result;
1153 if (CurFile) {
1154 time_t TT = CurFile->getModificationTime();
1155 struct tm *TM = localtime(&TT);
1156 Result = asctime(TM);
1157 } else {
1158 Result = "??? ??? ?? ??:??:?? ????\n";
1159 }
1160 TmpBuffer[0] = '"';
1161 strcpy(TmpBuffer+1, Result);
1162 unsigned Len = strlen(TmpBuffer);
1163 TmpBuffer[Len-1] = '"'; // Replace the newline with a quote.
Chris Lattner8c204872006-10-14 05:19:21 +00001164 Tok.setKind(tok::string_literal);
1165 Tok.setLength(Len);
1166 Tok.setLocation(CreateString(TmpBuffer, Len, Tok.getLocation()));
Chris Lattner0b8cfc22006-06-28 06:49:17 +00001167 } else {
1168 assert(0 && "Unknown identifier!");
Chris Lattner615315f2007-12-09 20:31:55 +00001169 }
Chris Lattner0b8cfc22006-06-28 06:49:17 +00001170}
Chris Lattner677757a2006-06-28 05:26:32 +00001171
1172//===----------------------------------------------------------------------===//
1173// Lexer Event Handling.
1174//===----------------------------------------------------------------------===//
1175
Chris Lattnercefc7682006-07-08 08:28:12 +00001176/// LookUpIdentifierInfo - Given a tok::identifier token, look up the
1177/// identifier information for the token and install it into the token.
Chris Lattner146762e2007-07-20 16:59:19 +00001178IdentifierInfo *Preprocessor::LookUpIdentifierInfo(Token &Identifier,
Chris Lattnercefc7682006-07-08 08:28:12 +00001179 const char *BufPtr) {
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001180 assert(Identifier.is(tok::identifier) && "Not an identifier!");
Chris Lattnercefc7682006-07-08 08:28:12 +00001181 assert(Identifier.getIdentifierInfo() == 0 && "Identinfo already exists!");
1182
1183 // Look up this token, see if it is a macro, or if it is a language keyword.
1184 IdentifierInfo *II;
1185 if (BufPtr && !Identifier.needsCleaning()) {
1186 // No cleaning needed, just use the characters from the lexed buffer.
1187 II = getIdentifierInfo(BufPtr, BufPtr+Identifier.getLength());
1188 } else {
1189 // Cleaning needed, alloca a buffer, clean into it, then use the buffer.
Chris Lattnerf9aba2c2007-07-13 17:10:38 +00001190 llvm::SmallVector<char, 64> IdentifierBuffer;
1191 IdentifierBuffer.resize(Identifier.getLength());
1192 const char *TmpBuf = &IdentifierBuffer[0];
Chris Lattnercefc7682006-07-08 08:28:12 +00001193 unsigned Size = getSpelling(Identifier, TmpBuf);
1194 II = getIdentifierInfo(TmpBuf, TmpBuf+Size);
1195 }
Chris Lattner8c204872006-10-14 05:19:21 +00001196 Identifier.setIdentifierInfo(II);
Chris Lattnercefc7682006-07-08 08:28:12 +00001197 return II;
1198}
1199
1200
Chris Lattner677757a2006-06-28 05:26:32 +00001201/// HandleIdentifier - This callback is invoked when the lexer reads an
1202/// identifier. This callback looks up the identifier in the map and/or
1203/// potentially macro expands it or turns it into a named token (like 'for').
Chris Lattner146762e2007-07-20 16:59:19 +00001204void Preprocessor::HandleIdentifier(Token &Identifier) {
Chris Lattner0f1f5052006-07-20 04:16:23 +00001205 assert(Identifier.getIdentifierInfo() &&
1206 "Can't handle identifiers without identifier info!");
1207
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001208 IdentifierInfo &II = *Identifier.getIdentifierInfo();
Chris Lattner677757a2006-06-28 05:26:32 +00001209
1210 // If this identifier was poisoned, and if it was not produced from a macro
1211 // expansion, emit an error.
Chris Lattner8ff71992006-07-06 05:17:39 +00001212 if (II.isPoisoned() && CurLexer) {
1213 if (&II != Ident__VA_ARGS__) // We warn about __VA_ARGS__ with poisoning.
1214 Diag(Identifier, diag::err_pp_used_poisoned_id);
1215 else
1216 Diag(Identifier, diag::ext_pp_bad_vaargs_use);
1217 }
Chris Lattner677757a2006-06-28 05:26:32 +00001218
Chris Lattner78186052006-07-09 00:45:31 +00001219 // If this is a macro to be expanded, do it.
Chris Lattnerc43ddc82007-10-07 08:44:20 +00001220 if (MacroInfo *MI = getMacroInfo(&II)) {
Chris Lattner6e4bf522006-07-27 06:59:25 +00001221 if (!DisableMacroExpansion && !Identifier.isExpandDisabled()) {
1222 if (MI->isEnabled()) {
1223 if (!HandleMacroExpandedIdentifier(Identifier, MI))
1224 return;
1225 } else {
1226 // C99 6.10.3.4p2 says that a disabled macro may never again be
1227 // expanded, even if it's in a context where it could be expanded in the
1228 // future.
Chris Lattner146762e2007-07-20 16:59:19 +00001229 Identifier.setFlag(Token::DisableExpand);
Chris Lattner6e4bf522006-07-27 06:59:25 +00001230 }
1231 }
Chris Lattner063400e2006-10-14 19:54:15 +00001232 } else if (II.isOtherTargetMacro() && !DisableMacroExpansion) {
1233 // If this identifier is a macro on some other target, emit a diagnostic.
1234 // This diagnosic is only emitted when macro expansion is enabled, because
1235 // the macro would not have been expanded for the other target either.
1236 II.setIsOtherTargetMacro(false); // Don't warn on second use.
Ted Kremenek1daa3cf2007-12-12 22:39:36 +00001237 getTargetInfo().DiagnoseNonPortability(getFullLoc(Identifier.getLocation()),
Chris Lattner063400e2006-10-14 19:54:15 +00001238 diag::port_target_macro_use);
1239
1240 }
Chris Lattner677757a2006-06-28 05:26:32 +00001241
Chris Lattner5b9f4892006-11-21 17:23:33 +00001242 // C++ 2.11p2: If this is an alternative representation of a C++ operator,
1243 // then we act as if it is the actual operator and not the textual
1244 // representation of it.
1245 if (II.isCPlusPlusOperatorKeyword())
1246 Identifier.setIdentifierInfo(0);
1247
Chris Lattner677757a2006-06-28 05:26:32 +00001248 // Change the kind of this identifier to the appropriate token kind, e.g.
1249 // turning "for" into a keyword.
Chris Lattner8c204872006-10-14 05:19:21 +00001250 Identifier.setKind(II.getTokenID());
Chris Lattner677757a2006-06-28 05:26:32 +00001251
1252 // If this is an extension token, diagnose its use.
Steve Naroffa8fd9732007-06-11 00:35:03 +00001253 // FIXME: tried (unsuccesfully) to shut this up when compiling with gnu99
1254 // For now, I'm just commenting it out (while I work on attributes).
Chris Lattner53621a52007-06-13 20:44:40 +00001255 if (II.isExtensionToken() && Features.C99)
1256 Diag(Identifier, diag::ext_token_used);
Chris Lattner677757a2006-06-28 05:26:32 +00001257}
1258
Chris Lattner22eb9722006-06-18 05:43:12 +00001259/// HandleEndOfFile - This callback is invoked when the lexer hits the end of
1260/// the current file. This either returns the EOF token or pops a level off
1261/// the include stack and keeps going.
Chris Lattner146762e2007-07-20 16:59:19 +00001262bool Preprocessor::HandleEndOfFile(Token &Result, bool isEndOfMacro) {
Chris Lattner22eb9722006-06-18 05:43:12 +00001263 assert(!CurMacroExpander &&
1264 "Ending a file when currently in a macro!");
1265
Chris Lattner371ac8a2006-07-04 07:11:10 +00001266 // See if this file had a controlling macro.
Chris Lattner3665f162006-07-04 07:26:10 +00001267 if (CurLexer) { // Not ending a macro, ignore it.
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001268 if (const IdentifierInfo *ControllingMacro =
Chris Lattner371ac8a2006-07-04 07:11:10 +00001269 CurLexer->MIOpt.GetControllingMacroAtEndOfFile()) {
Chris Lattner3665f162006-07-04 07:26:10 +00001270 // Okay, this has a controlling macro, remember in PerFileInfo.
1271 if (const FileEntry *FE =
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001272 SourceMgr.getFileEntryForLoc(CurLexer->getFileLoc()))
Chris Lattner59a9ebd2006-10-18 05:34:33 +00001273 HeaderInfo.SetFileControllingMacro(FE, ControllingMacro);
Chris Lattner371ac8a2006-07-04 07:11:10 +00001274 }
1275 }
1276
Chris Lattner22eb9722006-06-18 05:43:12 +00001277 // If this is a #include'd file, pop it off the include stack and continue
1278 // lexing the #includer file.
Chris Lattner69772b02006-07-02 20:34:39 +00001279 if (!IncludeMacroStack.empty()) {
Chris Lattner22eb9722006-06-18 05:43:12 +00001280 // We're done with the #included file.
Chris Lattner7667d0d2006-07-16 18:16:58 +00001281 RemoveTopOfLexerStack();
Chris Lattner0c885f52006-06-21 06:50:18 +00001282
1283 // Notify the client, if desired, that we are in a new source file.
Chris Lattnerb8d6d5a2006-11-21 04:09:30 +00001284 if (Callbacks && !isEndOfMacro && CurLexer) {
Chris Lattnerc8997182006-06-22 05:52:16 +00001285 DirectoryLookup::DirType FileType = DirectoryLookup::NormalHeaderDir;
1286
1287 // Get the file entry for the current file.
1288 if (const FileEntry *FE =
Chris Lattnerdc5c0552007-07-20 16:37:10 +00001289 SourceMgr.getFileEntryForLoc(CurLexer->getFileLoc()))
Chris Lattner59a9ebd2006-10-18 05:34:33 +00001290 FileType = HeaderInfo.getFileDirFlavor(FE);
Chris Lattnerc8997182006-06-22 05:52:16 +00001291
Chris Lattnerb8d6d5a2006-11-21 04:09:30 +00001292 Callbacks->FileChanged(CurLexer->getSourceLocation(CurLexer->BufferPtr),
1293 PPCallbacks::ExitFile, FileType);
Chris Lattnerc8997182006-06-22 05:52:16 +00001294 }
Chris Lattner2183a6e2006-07-18 06:36:12 +00001295
1296 // Client should lex another token.
1297 return false;
Chris Lattner22eb9722006-06-18 05:43:12 +00001298 }
1299
Chris Lattner8c204872006-10-14 05:19:21 +00001300 Result.startToken();
Chris Lattnerd01e2912006-06-18 16:22:51 +00001301 CurLexer->BufferPtr = CurLexer->BufferEnd;
1302 CurLexer->FormTokenWithChars(Result, CurLexer->BufferEnd);
Chris Lattner8c204872006-10-14 05:19:21 +00001303 Result.setKind(tok::eof);
Chris Lattner22eb9722006-06-18 05:43:12 +00001304
1305 // We're done with the #included file.
1306 delete CurLexer;
1307 CurLexer = 0;
Chris Lattner13044d92006-07-03 05:16:44 +00001308
Chris Lattner03f83482006-07-10 06:16:26 +00001309 // This is the end of the top-level file. If the diag::pp_macro_not_used
Chris Lattnerc43ddc82007-10-07 08:44:20 +00001310 // diagnostic is enabled, look for macros that have not been used.
Chris Lattnerb055f2d2007-02-11 08:19:57 +00001311 if (Diags.getDiagnosticLevel(diag::pp_macro_not_used) != Diagnostic::Ignored){
Chris Lattnerc43ddc82007-10-07 08:44:20 +00001312 for (llvm::DenseMap<IdentifierInfo*, MacroInfo*>::iterator I =
1313 Macros.begin(), E = Macros.end(); I != E; ++I) {
1314 if (!I->second->isUsed())
1315 Diag(I->second->getDefinitionLoc(), diag::pp_macro_not_used);
Chris Lattnerb055f2d2007-02-11 08:19:57 +00001316 }
1317 }
Chris Lattner2183a6e2006-07-18 06:36:12 +00001318 return true;
Chris Lattner22eb9722006-06-18 05:43:12 +00001319}
1320
1321/// HandleEndOfMacro - This callback is invoked when the lexer hits the end of
Chris Lattner7667d0d2006-07-16 18:16:58 +00001322/// the current macro expansion or token stream expansion.
Chris Lattner146762e2007-07-20 16:59:19 +00001323bool Preprocessor::HandleEndOfMacro(Token &Result) {
Chris Lattner22eb9722006-06-18 05:43:12 +00001324 assert(CurMacroExpander && !CurLexer &&
1325 "Ending a macro when currently in a #include file!");
1326
Chris Lattnerc02c4ab2007-07-15 00:25:26 +00001327 // Delete or cache the now-dead macro expander.
1328 if (NumCachedMacroExpanders == MacroExpanderCacheSize)
1329 delete CurMacroExpander;
1330 else
1331 MacroExpanderCache[NumCachedMacroExpanders++] = CurMacroExpander;
Chris Lattner22eb9722006-06-18 05:43:12 +00001332
Chris Lattner69772b02006-07-02 20:34:39 +00001333 // Handle this like a #include file being popped off the stack.
1334 CurMacroExpander = 0;
1335 return HandleEndOfFile(Result, true);
Chris Lattner22eb9722006-06-18 05:43:12 +00001336}
1337
1338
1339//===----------------------------------------------------------------------===//
1340// Utility Methods for Preprocessor Directive Handling.
1341//===----------------------------------------------------------------------===//
1342
1343/// DiscardUntilEndOfDirective - Read and discard all tokens remaining on the
1344/// current line until the tok::eom token is found.
Chris Lattnercb283342006-06-18 06:48:37 +00001345void Preprocessor::DiscardUntilEndOfDirective() {
Chris Lattner146762e2007-07-20 16:59:19 +00001346 Token Tmp;
Chris Lattner22eb9722006-06-18 05:43:12 +00001347 do {
Chris Lattnercb283342006-06-18 06:48:37 +00001348 LexUnexpandedToken(Tmp);
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001349 } while (Tmp.isNot(tok::eom));
Chris Lattner22eb9722006-06-18 05:43:12 +00001350}
1351
Chris Lattner652c1692006-11-21 23:47:30 +00001352/// isCXXNamedOperator - Returns "true" if the token is a named operator in C++.
1353static bool isCXXNamedOperator(const std::string &Spelling) {
1354 return Spelling == "and" || Spelling == "bitand" || Spelling == "bitor" ||
1355 Spelling == "compl" || Spelling == "not" || Spelling == "not_eq" ||
1356 Spelling == "or" || Spelling == "xor";
1357}
1358
Chris Lattner22eb9722006-06-18 05:43:12 +00001359/// ReadMacroName - Lex and validate a macro name, which occurs after a
1360/// #define or #undef. This sets the token kind to eom and discards the rest
Chris Lattnere8eef322006-07-08 07:01:00 +00001361/// of the macro line if the macro name is invalid. isDefineUndef is 1 if
1362/// this is due to a a #define, 2 if #undef directive, 0 if it is something
Chris Lattner44f8a662006-07-03 01:27:27 +00001363/// else (e.g. #ifdef).
Chris Lattner146762e2007-07-20 16:59:19 +00001364void Preprocessor::ReadMacroName(Token &MacroNameTok, char isDefineUndef) {
Chris Lattner22eb9722006-06-18 05:43:12 +00001365 // Read the token, don't allow macro expansion on it.
Chris Lattnercb283342006-06-18 06:48:37 +00001366 LexUnexpandedToken(MacroNameTok);
Chris Lattner22eb9722006-06-18 05:43:12 +00001367
1368 // Missing macro name?
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001369 if (MacroNameTok.is(tok::eom))
Chris Lattner22eb9722006-06-18 05:43:12 +00001370 return Diag(MacroNameTok, diag::err_pp_missing_macro_name);
1371
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001372 IdentifierInfo *II = MacroNameTok.getIdentifierInfo();
1373 if (II == 0) {
Chris Lattner652c1692006-11-21 23:47:30 +00001374 std::string Spelling = getSpelling(MacroNameTok);
1375 if (isCXXNamedOperator(Spelling))
1376 // C++ 2.5p2: Alternative tokens behave the same as its primary token
1377 // except for their spellings.
1378 Diag(MacroNameTok, diag::err_pp_operator_used_as_macro_name, Spelling);
1379 else
1380 Diag(MacroNameTok, diag::err_pp_macro_not_identifier);
Chris Lattner22eb9722006-06-18 05:43:12 +00001381 // Fall through on error.
Chris Lattner2bb8a952006-11-21 22:24:17 +00001382 } else if (isDefineUndef && II->getPPKeywordID() == tok::pp_defined) {
Chris Lattner44f8a662006-07-03 01:27:27 +00001383 // Error if defining "defined": C99 6.10.8.4.
Chris Lattneraaf09112006-07-03 01:17:59 +00001384 Diag(MacroNameTok, diag::err_defined_macro_name);
Chris Lattner259716a2007-10-07 08:04:56 +00001385 } else if (isDefineUndef && II->hasMacroDefinition() &&
Chris Lattnerc43ddc82007-10-07 08:44:20 +00001386 getMacroInfo(II)->isBuiltinMacro()) {
Chris Lattner44f8a662006-07-03 01:27:27 +00001387 // Error if defining "__LINE__" and other builtins: C99 6.10.8.4.
Chris Lattnere8eef322006-07-08 07:01:00 +00001388 if (isDefineUndef == 1)
1389 Diag(MacroNameTok, diag::pp_redef_builtin_macro);
1390 else
1391 Diag(MacroNameTok, diag::pp_undef_builtin_macro);
Chris Lattner22eb9722006-06-18 05:43:12 +00001392 } else {
1393 // Okay, we got a good identifier node. Return it.
Chris Lattnercb283342006-06-18 06:48:37 +00001394 return;
Chris Lattner22eb9722006-06-18 05:43:12 +00001395 }
1396
Chris Lattner22eb9722006-06-18 05:43:12 +00001397 // Invalid macro name, read and discard the rest of the line. Then set the
1398 // token kind to tok::eom.
Chris Lattner8c204872006-10-14 05:19:21 +00001399 MacroNameTok.setKind(tok::eom);
Chris Lattner22eb9722006-06-18 05:43:12 +00001400 return DiscardUntilEndOfDirective();
1401}
1402
1403/// CheckEndOfDirective - Ensure that the next token is a tok::eom token. If
1404/// not, emit a diagnostic and consume up until the eom.
Chris Lattnercb283342006-06-18 06:48:37 +00001405void Preprocessor::CheckEndOfDirective(const char *DirType) {
Chris Lattner146762e2007-07-20 16:59:19 +00001406 Token Tmp;
Chris Lattnercb283342006-06-18 06:48:37 +00001407 Lex(Tmp);
Chris Lattner22eb9722006-06-18 05:43:12 +00001408 // There should be no tokens after the directive, but we allow them as an
1409 // extension.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001410 while (Tmp.is(tok::comment)) // Skip comments in -C mode.
Chris Lattnerbcb416b2006-10-27 05:43:50 +00001411 Lex(Tmp);
1412
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001413 if (Tmp.isNot(tok::eom)) {
Chris Lattnercb283342006-06-18 06:48:37 +00001414 Diag(Tmp, diag::ext_pp_extra_tokens_at_eol, DirType);
1415 DiscardUntilEndOfDirective();
Chris Lattner22eb9722006-06-18 05:43:12 +00001416 }
Chris Lattner22eb9722006-06-18 05:43:12 +00001417}
1418
1419
1420
1421/// SkipExcludedConditionalBlock - We just read a #if or related directive and
1422/// decided that the subsequent tokens are in the #if'd out portion of the
1423/// file. Lex the rest of the file, until we see an #endif. If
1424/// FoundNonSkipPortion is true, then we have already emitted code for part of
1425/// this #if directive, so #else/#elif blocks should never be entered. If ElseOk
1426/// is true, then #else directives are ok, if not, then we have already seen one
1427/// so a #else directive is a duplicate. When this returns, the caller can lex
1428/// the first valid token.
Chris Lattnerd01e2912006-06-18 16:22:51 +00001429void Preprocessor::SkipExcludedConditionalBlock(SourceLocation IfTokenLoc,
Chris Lattner22eb9722006-06-18 05:43:12 +00001430 bool FoundNonSkipPortion,
1431 bool FoundElse) {
1432 ++NumSkipped;
Chris Lattner69772b02006-07-02 20:34:39 +00001433 assert(CurMacroExpander == 0 && CurLexer &&
Chris Lattner22eb9722006-06-18 05:43:12 +00001434 "Lexing a macro, not a file?");
1435
1436 CurLexer->pushConditionalLevel(IfTokenLoc, /*isSkipping*/false,
1437 FoundNonSkipPortion, FoundElse);
1438
Chris Lattner3ebcf4e2006-07-11 05:39:23 +00001439 // Enter raw mode to disable identifier lookup (and thus macro expansion),
1440 // disabling warnings, etc.
1441 CurLexer->LexingRawMode = true;
Chris Lattner146762e2007-07-20 16:59:19 +00001442 Token Tok;
Chris Lattner22eb9722006-06-18 05:43:12 +00001443 while (1) {
Chris Lattnercb283342006-06-18 06:48:37 +00001444 CurLexer->Lex(Tok);
Chris Lattner22eb9722006-06-18 05:43:12 +00001445
Chris Lattnerd8aee0e2006-07-11 05:04:55 +00001446 // If this is the end of the buffer, we have an error.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001447 if (Tok.is(tok::eof)) {
Chris Lattnerd8aee0e2006-07-11 05:04:55 +00001448 // Emit errors for each unterminated conditional on the stack, including
1449 // the current one.
1450 while (!CurLexer->ConditionalStack.empty()) {
1451 Diag(CurLexer->ConditionalStack.back().IfLoc,
1452 diag::err_pp_unterminated_conditional);
1453 CurLexer->ConditionalStack.pop_back();
1454 }
1455
1456 // Just return and let the caller lex after this #include.
1457 break;
1458 }
Chris Lattner22eb9722006-06-18 05:43:12 +00001459
1460 // If this token is not a preprocessor directive, just skip it.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001461 if (Tok.isNot(tok::hash) || !Tok.isAtStartOfLine())
Chris Lattner22eb9722006-06-18 05:43:12 +00001462 continue;
1463
1464 // We just parsed a # character at the start of a line, so we're in
1465 // directive mode. Tell the lexer this so any newlines we see will be
1466 // converted into an EOM token (this terminates the macro).
1467 CurLexer->ParsingPreprocessorDirective = true;
Chris Lattner457fc152006-07-29 06:30:25 +00001468 CurLexer->KeepCommentMode = false;
1469
Chris Lattner22eb9722006-06-18 05:43:12 +00001470
1471 // Read the next token, the directive flavor.
Chris Lattnercb283342006-06-18 06:48:37 +00001472 LexUnexpandedToken(Tok);
Chris Lattner22eb9722006-06-18 05:43:12 +00001473
1474 // If this isn't an identifier directive (e.g. is "# 1\n" or "#\n", or
1475 // something bogus), skip it.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001476 if (Tok.isNot(tok::identifier)) {
Chris Lattner22eb9722006-06-18 05:43:12 +00001477 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 Lattner22eb9722006-06-18 05:43:12 +00001480 continue;
1481 }
Chris Lattnere60165f2006-06-22 06:36:29 +00001482
Chris Lattner22eb9722006-06-18 05:43:12 +00001483 // If the first letter isn't i or e, it isn't intesting to us. We know that
1484 // this is safe in the face of spelling differences, because there is no way
1485 // to spell an i/e in a strange way that is another letter. Skipping this
Chris Lattnere60165f2006-06-22 06:36:29 +00001486 // allows us to avoid looking up the identifier info for #define/#undef and
1487 // other common directives.
1488 const char *RawCharData = SourceMgr.getCharacterData(Tok.getLocation());
1489 char FirstChar = RawCharData[0];
Chris Lattner22eb9722006-06-18 05:43:12 +00001490 if (FirstChar >= 'a' && FirstChar <= 'z' &&
1491 FirstChar != 'i' && FirstChar != 'e') {
1492 CurLexer->ParsingPreprocessorDirective = false;
Chris Lattner457fc152006-07-29 06:30:25 +00001493 // Restore comment saving mode.
Chris Lattnerb352e3e2006-11-21 06:17:10 +00001494 CurLexer->KeepCommentMode = KeepComments;
Chris Lattner22eb9722006-06-18 05:43:12 +00001495 continue;
1496 }
1497
Chris Lattnere60165f2006-06-22 06:36:29 +00001498 // Get the identifier name without trigraphs or embedded newlines. Note
1499 // that we can't use Tok.getIdentifierInfo() because its lookup is disabled
1500 // when skipping.
1501 // TODO: could do this with zero copies in the no-clean case by using
1502 // strncmp below.
1503 char Directive[20];
1504 unsigned IdLen;
1505 if (!Tok.needsCleaning() && Tok.getLength() < 20) {
1506 IdLen = Tok.getLength();
1507 memcpy(Directive, RawCharData, IdLen);
1508 Directive[IdLen] = 0;
1509 } else {
1510 std::string DirectiveStr = getSpelling(Tok);
1511 IdLen = DirectiveStr.size();
1512 if (IdLen >= 20) {
1513 CurLexer->ParsingPreprocessorDirective = false;
Chris Lattner457fc152006-07-29 06:30:25 +00001514 // Restore comment saving mode.
Chris Lattnerb352e3e2006-11-21 06:17:10 +00001515 CurLexer->KeepCommentMode = KeepComments;
Chris Lattnere60165f2006-06-22 06:36:29 +00001516 continue;
1517 }
1518 memcpy(Directive, &DirectiveStr[0], IdLen);
1519 Directive[IdLen] = 0;
1520 }
1521
Chris Lattner22eb9722006-06-18 05:43:12 +00001522 if (FirstChar == 'i' && Directive[1] == 'f') {
Chris Lattnere60165f2006-06-22 06:36:29 +00001523 if ((IdLen == 2) || // "if"
1524 (IdLen == 5 && !strcmp(Directive+2, "def")) || // "ifdef"
1525 (IdLen == 6 && !strcmp(Directive+2, "ndef"))) { // "ifndef"
Chris Lattner22eb9722006-06-18 05:43:12 +00001526 // We know the entire #if/#ifdef/#ifndef block will be skipped, don't
1527 // bother parsing the condition.
Chris Lattnercb283342006-06-18 06:48:37 +00001528 DiscardUntilEndOfDirective();
Chris Lattner50b497e2006-06-18 16:32:35 +00001529 CurLexer->pushConditionalLevel(Tok.getLocation(), /*wasskipping*/true,
Chris Lattnerd01e2912006-06-18 16:22:51 +00001530 /*foundnonskip*/false,
1531 /*fnddelse*/false);
Chris Lattner22eb9722006-06-18 05:43:12 +00001532 }
1533 } else if (FirstChar == 'e') {
Chris Lattnere60165f2006-06-22 06:36:29 +00001534 if (IdLen == 5 && !strcmp(Directive+1, "ndif")) { // "endif"
Chris Lattnercb283342006-06-18 06:48:37 +00001535 CheckEndOfDirective("#endif");
Chris Lattner22eb9722006-06-18 05:43:12 +00001536 PPConditionalInfo CondInfo;
1537 CondInfo.WasSkipping = true; // Silence bogus warning.
1538 bool InCond = CurLexer->popConditionalLevel(CondInfo);
Chris Lattnercf6bc662006-11-05 07:59:08 +00001539 InCond = InCond; // Silence warning in no-asserts mode.
Chris Lattner22eb9722006-06-18 05:43:12 +00001540 assert(!InCond && "Can't be skipping if not in a conditional!");
1541
1542 // If we popped the outermost skipping block, we're done skipping!
1543 if (!CondInfo.WasSkipping)
1544 break;
Chris Lattnere60165f2006-06-22 06:36:29 +00001545 } else if (IdLen == 4 && !strcmp(Directive+1, "lse")) { // "else".
Chris Lattner22eb9722006-06-18 05:43:12 +00001546 // #else directive in a skipping conditional. If not in some other
1547 // skipping conditional, and if #else hasn't already been seen, enter it
1548 // as a non-skipping conditional.
Chris Lattnercb283342006-06-18 06:48:37 +00001549 CheckEndOfDirective("#else");
Chris Lattner22eb9722006-06-18 05:43:12 +00001550 PPConditionalInfo &CondInfo = CurLexer->peekConditionalLevel();
1551
1552 // If this is a #else with a #else before it, report the error.
Chris Lattnercb283342006-06-18 06:48:37 +00001553 if (CondInfo.FoundElse) Diag(Tok, diag::pp_err_else_after_else);
Chris Lattner22eb9722006-06-18 05:43:12 +00001554
1555 // Note that we've seen a #else in this conditional.
1556 CondInfo.FoundElse = true;
1557
1558 // If the conditional is at the top level, and the #if block wasn't
1559 // entered, enter the #else block now.
1560 if (!CondInfo.WasSkipping && !CondInfo.FoundNonSkip) {
1561 CondInfo.FoundNonSkip = true;
1562 break;
1563 }
Chris Lattnere60165f2006-06-22 06:36:29 +00001564 } else if (IdLen == 4 && !strcmp(Directive+1, "lif")) { // "elif".
Chris Lattner22eb9722006-06-18 05:43:12 +00001565 PPConditionalInfo &CondInfo = CurLexer->peekConditionalLevel();
1566
1567 bool ShouldEnter;
1568 // If this is in a skipping block or if we're already handled this #if
1569 // block, don't bother parsing the condition.
1570 if (CondInfo.WasSkipping || CondInfo.FoundNonSkip) {
Chris Lattnercb283342006-06-18 06:48:37 +00001571 DiscardUntilEndOfDirective();
Chris Lattner22eb9722006-06-18 05:43:12 +00001572 ShouldEnter = false;
1573 } else {
Chris Lattner3ebcf4e2006-07-11 05:39:23 +00001574 // Restore the value of LexingRawMode so that identifiers are
Chris Lattner22eb9722006-06-18 05:43:12 +00001575 // looked up, etc, inside the #elif expression.
Chris Lattner3ebcf4e2006-07-11 05:39:23 +00001576 assert(CurLexer->LexingRawMode && "We have to be skipping here!");
1577 CurLexer->LexingRawMode = false;
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00001578 IdentifierInfo *IfNDefMacro = 0;
Chris Lattnera8654ca2006-07-04 17:42:08 +00001579 ShouldEnter = EvaluateDirectiveExpression(IfNDefMacro);
Chris Lattner3ebcf4e2006-07-11 05:39:23 +00001580 CurLexer->LexingRawMode = true;
Chris Lattner22eb9722006-06-18 05:43:12 +00001581 }
1582
1583 // If this is a #elif with a #else before it, report the error.
Chris Lattnercb283342006-06-18 06:48:37 +00001584 if (CondInfo.FoundElse) Diag(Tok, diag::pp_err_elif_after_else);
Chris Lattner22eb9722006-06-18 05:43:12 +00001585
1586 // If this condition is true, enter it!
1587 if (ShouldEnter) {
1588 CondInfo.FoundNonSkip = true;
1589 break;
1590 }
1591 }
1592 }
1593
1594 CurLexer->ParsingPreprocessorDirective = false;
Chris Lattner457fc152006-07-29 06:30:25 +00001595 // Restore comment saving mode.
Chris Lattnerb352e3e2006-11-21 06:17:10 +00001596 CurLexer->KeepCommentMode = KeepComments;
Chris Lattner22eb9722006-06-18 05:43:12 +00001597 }
1598
1599 // Finally, if we are out of the conditional (saw an #endif or ran off the end
1600 // of the file, just stop skipping and return to lexing whatever came after
1601 // the #if block.
Chris Lattner3ebcf4e2006-07-11 05:39:23 +00001602 CurLexer->LexingRawMode = false;
Chris Lattner22eb9722006-06-18 05:43:12 +00001603}
1604
1605//===----------------------------------------------------------------------===//
1606// Preprocessor Directive Handling.
1607//===----------------------------------------------------------------------===//
1608
1609/// HandleDirective - This callback is invoked when the lexer sees a # token
1610/// at the start of a line. This consumes the directive, modifies the
1611/// lexer/preprocessor state, and advances the lexer(s) so that the next token
1612/// read is the correct one.
Chris Lattner146762e2007-07-20 16:59:19 +00001613void Preprocessor::HandleDirective(Token &Result) {
Chris Lattner4d5e1a72006-07-03 01:01:29 +00001614 // FIXME: Traditional: # with whitespace before it not recognized by K&R?
Chris Lattner22eb9722006-06-18 05:43:12 +00001615
1616 // We just parsed a # character at the start of a line, so we're in directive
1617 // mode. Tell the lexer this so any newlines we see will be converted into an
Chris Lattner78186052006-07-09 00:45:31 +00001618 // EOM token (which terminates the directive).
Chris Lattner22eb9722006-06-18 05:43:12 +00001619 CurLexer->ParsingPreprocessorDirective = true;
1620
1621 ++NumDirectives;
1622
Chris Lattner371ac8a2006-07-04 07:11:10 +00001623 // We are about to read a token. For the multiple-include optimization FA to
1624 // work, we have to remember if we had read any tokens *before* this
1625 // pp-directive.
1626 bool ReadAnyTokensBeforeDirective = CurLexer->MIOpt.getHasReadAnyTokensVal();
1627
Chris Lattner78186052006-07-09 00:45:31 +00001628 // Read the next token, the directive flavor. This isn't expanded due to
1629 // C99 6.10.3p8.
Chris Lattnercb283342006-06-18 06:48:37 +00001630 LexUnexpandedToken(Result);
Chris Lattner22eb9722006-06-18 05:43:12 +00001631
Chris Lattner78186052006-07-09 00:45:31 +00001632 // C99 6.10.3p11: Is this preprocessor directive in macro invocation? e.g.:
1633 // #define A(x) #x
1634 // A(abc
1635 // #warning blah
1636 // def)
1637 // If so, the user is relying on non-portable behavior, emit a diagnostic.
Chris Lattneree8760b2006-07-15 07:42:55 +00001638 if (InMacroArgs)
Chris Lattner78186052006-07-09 00:45:31 +00001639 Diag(Result, diag::ext_embedded_directive);
1640
Chris Lattnerbcb416b2006-10-27 05:43:50 +00001641TryAgain:
Chris Lattner22eb9722006-06-18 05:43:12 +00001642 switch (Result.getKind()) {
Chris Lattner22eb9722006-06-18 05:43:12 +00001643 case tok::eom:
Chris Lattnercb283342006-06-18 06:48:37 +00001644 return; // null directive.
Chris Lattnerbcb416b2006-10-27 05:43:50 +00001645 case tok::comment:
1646 // Handle stuff like "# /*foo*/ define X" in -E -C mode.
1647 LexUnexpandedToken(Result);
1648 goto TryAgain;
Chris Lattner22eb9722006-06-18 05:43:12 +00001649
Chris Lattner22eb9722006-06-18 05:43:12 +00001650 case tok::numeric_constant:
1651 // FIXME: implement # 7 line numbers!
Chris Lattner6e5b2a02006-10-17 02:53:32 +00001652 DiscardUntilEndOfDirective();
1653 return;
Chris Lattner87d3bec2006-10-17 03:44:32 +00001654 default:
1655 IdentifierInfo *II = Result.getIdentifierInfo();
1656 if (II == 0) break; // Not an identifier.
1657
1658 // Ask what the preprocessor keyword ID is.
1659 switch (II->getPPKeywordID()) {
1660 default: break;
1661 // C99 6.10.1 - Conditional Inclusion.
1662 case tok::pp_if:
1663 return HandleIfDirective(Result, ReadAnyTokensBeforeDirective);
1664 case tok::pp_ifdef:
1665 return HandleIfdefDirective(Result, false, true/*not valid for miopt*/);
1666 case tok::pp_ifndef:
1667 return HandleIfdefDirective(Result, true, ReadAnyTokensBeforeDirective);
1668 case tok::pp_elif:
1669 return HandleElifDirective(Result);
1670 case tok::pp_else:
1671 return HandleElseDirective(Result);
1672 case tok::pp_endif:
1673 return HandleEndifDirective(Result);
1674
1675 // C99 6.10.2 - Source File Inclusion.
1676 case tok::pp_include:
1677 return HandleIncludeDirective(Result); // Handle #include.
1678
1679 // C99 6.10.3 - Macro Replacement.
1680 case tok::pp_define:
1681 return HandleDefineDirective(Result, false);
1682 case tok::pp_undef:
1683 return HandleUndefDirective(Result);
1684
1685 // C99 6.10.4 - Line Control.
1686 case tok::pp_line:
1687 // FIXME: implement #line
1688 DiscardUntilEndOfDirective();
1689 return;
1690
1691 // C99 6.10.5 - Error Directive.
1692 case tok::pp_error:
1693 return HandleUserDiagnosticDirective(Result, false);
1694
1695 // C99 6.10.6 - Pragma Directive.
1696 case tok::pp_pragma:
1697 return HandlePragmaDirective();
1698
1699 // GNU Extensions.
1700 case tok::pp_import:
1701 return HandleImportDirective(Result);
1702 case tok::pp_include_next:
1703 return HandleIncludeNextDirective(Result);
1704
1705 case tok::pp_warning:
1706 Diag(Result, diag::ext_pp_warning_directive);
1707 return HandleUserDiagnosticDirective(Result, true);
1708 case tok::pp_ident:
1709 return HandleIdentSCCSDirective(Result);
1710 case tok::pp_sccs:
1711 return HandleIdentSCCSDirective(Result);
1712 case tok::pp_assert:
1713 //isExtension = true; // FIXME: implement #assert
Chris Lattner22eb9722006-06-18 05:43:12 +00001714 break;
Chris Lattner87d3bec2006-10-17 03:44:32 +00001715 case tok::pp_unassert:
1716 //isExtension = true; // FIXME: implement #unassert
Chris Lattner22eb9722006-06-18 05:43:12 +00001717 break;
Chris Lattner87d3bec2006-10-17 03:44:32 +00001718
1719 // clang extensions.
1720 case tok::pp_define_target:
1721 return HandleDefineDirective(Result, true);
1722 case tok::pp_define_other_target:
1723 return HandleDefineOtherTargetDirective(Result);
Chris Lattner22eb9722006-06-18 05:43:12 +00001724 }
1725 break;
1726 }
1727
1728 // If we reached here, the preprocessing token is not valid!
Chris Lattnercb283342006-06-18 06:48:37 +00001729 Diag(Result, diag::err_pp_invalid_directive);
Chris Lattner22eb9722006-06-18 05:43:12 +00001730
1731 // Read the rest of the PP line.
Chris Lattner371ac8a2006-07-04 07:11:10 +00001732 DiscardUntilEndOfDirective();
Chris Lattner22eb9722006-06-18 05:43:12 +00001733
1734 // Okay, we're done parsing the directive.
Chris Lattner22eb9722006-06-18 05:43:12 +00001735}
1736
Chris Lattner146762e2007-07-20 16:59:19 +00001737void Preprocessor::HandleUserDiagnosticDirective(Token &Tok,
Chris Lattner22eb9722006-06-18 05:43:12 +00001738 bool isWarning) {
1739 // Read the rest of the line raw. We do this because we don't want macros
1740 // to be expanded and we don't require that the tokens be valid preprocessing
1741 // tokens. For example, this is allowed: "#warning ` 'foo". GCC does
1742 // collapse multiple consequtive white space between tokens, but this isn't
1743 // specified by the standard.
1744 std::string Message = CurLexer->ReadToEndOfLine();
1745
1746 unsigned DiagID = isWarning ? diag::pp_hash_warning : diag::err_pp_hash_error;
Chris Lattner01d66cc2006-07-03 22:16:27 +00001747 return Diag(Tok, DiagID, Message);
1748}
1749
1750/// HandleIdentSCCSDirective - Handle a #ident/#sccs directive.
1751///
Chris Lattner146762e2007-07-20 16:59:19 +00001752void Preprocessor::HandleIdentSCCSDirective(Token &Tok) {
Chris Lattner371ac8a2006-07-04 07:11:10 +00001753 // Yes, this directive is an extension.
Chris Lattner01d66cc2006-07-03 22:16:27 +00001754 Diag(Tok, diag::ext_pp_ident_directive);
1755
Chris Lattner371ac8a2006-07-04 07:11:10 +00001756 // Read the string argument.
Chris Lattner146762e2007-07-20 16:59:19 +00001757 Token StrTok;
Chris Lattner01d66cc2006-07-03 22:16:27 +00001758 Lex(StrTok);
1759
1760 // If the token kind isn't a string, it's a malformed directive.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001761 if (StrTok.isNot(tok::string_literal) &&
1762 StrTok.isNot(tok::wide_string_literal))
Chris Lattner01d66cc2006-07-03 22:16:27 +00001763 return Diag(StrTok, diag::err_pp_malformed_ident);
1764
1765 // Verify that there is nothing after the string, other than EOM.
1766 CheckEndOfDirective("#ident");
1767
Chris Lattnerb8d6d5a2006-11-21 04:09:30 +00001768 if (Callbacks)
1769 Callbacks->Ident(Tok.getLocation(), getSpelling(StrTok));
Chris Lattner22eb9722006-06-18 05:43:12 +00001770}
1771
Chris Lattnerb8761832006-06-24 21:31:03 +00001772//===----------------------------------------------------------------------===//
1773// Preprocessor Include Directive Handling.
1774//===----------------------------------------------------------------------===//
1775
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001776/// GetIncludeFilenameSpelling - Turn the specified lexer token into a fully
1777/// checked and spelled filename, e.g. as an operand of #include. This returns
1778/// true if the input filename was in <>'s or false if it were in ""'s. The
1779/// caller is expected to provide a buffer that is large enough to hold the
1780/// spelling of the filename, but is also expected to handle the case when
1781/// this method decides to use a different buffer.
Chris Lattner93ab9f12007-07-23 04:15:27 +00001782bool Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc,
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001783 const char *&BufStart,
1784 const char *&BufEnd) {
1785 // Get the text form of the filename.
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001786 assert(BufStart != BufEnd && "Can't have tokens with empty spellings!");
1787
1788 // Make sure the filename is <x> or "x".
1789 bool isAngled;
1790 if (BufStart[0] == '<') {
1791 if (BufEnd[-1] != '>') {
Chris Lattner93ab9f12007-07-23 04:15:27 +00001792 Diag(Loc, diag::err_pp_expects_filename);
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001793 BufStart = 0;
1794 return true;
1795 }
1796 isAngled = true;
1797 } else if (BufStart[0] == '"') {
1798 if (BufEnd[-1] != '"') {
Chris Lattner93ab9f12007-07-23 04:15:27 +00001799 Diag(Loc, diag::err_pp_expects_filename);
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001800 BufStart = 0;
1801 return true;
1802 }
1803 isAngled = false;
1804 } else {
Chris Lattner93ab9f12007-07-23 04:15:27 +00001805 Diag(Loc, diag::err_pp_expects_filename);
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001806 BufStart = 0;
1807 return true;
1808 }
1809
1810 // Diagnose #include "" as invalid.
1811 if (BufEnd-BufStart <= 2) {
Chris Lattner93ab9f12007-07-23 04:15:27 +00001812 Diag(Loc, diag::err_pp_empty_filename);
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001813 BufStart = 0;
1814 return "";
1815 }
1816
1817 // Skip the brackets.
1818 ++BufStart;
1819 --BufEnd;
1820 return isAngled;
1821}
1822
Chris Lattner43eafb42007-07-23 04:56:47 +00001823/// ConcatenateIncludeName - Handle cases where the #include name is expanded
1824/// from a macro as multiple tokens, which need to be glued together. This
1825/// occurs for code like:
1826/// #define FOO <a/b.h>
1827/// #include FOO
1828/// because in this case, "<a/b.h>" is returned as 7 tokens, not one.
1829///
1830/// This code concatenates and consumes tokens up to the '>' token. It returns
1831/// false if the > was found, otherwise it returns true if it finds and consumes
1832/// the EOM marker.
1833static bool ConcatenateIncludeName(llvm::SmallVector<char, 128> &FilenameBuffer,
1834 Preprocessor &PP) {
1835 Token CurTok;
1836
1837 PP.Lex(CurTok);
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001838 while (CurTok.isNot(tok::eom)) {
Chris Lattner43eafb42007-07-23 04:56:47 +00001839 // Append the spelling of this token to the buffer. If there was a space
1840 // before it, add it now.
1841 if (CurTok.hasLeadingSpace())
1842 FilenameBuffer.push_back(' ');
1843
1844 // Get the spelling of the token, directly into FilenameBuffer if possible.
1845 unsigned PreAppendSize = FilenameBuffer.size();
1846 FilenameBuffer.resize(PreAppendSize+CurTok.getLength());
1847
1848 const char *BufPtr = &FilenameBuffer[PreAppendSize];
1849 unsigned ActualLen = PP.getSpelling(CurTok, BufPtr);
1850
1851 // If the token was spelled somewhere else, copy it into FilenameBuffer.
1852 if (BufPtr != &FilenameBuffer[PreAppendSize])
1853 memcpy(&FilenameBuffer[PreAppendSize], BufPtr, ActualLen);
1854
1855 // Resize FilenameBuffer to the correct size.
1856 if (CurTok.getLength() != ActualLen)
1857 FilenameBuffer.resize(PreAppendSize+ActualLen);
1858
1859 // If we found the '>' marker, return success.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00001860 if (CurTok.is(tok::greater))
Chris Lattner43eafb42007-07-23 04:56:47 +00001861 return false;
1862
1863 PP.Lex(CurTok);
1864 }
1865
1866 // If we hit the eom marker, emit an error and return true so that the caller
1867 // knows the EOM has been read.
1868 PP.Diag(CurTok.getLocation(), diag::err_pp_expects_filename);
1869 return true;
1870}
1871
Chris Lattner22eb9722006-06-18 05:43:12 +00001872/// HandleIncludeDirective - The "#include" tokens have just been read, read the
1873/// file to be included from the lexer, then include it! This is a common
1874/// routine with functionality shared between #include, #include_next and
1875/// #import.
Chris Lattner146762e2007-07-20 16:59:19 +00001876void Preprocessor::HandleIncludeDirective(Token &IncludeTok,
Chris Lattner22eb9722006-06-18 05:43:12 +00001877 const DirectoryLookup *LookupFrom,
1878 bool isImport) {
Chris Lattner371ac8a2006-07-04 07:11:10 +00001879
Chris Lattner146762e2007-07-20 16:59:19 +00001880 Token FilenameTok;
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001881 CurLexer->LexIncludeFilename(FilenameTok);
Chris Lattner22eb9722006-06-18 05:43:12 +00001882
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001883 // Reserve a buffer to get the spelling.
Chris Lattner23b7eb62007-06-15 23:05:46 +00001884 llvm::SmallVector<char, 128> FilenameBuffer;
Chris Lattner43eafb42007-07-23 04:56:47 +00001885 const char *FilenameStart, *FilenameEnd;
1886
1887 switch (FilenameTok.getKind()) {
1888 case tok::eom:
1889 // If the token kind is EOM, the error has already been diagnosed.
1890 return;
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001891
Chris Lattner43eafb42007-07-23 04:56:47 +00001892 case tok::angle_string_literal:
Chris Lattnerf97dbcb2007-07-23 22:23:52 +00001893 case tok::string_literal: {
Chris Lattner43eafb42007-07-23 04:56:47 +00001894 FilenameBuffer.resize(FilenameTok.getLength());
1895 FilenameStart = &FilenameBuffer[0];
1896 unsigned Len = getSpelling(FilenameTok, FilenameStart);
1897 FilenameEnd = FilenameStart+Len;
1898 break;
Chris Lattnerf97dbcb2007-07-23 22:23:52 +00001899 }
Chris Lattner43eafb42007-07-23 04:56:47 +00001900
1901 case tok::less:
1902 // This could be a <foo/bar.h> file coming from a macro expansion. In this
1903 // case, glue the tokens together into FilenameBuffer and interpret those.
1904 FilenameBuffer.push_back('<');
1905 if (ConcatenateIncludeName(FilenameBuffer, *this))
1906 return; // Found <eom> but no ">"? Diagnostic already emitted.
1907 FilenameStart = &FilenameBuffer[0];
1908 FilenameEnd = &FilenameBuffer[FilenameBuffer.size()];
1909 break;
1910 default:
1911 Diag(FilenameTok.getLocation(), diag::err_pp_expects_filename);
1912 DiscardUntilEndOfDirective();
1913 return;
1914 }
1915
Chris Lattner93ab9f12007-07-23 04:15:27 +00001916 bool isAngled = GetIncludeFilenameSpelling(FilenameTok.getLocation(),
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001917 FilenameStart, FilenameEnd);
1918 // If GetIncludeFilenameSpelling set the start ptr to null, there was an
1919 // error.
Chris Lattner43eafb42007-07-23 04:56:47 +00001920 if (FilenameStart == 0) {
1921 DiscardUntilEndOfDirective();
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001922 return;
Chris Lattner43eafb42007-07-23 04:56:47 +00001923 }
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001924
Chris Lattner269c2322006-06-25 06:23:00 +00001925 // Verify that there is nothing after the filename, other than EOM. Use the
1926 // preprocessor to lex this in case lexing the filename entered a macro.
1927 CheckEndOfDirective("#include");
Chris Lattner22eb9722006-06-18 05:43:12 +00001928
1929 // Check that we don't have infinite #include recursion.
Chris Lattner69772b02006-07-02 20:34:39 +00001930 if (IncludeMacroStack.size() == MaxAllowedIncludeStackDepth-1)
Chris Lattner22eb9722006-06-18 05:43:12 +00001931 return Diag(FilenameTok, diag::err_pp_include_too_deep);
1932
Chris Lattner22eb9722006-06-18 05:43:12 +00001933 // Search include directories.
Chris Lattnerc8997182006-06-22 05:52:16 +00001934 const DirectoryLookup *CurDir;
Chris Lattnerc07ba1f2006-10-30 05:58:32 +00001935 const FileEntry *File = LookupFile(FilenameStart, FilenameEnd,
Chris Lattnerb8b94f12006-10-30 05:38:06 +00001936 isAngled, LookupFrom, CurDir);
Chris Lattner22eb9722006-06-18 05:43:12 +00001937 if (File == 0)
Chris Lattner7c718bd2007-04-10 06:02:46 +00001938 return Diag(FilenameTok, diag::err_pp_file_not_found,
1939 std::string(FilenameStart, FilenameEnd));
Chris Lattner22eb9722006-06-18 05:43:12 +00001940
Chris Lattner59a9ebd2006-10-18 05:34:33 +00001941 // Ask HeaderInfo if we should enter this #include file.
1942 if (!HeaderInfo.ShouldEnterIncludeFile(File, isImport)) {
1943 // If it returns true, #including this file will have no effect.
Chris Lattner3665f162006-07-04 07:26:10 +00001944 return;
1945 }
Chris Lattner22eb9722006-06-18 05:43:12 +00001946
1947 // Look up the file, create a File ID for it.
Chris Lattner371ac8a2006-07-04 07:11:10 +00001948 unsigned FileID = SourceMgr.createFileID(File, FilenameTok.getLocation());
Chris Lattner22eb9722006-06-18 05:43:12 +00001949 if (FileID == 0)
Chris Lattner7c718bd2007-04-10 06:02:46 +00001950 return Diag(FilenameTok, diag::err_pp_file_not_found,
1951 std::string(FilenameStart, FilenameEnd));
Chris Lattner22eb9722006-06-18 05:43:12 +00001952
1953 // Finally, if all is good, enter the new file!
Chris Lattnerc8997182006-06-22 05:52:16 +00001954 EnterSourceFile(FileID, CurDir);
Chris Lattner22eb9722006-06-18 05:43:12 +00001955}
1956
1957/// HandleIncludeNextDirective - Implements #include_next.
1958///
Chris Lattner146762e2007-07-20 16:59:19 +00001959void Preprocessor::HandleIncludeNextDirective(Token &IncludeNextTok) {
Chris Lattnercb283342006-06-18 06:48:37 +00001960 Diag(IncludeNextTok, diag::ext_pp_include_next_directive);
Chris Lattner22eb9722006-06-18 05:43:12 +00001961
1962 // #include_next is like #include, except that we start searching after
1963 // the current found directory. If we can't do this, issue a
1964 // diagnostic.
Chris Lattnerc8997182006-06-22 05:52:16 +00001965 const DirectoryLookup *Lookup = CurDirLookup;
Chris Lattner69772b02006-07-02 20:34:39 +00001966 if (isInPrimaryFile()) {
Chris Lattner22eb9722006-06-18 05:43:12 +00001967 Lookup = 0;
Chris Lattnercb283342006-06-18 06:48:37 +00001968 Diag(IncludeNextTok, diag::pp_include_next_in_primary);
Chris Lattner22eb9722006-06-18 05:43:12 +00001969 } else if (Lookup == 0) {
Chris Lattnercb283342006-06-18 06:48:37 +00001970 Diag(IncludeNextTok, diag::pp_include_next_absolute_path);
Chris Lattnerc8997182006-06-22 05:52:16 +00001971 } else {
1972 // Start looking up in the next directory.
1973 ++Lookup;
Chris Lattner22eb9722006-06-18 05:43:12 +00001974 }
1975
1976 return HandleIncludeDirective(IncludeNextTok, Lookup);
1977}
1978
1979/// HandleImportDirective - Implements #import.
1980///
Chris Lattner146762e2007-07-20 16:59:19 +00001981void Preprocessor::HandleImportDirective(Token &ImportTok) {
Chris Lattnercb283342006-06-18 06:48:37 +00001982 Diag(ImportTok, diag::ext_pp_import_directive);
Chris Lattner22eb9722006-06-18 05:43:12 +00001983
1984 return HandleIncludeDirective(ImportTok, 0, true);
1985}
1986
Chris Lattnerb8761832006-06-24 21:31:03 +00001987//===----------------------------------------------------------------------===//
1988// Preprocessor Macro Directive Handling.
1989//===----------------------------------------------------------------------===//
1990
Chris Lattnercefc7682006-07-08 08:28:12 +00001991/// ReadMacroDefinitionArgList - The ( starting an argument list of a macro
1992/// definition has just been read. Lex the rest of the arguments and the
1993/// closing ), updating MI with what we learn. Return true if an error occurs
1994/// parsing the arg list.
1995bool Preprocessor::ReadMacroDefinitionArgList(MacroInfo *MI) {
Chris Lattner564f4782007-07-14 22:46:43 +00001996 llvm::SmallVector<IdentifierInfo*, 32> Arguments;
1997
Chris Lattner146762e2007-07-20 16:59:19 +00001998 Token Tok;
Chris Lattnercefc7682006-07-08 08:28:12 +00001999 while (1) {
2000 LexUnexpandedToken(Tok);
2001 switch (Tok.getKind()) {
2002 case tok::r_paren:
2003 // Found the end of the argument list.
Chris Lattner564f4782007-07-14 22:46:43 +00002004 if (Arguments.empty()) { // #define FOO()
2005 MI->setArgumentList(Arguments.begin(), Arguments.end());
2006 return false;
2007 }
Chris Lattnercefc7682006-07-08 08:28:12 +00002008 // Otherwise we have #define FOO(A,)
2009 Diag(Tok, diag::err_pp_expected_ident_in_arg_list);
2010 return true;
2011 case tok::ellipsis: // #define X(... -> C99 varargs
2012 // Warn if use of C99 feature in non-C99 mode.
2013 if (!Features.C99) Diag(Tok, diag::ext_variadic_macro);
2014
2015 // Lex the token after the identifier.
2016 LexUnexpandedToken(Tok);
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002017 if (Tok.isNot(tok::r_paren)) {
Chris Lattnercefc7682006-07-08 08:28:12 +00002018 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);
2019 return true;
2020 }
Chris Lattner95a06b32006-07-30 08:40:43 +00002021 // Add the __VA_ARGS__ identifier as an argument.
Chris Lattner564f4782007-07-14 22:46:43 +00002022 Arguments.push_back(Ident__VA_ARGS__);
Chris Lattnercefc7682006-07-08 08:28:12 +00002023 MI->setIsC99Varargs();
Chris Lattner564f4782007-07-14 22:46:43 +00002024 MI->setArgumentList(Arguments.begin(), Arguments.end());
Chris Lattnercefc7682006-07-08 08:28:12 +00002025 return false;
2026 case tok::eom: // #define X(
2027 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);
2028 return true;
Chris Lattner62aa0d42006-10-20 05:08:24 +00002029 default:
2030 // Handle keywords and identifiers here to accept things like
2031 // #define Foo(for) for.
Chris Lattner6e0d42c2006-07-08 20:32:52 +00002032 IdentifierInfo *II = Tok.getIdentifierInfo();
Chris Lattner62aa0d42006-10-20 05:08:24 +00002033 if (II == 0) {
2034 // #define X(1
2035 Diag(Tok, diag::err_pp_invalid_tok_in_arg_list);
2036 return true;
2037 }
Chris Lattner6e0d42c2006-07-08 20:32:52 +00002038
2039 // If this is already used as an argument, it is used multiple times (e.g.
2040 // #define X(A,A.
Chris Lattner564f4782007-07-14 22:46:43 +00002041 if (std::find(Arguments.begin(), Arguments.end(), II) !=
2042 Arguments.end()) { // C99 6.10.3p6
Chris Lattner6e0d42c2006-07-08 20:32:52 +00002043 Diag(Tok, diag::err_pp_duplicate_name_in_arg_list, II->getName());
2044 return true;
2045 }
2046
2047 // Add the argument to the macro info.
Chris Lattner564f4782007-07-14 22:46:43 +00002048 Arguments.push_back(II);
Chris Lattnercefc7682006-07-08 08:28:12 +00002049
2050 // Lex the token after the identifier.
2051 LexUnexpandedToken(Tok);
2052
2053 switch (Tok.getKind()) {
2054 default: // #define X(A B
2055 Diag(Tok, diag::err_pp_expected_comma_in_arg_list);
2056 return true;
2057 case tok::r_paren: // #define X(A)
Chris Lattner564f4782007-07-14 22:46:43 +00002058 MI->setArgumentList(Arguments.begin(), Arguments.end());
Chris Lattnercefc7682006-07-08 08:28:12 +00002059 return false;
2060 case tok::comma: // #define X(A,
2061 break;
2062 case tok::ellipsis: // #define X(A... -> GCC extension
2063 // Diagnose extension.
2064 Diag(Tok, diag::ext_named_variadic_macro);
2065
2066 // Lex the token after the identifier.
2067 LexUnexpandedToken(Tok);
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002068 if (Tok.isNot(tok::r_paren)) {
Chris Lattnercefc7682006-07-08 08:28:12 +00002069 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def);
2070 return true;
2071 }
2072
2073 MI->setIsGNUVarargs();
Chris Lattner564f4782007-07-14 22:46:43 +00002074 MI->setArgumentList(Arguments.begin(), Arguments.end());
Chris Lattnercefc7682006-07-08 08:28:12 +00002075 return false;
2076 }
2077 }
2078 }
2079}
2080
Chris Lattner22eb9722006-06-18 05:43:12 +00002081/// HandleDefineDirective - Implements #define. This consumes the entire macro
Chris Lattner81278c62006-10-14 19:03:49 +00002082/// line then lets the caller lex the next real token. If 'isTargetSpecific' is
2083/// true, then this is a "#define_target", otherwise this is a "#define".
Chris Lattner22eb9722006-06-18 05:43:12 +00002084///
Chris Lattner146762e2007-07-20 16:59:19 +00002085void Preprocessor::HandleDefineDirective(Token &DefineTok,
Chris Lattner81278c62006-10-14 19:03:49 +00002086 bool isTargetSpecific) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002087 ++NumDefined;
Chris Lattner371ac8a2006-07-04 07:11:10 +00002088
Chris Lattner146762e2007-07-20 16:59:19 +00002089 Token MacroNameTok;
Chris Lattnere8eef322006-07-08 07:01:00 +00002090 ReadMacroName(MacroNameTok, 1);
Chris Lattner22eb9722006-06-18 05:43:12 +00002091
2092 // Error reading macro name? If so, diagnostic already issued.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002093 if (MacroNameTok.is(tok::eom))
Chris Lattnercb283342006-06-18 06:48:37 +00002094 return;
Chris Lattnerf40fe992007-07-14 22:11:41 +00002095
Chris Lattner457fc152006-07-29 06:30:25 +00002096 // If we are supposed to keep comments in #defines, reenable comment saving
2097 // mode.
Chris Lattnerb352e3e2006-11-21 06:17:10 +00002098 CurLexer->KeepCommentMode = KeepMacroComments;
Chris Lattner457fc152006-07-29 06:30:25 +00002099
Chris Lattner063400e2006-10-14 19:54:15 +00002100 // Create the new macro.
Chris Lattner50b497e2006-06-18 16:32:35 +00002101 MacroInfo *MI = new MacroInfo(MacroNameTok.getLocation());
Chris Lattner81278c62006-10-14 19:03:49 +00002102 if (isTargetSpecific) MI->setIsTargetSpecific();
Chris Lattner22eb9722006-06-18 05:43:12 +00002103
Chris Lattner063400e2006-10-14 19:54:15 +00002104 // If the identifier is an 'other target' macro, clear this bit.
2105 MacroNameTok.getIdentifierInfo()->setIsOtherTargetMacro(false);
2106
2107
Chris Lattner146762e2007-07-20 16:59:19 +00002108 Token Tok;
Chris Lattnercb283342006-06-18 06:48:37 +00002109 LexUnexpandedToken(Tok);
Chris Lattner22eb9722006-06-18 05:43:12 +00002110
Chris Lattner6e0d42c2006-07-08 20:32:52 +00002111 // If this is a function-like macro definition, parse the argument list,
2112 // marking each of the identifiers as being used as macro arguments. Also,
2113 // check other constraints on the first token of the macro body.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002114 if (Tok.is(tok::eom)) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002115 // If there is no body to this macro, we have no special handling here.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002116 } else if (Tok.is(tok::l_paren) && !Tok.hasLeadingSpace()) {
Chris Lattnercefc7682006-07-08 08:28:12 +00002117 // This is a function-like macro definition. Read the argument list.
2118 MI->setIsFunctionLike();
2119 if (ReadMacroDefinitionArgList(MI)) {
Chris Lattner6e0d42c2006-07-08 20:32:52 +00002120 // Forget about MI.
Chris Lattnercefc7682006-07-08 08:28:12 +00002121 delete MI;
Chris Lattner6e0d42c2006-07-08 20:32:52 +00002122 // Throw away the rest of the line.
Chris Lattnercefc7682006-07-08 08:28:12 +00002123 if (CurLexer->ParsingPreprocessorDirective)
2124 DiscardUntilEndOfDirective();
2125 return;
2126 }
Chris Lattner22eb9722006-06-18 05:43:12 +00002127
Chris Lattner815a1f92006-07-08 20:48:04 +00002128 // Read the first token after the arg list for down below.
2129 LexUnexpandedToken(Tok);
Chris Lattner22eb9722006-06-18 05:43:12 +00002130 } else if (!Tok.hasLeadingSpace()) {
2131 // C99 requires whitespace between the macro definition and the body. Emit
2132 // a diagnostic for something like "#define X+".
2133 if (Features.C99) {
Chris Lattnercb283342006-06-18 06:48:37 +00002134 Diag(Tok, diag::ext_c99_whitespace_required_after_macro_name);
Chris Lattner22eb9722006-06-18 05:43:12 +00002135 } else {
2136 // FIXME: C90/C++ do not get this diagnostic, but it does get a similar
2137 // one in some cases!
2138 }
2139 } else {
2140 // This is a normal token with leading space. Clear the leading space
2141 // marker on the first token to get proper expansion.
Chris Lattner146762e2007-07-20 16:59:19 +00002142 Tok.clearFlag(Token::LeadingSpace);
Chris Lattner22eb9722006-06-18 05:43:12 +00002143 }
2144
Chris Lattner7e374832006-07-29 03:46:57 +00002145 // If this is a definition of a variadic C99 function-like macro, not using
2146 // the GNU named varargs extension, enabled __VA_ARGS__.
2147
2148 // "Poison" __VA_ARGS__, which can only appear in the expansion of a macro.
2149 // This gets unpoisoned where it is allowed.
2150 assert(Ident__VA_ARGS__->isPoisoned() && "__VA_ARGS__ should be poisoned!");
2151 if (MI->isC99Varargs())
2152 Ident__VA_ARGS__->setIsPoisoned(false);
2153
Chris Lattner22eb9722006-06-18 05:43:12 +00002154 // Read the rest of the macro body.
Chris Lattnera3834342007-07-14 21:54:03 +00002155 if (MI->isObjectLike()) {
2156 // Object-like macros are very simple, just read their body.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002157 while (Tok.isNot(tok::eom)) {
Chris Lattnera3834342007-07-14 21:54:03 +00002158 MI->AddTokenToBody(Tok);
Chris Lattner815a1f92006-07-08 20:48:04 +00002159 // Get the next token of the macro.
2160 LexUnexpandedToken(Tok);
Chris Lattner815a1f92006-07-08 20:48:04 +00002161 }
Chris Lattner22eb9722006-06-18 05:43:12 +00002162
Chris Lattnera3834342007-07-14 21:54:03 +00002163 } else {
2164 // Otherwise, read the body of a function-like macro. This has to validate
2165 // the # (stringize) operator.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002166 while (Tok.isNot(tok::eom)) {
Chris Lattnera3834342007-07-14 21:54:03 +00002167 MI->AddTokenToBody(Tok);
Chris Lattnerbff18d52006-07-06 04:49:18 +00002168
Chris Lattnera3834342007-07-14 21:54:03 +00002169 // Check C99 6.10.3.2p1: ensure that # operators are followed by macro
2170 // parameters in function-like macro expansions.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002171 if (Tok.isNot(tok::hash)) {
Chris Lattnera3834342007-07-14 21:54:03 +00002172 // Get the next token of the macro.
2173 LexUnexpandedToken(Tok);
2174 continue;
2175 }
2176
2177 // Get the next token of the macro.
2178 LexUnexpandedToken(Tok);
2179
2180 // Not a macro arg identifier?
2181 if (!Tok.getIdentifierInfo() ||
2182 MI->getArgumentNum(Tok.getIdentifierInfo()) == -1) {
2183 Diag(Tok, diag::err_pp_stringize_not_parameter);
2184 delete MI;
2185
2186 // Disable __VA_ARGS__ again.
2187 Ident__VA_ARGS__->setIsPoisoned(true);
2188 return;
2189 }
2190
2191 // Things look ok, add the param name token to the macro.
2192 MI->AddTokenToBody(Tok);
2193
2194 // Get the next token of the macro.
2195 LexUnexpandedToken(Tok);
2196 }
Chris Lattner22eb9722006-06-18 05:43:12 +00002197 }
Chris Lattner7e374832006-07-29 03:46:57 +00002198
Chris Lattnerf40fe992007-07-14 22:11:41 +00002199
Chris Lattner7e374832006-07-29 03:46:57 +00002200 // Disable __VA_ARGS__ again.
2201 Ident__VA_ARGS__->setIsPoisoned(true);
Chris Lattnerbff18d52006-07-06 04:49:18 +00002202
Chris Lattnerbff18d52006-07-06 04:49:18 +00002203 // Check that there is no paste (##) operator at the begining or end of the
2204 // replacement list.
Chris Lattner78186052006-07-09 00:45:31 +00002205 unsigned NumTokens = MI->getNumTokens();
Chris Lattnerbff18d52006-07-06 04:49:18 +00002206 if (NumTokens != 0) {
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002207 if (MI->getReplacementToken(0).is(tok::hashhash)) {
Chris Lattner815a1f92006-07-08 20:48:04 +00002208 Diag(MI->getReplacementToken(0), diag::err_paste_at_start);
Chris Lattnerbff18d52006-07-06 04:49:18 +00002209 delete MI;
Chris Lattner815a1f92006-07-08 20:48:04 +00002210 return;
Chris Lattnerbff18d52006-07-06 04:49:18 +00002211 }
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002212 if (MI->getReplacementToken(NumTokens-1).is(tok::hashhash)) {
Chris Lattner815a1f92006-07-08 20:48:04 +00002213 Diag(MI->getReplacementToken(NumTokens-1), diag::err_paste_at_end);
Chris Lattnerbff18d52006-07-06 04:49:18 +00002214 delete MI;
Chris Lattner815a1f92006-07-08 20:48:04 +00002215 return;
Chris Lattnerbff18d52006-07-06 04:49:18 +00002216 }
2217 }
2218
Chris Lattner13044d92006-07-03 05:16:44 +00002219 // If this is the primary source file, remember that this macro hasn't been
2220 // used yet.
2221 if (isInPrimaryFile())
2222 MI->setIsUsed(false);
2223
Chris Lattner22eb9722006-06-18 05:43:12 +00002224 // Finally, if this identifier already had a macro defined for it, verify that
2225 // the macro bodies are identical and free the old definition.
Chris Lattnerc43ddc82007-10-07 08:44:20 +00002226 if (MacroInfo *OtherMI = getMacroInfo(MacroNameTok.getIdentifierInfo())) {
Chris Lattner13044d92006-07-03 05:16:44 +00002227 if (!OtherMI->isUsed())
2228 Diag(OtherMI->getDefinitionLoc(), diag::pp_macro_not_used);
2229
Chris Lattner22eb9722006-06-18 05:43:12 +00002230 // Macros must be identical. This means all tokes and whitespace separation
Chris Lattner21284df2006-07-08 07:16:08 +00002231 // must be the same. C99 6.10.3.2.
2232 if (!MI->isIdenticalTo(*OtherMI, *this)) {
Chris Lattnere8eef322006-07-08 07:01:00 +00002233 Diag(MI->getDefinitionLoc(), diag::ext_pp_macro_redef,
2234 MacroNameTok.getIdentifierInfo()->getName());
2235 Diag(OtherMI->getDefinitionLoc(), diag::ext_pp_macro_redef2);
2236 }
Chris Lattner22eb9722006-06-18 05:43:12 +00002237 delete OtherMI;
2238 }
2239
Chris Lattnerc43ddc82007-10-07 08:44:20 +00002240 setMacroInfo(MacroNameTok.getIdentifierInfo(), MI);
Chris Lattner22eb9722006-06-18 05:43:12 +00002241}
2242
Chris Lattner063400e2006-10-14 19:54:15 +00002243/// HandleDefineOtherTargetDirective - Implements #define_other_target.
Chris Lattner146762e2007-07-20 16:59:19 +00002244void Preprocessor::HandleDefineOtherTargetDirective(Token &Tok) {
2245 Token MacroNameTok;
Chris Lattner063400e2006-10-14 19:54:15 +00002246 ReadMacroName(MacroNameTok, 1);
2247
2248 // Error reading macro name? If so, diagnostic already issued.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002249 if (MacroNameTok.is(tok::eom))
Chris Lattner063400e2006-10-14 19:54:15 +00002250 return;
2251
2252 // Check to see if this is the last token on the #undef line.
2253 CheckEndOfDirective("#define_other_target");
2254
2255 // If there is already a macro defined by this name, turn it into a
2256 // target-specific define.
Chris Lattnerc43ddc82007-10-07 08:44:20 +00002257 if (MacroInfo *MI = getMacroInfo(MacroNameTok.getIdentifierInfo())) {
Chris Lattner063400e2006-10-14 19:54:15 +00002258 MI->setIsTargetSpecific(true);
2259 return;
2260 }
2261
2262 // Mark the identifier as being a macro on some other target.
2263 MacroNameTok.getIdentifierInfo()->setIsOtherTargetMacro();
2264}
2265
Chris Lattner22eb9722006-06-18 05:43:12 +00002266
2267/// HandleUndefDirective - Implements #undef.
2268///
Chris Lattner146762e2007-07-20 16:59:19 +00002269void Preprocessor::HandleUndefDirective(Token &UndefTok) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002270 ++NumUndefined;
Chris Lattner371ac8a2006-07-04 07:11:10 +00002271
Chris Lattner146762e2007-07-20 16:59:19 +00002272 Token MacroNameTok;
Chris Lattnere8eef322006-07-08 07:01:00 +00002273 ReadMacroName(MacroNameTok, 2);
Chris Lattner22eb9722006-06-18 05:43:12 +00002274
2275 // Error reading macro name? If so, diagnostic already issued.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002276 if (MacroNameTok.is(tok::eom))
Chris Lattnercb283342006-06-18 06:48:37 +00002277 return;
Chris Lattner22eb9722006-06-18 05:43:12 +00002278
2279 // Check to see if this is the last token on the #undef line.
Chris Lattnercb283342006-06-18 06:48:37 +00002280 CheckEndOfDirective("#undef");
Chris Lattner22eb9722006-06-18 05:43:12 +00002281
2282 // Okay, we finally have a valid identifier to undef.
Chris Lattnerc43ddc82007-10-07 08:44:20 +00002283 MacroInfo *MI = getMacroInfo(MacroNameTok.getIdentifierInfo());
Chris Lattner22eb9722006-06-18 05:43:12 +00002284
Chris Lattner063400e2006-10-14 19:54:15 +00002285 // #undef untaints an identifier if it were marked by define_other_target.
2286 MacroNameTok.getIdentifierInfo()->setIsOtherTargetMacro(false);
2287
Chris Lattner22eb9722006-06-18 05:43:12 +00002288 // If the macro is not defined, this is a noop undef, just return.
Chris Lattnercb283342006-06-18 06:48:37 +00002289 if (MI == 0) return;
Chris Lattner677757a2006-06-28 05:26:32 +00002290
Chris Lattner13044d92006-07-03 05:16:44 +00002291 if (!MI->isUsed())
2292 Diag(MI->getDefinitionLoc(), diag::pp_macro_not_used);
Chris Lattner22eb9722006-06-18 05:43:12 +00002293
2294 // Free macro definition.
2295 delete MI;
Chris Lattnerc43ddc82007-10-07 08:44:20 +00002296 setMacroInfo(MacroNameTok.getIdentifierInfo(), 0);
Chris Lattner22eb9722006-06-18 05:43:12 +00002297}
2298
2299
Chris Lattnerb8761832006-06-24 21:31:03 +00002300//===----------------------------------------------------------------------===//
2301// Preprocessor Conditional Directive Handling.
2302//===----------------------------------------------------------------------===//
2303
Chris Lattner22eb9722006-06-18 05:43:12 +00002304/// HandleIfdefDirective - Implements the #ifdef/#ifndef directive. isIfndef is
Chris Lattner371ac8a2006-07-04 07:11:10 +00002305/// true when this is a #ifndef directive. ReadAnyTokensBeforeDirective is true
2306/// if any tokens have been returned or pp-directives activated before this
2307/// #ifndef has been lexed.
Chris Lattner22eb9722006-06-18 05:43:12 +00002308///
Chris Lattner146762e2007-07-20 16:59:19 +00002309void Preprocessor::HandleIfdefDirective(Token &Result, bool isIfndef,
Chris Lattner371ac8a2006-07-04 07:11:10 +00002310 bool ReadAnyTokensBeforeDirective) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002311 ++NumIf;
Chris Lattner146762e2007-07-20 16:59:19 +00002312 Token DirectiveTok = Result;
Chris Lattner371ac8a2006-07-04 07:11:10 +00002313
Chris Lattner146762e2007-07-20 16:59:19 +00002314 Token MacroNameTok;
Chris Lattnercb283342006-06-18 06:48:37 +00002315 ReadMacroName(MacroNameTok);
Chris Lattner22eb9722006-06-18 05:43:12 +00002316
2317 // Error reading macro name? If so, diagnostic already issued.
Chris Lattner98c1f7c2007-10-09 18:02:16 +00002318 if (MacroNameTok.is(tok::eom)) {
Chris Lattnerd05e44e2007-09-24 05:14:57 +00002319 // Skip code until we get to #endif. This helps with recovery by not
2320 // emitting an error when the #endif is reached.
2321 SkipExcludedConditionalBlock(DirectiveTok.getLocation(),
2322 /*Foundnonskip*/false, /*FoundElse*/false);
Chris Lattnercb283342006-06-18 06:48:37 +00002323 return;
Chris Lattnerd05e44e2007-09-24 05:14:57 +00002324 }
Chris Lattner22eb9722006-06-18 05:43:12 +00002325
2326 // Check to see if this is the last token on the #if[n]def line.
Chris Lattner371ac8a2006-07-04 07:11:10 +00002327 CheckEndOfDirective(isIfndef ? "#ifndef" : "#ifdef");
2328
2329 // If the start of a top-level #ifdef, inform MIOpt.
2330 if (!ReadAnyTokensBeforeDirective &&
2331 CurLexer->getConditionalStackDepth() == 0) {
2332 assert(isIfndef && "#ifdef shouldn't reach here");
2333 CurLexer->MIOpt.EnterTopLevelIFNDEF(MacroNameTok.getIdentifierInfo());
2334 }
Chris Lattner22eb9722006-06-18 05:43:12 +00002335
Chris Lattner063400e2006-10-14 19:54:15 +00002336 IdentifierInfo *MII = MacroNameTok.getIdentifierInfo();
Chris Lattnerc43ddc82007-10-07 08:44:20 +00002337 MacroInfo *MI = getMacroInfo(MII);
Chris Lattnera78a97e2006-07-03 05:42:18 +00002338
Chris Lattner81278c62006-10-14 19:03:49 +00002339 // If there is a macro, process it.
2340 if (MI) {
2341 // Mark it used.
2342 MI->setIsUsed(true);
2343
2344 // If this is the first use of a target-specific macro, warn about it.
2345 if (MI->isTargetSpecific()) {
2346 MI->setIsTargetSpecific(false); // Don't warn on second use.
Ted Kremenek1daa3cf2007-12-12 22:39:36 +00002347 getTargetInfo().DiagnoseNonPortability(
2348 getFullLoc(MacroNameTok.getLocation()),
2349 diag::port_target_macro_use);
Chris Lattner81278c62006-10-14 19:03:49 +00002350 }
Chris Lattner063400e2006-10-14 19:54:15 +00002351 } else {
2352 // Use of a target-specific macro for some other target? If so, warn.
2353 if (MII->isOtherTargetMacro()) {
2354 MII->setIsOtherTargetMacro(false); // Don't warn on second use.
Ted Kremenek1daa3cf2007-12-12 22:39:36 +00002355 getTargetInfo().DiagnoseNonPortability(
2356 getFullLoc(MacroNameTok.getLocation()),
2357 diag::port_target_macro_use);
Chris Lattner063400e2006-10-14 19:54:15 +00002358 }
Chris Lattner81278c62006-10-14 19:03:49 +00002359 }
Chris Lattnera78a97e2006-07-03 05:42:18 +00002360
Chris Lattner22eb9722006-06-18 05:43:12 +00002361 // Should we include the stuff contained by this directive?
Chris Lattnera78a97e2006-07-03 05:42:18 +00002362 if (!MI == isIfndef) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002363 // Yes, remember that we are inside a conditional, then lex the next token.
Chris Lattner50b497e2006-06-18 16:32:35 +00002364 CurLexer->pushConditionalLevel(DirectiveTok.getLocation(), /*wasskip*/false,
Chris Lattner22eb9722006-06-18 05:43:12 +00002365 /*foundnonskip*/true, /*foundelse*/false);
Chris Lattner22eb9722006-06-18 05:43:12 +00002366 } else {
2367 // No, skip the contents of this block and return the first token after it.
Chris Lattner50b497e2006-06-18 16:32:35 +00002368 SkipExcludedConditionalBlock(DirectiveTok.getLocation(),
Chris Lattnercb283342006-06-18 06:48:37 +00002369 /*Foundnonskip*/false,
2370 /*FoundElse*/false);
Chris Lattner22eb9722006-06-18 05:43:12 +00002371 }
2372}
2373
2374/// HandleIfDirective - Implements the #if directive.
2375///
Chris Lattner146762e2007-07-20 16:59:19 +00002376void Preprocessor::HandleIfDirective(Token &IfToken,
Chris Lattnera8654ca2006-07-04 17:42:08 +00002377 bool ReadAnyTokensBeforeDirective) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002378 ++NumIf;
Chris Lattner371ac8a2006-07-04 07:11:10 +00002379
Chris Lattner371ac8a2006-07-04 07:11:10 +00002380 // Parse and evaluation the conditional expression.
Chris Lattnerc79f6fb2006-07-04 17:53:21 +00002381 IdentifierInfo *IfNDefMacro = 0;
Chris Lattnera8654ca2006-07-04 17:42:08 +00002382 bool ConditionalTrue = EvaluateDirectiveExpression(IfNDefMacro);
Chris Lattner22eb9722006-06-18 05:43:12 +00002383
2384 // Should we include the stuff contained by this directive?
2385 if (ConditionalTrue) {
Chris Lattnera8654ca2006-07-04 17:42:08 +00002386 // If this condition is equivalent to #ifndef X, and if this is the first
2387 // directive seen, handle it for the multiple-include optimization.
2388 if (!ReadAnyTokensBeforeDirective &&
2389 CurLexer->getConditionalStackDepth() == 0 && IfNDefMacro)
2390 CurLexer->MIOpt.EnterTopLevelIFNDEF(IfNDefMacro);
2391
Chris Lattner22eb9722006-06-18 05:43:12 +00002392 // Yes, remember that we are inside a conditional, then lex the next token.
Chris Lattner50b497e2006-06-18 16:32:35 +00002393 CurLexer->pushConditionalLevel(IfToken.getLocation(), /*wasskip*/false,
Chris Lattner22eb9722006-06-18 05:43:12 +00002394 /*foundnonskip*/true, /*foundelse*/false);
Chris Lattner22eb9722006-06-18 05:43:12 +00002395 } else {
2396 // No, skip the contents of this block and return the first token after it.
Chris Lattner50b497e2006-06-18 16:32:35 +00002397 SkipExcludedConditionalBlock(IfToken.getLocation(), /*Foundnonskip*/false,
Chris Lattnercb283342006-06-18 06:48:37 +00002398 /*FoundElse*/false);
Chris Lattner22eb9722006-06-18 05:43:12 +00002399 }
2400}
2401
2402/// HandleEndifDirective - Implements the #endif directive.
2403///
Chris Lattner146762e2007-07-20 16:59:19 +00002404void Preprocessor::HandleEndifDirective(Token &EndifToken) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002405 ++NumEndif;
Chris Lattner371ac8a2006-07-04 07:11:10 +00002406
Chris Lattner22eb9722006-06-18 05:43:12 +00002407 // Check that this is the whole directive.
Chris Lattnercb283342006-06-18 06:48:37 +00002408 CheckEndOfDirective("#endif");
Chris Lattner22eb9722006-06-18 05:43:12 +00002409
2410 PPConditionalInfo CondInfo;
2411 if (CurLexer->popConditionalLevel(CondInfo)) {
2412 // No conditionals on the stack: this is an #endif without an #if.
2413 return Diag(EndifToken, diag::err_pp_endif_without_if);
2414 }
2415
Chris Lattner371ac8a2006-07-04 07:11:10 +00002416 // If this the end of a top-level #endif, inform MIOpt.
2417 if (CurLexer->getConditionalStackDepth() == 0)
2418 CurLexer->MIOpt.ExitTopLevelConditional();
2419
Chris Lattner538d7f32006-07-20 04:31:52 +00002420 assert(!CondInfo.WasSkipping && !CurLexer->LexingRawMode &&
Chris Lattner22eb9722006-06-18 05:43:12 +00002421 "This code should only be reachable in the non-skipping case!");
Chris Lattner22eb9722006-06-18 05:43:12 +00002422}
2423
2424
Chris Lattner146762e2007-07-20 16:59:19 +00002425void Preprocessor::HandleElseDirective(Token &Result) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002426 ++NumElse;
Chris Lattner371ac8a2006-07-04 07:11:10 +00002427
Chris Lattner22eb9722006-06-18 05:43:12 +00002428 // #else directive in a non-skipping conditional... start skipping.
Chris Lattnercb283342006-06-18 06:48:37 +00002429 CheckEndOfDirective("#else");
Chris Lattner22eb9722006-06-18 05:43:12 +00002430
2431 PPConditionalInfo CI;
2432 if (CurLexer->popConditionalLevel(CI))
2433 return Diag(Result, diag::pp_err_else_without_if);
Chris Lattner371ac8a2006-07-04 07:11:10 +00002434
2435 // If this is a top-level #else, inform the MIOpt.
2436 if (CurLexer->getConditionalStackDepth() == 0)
2437 CurLexer->MIOpt.FoundTopLevelElse();
Chris Lattner22eb9722006-06-18 05:43:12 +00002438
2439 // If this is a #else with a #else before it, report the error.
Chris Lattnercb283342006-06-18 06:48:37 +00002440 if (CI.FoundElse) Diag(Result, diag::pp_err_else_after_else);
Chris Lattner22eb9722006-06-18 05:43:12 +00002441
2442 // Finally, skip the rest of the contents of this block and return the first
2443 // token after it.
2444 return SkipExcludedConditionalBlock(CI.IfLoc, /*Foundnonskip*/true,
2445 /*FoundElse*/true);
2446}
2447
Chris Lattner146762e2007-07-20 16:59:19 +00002448void Preprocessor::HandleElifDirective(Token &ElifToken) {
Chris Lattner22eb9722006-06-18 05:43:12 +00002449 ++NumElse;
Chris Lattner371ac8a2006-07-04 07:11:10 +00002450
Chris Lattner22eb9722006-06-18 05:43:12 +00002451 // #elif directive in a non-skipping conditional... start skipping.
2452 // We don't care what the condition is, because we will always skip it (since
2453 // the block immediately before it was included).
Chris Lattnercb283342006-06-18 06:48:37 +00002454 DiscardUntilEndOfDirective();
Chris Lattner22eb9722006-06-18 05:43:12 +00002455
2456 PPConditionalInfo CI;
2457 if (CurLexer->popConditionalLevel(CI))
2458 return Diag(ElifToken, diag::pp_err_elif_without_if);
2459
Chris Lattner371ac8a2006-07-04 07:11:10 +00002460 // If this is a top-level #elif, inform the MIOpt.
2461 if (CurLexer->getConditionalStackDepth() == 0)
2462 CurLexer->MIOpt.FoundTopLevelElse();
2463
Chris Lattner22eb9722006-06-18 05:43:12 +00002464 // If this is a #elif with a #else before it, report the error.
Chris Lattnercb283342006-06-18 06:48:37 +00002465 if (CI.FoundElse) Diag(ElifToken, diag::pp_err_elif_after_else);
Chris Lattner22eb9722006-06-18 05:43:12 +00002466
2467 // Finally, skip the rest of the contents of this block and return the first
2468 // token after it.
2469 return SkipExcludedConditionalBlock(CI.IfLoc, /*Foundnonskip*/true,
2470 /*FoundElse*/CI.FoundElse);
2471}
Chris Lattnerb8761832006-06-24 21:31:03 +00002472