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