1 //===--- PPDirectives.cpp - Directive Handling for Preprocessor -----------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 /// 10 /// \file 11 /// \brief Implements # directive processing for the Preprocessor. 12 /// 13 //===----------------------------------------------------------------------===// 14 15 #include "clang/Basic/CharInfo.h" 16 #include "clang/Basic/FileManager.h" 17 #include "clang/Basic/IdentifierTable.h" 18 #include "clang/Basic/LangOptions.h" 19 #include "clang/Basic/Module.h" 20 #include "clang/Basic/SourceLocation.h" 21 #include "clang/Basic/SourceManager.h" 22 #include "clang/Basic/TokenKinds.h" 23 #include "clang/Lex/CodeCompletionHandler.h" 24 #include "clang/Lex/HeaderSearch.h" 25 #include "clang/Lex/LexDiagnostic.h" 26 #include "clang/Lex/LiteralSupport.h" 27 #include "clang/Lex/MacroInfo.h" 28 #include "clang/Lex/ModuleLoader.h" 29 #include "clang/Lex/ModuleMap.h" 30 #include "clang/Lex/PPCallbacks.h" 31 #include "clang/Lex/Pragma.h" 32 #include "clang/Lex/Preprocessor.h" 33 #include "clang/Lex/PreprocessorOptions.h" 34 #include "clang/Lex/PTHLexer.h" 35 #include "clang/Lex/Token.h" 36 #include "clang/Lex/VariadicMacroSupport.h" 37 #include "llvm/ADT/ArrayRef.h" 38 #include "llvm/ADT/SmallString.h" 39 #include "llvm/ADT/SmallVector.h" 40 #include "llvm/ADT/STLExtras.h" 41 #include "llvm/ADT/StringSwitch.h" 42 #include "llvm/ADT/StringRef.h" 43 #include "llvm/Support/AlignOf.h" 44 #include "llvm/Support/ErrorHandling.h" 45 #include "llvm/Support/Path.h" 46 #include <algorithm> 47 #include <cassert> 48 #include <cstring> 49 #include <new> 50 #include <string> 51 #include <utility> 52 53 using namespace clang; 54 55 //===----------------------------------------------------------------------===// 56 // Utility Methods for Preprocessor Directive Handling. 57 //===----------------------------------------------------------------------===// 58 59 MacroInfo *Preprocessor::AllocateMacroInfo(SourceLocation L) { 60 auto *MIChain = new (BP) MacroInfoChain{L, MIChainHead}; 61 MIChainHead = MIChain; 62 return &MIChain->MI; 63 } 64 65 DefMacroDirective *Preprocessor::AllocateDefMacroDirective(MacroInfo *MI, 66 SourceLocation Loc) { 67 return new (BP) DefMacroDirective(MI, Loc); 68 } 69 70 UndefMacroDirective * 71 Preprocessor::AllocateUndefMacroDirective(SourceLocation UndefLoc) { 72 return new (BP) UndefMacroDirective(UndefLoc); 73 } 74 75 VisibilityMacroDirective * 76 Preprocessor::AllocateVisibilityMacroDirective(SourceLocation Loc, 77 bool isPublic) { 78 return new (BP) VisibilityMacroDirective(Loc, isPublic); 79 } 80 81 /// \brief Read and discard all tokens remaining on the current line until 82 /// the tok::eod token is found. 83 void Preprocessor::DiscardUntilEndOfDirective() { 84 Token Tmp; 85 do { 86 LexUnexpandedToken(Tmp); 87 assert(Tmp.isNot(tok::eof) && "EOF seen while discarding directive tokens"); 88 } while (Tmp.isNot(tok::eod)); 89 } 90 91 /// \brief Enumerates possible cases of #define/#undef a reserved identifier. 92 enum MacroDiag { 93 MD_NoWarn, //> Not a reserved identifier 94 MD_KeywordDef, //> Macro hides keyword, enabled by default 95 MD_ReservedMacro //> #define of #undef reserved id, disabled by default 96 }; 97 98 /// \brief Checks if the specified identifier is reserved in the specified 99 /// language. 100 /// This function does not check if the identifier is a keyword. 101 static bool isReservedId(StringRef Text, const LangOptions &Lang) { 102 // C++ [macro.names], C11 7.1.3: 103 // All identifiers that begin with an underscore and either an uppercase 104 // letter or another underscore are always reserved for any use. 105 if (Text.size() >= 2 && Text[0] == '_' && 106 (isUppercase(Text[1]) || Text[1] == '_')) 107 return true; 108 // C++ [global.names] 109 // Each name that contains a double underscore ... is reserved to the 110 // implementation for any use. 111 if (Lang.CPlusPlus) { 112 if (Text.find("__") != StringRef::npos) 113 return true; 114 } 115 return false; 116 } 117 118 static MacroDiag shouldWarnOnMacroDef(Preprocessor &PP, IdentifierInfo *II) { 119 const LangOptions &Lang = PP.getLangOpts(); 120 StringRef Text = II->getName(); 121 if (isReservedId(Text, Lang)) 122 return MD_ReservedMacro; 123 if (II->isKeyword(Lang)) 124 return MD_KeywordDef; 125 if (Lang.CPlusPlus11 && (Text.equals("override") || Text.equals("final"))) 126 return MD_KeywordDef; 127 return MD_NoWarn; 128 } 129 130 static MacroDiag shouldWarnOnMacroUndef(Preprocessor &PP, IdentifierInfo *II) { 131 const LangOptions &Lang = PP.getLangOpts(); 132 StringRef Text = II->getName(); 133 // Do not warn on keyword undef. It is generally harmless and widely used. 134 if (isReservedId(Text, Lang)) 135 return MD_ReservedMacro; 136 return MD_NoWarn; 137 } 138 139 // Return true if we want to issue a diagnostic by default if we 140 // encounter this name in a #include with the wrong case. For now, 141 // this includes the standard C and C++ headers, Posix headers, 142 // and Boost headers. Improper case for these #includes is a 143 // potential portability issue. 144 static bool warnByDefaultOnWrongCase(StringRef Include) { 145 // If the first component of the path is "boost", treat this like a standard header 146 // for the purposes of diagnostics. 147 if (::llvm::sys::path::begin(Include)->equals_lower("boost")) 148 return true; 149 150 // "condition_variable" is the longest standard header name at 18 characters. 151 // If the include file name is longer than that, it can't be a standard header. 152 static const size_t MaxStdHeaderNameLen = 18u; 153 if (Include.size() > MaxStdHeaderNameLen) 154 return false; 155 156 // Lowercase and normalize the search string. 157 SmallString<32> LowerInclude{Include}; 158 for (char &Ch : LowerInclude) { 159 // In the ASCII range? 160 if (static_cast<unsigned char>(Ch) > 0x7f) 161 return false; // Can't be a standard header 162 // ASCII lowercase: 163 if (Ch >= 'A' && Ch <= 'Z') 164 Ch += 'a' - 'A'; 165 // Normalize path separators for comparison purposes. 166 else if (::llvm::sys::path::is_separator(Ch)) 167 Ch = '/'; 168 } 169 170 // The standard C/C++ and Posix headers 171 return llvm::StringSwitch<bool>(LowerInclude) 172 // C library headers 173 .Cases("assert.h", "complex.h", "ctype.h", "errno.h", "fenv.h", true) 174 .Cases("float.h", "inttypes.h", "iso646.h", "limits.h", "locale.h", true) 175 .Cases("math.h", "setjmp.h", "signal.h", "stdalign.h", "stdarg.h", true) 176 .Cases("stdatomic.h", "stdbool.h", "stddef.h", "stdint.h", "stdio.h", true) 177 .Cases("stdlib.h", "stdnoreturn.h", "string.h", "tgmath.h", "threads.h", true) 178 .Cases("time.h", "uchar.h", "wchar.h", "wctype.h", true) 179 180 // C++ headers for C library facilities 181 .Cases("cassert", "ccomplex", "cctype", "cerrno", "cfenv", true) 182 .Cases("cfloat", "cinttypes", "ciso646", "climits", "clocale", true) 183 .Cases("cmath", "csetjmp", "csignal", "cstdalign", "cstdarg", true) 184 .Cases("cstdbool", "cstddef", "cstdint", "cstdio", "cstdlib", true) 185 .Cases("cstring", "ctgmath", "ctime", "cuchar", "cwchar", true) 186 .Case("cwctype", true) 187 188 // C++ library headers 189 .Cases("algorithm", "fstream", "list", "regex", "thread", true) 190 .Cases("array", "functional", "locale", "scoped_allocator", "tuple", true) 191 .Cases("atomic", "future", "map", "set", "type_traits", true) 192 .Cases("bitset", "initializer_list", "memory", "shared_mutex", "typeindex", true) 193 .Cases("chrono", "iomanip", "mutex", "sstream", "typeinfo", true) 194 .Cases("codecvt", "ios", "new", "stack", "unordered_map", true) 195 .Cases("complex", "iosfwd", "numeric", "stdexcept", "unordered_set", true) 196 .Cases("condition_variable", "iostream", "ostream", "streambuf", "utility", true) 197 .Cases("deque", "istream", "queue", "string", "valarray", true) 198 .Cases("exception", "iterator", "random", "strstream", "vector", true) 199 .Cases("forward_list", "limits", "ratio", "system_error", true) 200 201 // POSIX headers (which aren't also C headers) 202 .Cases("aio.h", "arpa/inet.h", "cpio.h", "dirent.h", "dlfcn.h", true) 203 .Cases("fcntl.h", "fmtmsg.h", "fnmatch.h", "ftw.h", "glob.h", true) 204 .Cases("grp.h", "iconv.h", "langinfo.h", "libgen.h", "monetary.h", true) 205 .Cases("mqueue.h", "ndbm.h", "net/if.h", "netdb.h", "netinet/in.h", true) 206 .Cases("netinet/tcp.h", "nl_types.h", "poll.h", "pthread.h", "pwd.h", true) 207 .Cases("regex.h", "sched.h", "search.h", "semaphore.h", "spawn.h", true) 208 .Cases("strings.h", "stropts.h", "sys/ipc.h", "sys/mman.h", "sys/msg.h", true) 209 .Cases("sys/resource.h", "sys/select.h", "sys/sem.h", "sys/shm.h", "sys/socket.h", true) 210 .Cases("sys/stat.h", "sys/statvfs.h", "sys/time.h", "sys/times.h", "sys/types.h", true) 211 .Cases("sys/uio.h", "sys/un.h", "sys/utsname.h", "sys/wait.h", "syslog.h", true) 212 .Cases("tar.h", "termios.h", "trace.h", "ulimit.h", true) 213 .Cases("unistd.h", "utime.h", "utmpx.h", "wordexp.h", true) 214 .Default(false); 215 } 216 217 bool Preprocessor::CheckMacroName(Token &MacroNameTok, MacroUse isDefineUndef, 218 bool *ShadowFlag) { 219 // Missing macro name? 220 if (MacroNameTok.is(tok::eod)) 221 return Diag(MacroNameTok, diag::err_pp_missing_macro_name); 222 223 IdentifierInfo *II = MacroNameTok.getIdentifierInfo(); 224 if (!II) 225 return Diag(MacroNameTok, diag::err_pp_macro_not_identifier); 226 227 if (II->isCPlusPlusOperatorKeyword()) { 228 // C++ 2.5p2: Alternative tokens behave the same as its primary token 229 // except for their spellings. 230 Diag(MacroNameTok, getLangOpts().MicrosoftExt 231 ? diag::ext_pp_operator_used_as_macro_name 232 : diag::err_pp_operator_used_as_macro_name) 233 << II << MacroNameTok.getKind(); 234 // Allow #defining |and| and friends for Microsoft compatibility or 235 // recovery when legacy C headers are included in C++. 236 } 237 238 if ((isDefineUndef != MU_Other) && II->getPPKeywordID() == tok::pp_defined) { 239 // Error if defining "defined": C99 6.10.8/4, C++ [cpp.predefined]p4. 240 return Diag(MacroNameTok, diag::err_defined_macro_name); 241 } 242 243 if (isDefineUndef == MU_Undef) { 244 auto *MI = getMacroInfo(II); 245 if (MI && MI->isBuiltinMacro()) { 246 // Warn if undefining "__LINE__" and other builtins, per C99 6.10.8/4 247 // and C++ [cpp.predefined]p4], but allow it as an extension. 248 Diag(MacroNameTok, diag::ext_pp_undef_builtin_macro); 249 } 250 } 251 252 // If defining/undefining reserved identifier or a keyword, we need to issue 253 // a warning. 254 SourceLocation MacroNameLoc = MacroNameTok.getLocation(); 255 if (ShadowFlag) 256 *ShadowFlag = false; 257 if (!SourceMgr.isInSystemHeader(MacroNameLoc) && 258 (SourceMgr.getBufferName(MacroNameLoc) != "<built-in>")) { 259 MacroDiag D = MD_NoWarn; 260 if (isDefineUndef == MU_Define) { 261 D = shouldWarnOnMacroDef(*this, II); 262 } 263 else if (isDefineUndef == MU_Undef) 264 D = shouldWarnOnMacroUndef(*this, II); 265 if (D == MD_KeywordDef) { 266 // We do not want to warn on some patterns widely used in configuration 267 // scripts. This requires analyzing next tokens, so do not issue warnings 268 // now, only inform caller. 269 if (ShadowFlag) 270 *ShadowFlag = true; 271 } 272 if (D == MD_ReservedMacro) 273 Diag(MacroNameTok, diag::warn_pp_macro_is_reserved_id); 274 } 275 276 // Okay, we got a good identifier. 277 return false; 278 } 279 280 /// \brief Lex and validate a macro name, which occurs after a 281 /// \#define or \#undef. 282 /// 283 /// This sets the token kind to eod and discards the rest of the macro line if 284 /// the macro name is invalid. 285 /// 286 /// \param MacroNameTok Token that is expected to be a macro name. 287 /// \param isDefineUndef Context in which macro is used. 288 /// \param ShadowFlag Points to a flag that is set if macro shadows a keyword. 289 void Preprocessor::ReadMacroName(Token &MacroNameTok, MacroUse isDefineUndef, 290 bool *ShadowFlag) { 291 // Read the token, don't allow macro expansion on it. 292 LexUnexpandedToken(MacroNameTok); 293 294 if (MacroNameTok.is(tok::code_completion)) { 295 if (CodeComplete) 296 CodeComplete->CodeCompleteMacroName(isDefineUndef == MU_Define); 297 setCodeCompletionReached(); 298 LexUnexpandedToken(MacroNameTok); 299 } 300 301 if (!CheckMacroName(MacroNameTok, isDefineUndef, ShadowFlag)) 302 return; 303 304 // Invalid macro name, read and discard the rest of the line and set the 305 // token kind to tok::eod if necessary. 306 if (MacroNameTok.isNot(tok::eod)) { 307 MacroNameTok.setKind(tok::eod); 308 DiscardUntilEndOfDirective(); 309 } 310 } 311 312 /// \brief Ensure that the next token is a tok::eod token. 313 /// 314 /// If not, emit a diagnostic and consume up until the eod. If EnableMacros is 315 /// true, then we consider macros that expand to zero tokens as being ok. 316 void Preprocessor::CheckEndOfDirective(const char *DirType, bool EnableMacros) { 317 Token Tmp; 318 // Lex unexpanded tokens for most directives: macros might expand to zero 319 // tokens, causing us to miss diagnosing invalid lines. Some directives (like 320 // #line) allow empty macros. 321 if (EnableMacros) 322 Lex(Tmp); 323 else 324 LexUnexpandedToken(Tmp); 325 326 // There should be no tokens after the directive, but we allow them as an 327 // extension. 328 while (Tmp.is(tok::comment)) // Skip comments in -C mode. 329 LexUnexpandedToken(Tmp); 330 331 if (Tmp.isNot(tok::eod)) { 332 // Add a fixit in GNU/C99/C++ mode. Don't offer a fixit for strict-C89, 333 // or if this is a macro-style preprocessing directive, because it is more 334 // trouble than it is worth to insert /**/ and check that there is no /**/ 335 // in the range also. 336 FixItHint Hint; 337 if ((LangOpts.GNUMode || LangOpts.C99 || LangOpts.CPlusPlus) && 338 !CurTokenLexer) 339 Hint = FixItHint::CreateInsertion(Tmp.getLocation(),"//"); 340 Diag(Tmp, diag::ext_pp_extra_tokens_at_eol) << DirType << Hint; 341 DiscardUntilEndOfDirective(); 342 } 343 } 344 345 /// SkipExcludedConditionalBlock - We just read a \#if or related directive and 346 /// decided that the subsequent tokens are in the \#if'd out portion of the 347 /// file. Lex the rest of the file, until we see an \#endif. If 348 /// FoundNonSkipPortion is true, then we have already emitted code for part of 349 /// this \#if directive, so \#else/\#elif blocks should never be entered. 350 /// If ElseOk is true, then \#else directives are ok, if not, then we have 351 /// already seen one so a \#else directive is a duplicate. When this returns, 352 /// the caller can lex the first valid token. 353 void Preprocessor::SkipExcludedConditionalBlock(SourceLocation HashTokenLoc, 354 SourceLocation IfTokenLoc, 355 bool FoundNonSkipPortion, 356 bool FoundElse, 357 SourceLocation ElseLoc) { 358 ++NumSkipped; 359 assert(!CurTokenLexer && CurPPLexer && "Lexing a macro, not a file?"); 360 361 if (PreambleConditionalStack.reachedEOFWhileSkipping()) 362 PreambleConditionalStack.clearSkipInfo(); 363 else 364 CurPPLexer->pushConditionalLevel(IfTokenLoc, /*isSkipping*/ false, 365 FoundNonSkipPortion, FoundElse); 366 367 if (CurPTHLexer) { 368 PTHSkipExcludedConditionalBlock(); 369 return; 370 } 371 372 // Enter raw mode to disable identifier lookup (and thus macro expansion), 373 // disabling warnings, etc. 374 CurPPLexer->LexingRawMode = true; 375 Token Tok; 376 while (true) { 377 CurLexer->Lex(Tok); 378 379 if (Tok.is(tok::code_completion)) { 380 if (CodeComplete) 381 CodeComplete->CodeCompleteInConditionalExclusion(); 382 setCodeCompletionReached(); 383 continue; 384 } 385 386 // If this is the end of the buffer, we have an error. 387 if (Tok.is(tok::eof)) { 388 // We don't emit errors for unterminated conditionals here, 389 // Lexer::LexEndOfFile can do that propertly. 390 // Just return and let the caller lex after this #include. 391 if (PreambleConditionalStack.isRecording()) 392 PreambleConditionalStack.SkipInfo.emplace( 393 HashTokenLoc, IfTokenLoc, FoundNonSkipPortion, FoundElse, ElseLoc); 394 break; 395 } 396 397 // If this token is not a preprocessor directive, just skip it. 398 if (Tok.isNot(tok::hash) || !Tok.isAtStartOfLine()) 399 continue; 400 401 // We just parsed a # character at the start of a line, so we're in 402 // directive mode. Tell the lexer this so any newlines we see will be 403 // converted into an EOD token (this terminates the macro). 404 CurPPLexer->ParsingPreprocessorDirective = true; 405 if (CurLexer) CurLexer->SetKeepWhitespaceMode(false); 406 407 408 // Read the next token, the directive flavor. 409 LexUnexpandedToken(Tok); 410 411 // If this isn't an identifier directive (e.g. is "# 1\n" or "#\n", or 412 // something bogus), skip it. 413 if (Tok.isNot(tok::raw_identifier)) { 414 CurPPLexer->ParsingPreprocessorDirective = false; 415 // Restore comment saving mode. 416 if (CurLexer) CurLexer->resetExtendedTokenMode(); 417 continue; 418 } 419 420 // If the first letter isn't i or e, it isn't intesting to us. We know that 421 // this is safe in the face of spelling differences, because there is no way 422 // to spell an i/e in a strange way that is another letter. Skipping this 423 // allows us to avoid looking up the identifier info for #define/#undef and 424 // other common directives. 425 StringRef RI = Tok.getRawIdentifier(); 426 427 char FirstChar = RI[0]; 428 if (FirstChar >= 'a' && FirstChar <= 'z' && 429 FirstChar != 'i' && FirstChar != 'e') { 430 CurPPLexer->ParsingPreprocessorDirective = false; 431 // Restore comment saving mode. 432 if (CurLexer) CurLexer->resetExtendedTokenMode(); 433 continue; 434 } 435 436 // Get the identifier name without trigraphs or embedded newlines. Note 437 // that we can't use Tok.getIdentifierInfo() because its lookup is disabled 438 // when skipping. 439 char DirectiveBuf[20]; 440 StringRef Directive; 441 if (!Tok.needsCleaning() && RI.size() < 20) { 442 Directive = RI; 443 } else { 444 std::string DirectiveStr = getSpelling(Tok); 445 size_t IdLen = DirectiveStr.size(); 446 if (IdLen >= 20) { 447 CurPPLexer->ParsingPreprocessorDirective = false; 448 // Restore comment saving mode. 449 if (CurLexer) CurLexer->resetExtendedTokenMode(); 450 continue; 451 } 452 memcpy(DirectiveBuf, &DirectiveStr[0], IdLen); 453 Directive = StringRef(DirectiveBuf, IdLen); 454 } 455 456 if (Directive.startswith("if")) { 457 StringRef Sub = Directive.substr(2); 458 if (Sub.empty() || // "if" 459 Sub == "def" || // "ifdef" 460 Sub == "ndef") { // "ifndef" 461 // We know the entire #if/#ifdef/#ifndef block will be skipped, don't 462 // bother parsing the condition. 463 DiscardUntilEndOfDirective(); 464 CurPPLexer->pushConditionalLevel(Tok.getLocation(), /*wasskipping*/true, 465 /*foundnonskip*/false, 466 /*foundelse*/false); 467 } 468 } else if (Directive[0] == 'e') { 469 StringRef Sub = Directive.substr(1); 470 if (Sub == "ndif") { // "endif" 471 PPConditionalInfo CondInfo; 472 CondInfo.WasSkipping = true; // Silence bogus warning. 473 bool InCond = CurPPLexer->popConditionalLevel(CondInfo); 474 (void)InCond; // Silence warning in no-asserts mode. 475 assert(!InCond && "Can't be skipping if not in a conditional!"); 476 477 // If we popped the outermost skipping block, we're done skipping! 478 if (!CondInfo.WasSkipping) { 479 // Restore the value of LexingRawMode so that trailing comments 480 // are handled correctly, if we've reached the outermost block. 481 CurPPLexer->LexingRawMode = false; 482 CheckEndOfDirective("endif"); 483 CurPPLexer->LexingRawMode = true; 484 if (Callbacks) 485 Callbacks->Endif(Tok.getLocation(), CondInfo.IfLoc); 486 break; 487 } else { 488 DiscardUntilEndOfDirective(); 489 } 490 } else if (Sub == "lse") { // "else". 491 // #else directive in a skipping conditional. If not in some other 492 // skipping conditional, and if #else hasn't already been seen, enter it 493 // as a non-skipping conditional. 494 PPConditionalInfo &CondInfo = CurPPLexer->peekConditionalLevel(); 495 496 // If this is a #else with a #else before it, report the error. 497 if (CondInfo.FoundElse) Diag(Tok, diag::pp_err_else_after_else); 498 499 // Note that we've seen a #else in this conditional. 500 CondInfo.FoundElse = true; 501 502 // If the conditional is at the top level, and the #if block wasn't 503 // entered, enter the #else block now. 504 if (!CondInfo.WasSkipping && !CondInfo.FoundNonSkip) { 505 CondInfo.FoundNonSkip = true; 506 // Restore the value of LexingRawMode so that trailing comments 507 // are handled correctly. 508 CurPPLexer->LexingRawMode = false; 509 CheckEndOfDirective("else"); 510 CurPPLexer->LexingRawMode = true; 511 if (Callbacks) 512 Callbacks->Else(Tok.getLocation(), CondInfo.IfLoc); 513 break; 514 } else { 515 DiscardUntilEndOfDirective(); // C99 6.10p4. 516 } 517 } else if (Sub == "lif") { // "elif". 518 PPConditionalInfo &CondInfo = CurPPLexer->peekConditionalLevel(); 519 520 // If this is a #elif with a #else before it, report the error. 521 if (CondInfo.FoundElse) Diag(Tok, diag::pp_err_elif_after_else); 522 523 // If this is in a skipping block or if we're already handled this #if 524 // block, don't bother parsing the condition. 525 if (CondInfo.WasSkipping || CondInfo.FoundNonSkip) { 526 DiscardUntilEndOfDirective(); 527 } else { 528 const SourceLocation CondBegin = CurPPLexer->getSourceLocation(); 529 // Restore the value of LexingRawMode so that identifiers are 530 // looked up, etc, inside the #elif expression. 531 assert(CurPPLexer->LexingRawMode && "We have to be skipping here!"); 532 CurPPLexer->LexingRawMode = false; 533 IdentifierInfo *IfNDefMacro = nullptr; 534 const bool CondValue = EvaluateDirectiveExpression(IfNDefMacro).Conditional; 535 CurPPLexer->LexingRawMode = true; 536 if (Callbacks) { 537 const SourceLocation CondEnd = CurPPLexer->getSourceLocation(); 538 Callbacks->Elif(Tok.getLocation(), 539 SourceRange(CondBegin, CondEnd), 540 (CondValue ? PPCallbacks::CVK_True : PPCallbacks::CVK_False), CondInfo.IfLoc); 541 } 542 // If this condition is true, enter it! 543 if (CondValue) { 544 CondInfo.FoundNonSkip = true; 545 break; 546 } 547 } 548 } 549 } 550 551 CurPPLexer->ParsingPreprocessorDirective = false; 552 // Restore comment saving mode. 553 if (CurLexer) CurLexer->resetExtendedTokenMode(); 554 } 555 556 // Finally, if we are out of the conditional (saw an #endif or ran off the end 557 // of the file, just stop skipping and return to lexing whatever came after 558 // the #if block. 559 CurPPLexer->LexingRawMode = false; 560 561 if (Callbacks) 562 Callbacks->SourceRangeSkipped( 563 SourceRange(HashTokenLoc, CurPPLexer->getSourceLocation()), 564 Tok.getLocation()); 565 } 566 567 void Preprocessor::PTHSkipExcludedConditionalBlock() { 568 while (true) { 569 assert(CurPTHLexer); 570 assert(CurPTHLexer->LexingRawMode == false); 571 572 // Skip to the next '#else', '#elif', or #endif. 573 if (CurPTHLexer->SkipBlock()) { 574 // We have reached an #endif. Both the '#' and 'endif' tokens 575 // have been consumed by the PTHLexer. Just pop off the condition level. 576 PPConditionalInfo CondInfo; 577 bool InCond = CurPTHLexer->popConditionalLevel(CondInfo); 578 (void)InCond; // Silence warning in no-asserts mode. 579 assert(!InCond && "Can't be skipping if not in a conditional!"); 580 break; 581 } 582 583 // We have reached a '#else' or '#elif'. Lex the next token to get 584 // the directive flavor. 585 Token Tok; 586 LexUnexpandedToken(Tok); 587 588 // We can actually look up the IdentifierInfo here since we aren't in 589 // raw mode. 590 tok::PPKeywordKind K = Tok.getIdentifierInfo()->getPPKeywordID(); 591 592 if (K == tok::pp_else) { 593 // #else: Enter the else condition. We aren't in a nested condition 594 // since we skip those. We're always in the one matching the last 595 // blocked we skipped. 596 PPConditionalInfo &CondInfo = CurPTHLexer->peekConditionalLevel(); 597 // Note that we've seen a #else in this conditional. 598 CondInfo.FoundElse = true; 599 600 // If the #if block wasn't entered then enter the #else block now. 601 if (!CondInfo.FoundNonSkip) { 602 CondInfo.FoundNonSkip = true; 603 604 // Scan until the eod token. 605 CurPTHLexer->ParsingPreprocessorDirective = true; 606 DiscardUntilEndOfDirective(); 607 CurPTHLexer->ParsingPreprocessorDirective = false; 608 609 break; 610 } 611 612 // Otherwise skip this block. 613 continue; 614 } 615 616 assert(K == tok::pp_elif); 617 PPConditionalInfo &CondInfo = CurPTHLexer->peekConditionalLevel(); 618 619 // If this is a #elif with a #else before it, report the error. 620 if (CondInfo.FoundElse) 621 Diag(Tok, diag::pp_err_elif_after_else); 622 623 // If this is in a skipping block or if we're already handled this #if 624 // block, don't bother parsing the condition. We just skip this block. 625 if (CondInfo.FoundNonSkip) 626 continue; 627 628 // Evaluate the condition of the #elif. 629 IdentifierInfo *IfNDefMacro = nullptr; 630 CurPTHLexer->ParsingPreprocessorDirective = true; 631 bool ShouldEnter = EvaluateDirectiveExpression(IfNDefMacro).Conditional; 632 CurPTHLexer->ParsingPreprocessorDirective = false; 633 634 // If this condition is true, enter it! 635 if (ShouldEnter) { 636 CondInfo.FoundNonSkip = true; 637 break; 638 } 639 640 // Otherwise, skip this block and go to the next one. 641 } 642 } 643 644 Module *Preprocessor::getModuleForLocation(SourceLocation Loc) { 645 if (!SourceMgr.isInMainFile(Loc)) { 646 // Try to determine the module of the include directive. 647 // FIXME: Look into directly passing the FileEntry from LookupFile instead. 648 FileID IDOfIncl = SourceMgr.getFileID(SourceMgr.getExpansionLoc(Loc)); 649 if (const FileEntry *EntryOfIncl = SourceMgr.getFileEntryForID(IDOfIncl)) { 650 // The include comes from an included file. 651 return HeaderInfo.getModuleMap() 652 .findModuleForHeader(EntryOfIncl) 653 .getModule(); 654 } 655 } 656 657 // This is either in the main file or not in a file at all. It belongs 658 // to the current module, if there is one. 659 return getLangOpts().CurrentModule.empty() 660 ? nullptr 661 : HeaderInfo.lookupModule(getLangOpts().CurrentModule); 662 } 663 664 const FileEntry * 665 Preprocessor::getModuleHeaderToIncludeForDiagnostics(SourceLocation IncLoc, 666 Module *M, 667 SourceLocation Loc) { 668 assert(M && "no module to include"); 669 670 // If we have a module import syntax, we shouldn't include a header to 671 // make a particular module visible. 672 if (getLangOpts().ObjC2) 673 return nullptr; 674 675 Module *TopM = M->getTopLevelModule(); 676 Module *IncM = getModuleForLocation(IncLoc); 677 678 // Walk up through the include stack, looking through textual headers of M 679 // until we hit a non-textual header that we can #include. (We assume textual 680 // headers of a module with non-textual headers aren't meant to be used to 681 // import entities from the module.) 682 auto &SM = getSourceManager(); 683 while (!Loc.isInvalid() && !SM.isInMainFile(Loc)) { 684 auto ID = SM.getFileID(SM.getExpansionLoc(Loc)); 685 auto *FE = SM.getFileEntryForID(ID); 686 if (!FE) 687 break; 688 689 bool InTextualHeader = false; 690 for (auto Header : HeaderInfo.getModuleMap().findAllModulesForHeader(FE)) { 691 if (!Header.getModule()->isSubModuleOf(TopM)) 692 continue; 693 694 if (!(Header.getRole() & ModuleMap::TextualHeader)) { 695 // If this is an accessible, non-textual header of M's top-level module 696 // that transitively includes the given location and makes the 697 // corresponding module visible, this is the thing to #include. 698 if (Header.isAccessibleFrom(IncM)) 699 return FE; 700 701 // It's in a private header; we can't #include it. 702 // FIXME: If there's a public header in some module that re-exports it, 703 // then we could suggest including that, but it's not clear that's the 704 // expected way to make this entity visible. 705 continue; 706 } 707 708 InTextualHeader = true; 709 } 710 711 if (!InTextualHeader) 712 break; 713 714 Loc = SM.getIncludeLoc(ID); 715 } 716 717 return nullptr; 718 } 719 720 const FileEntry *Preprocessor::LookupFile( 721 SourceLocation FilenameLoc, StringRef Filename, bool isAngled, 722 const DirectoryLookup *FromDir, const FileEntry *FromFile, 723 const DirectoryLookup *&CurDir, SmallVectorImpl<char> *SearchPath, 724 SmallVectorImpl<char> *RelativePath, 725 ModuleMap::KnownHeader *SuggestedModule, bool *IsMapped, bool SkipCache) { 726 Module *RequestingModule = getModuleForLocation(FilenameLoc); 727 bool RequestingModuleIsModuleInterface = !SourceMgr.isInMainFile(FilenameLoc); 728 729 // If the header lookup mechanism may be relative to the current inclusion 730 // stack, record the parent #includes. 731 SmallVector<std::pair<const FileEntry *, const DirectoryEntry *>, 16> 732 Includers; 733 bool BuildSystemModule = false; 734 if (!FromDir && !FromFile) { 735 FileID FID = getCurrentFileLexer()->getFileID(); 736 const FileEntry *FileEnt = SourceMgr.getFileEntryForID(FID); 737 738 // If there is no file entry associated with this file, it must be the 739 // predefines buffer or the module includes buffer. Any other file is not 740 // lexed with a normal lexer, so it won't be scanned for preprocessor 741 // directives. 742 // 743 // If we have the predefines buffer, resolve #include references (which come 744 // from the -include command line argument) from the current working 745 // directory instead of relative to the main file. 746 // 747 // If we have the module includes buffer, resolve #include references (which 748 // come from header declarations in the module map) relative to the module 749 // map file. 750 if (!FileEnt) { 751 if (FID == SourceMgr.getMainFileID() && MainFileDir) { 752 Includers.push_back(std::make_pair(nullptr, MainFileDir)); 753 BuildSystemModule = getCurrentModule()->IsSystem; 754 } else if ((FileEnt = 755 SourceMgr.getFileEntryForID(SourceMgr.getMainFileID()))) 756 Includers.push_back(std::make_pair(FileEnt, FileMgr.getDirectory("."))); 757 } else { 758 Includers.push_back(std::make_pair(FileEnt, FileEnt->getDir())); 759 } 760 761 // MSVC searches the current include stack from top to bottom for 762 // headers included by quoted include directives. 763 // See: http://msdn.microsoft.com/en-us/library/36k2cdd4.aspx 764 if (LangOpts.MSVCCompat && !isAngled) { 765 for (IncludeStackInfo &ISEntry : llvm::reverse(IncludeMacroStack)) { 766 if (IsFileLexer(ISEntry)) 767 if ((FileEnt = ISEntry.ThePPLexer->getFileEntry())) 768 Includers.push_back(std::make_pair(FileEnt, FileEnt->getDir())); 769 } 770 } 771 } 772 773 CurDir = CurDirLookup; 774 775 if (FromFile) { 776 // We're supposed to start looking from after a particular file. Search 777 // the include path until we find that file or run out of files. 778 const DirectoryLookup *TmpCurDir = CurDir; 779 const DirectoryLookup *TmpFromDir = nullptr; 780 while (const FileEntry *FE = HeaderInfo.LookupFile( 781 Filename, FilenameLoc, isAngled, TmpFromDir, TmpCurDir, 782 Includers, SearchPath, RelativePath, RequestingModule, 783 SuggestedModule, /*IsMapped=*/nullptr, SkipCache)) { 784 // Keep looking as if this file did a #include_next. 785 TmpFromDir = TmpCurDir; 786 ++TmpFromDir; 787 if (FE == FromFile) { 788 // Found it. 789 FromDir = TmpFromDir; 790 CurDir = TmpCurDir; 791 break; 792 } 793 } 794 } 795 796 // Do a standard file entry lookup. 797 const FileEntry *FE = HeaderInfo.LookupFile( 798 Filename, FilenameLoc, isAngled, FromDir, CurDir, Includers, SearchPath, 799 RelativePath, RequestingModule, SuggestedModule, IsMapped, SkipCache, 800 BuildSystemModule); 801 if (FE) { 802 if (SuggestedModule && !LangOpts.AsmPreprocessor) 803 HeaderInfo.getModuleMap().diagnoseHeaderInclusion( 804 RequestingModule, RequestingModuleIsModuleInterface, FilenameLoc, 805 Filename, FE); 806 return FE; 807 } 808 809 const FileEntry *CurFileEnt; 810 // Otherwise, see if this is a subframework header. If so, this is relative 811 // to one of the headers on the #include stack. Walk the list of the current 812 // headers on the #include stack and pass them to HeaderInfo. 813 if (IsFileLexer()) { 814 if ((CurFileEnt = CurPPLexer->getFileEntry())) { 815 if ((FE = HeaderInfo.LookupSubframeworkHeader(Filename, CurFileEnt, 816 SearchPath, RelativePath, 817 RequestingModule, 818 SuggestedModule))) { 819 if (SuggestedModule && !LangOpts.AsmPreprocessor) 820 HeaderInfo.getModuleMap().diagnoseHeaderInclusion( 821 RequestingModule, RequestingModuleIsModuleInterface, FilenameLoc, 822 Filename, FE); 823 return FE; 824 } 825 } 826 } 827 828 for (IncludeStackInfo &ISEntry : llvm::reverse(IncludeMacroStack)) { 829 if (IsFileLexer(ISEntry)) { 830 if ((CurFileEnt = ISEntry.ThePPLexer->getFileEntry())) { 831 if ((FE = HeaderInfo.LookupSubframeworkHeader( 832 Filename, CurFileEnt, SearchPath, RelativePath, 833 RequestingModule, SuggestedModule))) { 834 if (SuggestedModule && !LangOpts.AsmPreprocessor) 835 HeaderInfo.getModuleMap().diagnoseHeaderInclusion( 836 RequestingModule, RequestingModuleIsModuleInterface, 837 FilenameLoc, Filename, FE); 838 return FE; 839 } 840 } 841 } 842 } 843 844 // Otherwise, we really couldn't find the file. 845 return nullptr; 846 } 847 848 //===----------------------------------------------------------------------===// 849 // Preprocessor Directive Handling. 850 //===----------------------------------------------------------------------===// 851 852 class Preprocessor::ResetMacroExpansionHelper { 853 public: 854 ResetMacroExpansionHelper(Preprocessor *pp) 855 : PP(pp), save(pp->DisableMacroExpansion) { 856 if (pp->MacroExpansionInDirectivesOverride) 857 pp->DisableMacroExpansion = false; 858 } 859 860 ~ResetMacroExpansionHelper() { 861 PP->DisableMacroExpansion = save; 862 } 863 864 private: 865 Preprocessor *PP; 866 bool save; 867 }; 868 869 /// HandleDirective - This callback is invoked when the lexer sees a # token 870 /// at the start of a line. This consumes the directive, modifies the 871 /// lexer/preprocessor state, and advances the lexer(s) so that the next token 872 /// read is the correct one. 873 void Preprocessor::HandleDirective(Token &Result) { 874 // FIXME: Traditional: # with whitespace before it not recognized by K&R? 875 876 // We just parsed a # character at the start of a line, so we're in directive 877 // mode. Tell the lexer this so any newlines we see will be converted into an 878 // EOD token (which terminates the directive). 879 CurPPLexer->ParsingPreprocessorDirective = true; 880 if (CurLexer) CurLexer->SetKeepWhitespaceMode(false); 881 882 bool ImmediatelyAfterTopLevelIfndef = 883 CurPPLexer->MIOpt.getImmediatelyAfterTopLevelIfndef(); 884 CurPPLexer->MIOpt.resetImmediatelyAfterTopLevelIfndef(); 885 886 ++NumDirectives; 887 888 // We are about to read a token. For the multiple-include optimization FA to 889 // work, we have to remember if we had read any tokens *before* this 890 // pp-directive. 891 bool ReadAnyTokensBeforeDirective =CurPPLexer->MIOpt.getHasReadAnyTokensVal(); 892 893 // Save the '#' token in case we need to return it later. 894 Token SavedHash = Result; 895 896 // Read the next token, the directive flavor. This isn't expanded due to 897 // C99 6.10.3p8. 898 LexUnexpandedToken(Result); 899 900 // C99 6.10.3p11: Is this preprocessor directive in macro invocation? e.g.: 901 // #define A(x) #x 902 // A(abc 903 // #warning blah 904 // def) 905 // If so, the user is relying on undefined behavior, emit a diagnostic. Do 906 // not support this for #include-like directives, since that can result in 907 // terrible diagnostics, and does not work in GCC. 908 if (InMacroArgs) { 909 if (IdentifierInfo *II = Result.getIdentifierInfo()) { 910 switch (II->getPPKeywordID()) { 911 case tok::pp_include: 912 case tok::pp_import: 913 case tok::pp_include_next: 914 case tok::pp___include_macros: 915 case tok::pp_pragma: 916 Diag(Result, diag::err_embedded_directive) << II->getName(); 917 DiscardUntilEndOfDirective(); 918 return; 919 default: 920 break; 921 } 922 } 923 Diag(Result, diag::ext_embedded_directive); 924 } 925 926 // Temporarily enable macro expansion if set so 927 // and reset to previous state when returning from this function. 928 ResetMacroExpansionHelper helper(this); 929 930 switch (Result.getKind()) { 931 case tok::eod: 932 return; // null directive. 933 case tok::code_completion: 934 if (CodeComplete) 935 CodeComplete->CodeCompleteDirective( 936 CurPPLexer->getConditionalStackDepth() > 0); 937 setCodeCompletionReached(); 938 return; 939 case tok::numeric_constant: // # 7 GNU line marker directive. 940 if (getLangOpts().AsmPreprocessor) 941 break; // # 4 is not a preprocessor directive in .S files. 942 return HandleDigitDirective(Result); 943 default: 944 IdentifierInfo *II = Result.getIdentifierInfo(); 945 if (!II) break; // Not an identifier. 946 947 // Ask what the preprocessor keyword ID is. 948 switch (II->getPPKeywordID()) { 949 default: break; 950 // C99 6.10.1 - Conditional Inclusion. 951 case tok::pp_if: 952 return HandleIfDirective(Result, SavedHash, ReadAnyTokensBeforeDirective); 953 case tok::pp_ifdef: 954 return HandleIfdefDirective(Result, SavedHash, false, 955 true /*not valid for miopt*/); 956 case tok::pp_ifndef: 957 return HandleIfdefDirective(Result, SavedHash, true, 958 ReadAnyTokensBeforeDirective); 959 case tok::pp_elif: 960 return HandleElifDirective(Result, SavedHash); 961 case tok::pp_else: 962 return HandleElseDirective(Result, SavedHash); 963 case tok::pp_endif: 964 return HandleEndifDirective(Result); 965 966 // C99 6.10.2 - Source File Inclusion. 967 case tok::pp_include: 968 // Handle #include. 969 return HandleIncludeDirective(SavedHash.getLocation(), Result); 970 case tok::pp___include_macros: 971 // Handle -imacros. 972 return HandleIncludeMacrosDirective(SavedHash.getLocation(), Result); 973 974 // C99 6.10.3 - Macro Replacement. 975 case tok::pp_define: 976 return HandleDefineDirective(Result, ImmediatelyAfterTopLevelIfndef); 977 case tok::pp_undef: 978 return HandleUndefDirective(); 979 980 // C99 6.10.4 - Line Control. 981 case tok::pp_line: 982 return HandleLineDirective(); 983 984 // C99 6.10.5 - Error Directive. 985 case tok::pp_error: 986 return HandleUserDiagnosticDirective(Result, false); 987 988 // C99 6.10.6 - Pragma Directive. 989 case tok::pp_pragma: 990 return HandlePragmaDirective(SavedHash.getLocation(), PIK_HashPragma); 991 992 // GNU Extensions. 993 case tok::pp_import: 994 return HandleImportDirective(SavedHash.getLocation(), Result); 995 case tok::pp_include_next: 996 return HandleIncludeNextDirective(SavedHash.getLocation(), Result); 997 998 case tok::pp_warning: 999 Diag(Result, diag::ext_pp_warning_directive); 1000 return HandleUserDiagnosticDirective(Result, true); 1001 case tok::pp_ident: 1002 return HandleIdentSCCSDirective(Result); 1003 case tok::pp_sccs: 1004 return HandleIdentSCCSDirective(Result); 1005 case tok::pp_assert: 1006 //isExtension = true; // FIXME: implement #assert 1007 break; 1008 case tok::pp_unassert: 1009 //isExtension = true; // FIXME: implement #unassert 1010 break; 1011 1012 case tok::pp___public_macro: 1013 if (getLangOpts().Modules) 1014 return HandleMacroPublicDirective(Result); 1015 break; 1016 1017 case tok::pp___private_macro: 1018 if (getLangOpts().Modules) 1019 return HandleMacroPrivateDirective(); 1020 break; 1021 } 1022 break; 1023 } 1024 1025 // If this is a .S file, treat unknown # directives as non-preprocessor 1026 // directives. This is important because # may be a comment or introduce 1027 // various pseudo-ops. Just return the # token and push back the following 1028 // token to be lexed next time. 1029 if (getLangOpts().AsmPreprocessor) { 1030 auto Toks = llvm::make_unique<Token[]>(2); 1031 // Return the # and the token after it. 1032 Toks[0] = SavedHash; 1033 Toks[1] = Result; 1034 1035 // If the second token is a hashhash token, then we need to translate it to 1036 // unknown so the token lexer doesn't try to perform token pasting. 1037 if (Result.is(tok::hashhash)) 1038 Toks[1].setKind(tok::unknown); 1039 1040 // Enter this token stream so that we re-lex the tokens. Make sure to 1041 // enable macro expansion, in case the token after the # is an identifier 1042 // that is expanded. 1043 EnterTokenStream(std::move(Toks), 2, false); 1044 return; 1045 } 1046 1047 // If we reached here, the preprocessing token is not valid! 1048 Diag(Result, diag::err_pp_invalid_directive); 1049 1050 // Read the rest of the PP line. 1051 DiscardUntilEndOfDirective(); 1052 1053 // Okay, we're done parsing the directive. 1054 } 1055 1056 /// GetLineValue - Convert a numeric token into an unsigned value, emitting 1057 /// Diagnostic DiagID if it is invalid, and returning the value in Val. 1058 static bool GetLineValue(Token &DigitTok, unsigned &Val, 1059 unsigned DiagID, Preprocessor &PP, 1060 bool IsGNULineDirective=false) { 1061 if (DigitTok.isNot(tok::numeric_constant)) { 1062 PP.Diag(DigitTok, DiagID); 1063 1064 if (DigitTok.isNot(tok::eod)) 1065 PP.DiscardUntilEndOfDirective(); 1066 return true; 1067 } 1068 1069 SmallString<64> IntegerBuffer; 1070 IntegerBuffer.resize(DigitTok.getLength()); 1071 const char *DigitTokBegin = &IntegerBuffer[0]; 1072 bool Invalid = false; 1073 unsigned ActualLength = PP.getSpelling(DigitTok, DigitTokBegin, &Invalid); 1074 if (Invalid) 1075 return true; 1076 1077 // Verify that we have a simple digit-sequence, and compute the value. This 1078 // is always a simple digit string computed in decimal, so we do this manually 1079 // here. 1080 Val = 0; 1081 for (unsigned i = 0; i != ActualLength; ++i) { 1082 // C++1y [lex.fcon]p1: 1083 // Optional separating single quotes in a digit-sequence are ignored 1084 if (DigitTokBegin[i] == '\'') 1085 continue; 1086 1087 if (!isDigit(DigitTokBegin[i])) { 1088 PP.Diag(PP.AdvanceToTokenCharacter(DigitTok.getLocation(), i), 1089 diag::err_pp_line_digit_sequence) << IsGNULineDirective; 1090 PP.DiscardUntilEndOfDirective(); 1091 return true; 1092 } 1093 1094 unsigned NextVal = Val*10+(DigitTokBegin[i]-'0'); 1095 if (NextVal < Val) { // overflow. 1096 PP.Diag(DigitTok, DiagID); 1097 PP.DiscardUntilEndOfDirective(); 1098 return true; 1099 } 1100 Val = NextVal; 1101 } 1102 1103 if (DigitTokBegin[0] == '0' && Val) 1104 PP.Diag(DigitTok.getLocation(), diag::warn_pp_line_decimal) 1105 << IsGNULineDirective; 1106 1107 return false; 1108 } 1109 1110 /// \brief Handle a \#line directive: C99 6.10.4. 1111 /// 1112 /// The two acceptable forms are: 1113 /// \verbatim 1114 /// # line digit-sequence 1115 /// # line digit-sequence "s-char-sequence" 1116 /// \endverbatim 1117 void Preprocessor::HandleLineDirective() { 1118 // Read the line # and string argument. Per C99 6.10.4p5, these tokens are 1119 // expanded. 1120 Token DigitTok; 1121 Lex(DigitTok); 1122 1123 // Validate the number and convert it to an unsigned. 1124 unsigned LineNo; 1125 if (GetLineValue(DigitTok, LineNo, diag::err_pp_line_requires_integer,*this)) 1126 return; 1127 1128 if (LineNo == 0) 1129 Diag(DigitTok, diag::ext_pp_line_zero); 1130 1131 // Enforce C99 6.10.4p3: "The digit sequence shall not specify ... a 1132 // number greater than 2147483647". C90 requires that the line # be <= 32767. 1133 unsigned LineLimit = 32768U; 1134 if (LangOpts.C99 || LangOpts.CPlusPlus11) 1135 LineLimit = 2147483648U; 1136 if (LineNo >= LineLimit) 1137 Diag(DigitTok, diag::ext_pp_line_too_big) << LineLimit; 1138 else if (LangOpts.CPlusPlus11 && LineNo >= 32768U) 1139 Diag(DigitTok, diag::warn_cxx98_compat_pp_line_too_big); 1140 1141 int FilenameID = -1; 1142 Token StrTok; 1143 Lex(StrTok); 1144 1145 // If the StrTok is "eod", then it wasn't present. Otherwise, it must be a 1146 // string followed by eod. 1147 if (StrTok.is(tok::eod)) 1148 ; // ok 1149 else if (StrTok.isNot(tok::string_literal)) { 1150 Diag(StrTok, diag::err_pp_line_invalid_filename); 1151 return DiscardUntilEndOfDirective(); 1152 } else if (StrTok.hasUDSuffix()) { 1153 Diag(StrTok, diag::err_invalid_string_udl); 1154 return DiscardUntilEndOfDirective(); 1155 } else { 1156 // Parse and validate the string, converting it into a unique ID. 1157 StringLiteralParser Literal(StrTok, *this); 1158 assert(Literal.isAscii() && "Didn't allow wide strings in"); 1159 if (Literal.hadError) 1160 return DiscardUntilEndOfDirective(); 1161 if (Literal.Pascal) { 1162 Diag(StrTok, diag::err_pp_linemarker_invalid_filename); 1163 return DiscardUntilEndOfDirective(); 1164 } 1165 FilenameID = SourceMgr.getLineTableFilenameID(Literal.GetString()); 1166 1167 // Verify that there is nothing after the string, other than EOD. Because 1168 // of C99 6.10.4p5, macros that expand to empty tokens are ok. 1169 CheckEndOfDirective("line", true); 1170 } 1171 1172 // Take the file kind of the file containing the #line directive. #line 1173 // directives are often used for generated sources from the same codebase, so 1174 // the new file should generally be classified the same way as the current 1175 // file. This is visible in GCC's pre-processed output, which rewrites #line 1176 // to GNU line markers. 1177 SrcMgr::CharacteristicKind FileKind = 1178 SourceMgr.getFileCharacteristic(DigitTok.getLocation()); 1179 1180 SourceMgr.AddLineNote(DigitTok.getLocation(), LineNo, FilenameID, false, 1181 false, FileKind); 1182 1183 if (Callbacks) 1184 Callbacks->FileChanged(CurPPLexer->getSourceLocation(), 1185 PPCallbacks::RenameFile, FileKind); 1186 } 1187 1188 /// ReadLineMarkerFlags - Parse and validate any flags at the end of a GNU line 1189 /// marker directive. 1190 static bool ReadLineMarkerFlags(bool &IsFileEntry, bool &IsFileExit, 1191 SrcMgr::CharacteristicKind &FileKind, 1192 Preprocessor &PP) { 1193 unsigned FlagVal; 1194 Token FlagTok; 1195 PP.Lex(FlagTok); 1196 if (FlagTok.is(tok::eod)) return false; 1197 if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP)) 1198 return true; 1199 1200 if (FlagVal == 1) { 1201 IsFileEntry = true; 1202 1203 PP.Lex(FlagTok); 1204 if (FlagTok.is(tok::eod)) return false; 1205 if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag,PP)) 1206 return true; 1207 } else if (FlagVal == 2) { 1208 IsFileExit = true; 1209 1210 SourceManager &SM = PP.getSourceManager(); 1211 // If we are leaving the current presumed file, check to make sure the 1212 // presumed include stack isn't empty! 1213 FileID CurFileID = 1214 SM.getDecomposedExpansionLoc(FlagTok.getLocation()).first; 1215 PresumedLoc PLoc = SM.getPresumedLoc(FlagTok.getLocation()); 1216 if (PLoc.isInvalid()) 1217 return true; 1218 1219 // If there is no include loc (main file) or if the include loc is in a 1220 // different physical file, then we aren't in a "1" line marker flag region. 1221 SourceLocation IncLoc = PLoc.getIncludeLoc(); 1222 if (IncLoc.isInvalid() || 1223 SM.getDecomposedExpansionLoc(IncLoc).first != CurFileID) { 1224 PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_pop); 1225 PP.DiscardUntilEndOfDirective(); 1226 return true; 1227 } 1228 1229 PP.Lex(FlagTok); 1230 if (FlagTok.is(tok::eod)) return false; 1231 if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag,PP)) 1232 return true; 1233 } 1234 1235 // We must have 3 if there are still flags. 1236 if (FlagVal != 3) { 1237 PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag); 1238 PP.DiscardUntilEndOfDirective(); 1239 return true; 1240 } 1241 1242 FileKind = SrcMgr::C_System; 1243 1244 PP.Lex(FlagTok); 1245 if (FlagTok.is(tok::eod)) return false; 1246 if (GetLineValue(FlagTok, FlagVal, diag::err_pp_linemarker_invalid_flag, PP)) 1247 return true; 1248 1249 // We must have 4 if there is yet another flag. 1250 if (FlagVal != 4) { 1251 PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag); 1252 PP.DiscardUntilEndOfDirective(); 1253 return true; 1254 } 1255 1256 FileKind = SrcMgr::C_ExternCSystem; 1257 1258 PP.Lex(FlagTok); 1259 if (FlagTok.is(tok::eod)) return false; 1260 1261 // There are no more valid flags here. 1262 PP.Diag(FlagTok, diag::err_pp_linemarker_invalid_flag); 1263 PP.DiscardUntilEndOfDirective(); 1264 return true; 1265 } 1266 1267 /// HandleDigitDirective - Handle a GNU line marker directive, whose syntax is 1268 /// one of the following forms: 1269 /// 1270 /// # 42 1271 /// # 42 "file" ('1' | '2')? 1272 /// # 42 "file" ('1' | '2')? '3' '4'? 1273 /// 1274 void Preprocessor::HandleDigitDirective(Token &DigitTok) { 1275 // Validate the number and convert it to an unsigned. GNU does not have a 1276 // line # limit other than it fit in 32-bits. 1277 unsigned LineNo; 1278 if (GetLineValue(DigitTok, LineNo, diag::err_pp_linemarker_requires_integer, 1279 *this, true)) 1280 return; 1281 1282 Token StrTok; 1283 Lex(StrTok); 1284 1285 bool IsFileEntry = false, IsFileExit = false; 1286 int FilenameID = -1; 1287 SrcMgr::CharacteristicKind FileKind = SrcMgr::C_User; 1288 1289 // If the StrTok is "eod", then it wasn't present. Otherwise, it must be a 1290 // string followed by eod. 1291 if (StrTok.is(tok::eod)) { 1292 // Treat this like "#line NN", which doesn't change file characteristics. 1293 FileKind = SourceMgr.getFileCharacteristic(DigitTok.getLocation()); 1294 } else if (StrTok.isNot(tok::string_literal)) { 1295 Diag(StrTok, diag::err_pp_linemarker_invalid_filename); 1296 return DiscardUntilEndOfDirective(); 1297 } else if (StrTok.hasUDSuffix()) { 1298 Diag(StrTok, diag::err_invalid_string_udl); 1299 return DiscardUntilEndOfDirective(); 1300 } else { 1301 // Parse and validate the string, converting it into a unique ID. 1302 StringLiteralParser Literal(StrTok, *this); 1303 assert(Literal.isAscii() && "Didn't allow wide strings in"); 1304 if (Literal.hadError) 1305 return DiscardUntilEndOfDirective(); 1306 if (Literal.Pascal) { 1307 Diag(StrTok, diag::err_pp_linemarker_invalid_filename); 1308 return DiscardUntilEndOfDirective(); 1309 } 1310 FilenameID = SourceMgr.getLineTableFilenameID(Literal.GetString()); 1311 1312 // If a filename was present, read any flags that are present. 1313 if (ReadLineMarkerFlags(IsFileEntry, IsFileExit, FileKind, *this)) 1314 return; 1315 } 1316 1317 // Create a line note with this information. 1318 SourceMgr.AddLineNote(DigitTok.getLocation(), LineNo, FilenameID, IsFileEntry, 1319 IsFileExit, FileKind); 1320 1321 // If the preprocessor has callbacks installed, notify them of the #line 1322 // change. This is used so that the line marker comes out in -E mode for 1323 // example. 1324 if (Callbacks) { 1325 PPCallbacks::FileChangeReason Reason = PPCallbacks::RenameFile; 1326 if (IsFileEntry) 1327 Reason = PPCallbacks::EnterFile; 1328 else if (IsFileExit) 1329 Reason = PPCallbacks::ExitFile; 1330 1331 Callbacks->FileChanged(CurPPLexer->getSourceLocation(), Reason, FileKind); 1332 } 1333 } 1334 1335 /// HandleUserDiagnosticDirective - Handle a #warning or #error directive. 1336 /// 1337 void Preprocessor::HandleUserDiagnosticDirective(Token &Tok, 1338 bool isWarning) { 1339 // PTH doesn't emit #warning or #error directives. 1340 if (CurPTHLexer) 1341 return CurPTHLexer->DiscardToEndOfLine(); 1342 1343 // Read the rest of the line raw. We do this because we don't want macros 1344 // to be expanded and we don't require that the tokens be valid preprocessing 1345 // tokens. For example, this is allowed: "#warning ` 'foo". GCC does 1346 // collapse multiple consequtive white space between tokens, but this isn't 1347 // specified by the standard. 1348 SmallString<128> Message; 1349 CurLexer->ReadToEndOfLine(&Message); 1350 1351 // Find the first non-whitespace character, so that we can make the 1352 // diagnostic more succinct. 1353 StringRef Msg = StringRef(Message).ltrim(' '); 1354 1355 if (isWarning) 1356 Diag(Tok, diag::pp_hash_warning) << Msg; 1357 else 1358 Diag(Tok, diag::err_pp_hash_error) << Msg; 1359 } 1360 1361 /// HandleIdentSCCSDirective - Handle a #ident/#sccs directive. 1362 /// 1363 void Preprocessor::HandleIdentSCCSDirective(Token &Tok) { 1364 // Yes, this directive is an extension. 1365 Diag(Tok, diag::ext_pp_ident_directive); 1366 1367 // Read the string argument. 1368 Token StrTok; 1369 Lex(StrTok); 1370 1371 // If the token kind isn't a string, it's a malformed directive. 1372 if (StrTok.isNot(tok::string_literal) && 1373 StrTok.isNot(tok::wide_string_literal)) { 1374 Diag(StrTok, diag::err_pp_malformed_ident); 1375 if (StrTok.isNot(tok::eod)) 1376 DiscardUntilEndOfDirective(); 1377 return; 1378 } 1379 1380 if (StrTok.hasUDSuffix()) { 1381 Diag(StrTok, diag::err_invalid_string_udl); 1382 return DiscardUntilEndOfDirective(); 1383 } 1384 1385 // Verify that there is nothing after the string, other than EOD. 1386 CheckEndOfDirective("ident"); 1387 1388 if (Callbacks) { 1389 bool Invalid = false; 1390 std::string Str = getSpelling(StrTok, &Invalid); 1391 if (!Invalid) 1392 Callbacks->Ident(Tok.getLocation(), Str); 1393 } 1394 } 1395 1396 /// \brief Handle a #public directive. 1397 void Preprocessor::HandleMacroPublicDirective(Token &Tok) { 1398 Token MacroNameTok; 1399 ReadMacroName(MacroNameTok, MU_Undef); 1400 1401 // Error reading macro name? If so, diagnostic already issued. 1402 if (MacroNameTok.is(tok::eod)) 1403 return; 1404 1405 // Check to see if this is the last token on the #__public_macro line. 1406 CheckEndOfDirective("__public_macro"); 1407 1408 IdentifierInfo *II = MacroNameTok.getIdentifierInfo(); 1409 // Okay, we finally have a valid identifier to undef. 1410 MacroDirective *MD = getLocalMacroDirective(II); 1411 1412 // If the macro is not defined, this is an error. 1413 if (!MD) { 1414 Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II; 1415 return; 1416 } 1417 1418 // Note that this macro has now been exported. 1419 appendMacroDirective(II, AllocateVisibilityMacroDirective( 1420 MacroNameTok.getLocation(), /*IsPublic=*/true)); 1421 } 1422 1423 /// \brief Handle a #private directive. 1424 void Preprocessor::HandleMacroPrivateDirective() { 1425 Token MacroNameTok; 1426 ReadMacroName(MacroNameTok, MU_Undef); 1427 1428 // Error reading macro name? If so, diagnostic already issued. 1429 if (MacroNameTok.is(tok::eod)) 1430 return; 1431 1432 // Check to see if this is the last token on the #__private_macro line. 1433 CheckEndOfDirective("__private_macro"); 1434 1435 IdentifierInfo *II = MacroNameTok.getIdentifierInfo(); 1436 // Okay, we finally have a valid identifier to undef. 1437 MacroDirective *MD = getLocalMacroDirective(II); 1438 1439 // If the macro is not defined, this is an error. 1440 if (!MD) { 1441 Diag(MacroNameTok, diag::err_pp_visibility_non_macro) << II; 1442 return; 1443 } 1444 1445 // Note that this macro has now been marked private. 1446 appendMacroDirective(II, AllocateVisibilityMacroDirective( 1447 MacroNameTok.getLocation(), /*IsPublic=*/false)); 1448 } 1449 1450 //===----------------------------------------------------------------------===// 1451 // Preprocessor Include Directive Handling. 1452 //===----------------------------------------------------------------------===// 1453 1454 /// GetIncludeFilenameSpelling - Turn the specified lexer token into a fully 1455 /// checked and spelled filename, e.g. as an operand of \#include. This returns 1456 /// true if the input filename was in <>'s or false if it were in ""'s. The 1457 /// caller is expected to provide a buffer that is large enough to hold the 1458 /// spelling of the filename, but is also expected to handle the case when 1459 /// this method decides to use a different buffer. 1460 bool Preprocessor::GetIncludeFilenameSpelling(SourceLocation Loc, 1461 StringRef &Buffer) { 1462 // Get the text form of the filename. 1463 assert(!Buffer.empty() && "Can't have tokens with empty spellings!"); 1464 1465 // Make sure the filename is <x> or "x". 1466 bool isAngled; 1467 if (Buffer[0] == '<') { 1468 if (Buffer.back() != '>') { 1469 Diag(Loc, diag::err_pp_expects_filename); 1470 Buffer = StringRef(); 1471 return true; 1472 } 1473 isAngled = true; 1474 } else if (Buffer[0] == '"') { 1475 if (Buffer.back() != '"') { 1476 Diag(Loc, diag::err_pp_expects_filename); 1477 Buffer = StringRef(); 1478 return true; 1479 } 1480 isAngled = false; 1481 } else { 1482 Diag(Loc, diag::err_pp_expects_filename); 1483 Buffer = StringRef(); 1484 return true; 1485 } 1486 1487 // Diagnose #include "" as invalid. 1488 if (Buffer.size() <= 2) { 1489 Diag(Loc, diag::err_pp_empty_filename); 1490 Buffer = StringRef(); 1491 return true; 1492 } 1493 1494 // Skip the brackets. 1495 Buffer = Buffer.substr(1, Buffer.size()-2); 1496 return isAngled; 1497 } 1498 1499 // \brief Handle cases where the \#include name is expanded from a macro 1500 // as multiple tokens, which need to be glued together. 1501 // 1502 // This occurs for code like: 1503 // \code 1504 // \#define FOO <a/b.h> 1505 // \#include FOO 1506 // \endcode 1507 // because in this case, "<a/b.h>" is returned as 7 tokens, not one. 1508 // 1509 // This code concatenates and consumes tokens up to the '>' token. It returns 1510 // false if the > was found, otherwise it returns true if it finds and consumes 1511 // the EOD marker. 1512 bool Preprocessor::ConcatenateIncludeName(SmallString<128> &FilenameBuffer, 1513 SourceLocation &End) { 1514 Token CurTok; 1515 1516 Lex(CurTok); 1517 while (CurTok.isNot(tok::eod)) { 1518 End = CurTok.getLocation(); 1519 1520 // FIXME: Provide code completion for #includes. 1521 if (CurTok.is(tok::code_completion)) { 1522 setCodeCompletionReached(); 1523 Lex(CurTok); 1524 continue; 1525 } 1526 1527 // Append the spelling of this token to the buffer. If there was a space 1528 // before it, add it now. 1529 if (CurTok.hasLeadingSpace()) 1530 FilenameBuffer.push_back(' '); 1531 1532 // Get the spelling of the token, directly into FilenameBuffer if possible. 1533 size_t PreAppendSize = FilenameBuffer.size(); 1534 FilenameBuffer.resize(PreAppendSize+CurTok.getLength()); 1535 1536 const char *BufPtr = &FilenameBuffer[PreAppendSize]; 1537 unsigned ActualLen = getSpelling(CurTok, BufPtr); 1538 1539 // If the token was spelled somewhere else, copy it into FilenameBuffer. 1540 if (BufPtr != &FilenameBuffer[PreAppendSize]) 1541 memcpy(&FilenameBuffer[PreAppendSize], BufPtr, ActualLen); 1542 1543 // Resize FilenameBuffer to the correct size. 1544 if (CurTok.getLength() != ActualLen) 1545 FilenameBuffer.resize(PreAppendSize+ActualLen); 1546 1547 // If we found the '>' marker, return success. 1548 if (CurTok.is(tok::greater)) 1549 return false; 1550 1551 Lex(CurTok); 1552 } 1553 1554 // If we hit the eod marker, emit an error and return true so that the caller 1555 // knows the EOD has been read. 1556 Diag(CurTok.getLocation(), diag::err_pp_expects_filename); 1557 return true; 1558 } 1559 1560 /// \brief Push a token onto the token stream containing an annotation. 1561 void Preprocessor::EnterAnnotationToken(SourceRange Range, 1562 tok::TokenKind Kind, 1563 void *AnnotationVal) { 1564 // FIXME: Produce this as the current token directly, rather than 1565 // allocating a new token for it. 1566 auto Tok = llvm::make_unique<Token[]>(1); 1567 Tok[0].startToken(); 1568 Tok[0].setKind(Kind); 1569 Tok[0].setLocation(Range.getBegin()); 1570 Tok[0].setAnnotationEndLoc(Range.getEnd()); 1571 Tok[0].setAnnotationValue(AnnotationVal); 1572 EnterTokenStream(std::move(Tok), 1, true); 1573 } 1574 1575 /// \brief Produce a diagnostic informing the user that a #include or similar 1576 /// was implicitly treated as a module import. 1577 static void diagnoseAutoModuleImport( 1578 Preprocessor &PP, SourceLocation HashLoc, Token &IncludeTok, 1579 ArrayRef<std::pair<IdentifierInfo *, SourceLocation>> Path, 1580 SourceLocation PathEnd) { 1581 assert(PP.getLangOpts().ObjC2 && "no import syntax available"); 1582 1583 SmallString<128> PathString; 1584 for (size_t I = 0, N = Path.size(); I != N; ++I) { 1585 if (I) 1586 PathString += '.'; 1587 PathString += Path[I].first->getName(); 1588 } 1589 int IncludeKind = 0; 1590 1591 switch (IncludeTok.getIdentifierInfo()->getPPKeywordID()) { 1592 case tok::pp_include: 1593 IncludeKind = 0; 1594 break; 1595 1596 case tok::pp_import: 1597 IncludeKind = 1; 1598 break; 1599 1600 case tok::pp_include_next: 1601 IncludeKind = 2; 1602 break; 1603 1604 case tok::pp___include_macros: 1605 IncludeKind = 3; 1606 break; 1607 1608 default: 1609 llvm_unreachable("unknown include directive kind"); 1610 } 1611 1612 CharSourceRange ReplaceRange(SourceRange(HashLoc, PathEnd), 1613 /*IsTokenRange=*/false); 1614 PP.Diag(HashLoc, diag::warn_auto_module_import) 1615 << IncludeKind << PathString 1616 << FixItHint::CreateReplacement(ReplaceRange, 1617 ("@import " + PathString + ";").str()); 1618 } 1619 1620 // Given a vector of path components and a string containing the real 1621 // path to the file, build a properly-cased replacement in the vector, 1622 // and return true if the replacement should be suggested. 1623 static bool trySimplifyPath(SmallVectorImpl<StringRef> &Components, 1624 StringRef RealPathName) { 1625 auto RealPathComponentIter = llvm::sys::path::rbegin(RealPathName); 1626 auto RealPathComponentEnd = llvm::sys::path::rend(RealPathName); 1627 int Cnt = 0; 1628 bool SuggestReplacement = false; 1629 // Below is a best-effort to handle ".." in paths. It is admittedly 1630 // not 100% correct in the presence of symlinks. 1631 for (auto &Component : llvm::reverse(Components)) { 1632 if ("." == Component) { 1633 } else if (".." == Component) { 1634 ++Cnt; 1635 } else if (Cnt) { 1636 --Cnt; 1637 } else if (RealPathComponentIter != RealPathComponentEnd) { 1638 if (Component != *RealPathComponentIter) { 1639 // If these path components differ by more than just case, then we 1640 // may be looking at symlinked paths. Bail on this diagnostic to avoid 1641 // noisy false positives. 1642 SuggestReplacement = RealPathComponentIter->equals_lower(Component); 1643 if (!SuggestReplacement) 1644 break; 1645 Component = *RealPathComponentIter; 1646 } 1647 ++RealPathComponentIter; 1648 } 1649 } 1650 return SuggestReplacement; 1651 } 1652 1653 bool Preprocessor::checkModuleIsAvailable(const LangOptions &LangOpts, 1654 const TargetInfo &TargetInfo, 1655 DiagnosticsEngine &Diags, Module *M) { 1656 Module::Requirement Requirement; 1657 Module::UnresolvedHeaderDirective MissingHeader; 1658 Module *ShadowingModule = nullptr; 1659 if (M->isAvailable(LangOpts, TargetInfo, Requirement, MissingHeader, 1660 ShadowingModule)) 1661 return false; 1662 1663 if (MissingHeader.FileNameLoc.isValid()) { 1664 Diags.Report(MissingHeader.FileNameLoc, diag::err_module_header_missing) 1665 << MissingHeader.IsUmbrella << MissingHeader.FileName; 1666 } else if (ShadowingModule) { 1667 Diags.Report(M->DefinitionLoc, diag::err_module_shadowed) << M->Name; 1668 Diags.Report(ShadowingModule->DefinitionLoc, 1669 diag::note_previous_definition); 1670 } else { 1671 // FIXME: Track the location at which the requirement was specified, and 1672 // use it here. 1673 Diags.Report(M->DefinitionLoc, diag::err_module_unavailable) 1674 << M->getFullModuleName() << Requirement.second << Requirement.first; 1675 } 1676 return true; 1677 } 1678 1679 /// HandleIncludeDirective - The "\#include" tokens have just been read, read 1680 /// the file to be included from the lexer, then include it! This is a common 1681 /// routine with functionality shared between \#include, \#include_next and 1682 /// \#import. LookupFrom is set when this is a \#include_next directive, it 1683 /// specifies the file to start searching from. 1684 void Preprocessor::HandleIncludeDirective(SourceLocation HashLoc, 1685 Token &IncludeTok, 1686 const DirectoryLookup *LookupFrom, 1687 const FileEntry *LookupFromFile, 1688 bool isImport) { 1689 Token FilenameTok; 1690 CurPPLexer->LexIncludeFilename(FilenameTok); 1691 1692 // Reserve a buffer to get the spelling. 1693 SmallString<128> FilenameBuffer; 1694 StringRef Filename; 1695 SourceLocation End; 1696 SourceLocation CharEnd; // the end of this directive, in characters 1697 1698 switch (FilenameTok.getKind()) { 1699 case tok::eod: 1700 // If the token kind is EOD, the error has already been diagnosed. 1701 return; 1702 1703 case tok::angle_string_literal: 1704 case tok::string_literal: 1705 Filename = getSpelling(FilenameTok, FilenameBuffer); 1706 End = FilenameTok.getLocation(); 1707 CharEnd = End.getLocWithOffset(FilenameTok.getLength()); 1708 break; 1709 1710 case tok::less: 1711 // This could be a <foo/bar.h> file coming from a macro expansion. In this 1712 // case, glue the tokens together into FilenameBuffer and interpret those. 1713 FilenameBuffer.push_back('<'); 1714 if (ConcatenateIncludeName(FilenameBuffer, End)) 1715 return; // Found <eod> but no ">"? Diagnostic already emitted. 1716 Filename = FilenameBuffer; 1717 CharEnd = End.getLocWithOffset(1); 1718 break; 1719 default: 1720 Diag(FilenameTok.getLocation(), diag::err_pp_expects_filename); 1721 DiscardUntilEndOfDirective(); 1722 return; 1723 } 1724 1725 CharSourceRange FilenameRange 1726 = CharSourceRange::getCharRange(FilenameTok.getLocation(), CharEnd); 1727 StringRef OriginalFilename = Filename; 1728 bool isAngled = 1729 GetIncludeFilenameSpelling(FilenameTok.getLocation(), Filename); 1730 // If GetIncludeFilenameSpelling set the start ptr to null, there was an 1731 // error. 1732 if (Filename.empty()) { 1733 DiscardUntilEndOfDirective(); 1734 return; 1735 } 1736 1737 // Verify that there is nothing after the filename, other than EOD. Note that 1738 // we allow macros that expand to nothing after the filename, because this 1739 // falls into the category of "#include pp-tokens new-line" specified in 1740 // C99 6.10.2p4. 1741 CheckEndOfDirective(IncludeTok.getIdentifierInfo()->getNameStart(), true); 1742 1743 // Check that we don't have infinite #include recursion. 1744 if (IncludeMacroStack.size() == MaxAllowedIncludeStackDepth-1) { 1745 Diag(FilenameTok, diag::err_pp_include_too_deep); 1746 return; 1747 } 1748 1749 // Complain about attempts to #include files in an audit pragma. 1750 if (PragmaARCCFCodeAuditedLoc.isValid()) { 1751 Diag(HashLoc, diag::err_pp_include_in_arc_cf_code_audited); 1752 Diag(PragmaARCCFCodeAuditedLoc, diag::note_pragma_entered_here); 1753 1754 // Immediately leave the pragma. 1755 PragmaARCCFCodeAuditedLoc = SourceLocation(); 1756 } 1757 1758 // Complain about attempts to #include files in an assume-nonnull pragma. 1759 if (PragmaAssumeNonNullLoc.isValid()) { 1760 Diag(HashLoc, diag::err_pp_include_in_assume_nonnull); 1761 Diag(PragmaAssumeNonNullLoc, diag::note_pragma_entered_here); 1762 1763 // Immediately leave the pragma. 1764 PragmaAssumeNonNullLoc = SourceLocation(); 1765 } 1766 1767 if (HeaderInfo.HasIncludeAliasMap()) { 1768 // Map the filename with the brackets still attached. If the name doesn't 1769 // map to anything, fall back on the filename we've already gotten the 1770 // spelling for. 1771 StringRef NewName = HeaderInfo.MapHeaderToIncludeAlias(OriginalFilename); 1772 if (!NewName.empty()) 1773 Filename = NewName; 1774 } 1775 1776 // Search include directories. 1777 bool IsMapped = false; 1778 const DirectoryLookup *CurDir; 1779 SmallString<1024> SearchPath; 1780 SmallString<1024> RelativePath; 1781 // We get the raw path only if we have 'Callbacks' to which we later pass 1782 // the path. 1783 ModuleMap::KnownHeader SuggestedModule; 1784 SourceLocation FilenameLoc = FilenameTok.getLocation(); 1785 SmallString<128> NormalizedPath; 1786 if (LangOpts.MSVCCompat) { 1787 NormalizedPath = Filename.str(); 1788 #ifndef LLVM_ON_WIN32 1789 llvm::sys::path::native(NormalizedPath); 1790 #endif 1791 } 1792 const FileEntry *File = LookupFile( 1793 FilenameLoc, LangOpts.MSVCCompat ? NormalizedPath.c_str() : Filename, 1794 isAngled, LookupFrom, LookupFromFile, CurDir, 1795 Callbacks ? &SearchPath : nullptr, Callbacks ? &RelativePath : nullptr, 1796 &SuggestedModule, &IsMapped); 1797 1798 if (!File) { 1799 if (Callbacks) { 1800 // Give the clients a chance to recover. 1801 SmallString<128> RecoveryPath; 1802 if (Callbacks->FileNotFound(Filename, RecoveryPath)) { 1803 if (const DirectoryEntry *DE = FileMgr.getDirectory(RecoveryPath)) { 1804 // Add the recovery path to the list of search paths. 1805 DirectoryLookup DL(DE, SrcMgr::C_User, false); 1806 HeaderInfo.AddSearchPath(DL, isAngled); 1807 1808 // Try the lookup again, skipping the cache. 1809 File = LookupFile( 1810 FilenameLoc, 1811 LangOpts.MSVCCompat ? NormalizedPath.c_str() : Filename, isAngled, 1812 LookupFrom, LookupFromFile, CurDir, nullptr, nullptr, 1813 &SuggestedModule, &IsMapped, /*SkipCache*/ true); 1814 } 1815 } 1816 } 1817 1818 if (!SuppressIncludeNotFoundError) { 1819 // If the file could not be located and it was included via angle 1820 // brackets, we can attempt a lookup as though it were a quoted path to 1821 // provide the user with a possible fixit. 1822 if (isAngled) { 1823 File = LookupFile( 1824 FilenameLoc, 1825 LangOpts.MSVCCompat ? NormalizedPath.c_str() : Filename, false, 1826 LookupFrom, LookupFromFile, CurDir, 1827 Callbacks ? &SearchPath : nullptr, 1828 Callbacks ? &RelativePath : nullptr, &SuggestedModule, &IsMapped); 1829 if (File) { 1830 SourceRange Range(FilenameTok.getLocation(), CharEnd); 1831 Diag(FilenameTok, diag::err_pp_file_not_found_not_fatal) << 1832 Filename << 1833 FixItHint::CreateReplacement(Range, "\"" + Filename.str() + "\""); 1834 } 1835 } 1836 1837 // If the file is still not found, just go with the vanilla diagnostic 1838 if (!File) 1839 Diag(FilenameTok, diag::err_pp_file_not_found) << Filename 1840 << FilenameRange; 1841 } 1842 } 1843 1844 // Should we enter the source file? Set to false if either the source file is 1845 // known to have no effect beyond its effect on module visibility -- that is, 1846 // if it's got an include guard that is already defined or is a modular header 1847 // we've imported or already built. 1848 bool ShouldEnter = true; 1849 1850 if (PPOpts->SingleFileParseMode) 1851 ShouldEnter = false; 1852 1853 // Determine whether we should try to import the module for this #include, if 1854 // there is one. Don't do so if precompiled module support is disabled or we 1855 // are processing this module textually (because we're building the module). 1856 if (ShouldEnter && File && SuggestedModule && getLangOpts().Modules && 1857 SuggestedModule.getModule()->getTopLevelModuleName() != 1858 getLangOpts().CurrentModule) { 1859 // If this include corresponds to a module but that module is 1860 // unavailable, diagnose the situation and bail out. 1861 // FIXME: Remove this; loadModule does the same check (but produces 1862 // slightly worse diagnostics). 1863 if (checkModuleIsAvailable(getLangOpts(), getTargetInfo(), getDiagnostics(), 1864 SuggestedModule.getModule())) { 1865 Diag(FilenameTok.getLocation(), 1866 diag::note_implicit_top_level_module_import_here) 1867 << SuggestedModule.getModule()->getTopLevelModuleName(); 1868 return; 1869 } 1870 1871 // Compute the module access path corresponding to this module. 1872 // FIXME: Should we have a second loadModule() overload to avoid this 1873 // extra lookup step? 1874 SmallVector<std::pair<IdentifierInfo *, SourceLocation>, 2> Path; 1875 for (Module *Mod = SuggestedModule.getModule(); Mod; Mod = Mod->Parent) 1876 Path.push_back(std::make_pair(getIdentifierInfo(Mod->Name), 1877 FilenameTok.getLocation())); 1878 std::reverse(Path.begin(), Path.end()); 1879 1880 // Warn that we're replacing the include/import with a module import. 1881 // We only do this in Objective-C, where we have a module-import syntax. 1882 if (getLangOpts().ObjC2) 1883 diagnoseAutoModuleImport(*this, HashLoc, IncludeTok, Path, CharEnd); 1884 1885 // Load the module to import its macros. We'll make the declarations 1886 // visible when the parser gets here. 1887 // FIXME: Pass SuggestedModule in here rather than converting it to a path 1888 // and making the module loader convert it back again. 1889 ModuleLoadResult Imported = TheModuleLoader.loadModule( 1890 IncludeTok.getLocation(), Path, Module::Hidden, 1891 /*IsIncludeDirective=*/true); 1892 assert((Imported == nullptr || Imported == SuggestedModule.getModule()) && 1893 "the imported module is different than the suggested one"); 1894 1895 if (Imported) 1896 ShouldEnter = false; 1897 else if (Imported.isMissingExpected()) { 1898 // We failed to find a submodule that we assumed would exist (because it 1899 // was in the directory of an umbrella header, for instance), but no 1900 // actual module containing it exists (because the umbrella header is 1901 // incomplete). Treat this as a textual inclusion. 1902 SuggestedModule = ModuleMap::KnownHeader(); 1903 } else if (Imported.isConfigMismatch()) { 1904 // On a configuration mismatch, enter the header textually. We still know 1905 // that it's part of the corresponding module. 1906 } else { 1907 // We hit an error processing the import. Bail out. 1908 if (hadModuleLoaderFatalFailure()) { 1909 // With a fatal failure in the module loader, we abort parsing. 1910 Token &Result = IncludeTok; 1911 if (CurLexer) { 1912 Result.startToken(); 1913 CurLexer->FormTokenWithChars(Result, CurLexer->BufferEnd, tok::eof); 1914 CurLexer->cutOffLexing(); 1915 } else { 1916 assert(CurPTHLexer && "#include but no current lexer set!"); 1917 CurPTHLexer->getEOF(Result); 1918 } 1919 } 1920 return; 1921 } 1922 } 1923 1924 // The #included file will be considered to be a system header if either it is 1925 // in a system include directory, or if the #includer is a system include 1926 // header. 1927 SrcMgr::CharacteristicKind FileCharacter = 1928 SourceMgr.getFileCharacteristic(FilenameTok.getLocation()); 1929 if (File) 1930 FileCharacter = std::max(HeaderInfo.getFileDirFlavor(File), FileCharacter); 1931 1932 // Ask HeaderInfo if we should enter this #include file. If not, #including 1933 // this file will have no effect. 1934 bool SkipHeader = false; 1935 if (ShouldEnter && File && 1936 !HeaderInfo.ShouldEnterIncludeFile(*this, File, isImport, 1937 getLangOpts().Modules, 1938 SuggestedModule.getModule())) { 1939 ShouldEnter = false; 1940 SkipHeader = true; 1941 } 1942 1943 if (Callbacks) { 1944 // Notify the callback object that we've seen an inclusion directive. 1945 Callbacks->InclusionDirective( 1946 HashLoc, IncludeTok, 1947 LangOpts.MSVCCompat ? NormalizedPath.c_str() : Filename, isAngled, 1948 FilenameRange, File, SearchPath, RelativePath, 1949 ShouldEnter ? nullptr : SuggestedModule.getModule()); 1950 if (SkipHeader && !SuggestedModule.getModule()) 1951 Callbacks->FileSkipped(*File, FilenameTok, FileCharacter); 1952 } 1953 1954 if (!File) 1955 return; 1956 1957 // FIXME: If we have a suggested module, and we've already visited this file, 1958 // don't bother entering it again. We know it has no further effect. 1959 1960 // Issue a diagnostic if the name of the file on disk has a different case 1961 // than the one we're about to open. 1962 const bool CheckIncludePathPortability = 1963 !IsMapped && File && !File->tryGetRealPathName().empty(); 1964 1965 if (CheckIncludePathPortability) { 1966 StringRef Name = LangOpts.MSVCCompat ? NormalizedPath.str() : Filename; 1967 StringRef RealPathName = File->tryGetRealPathName(); 1968 SmallVector<StringRef, 16> Components(llvm::sys::path::begin(Name), 1969 llvm::sys::path::end(Name)); 1970 1971 if (trySimplifyPath(Components, RealPathName)) { 1972 SmallString<128> Path; 1973 Path.reserve(Name.size()+2); 1974 Path.push_back(isAngled ? '<' : '"'); 1975 bool isLeadingSeparator = llvm::sys::path::is_absolute(Name); 1976 for (auto Component : Components) { 1977 if (isLeadingSeparator) 1978 isLeadingSeparator = false; 1979 else 1980 Path.append(Component); 1981 // Append the separator the user used, or the close quote 1982 Path.push_back( 1983 Path.size() <= Filename.size() ? Filename[Path.size()-1] : 1984 (isAngled ? '>' : '"')); 1985 } 1986 // For user files and known standard headers, by default we issue a diagnostic. 1987 // For other system headers, we don't. They can be controlled separately. 1988 auto DiagId = (FileCharacter == SrcMgr::C_User || warnByDefaultOnWrongCase(Name)) ? 1989 diag::pp_nonportable_path : diag::pp_nonportable_system_path; 1990 SourceRange Range(FilenameTok.getLocation(), CharEnd); 1991 Diag(FilenameTok, DiagId) << Path << 1992 FixItHint::CreateReplacement(Range, Path); 1993 } 1994 } 1995 1996 // If we don't need to enter the file, stop now. 1997 if (!ShouldEnter) { 1998 // If this is a module import, make it visible if needed. 1999 if (auto *M = SuggestedModule.getModule()) { 2000 // When building a pch, -fmodule-name tells the compiler to textually 2001 // include headers in the specified module. But it is possible that 2002 // ShouldEnter is false because we are skipping the header. In that 2003 // case, We are not importing the specified module. 2004 if (SkipHeader && getLangOpts().CompilingPCH && 2005 M->getTopLevelModuleName() == getLangOpts().CurrentModule) 2006 return; 2007 2008 makeModuleVisible(M, HashLoc); 2009 2010 if (IncludeTok.getIdentifierInfo()->getPPKeywordID() != 2011 tok::pp___include_macros) 2012 EnterAnnotationToken(SourceRange(HashLoc, End), 2013 tok::annot_module_include, M); 2014 } 2015 return; 2016 } 2017 2018 // Look up the file, create a File ID for it. 2019 SourceLocation IncludePos = End; 2020 // If the filename string was the result of macro expansions, set the include 2021 // position on the file where it will be included and after the expansions. 2022 if (IncludePos.isMacroID()) 2023 IncludePos = SourceMgr.getExpansionRange(IncludePos).second; 2024 FileID FID = SourceMgr.createFileID(File, IncludePos, FileCharacter); 2025 assert(FID.isValid() && "Expected valid file ID"); 2026 2027 // If all is good, enter the new file! 2028 if (EnterSourceFile(FID, CurDir, FilenameTok.getLocation())) 2029 return; 2030 2031 // Determine if we're switching to building a new submodule, and which one. 2032 if (auto *M = SuggestedModule.getModule()) { 2033 if (M->getTopLevelModule()->ShadowingModule) { 2034 // We are building a submodule that belongs to a shadowed module. This 2035 // means we find header files in the shadowed module. 2036 Diag(M->DefinitionLoc, diag::err_module_build_shadowed_submodule) 2037 << M->getFullModuleName(); 2038 Diag(M->getTopLevelModule()->ShadowingModule->DefinitionLoc, 2039 diag::note_previous_definition); 2040 return; 2041 } 2042 // When building a pch, -fmodule-name tells the compiler to textually 2043 // include headers in the specified module. We are not building the 2044 // specified module. 2045 if (getLangOpts().CompilingPCH && 2046 M->getTopLevelModuleName() == getLangOpts().CurrentModule) 2047 return; 2048 2049 assert(!CurLexerSubmodule && "should not have marked this as a module yet"); 2050 CurLexerSubmodule = M; 2051 2052 // Let the macro handling code know that any future macros are within 2053 // the new submodule. 2054 EnterSubmodule(M, HashLoc, /*ForPragma*/false); 2055 2056 // Let the parser know that any future declarations are within the new 2057 // submodule. 2058 // FIXME: There's no point doing this if we're handling a #__include_macros 2059 // directive. 2060 EnterAnnotationToken(SourceRange(HashLoc, End), tok::annot_module_begin, M); 2061 } 2062 } 2063 2064 /// HandleIncludeNextDirective - Implements \#include_next. 2065 /// 2066 void Preprocessor::HandleIncludeNextDirective(SourceLocation HashLoc, 2067 Token &IncludeNextTok) { 2068 Diag(IncludeNextTok, diag::ext_pp_include_next_directive); 2069 2070 // #include_next is like #include, except that we start searching after 2071 // the current found directory. If we can't do this, issue a 2072 // diagnostic. 2073 const DirectoryLookup *Lookup = CurDirLookup; 2074 const FileEntry *LookupFromFile = nullptr; 2075 if (isInPrimaryFile() && LangOpts.IsHeaderFile) { 2076 // If the main file is a header, then it's either for PCH/AST generation, 2077 // or libclang opened it. Either way, handle it as a normal include below 2078 // and do not complain about include_next. 2079 } else if (isInPrimaryFile()) { 2080 Lookup = nullptr; 2081 Diag(IncludeNextTok, diag::pp_include_next_in_primary); 2082 } else if (CurLexerSubmodule) { 2083 // Start looking up in the directory *after* the one in which the current 2084 // file would be found, if any. 2085 assert(CurPPLexer && "#include_next directive in macro?"); 2086 LookupFromFile = CurPPLexer->getFileEntry(); 2087 Lookup = nullptr; 2088 } else if (!Lookup) { 2089 Diag(IncludeNextTok, diag::pp_include_next_absolute_path); 2090 } else { 2091 // Start looking up in the next directory. 2092 ++Lookup; 2093 } 2094 2095 return HandleIncludeDirective(HashLoc, IncludeNextTok, Lookup, 2096 LookupFromFile); 2097 } 2098 2099 /// HandleMicrosoftImportDirective - Implements \#import for Microsoft Mode 2100 void Preprocessor::HandleMicrosoftImportDirective(Token &Tok) { 2101 // The Microsoft #import directive takes a type library and generates header 2102 // files from it, and includes those. This is beyond the scope of what clang 2103 // does, so we ignore it and error out. However, #import can optionally have 2104 // trailing attributes that span multiple lines. We're going to eat those 2105 // so we can continue processing from there. 2106 Diag(Tok, diag::err_pp_import_directive_ms ); 2107 2108 // Read tokens until we get to the end of the directive. Note that the 2109 // directive can be split over multiple lines using the backslash character. 2110 DiscardUntilEndOfDirective(); 2111 } 2112 2113 /// HandleImportDirective - Implements \#import. 2114 /// 2115 void Preprocessor::HandleImportDirective(SourceLocation HashLoc, 2116 Token &ImportTok) { 2117 if (!LangOpts.ObjC1) { // #import is standard for ObjC. 2118 if (LangOpts.MSVCCompat) 2119 return HandleMicrosoftImportDirective(ImportTok); 2120 Diag(ImportTok, diag::ext_pp_import_directive); 2121 } 2122 return HandleIncludeDirective(HashLoc, ImportTok, nullptr, nullptr, true); 2123 } 2124 2125 /// HandleIncludeMacrosDirective - The -imacros command line option turns into a 2126 /// pseudo directive in the predefines buffer. This handles it by sucking all 2127 /// tokens through the preprocessor and discarding them (only keeping the side 2128 /// effects on the preprocessor). 2129 void Preprocessor::HandleIncludeMacrosDirective(SourceLocation HashLoc, 2130 Token &IncludeMacrosTok) { 2131 // This directive should only occur in the predefines buffer. If not, emit an 2132 // error and reject it. 2133 SourceLocation Loc = IncludeMacrosTok.getLocation(); 2134 if (SourceMgr.getBufferName(Loc) != "<built-in>") { 2135 Diag(IncludeMacrosTok.getLocation(), 2136 diag::pp_include_macros_out_of_predefines); 2137 DiscardUntilEndOfDirective(); 2138 return; 2139 } 2140 2141 // Treat this as a normal #include for checking purposes. If this is 2142 // successful, it will push a new lexer onto the include stack. 2143 HandleIncludeDirective(HashLoc, IncludeMacrosTok); 2144 2145 Token TmpTok; 2146 do { 2147 Lex(TmpTok); 2148 assert(TmpTok.isNot(tok::eof) && "Didn't find end of -imacros!"); 2149 } while (TmpTok.isNot(tok::hashhash)); 2150 } 2151 2152 //===----------------------------------------------------------------------===// 2153 // Preprocessor Macro Directive Handling. 2154 //===----------------------------------------------------------------------===// 2155 2156 /// ReadMacroParameterList - The ( starting a parameter list of a macro 2157 /// definition has just been read. Lex the rest of the parameters and the 2158 /// closing ), updating MI with what we learn. Return true if an error occurs 2159 /// parsing the param list. 2160 bool Preprocessor::ReadMacroParameterList(MacroInfo *MI, Token &Tok) { 2161 SmallVector<IdentifierInfo*, 32> Parameters; 2162 2163 while (true) { 2164 LexUnexpandedToken(Tok); 2165 switch (Tok.getKind()) { 2166 case tok::r_paren: 2167 // Found the end of the parameter list. 2168 if (Parameters.empty()) // #define FOO() 2169 return false; 2170 // Otherwise we have #define FOO(A,) 2171 Diag(Tok, diag::err_pp_expected_ident_in_arg_list); 2172 return true; 2173 case tok::ellipsis: // #define X(... -> C99 varargs 2174 if (!LangOpts.C99) 2175 Diag(Tok, LangOpts.CPlusPlus11 ? 2176 diag::warn_cxx98_compat_variadic_macro : 2177 diag::ext_variadic_macro); 2178 2179 // OpenCL v1.2 s6.9.e: variadic macros are not supported. 2180 if (LangOpts.OpenCL) { 2181 Diag(Tok, diag::err_pp_opencl_variadic_macros); 2182 return true; 2183 } 2184 2185 // Lex the token after the identifier. 2186 LexUnexpandedToken(Tok); 2187 if (Tok.isNot(tok::r_paren)) { 2188 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def); 2189 return true; 2190 } 2191 // Add the __VA_ARGS__ identifier as a parameter. 2192 Parameters.push_back(Ident__VA_ARGS__); 2193 MI->setIsC99Varargs(); 2194 MI->setParameterList(Parameters, BP); 2195 return false; 2196 case tok::eod: // #define X( 2197 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def); 2198 return true; 2199 default: 2200 // Handle keywords and identifiers here to accept things like 2201 // #define Foo(for) for. 2202 IdentifierInfo *II = Tok.getIdentifierInfo(); 2203 if (!II) { 2204 // #define X(1 2205 Diag(Tok, diag::err_pp_invalid_tok_in_arg_list); 2206 return true; 2207 } 2208 2209 // If this is already used as a parameter, it is used multiple times (e.g. 2210 // #define X(A,A. 2211 if (std::find(Parameters.begin(), Parameters.end(), II) != 2212 Parameters.end()) { // C99 6.10.3p6 2213 Diag(Tok, diag::err_pp_duplicate_name_in_arg_list) << II; 2214 return true; 2215 } 2216 2217 // Add the parameter to the macro info. 2218 Parameters.push_back(II); 2219 2220 // Lex the token after the identifier. 2221 LexUnexpandedToken(Tok); 2222 2223 switch (Tok.getKind()) { 2224 default: // #define X(A B 2225 Diag(Tok, diag::err_pp_expected_comma_in_arg_list); 2226 return true; 2227 case tok::r_paren: // #define X(A) 2228 MI->setParameterList(Parameters, BP); 2229 return false; 2230 case tok::comma: // #define X(A, 2231 break; 2232 case tok::ellipsis: // #define X(A... -> GCC extension 2233 // Diagnose extension. 2234 Diag(Tok, diag::ext_named_variadic_macro); 2235 2236 // Lex the token after the identifier. 2237 LexUnexpandedToken(Tok); 2238 if (Tok.isNot(tok::r_paren)) { 2239 Diag(Tok, diag::err_pp_missing_rparen_in_macro_def); 2240 return true; 2241 } 2242 2243 MI->setIsGNUVarargs(); 2244 MI->setParameterList(Parameters, BP); 2245 return false; 2246 } 2247 } 2248 } 2249 } 2250 2251 static bool isConfigurationPattern(Token &MacroName, MacroInfo *MI, 2252 const LangOptions &LOptions) { 2253 if (MI->getNumTokens() == 1) { 2254 const Token &Value = MI->getReplacementToken(0); 2255 2256 // Macro that is identity, like '#define inline inline' is a valid pattern. 2257 if (MacroName.getKind() == Value.getKind()) 2258 return true; 2259 2260 // Macro that maps a keyword to the same keyword decorated with leading/ 2261 // trailing underscores is a valid pattern: 2262 // #define inline __inline 2263 // #define inline __inline__ 2264 // #define inline _inline (in MS compatibility mode) 2265 StringRef MacroText = MacroName.getIdentifierInfo()->getName(); 2266 if (IdentifierInfo *II = Value.getIdentifierInfo()) { 2267 if (!II->isKeyword(LOptions)) 2268 return false; 2269 StringRef ValueText = II->getName(); 2270 StringRef TrimmedValue = ValueText; 2271 if (!ValueText.startswith("__")) { 2272 if (ValueText.startswith("_")) 2273 TrimmedValue = TrimmedValue.drop_front(1); 2274 else 2275 return false; 2276 } else { 2277 TrimmedValue = TrimmedValue.drop_front(2); 2278 if (TrimmedValue.endswith("__")) 2279 TrimmedValue = TrimmedValue.drop_back(2); 2280 } 2281 return TrimmedValue.equals(MacroText); 2282 } else { 2283 return false; 2284 } 2285 } 2286 2287 // #define inline 2288 return MacroName.isOneOf(tok::kw_extern, tok::kw_inline, tok::kw_static, 2289 tok::kw_const) && 2290 MI->getNumTokens() == 0; 2291 } 2292 2293 // ReadOptionalMacroParameterListAndBody - This consumes all (i.e. the 2294 // entire line) of the macro's tokens and adds them to MacroInfo, and while 2295 // doing so performs certain validity checks including (but not limited to): 2296 // - # (stringization) is followed by a macro parameter 2297 // 2298 // Returns a nullptr if an invalid sequence of tokens is encountered or returns 2299 // a pointer to a MacroInfo object. 2300 2301 MacroInfo *Preprocessor::ReadOptionalMacroParameterListAndBody( 2302 const Token &MacroNameTok, const bool ImmediatelyAfterHeaderGuard) { 2303 2304 Token LastTok = MacroNameTok; 2305 // Create the new macro. 2306 MacroInfo *const MI = AllocateMacroInfo(MacroNameTok.getLocation()); 2307 2308 Token Tok; 2309 LexUnexpandedToken(Tok); 2310 2311 // Used to un-poison and then re-poison identifiers of the __VA_ARGS__ ilk 2312 // within their appropriate context. 2313 VariadicMacroScopeGuard VariadicMacroScopeGuard(*this); 2314 2315 // If this is a function-like macro definition, parse the argument list, 2316 // marking each of the identifiers as being used as macro arguments. Also, 2317 // check other constraints on the first token of the macro body. 2318 if (Tok.is(tok::eod)) { 2319 if (ImmediatelyAfterHeaderGuard) { 2320 // Save this macro information since it may part of a header guard. 2321 CurPPLexer->MIOpt.SetDefinedMacro(MacroNameTok.getIdentifierInfo(), 2322 MacroNameTok.getLocation()); 2323 } 2324 // If there is no body to this macro, we have no special handling here. 2325 } else if (Tok.hasLeadingSpace()) { 2326 // This is a normal token with leading space. Clear the leading space 2327 // marker on the first token to get proper expansion. 2328 Tok.clearFlag(Token::LeadingSpace); 2329 } else if (Tok.is(tok::l_paren)) { 2330 // This is a function-like macro definition. Read the argument list. 2331 MI->setIsFunctionLike(); 2332 if (ReadMacroParameterList(MI, LastTok)) { 2333 // Throw away the rest of the line. 2334 if (CurPPLexer->ParsingPreprocessorDirective) 2335 DiscardUntilEndOfDirective(); 2336 return nullptr; 2337 } 2338 2339 // If this is a definition of an ISO C/C++ variadic function-like macro (not 2340 // using the GNU named varargs extension) inform our variadic scope guard 2341 // which un-poisons and re-poisons certain identifiers (e.g. __VA_ARGS__) 2342 // allowed only within the definition of a variadic macro. 2343 2344 if (MI->isC99Varargs()) { 2345 VariadicMacroScopeGuard.enterScope(); 2346 } 2347 2348 // Read the first token after the arg list for down below. 2349 LexUnexpandedToken(Tok); 2350 } else if (LangOpts.C99 || LangOpts.CPlusPlus11) { 2351 // C99 requires whitespace between the macro definition and the body. Emit 2352 // a diagnostic for something like "#define X+". 2353 Diag(Tok, diag::ext_c99_whitespace_required_after_macro_name); 2354 } else { 2355 // C90 6.8 TC1 says: "In the definition of an object-like macro, if the 2356 // first character of a replacement list is not a character required by 2357 // subclause 5.2.1, then there shall be white-space separation between the 2358 // identifier and the replacement list.". 5.2.1 lists this set: 2359 // "A-Za-z0-9!"#%&'()*+,_./:;<=>?[\]^_{|}~" as well as whitespace, which 2360 // is irrelevant here. 2361 bool isInvalid = false; 2362 if (Tok.is(tok::at)) // @ is not in the list above. 2363 isInvalid = true; 2364 else if (Tok.is(tok::unknown)) { 2365 // If we have an unknown token, it is something strange like "`". Since 2366 // all of valid characters would have lexed into a single character 2367 // token of some sort, we know this is not a valid case. 2368 isInvalid = true; 2369 } 2370 if (isInvalid) 2371 Diag(Tok, diag::ext_missing_whitespace_after_macro_name); 2372 else 2373 Diag(Tok, diag::warn_missing_whitespace_after_macro_name); 2374 } 2375 2376 if (!Tok.is(tok::eod)) 2377 LastTok = Tok; 2378 2379 // Read the rest of the macro body. 2380 if (MI->isObjectLike()) { 2381 // Object-like macros are very simple, just read their body. 2382 while (Tok.isNot(tok::eod)) { 2383 LastTok = Tok; 2384 MI->AddTokenToBody(Tok); 2385 // Get the next token of the macro. 2386 LexUnexpandedToken(Tok); 2387 } 2388 } else { 2389 // Otherwise, read the body of a function-like macro. While we are at it, 2390 // check C99 6.10.3.2p1: ensure that # operators are followed by macro 2391 // parameters in function-like macro expansions. 2392 2393 VAOptDefinitionContext VAOCtx(*this); 2394 2395 while (Tok.isNot(tok::eod)) { 2396 LastTok = Tok; 2397 2398 if (!Tok.isOneOf(tok::hash, tok::hashat, tok::hashhash)) { 2399 MI->AddTokenToBody(Tok); 2400 2401 if (VAOCtx.isVAOptToken(Tok)) { 2402 // If we're already within a VAOPT, emit an error. 2403 if (VAOCtx.isInVAOpt()) { 2404 Diag(Tok, diag::err_pp_vaopt_nested_use); 2405 return nullptr; 2406 } 2407 // Ensure VAOPT is followed by a '(' . 2408 LexUnexpandedToken(Tok); 2409 if (Tok.isNot(tok::l_paren)) { 2410 Diag(Tok, diag::err_pp_missing_lparen_in_vaopt_use); 2411 return nullptr; 2412 } 2413 MI->AddTokenToBody(Tok); 2414 VAOCtx.sawVAOptFollowedByOpeningParens(Tok.getLocation()); 2415 LexUnexpandedToken(Tok); 2416 if (Tok.is(tok::hashhash)) { 2417 Diag(Tok, diag::err_vaopt_paste_at_start); 2418 return nullptr; 2419 } 2420 continue; 2421 } else if (VAOCtx.isInVAOpt()) { 2422 if (Tok.is(tok::r_paren)) { 2423 if (VAOCtx.sawClosingParen()) { 2424 const unsigned NumTokens = MI->getNumTokens(); 2425 assert(NumTokens >= 3 && "Must have seen at least __VA_OPT__( " 2426 "and a subsequent tok::r_paren"); 2427 if (MI->getReplacementToken(NumTokens - 2).is(tok::hashhash)) { 2428 Diag(Tok, diag::err_vaopt_paste_at_end); 2429 return nullptr; 2430 } 2431 } 2432 } else if (Tok.is(tok::l_paren)) { 2433 VAOCtx.sawOpeningParen(Tok.getLocation()); 2434 } 2435 } 2436 // Get the next token of the macro. 2437 LexUnexpandedToken(Tok); 2438 continue; 2439 } 2440 2441 // If we're in -traditional mode, then we should ignore stringification 2442 // and token pasting. Mark the tokens as unknown so as not to confuse 2443 // things. 2444 if (getLangOpts().TraditionalCPP) { 2445 Tok.setKind(tok::unknown); 2446 MI->AddTokenToBody(Tok); 2447 2448 // Get the next token of the macro. 2449 LexUnexpandedToken(Tok); 2450 continue; 2451 } 2452 2453 if (Tok.is(tok::hashhash)) { 2454 // If we see token pasting, check if it looks like the gcc comma 2455 // pasting extension. We'll use this information to suppress 2456 // diagnostics later on. 2457 2458 // Get the next token of the macro. 2459 LexUnexpandedToken(Tok); 2460 2461 if (Tok.is(tok::eod)) { 2462 MI->AddTokenToBody(LastTok); 2463 break; 2464 } 2465 2466 unsigned NumTokens = MI->getNumTokens(); 2467 if (NumTokens && Tok.getIdentifierInfo() == Ident__VA_ARGS__ && 2468 MI->getReplacementToken(NumTokens-1).is(tok::comma)) 2469 MI->setHasCommaPasting(); 2470 2471 // Things look ok, add the '##' token to the macro. 2472 MI->AddTokenToBody(LastTok); 2473 continue; 2474 } 2475 2476 // Our Token is a stringization operator. 2477 // Get the next token of the macro. 2478 LexUnexpandedToken(Tok); 2479 2480 // Check for a valid macro arg identifier or __VA_OPT__. 2481 if (!VAOCtx.isVAOptToken(Tok) && 2482 (Tok.getIdentifierInfo() == nullptr || 2483 MI->getParameterNum(Tok.getIdentifierInfo()) == -1)) { 2484 2485 // If this is assembler-with-cpp mode, we accept random gibberish after 2486 // the '#' because '#' is often a comment character. However, change 2487 // the kind of the token to tok::unknown so that the preprocessor isn't 2488 // confused. 2489 if (getLangOpts().AsmPreprocessor && Tok.isNot(tok::eod)) { 2490 LastTok.setKind(tok::unknown); 2491 MI->AddTokenToBody(LastTok); 2492 continue; 2493 } else { 2494 Diag(Tok, diag::err_pp_stringize_not_parameter) 2495 << LastTok.is(tok::hashat); 2496 return nullptr; 2497 } 2498 } 2499 2500 // Things look ok, add the '#' and param name tokens to the macro. 2501 MI->AddTokenToBody(LastTok); 2502 2503 // If the token following '#' is VAOPT, let the next iteration handle it 2504 // and check it for correctness, otherwise add the token and prime the 2505 // loop with the next one. 2506 if (!VAOCtx.isVAOptToken(Tok)) { 2507 MI->AddTokenToBody(Tok); 2508 LastTok = Tok; 2509 2510 // Get the next token of the macro. 2511 LexUnexpandedToken(Tok); 2512 } 2513 } 2514 if (VAOCtx.isInVAOpt()) { 2515 assert(Tok.is(tok::eod) && "Must be at End Of preprocessing Directive"); 2516 Diag(Tok, diag::err_pp_expected_after) 2517 << LastTok.getKind() << tok::r_paren; 2518 Diag(VAOCtx.getUnmatchedOpeningParenLoc(), diag::note_matching) << tok::l_paren; 2519 return nullptr; 2520 } 2521 } 2522 MI->setDefinitionEndLoc(LastTok.getLocation()); 2523 return MI; 2524 } 2525 /// HandleDefineDirective - Implements \#define. This consumes the entire macro 2526 /// line then lets the caller lex the next real token. 2527 void Preprocessor::HandleDefineDirective( 2528 Token &DefineTok, const bool ImmediatelyAfterHeaderGuard) { 2529 ++NumDefined; 2530 2531 Token MacroNameTok; 2532 bool MacroShadowsKeyword; 2533 ReadMacroName(MacroNameTok, MU_Define, &MacroShadowsKeyword); 2534 2535 // Error reading macro name? If so, diagnostic already issued. 2536 if (MacroNameTok.is(tok::eod)) 2537 return; 2538 2539 // If we are supposed to keep comments in #defines, reenable comment saving 2540 // mode. 2541 if (CurLexer) CurLexer->SetCommentRetentionState(KeepMacroComments); 2542 2543 MacroInfo *const MI = ReadOptionalMacroParameterListAndBody( 2544 MacroNameTok, ImmediatelyAfterHeaderGuard); 2545 2546 if (!MI) return; 2547 2548 if (MacroShadowsKeyword && 2549 !isConfigurationPattern(MacroNameTok, MI, getLangOpts())) { 2550 Diag(MacroNameTok, diag::warn_pp_macro_hides_keyword); 2551 } 2552 // Check that there is no paste (##) operator at the beginning or end of the 2553 // replacement list. 2554 unsigned NumTokens = MI->getNumTokens(); 2555 if (NumTokens != 0) { 2556 if (MI->getReplacementToken(0).is(tok::hashhash)) { 2557 Diag(MI->getReplacementToken(0), diag::err_paste_at_start); 2558 return; 2559 } 2560 if (MI->getReplacementToken(NumTokens-1).is(tok::hashhash)) { 2561 Diag(MI->getReplacementToken(NumTokens-1), diag::err_paste_at_end); 2562 return; 2563 } 2564 } 2565 2566 2567 2568 // Finally, if this identifier already had a macro defined for it, verify that 2569 // the macro bodies are identical, and issue diagnostics if they are not. 2570 if (const MacroInfo *OtherMI=getMacroInfo(MacroNameTok.getIdentifierInfo())) { 2571 // In Objective-C, ignore attempts to directly redefine the builtin 2572 // definitions of the ownership qualifiers. It's still possible to 2573 // #undef them. 2574 auto isObjCProtectedMacro = [](const IdentifierInfo *II) -> bool { 2575 return II->isStr("__strong") || 2576 II->isStr("__weak") || 2577 II->isStr("__unsafe_unretained") || 2578 II->isStr("__autoreleasing"); 2579 }; 2580 if (getLangOpts().ObjC1 && 2581 SourceMgr.getFileID(OtherMI->getDefinitionLoc()) 2582 == getPredefinesFileID() && 2583 isObjCProtectedMacro(MacroNameTok.getIdentifierInfo())) { 2584 // Warn if it changes the tokens. 2585 if ((!getDiagnostics().getSuppressSystemWarnings() || 2586 !SourceMgr.isInSystemHeader(DefineTok.getLocation())) && 2587 !MI->isIdenticalTo(*OtherMI, *this, 2588 /*Syntactic=*/LangOpts.MicrosoftExt)) { 2589 Diag(MI->getDefinitionLoc(), diag::warn_pp_objc_macro_redef_ignored); 2590 } 2591 assert(!OtherMI->isWarnIfUnused()); 2592 return; 2593 } 2594 2595 // It is very common for system headers to have tons of macro redefinitions 2596 // and for warnings to be disabled in system headers. If this is the case, 2597 // then don't bother calling MacroInfo::isIdenticalTo. 2598 if (!getDiagnostics().getSuppressSystemWarnings() || 2599 !SourceMgr.isInSystemHeader(DefineTok.getLocation())) { 2600 if (!OtherMI->isUsed() && OtherMI->isWarnIfUnused()) 2601 Diag(OtherMI->getDefinitionLoc(), diag::pp_macro_not_used); 2602 2603 // Warn if defining "__LINE__" and other builtins, per C99 6.10.8/4 and 2604 // C++ [cpp.predefined]p4, but allow it as an extension. 2605 if (OtherMI->isBuiltinMacro()) 2606 Diag(MacroNameTok, diag::ext_pp_redef_builtin_macro); 2607 // Macros must be identical. This means all tokens and whitespace 2608 // separation must be the same. C99 6.10.3p2. 2609 else if (!OtherMI->isAllowRedefinitionsWithoutWarning() && 2610 !MI->isIdenticalTo(*OtherMI, *this, /*Syntactic=*/LangOpts.MicrosoftExt)) { 2611 Diag(MI->getDefinitionLoc(), diag::ext_pp_macro_redef) 2612 << MacroNameTok.getIdentifierInfo(); 2613 Diag(OtherMI->getDefinitionLoc(), diag::note_previous_definition); 2614 } 2615 } 2616 if (OtherMI->isWarnIfUnused()) 2617 WarnUnusedMacroLocs.erase(OtherMI->getDefinitionLoc()); 2618 } 2619 2620 DefMacroDirective *MD = 2621 appendDefMacroDirective(MacroNameTok.getIdentifierInfo(), MI); 2622 2623 assert(!MI->isUsed()); 2624 // If we need warning for not using the macro, add its location in the 2625 // warn-because-unused-macro set. If it gets used it will be removed from set. 2626 if (getSourceManager().isInMainFile(MI->getDefinitionLoc()) && 2627 !Diags->isIgnored(diag::pp_macro_not_used, MI->getDefinitionLoc())) { 2628 MI->setIsWarnIfUnused(true); 2629 WarnUnusedMacroLocs.insert(MI->getDefinitionLoc()); 2630 } 2631 2632 // If the callbacks want to know, tell them about the macro definition. 2633 if (Callbacks) 2634 Callbacks->MacroDefined(MacroNameTok, MD); 2635 } 2636 2637 /// HandleUndefDirective - Implements \#undef. 2638 /// 2639 void Preprocessor::HandleUndefDirective() { 2640 ++NumUndefined; 2641 2642 Token MacroNameTok; 2643 ReadMacroName(MacroNameTok, MU_Undef); 2644 2645 // Error reading macro name? If so, diagnostic already issued. 2646 if (MacroNameTok.is(tok::eod)) 2647 return; 2648 2649 // Check to see if this is the last token on the #undef line. 2650 CheckEndOfDirective("undef"); 2651 2652 // Okay, we have a valid identifier to undef. 2653 auto *II = MacroNameTok.getIdentifierInfo(); 2654 auto MD = getMacroDefinition(II); 2655 UndefMacroDirective *Undef = nullptr; 2656 2657 // If the macro is not defined, this is a noop undef. 2658 if (const MacroInfo *MI = MD.getMacroInfo()) { 2659 if (!MI->isUsed() && MI->isWarnIfUnused()) 2660 Diag(MI->getDefinitionLoc(), diag::pp_macro_not_used); 2661 2662 if (MI->isWarnIfUnused()) 2663 WarnUnusedMacroLocs.erase(MI->getDefinitionLoc()); 2664 2665 Undef = AllocateUndefMacroDirective(MacroNameTok.getLocation()); 2666 } 2667 2668 // If the callbacks want to know, tell them about the macro #undef. 2669 // Note: no matter if the macro was defined or not. 2670 if (Callbacks) 2671 Callbacks->MacroUndefined(MacroNameTok, MD, Undef); 2672 2673 if (Undef) 2674 appendMacroDirective(II, Undef); 2675 } 2676 2677 //===----------------------------------------------------------------------===// 2678 // Preprocessor Conditional Directive Handling. 2679 //===----------------------------------------------------------------------===// 2680 2681 /// HandleIfdefDirective - Implements the \#ifdef/\#ifndef directive. isIfndef 2682 /// is true when this is a \#ifndef directive. ReadAnyTokensBeforeDirective is 2683 /// true if any tokens have been returned or pp-directives activated before this 2684 /// \#ifndef has been lexed. 2685 /// 2686 void Preprocessor::HandleIfdefDirective(Token &Result, 2687 const Token &HashToken, 2688 bool isIfndef, 2689 bool ReadAnyTokensBeforeDirective) { 2690 ++NumIf; 2691 Token DirectiveTok = Result; 2692 2693 Token MacroNameTok; 2694 ReadMacroName(MacroNameTok); 2695 2696 // Error reading macro name? If so, diagnostic already issued. 2697 if (MacroNameTok.is(tok::eod)) { 2698 // Skip code until we get to #endif. This helps with recovery by not 2699 // emitting an error when the #endif is reached. 2700 SkipExcludedConditionalBlock(HashToken.getLocation(), 2701 DirectiveTok.getLocation(), 2702 /*Foundnonskip*/ false, /*FoundElse*/ false); 2703 return; 2704 } 2705 2706 // Check to see if this is the last token on the #if[n]def line. 2707 CheckEndOfDirective(isIfndef ? "ifndef" : "ifdef"); 2708 2709 IdentifierInfo *MII = MacroNameTok.getIdentifierInfo(); 2710 auto MD = getMacroDefinition(MII); 2711 MacroInfo *MI = MD.getMacroInfo(); 2712 2713 if (CurPPLexer->getConditionalStackDepth() == 0) { 2714 // If the start of a top-level #ifdef and if the macro is not defined, 2715 // inform MIOpt that this might be the start of a proper include guard. 2716 // Otherwise it is some other form of unknown conditional which we can't 2717 // handle. 2718 if (!ReadAnyTokensBeforeDirective && !MI) { 2719 assert(isIfndef && "#ifdef shouldn't reach here"); 2720 CurPPLexer->MIOpt.EnterTopLevelIfndef(MII, MacroNameTok.getLocation()); 2721 } else 2722 CurPPLexer->MIOpt.EnterTopLevelConditional(); 2723 } 2724 2725 // If there is a macro, process it. 2726 if (MI) // Mark it used. 2727 markMacroAsUsed(MI); 2728 2729 if (Callbacks) { 2730 if (isIfndef) 2731 Callbacks->Ifndef(DirectiveTok.getLocation(), MacroNameTok, MD); 2732 else 2733 Callbacks->Ifdef(DirectiveTok.getLocation(), MacroNameTok, MD); 2734 } 2735 2736 // Should we include the stuff contained by this directive? 2737 if (PPOpts->SingleFileParseMode && !MI) { 2738 // In 'single-file-parse mode' undefined identifiers trigger parsing of all 2739 // the directive blocks. 2740 CurPPLexer->pushConditionalLevel(DirectiveTok.getLocation(), 2741 /*wasskip*/false, /*foundnonskip*/false, 2742 /*foundelse*/false); 2743 } else if (!MI == isIfndef) { 2744 // Yes, remember that we are inside a conditional, then lex the next token. 2745 CurPPLexer->pushConditionalLevel(DirectiveTok.getLocation(), 2746 /*wasskip*/false, /*foundnonskip*/true, 2747 /*foundelse*/false); 2748 } else { 2749 // No, skip the contents of this block. 2750 SkipExcludedConditionalBlock(HashToken.getLocation(), 2751 DirectiveTok.getLocation(), 2752 /*Foundnonskip*/ false, 2753 /*FoundElse*/ false); 2754 } 2755 } 2756 2757 /// HandleIfDirective - Implements the \#if directive. 2758 /// 2759 void Preprocessor::HandleIfDirective(Token &IfToken, 2760 const Token &HashToken, 2761 bool ReadAnyTokensBeforeDirective) { 2762 ++NumIf; 2763 2764 // Parse and evaluate the conditional expression. 2765 IdentifierInfo *IfNDefMacro = nullptr; 2766 const SourceLocation ConditionalBegin = CurPPLexer->getSourceLocation(); 2767 const DirectiveEvalResult DER = EvaluateDirectiveExpression(IfNDefMacro); 2768 const bool ConditionalTrue = DER.Conditional; 2769 const SourceLocation ConditionalEnd = CurPPLexer->getSourceLocation(); 2770 2771 // If this condition is equivalent to #ifndef X, and if this is the first 2772 // directive seen, handle it for the multiple-include optimization. 2773 if (CurPPLexer->getConditionalStackDepth() == 0) { 2774 if (!ReadAnyTokensBeforeDirective && IfNDefMacro && ConditionalTrue) 2775 // FIXME: Pass in the location of the macro name, not the 'if' token. 2776 CurPPLexer->MIOpt.EnterTopLevelIfndef(IfNDefMacro, IfToken.getLocation()); 2777 else 2778 CurPPLexer->MIOpt.EnterTopLevelConditional(); 2779 } 2780 2781 if (Callbacks) 2782 Callbacks->If(IfToken.getLocation(), 2783 SourceRange(ConditionalBegin, ConditionalEnd), 2784 (ConditionalTrue ? PPCallbacks::CVK_True : PPCallbacks::CVK_False)); 2785 2786 // Should we include the stuff contained by this directive? 2787 if (PPOpts->SingleFileParseMode && DER.IncludedUndefinedIds) { 2788 // In 'single-file-parse mode' undefined identifiers trigger parsing of all 2789 // the directive blocks. 2790 CurPPLexer->pushConditionalLevel(IfToken.getLocation(), /*wasskip*/false, 2791 /*foundnonskip*/false, /*foundelse*/false); 2792 } else if (ConditionalTrue) { 2793 // Yes, remember that we are inside a conditional, then lex the next token. 2794 CurPPLexer->pushConditionalLevel(IfToken.getLocation(), /*wasskip*/false, 2795 /*foundnonskip*/true, /*foundelse*/false); 2796 } else { 2797 // No, skip the contents of this block. 2798 SkipExcludedConditionalBlock(HashToken.getLocation(), IfToken.getLocation(), 2799 /*Foundnonskip*/ false, 2800 /*FoundElse*/ false); 2801 } 2802 } 2803 2804 /// HandleEndifDirective - Implements the \#endif directive. 2805 /// 2806 void Preprocessor::HandleEndifDirective(Token &EndifToken) { 2807 ++NumEndif; 2808 2809 // Check that this is the whole directive. 2810 CheckEndOfDirective("endif"); 2811 2812 PPConditionalInfo CondInfo; 2813 if (CurPPLexer->popConditionalLevel(CondInfo)) { 2814 // No conditionals on the stack: this is an #endif without an #if. 2815 Diag(EndifToken, diag::err_pp_endif_without_if); 2816 return; 2817 } 2818 2819 // If this the end of a top-level #endif, inform MIOpt. 2820 if (CurPPLexer->getConditionalStackDepth() == 0) 2821 CurPPLexer->MIOpt.ExitTopLevelConditional(); 2822 2823 assert(!CondInfo.WasSkipping && !CurPPLexer->LexingRawMode && 2824 "This code should only be reachable in the non-skipping case!"); 2825 2826 if (Callbacks) 2827 Callbacks->Endif(EndifToken.getLocation(), CondInfo.IfLoc); 2828 } 2829 2830 /// HandleElseDirective - Implements the \#else directive. 2831 /// 2832 void Preprocessor::HandleElseDirective(Token &Result, const Token &HashToken) { 2833 ++NumElse; 2834 2835 // #else directive in a non-skipping conditional... start skipping. 2836 CheckEndOfDirective("else"); 2837 2838 PPConditionalInfo CI; 2839 if (CurPPLexer->popConditionalLevel(CI)) { 2840 Diag(Result, diag::pp_err_else_without_if); 2841 return; 2842 } 2843 2844 // If this is a top-level #else, inform the MIOpt. 2845 if (CurPPLexer->getConditionalStackDepth() == 0) 2846 CurPPLexer->MIOpt.EnterTopLevelConditional(); 2847 2848 // If this is a #else with a #else before it, report the error. 2849 if (CI.FoundElse) Diag(Result, diag::pp_err_else_after_else); 2850 2851 if (Callbacks) 2852 Callbacks->Else(Result.getLocation(), CI.IfLoc); 2853 2854 if (PPOpts->SingleFileParseMode && !CI.FoundNonSkip) { 2855 // In 'single-file-parse mode' undefined identifiers trigger parsing of all 2856 // the directive blocks. 2857 CurPPLexer->pushConditionalLevel(CI.IfLoc, /*wasskip*/false, 2858 /*foundnonskip*/false, /*foundelse*/true); 2859 return; 2860 } 2861 2862 // Finally, skip the rest of the contents of this block. 2863 SkipExcludedConditionalBlock(HashToken.getLocation(), CI.IfLoc, 2864 /*Foundnonskip*/ true, 2865 /*FoundElse*/ true, Result.getLocation()); 2866 } 2867 2868 /// HandleElifDirective - Implements the \#elif directive. 2869 /// 2870 void Preprocessor::HandleElifDirective(Token &ElifToken, 2871 const Token &HashToken) { 2872 ++NumElse; 2873 2874 // #elif directive in a non-skipping conditional... start skipping. 2875 // We don't care what the condition is, because we will always skip it (since 2876 // the block immediately before it was included). 2877 const SourceLocation ConditionalBegin = CurPPLexer->getSourceLocation(); 2878 DiscardUntilEndOfDirective(); 2879 const SourceLocation ConditionalEnd = CurPPLexer->getSourceLocation(); 2880 2881 PPConditionalInfo CI; 2882 if (CurPPLexer->popConditionalLevel(CI)) { 2883 Diag(ElifToken, diag::pp_err_elif_without_if); 2884 return; 2885 } 2886 2887 // If this is a top-level #elif, inform the MIOpt. 2888 if (CurPPLexer->getConditionalStackDepth() == 0) 2889 CurPPLexer->MIOpt.EnterTopLevelConditional(); 2890 2891 // If this is a #elif with a #else before it, report the error. 2892 if (CI.FoundElse) Diag(ElifToken, diag::pp_err_elif_after_else); 2893 2894 if (Callbacks) 2895 Callbacks->Elif(ElifToken.getLocation(), 2896 SourceRange(ConditionalBegin, ConditionalEnd), 2897 PPCallbacks::CVK_NotEvaluated, CI.IfLoc); 2898 2899 if (PPOpts->SingleFileParseMode && !CI.FoundNonSkip) { 2900 // In 'single-file-parse mode' undefined identifiers trigger parsing of all 2901 // the directive blocks. 2902 CurPPLexer->pushConditionalLevel(ElifToken.getLocation(), /*wasskip*/false, 2903 /*foundnonskip*/false, /*foundelse*/false); 2904 return; 2905 } 2906 2907 // Finally, skip the rest of the contents of this block. 2908 SkipExcludedConditionalBlock( 2909 HashToken.getLocation(), CI.IfLoc, /*Foundnonskip*/ true, 2910 /*FoundElse*/ CI.FoundElse, ElifToken.getLocation()); 2911 } 2912