Index: docs/ClangPlugins.rst =================================================================== --- docs/ClangPlugins.rst +++ docs/ClangPlugins.rst @@ -55,7 +55,7 @@ class ExamplePragmaHandler : public PragmaHandler { public: ExamplePragmaHandler() : PragmaHandler("example_pragma") { } - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &PragmaTok) { // Handle the pragma } Index: examples/AnnotateFunctions/AnnotateFunctions.cpp =================================================================== --- examples/AnnotateFunctions/AnnotateFunctions.cpp +++ examples/AnnotateFunctions/AnnotateFunctions.cpp @@ -58,7 +58,7 @@ public: PragmaAnnotateHandler() : PragmaHandler("enable_annotate") { } - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &PragmaTok) override { Token Tok; Index: include/clang/Lex/Pragma.h =================================================================== --- include/clang/Lex/Pragma.h +++ include/clang/Lex/Pragma.h @@ -14,6 +14,7 @@ #define LLVM_CLANG_LEX_PRAGMA_H #include "clang/Basic/LLVM.h" +#include "clang/Basic/SourceLocation.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringRef.h" #include @@ -46,6 +47,12 @@ PIK___pragma }; + /// Describes how and where the pragma was introduced. + struct PragmaIntroducer { + PragmaIntroducerKind Kind; + SourceLocation Loc; + }; + /// PragmaHandler - Instances of this interface defined to handle the various /// pragmas that the language front-end uses. Each handler optionally has a /// name (e.g. "pack") and the HandlePragma method is invoked when a pragma with @@ -64,7 +71,7 @@ virtual ~PragmaHandler(); StringRef getName() const { return Name; } - virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + virtual void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) = 0; /// getIfNamespace - If this is a namespace, return it. This is equivalent to @@ -78,7 +85,7 @@ public: explicit EmptyPragmaHandler(StringRef Name = StringRef()); - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; }; @@ -111,7 +118,7 @@ bool IsEmpty() const { return Handlers.empty(); } - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override; PragmaNamespace *getIfNamespace() override { return this; } Index: include/clang/Lex/Preprocessor.h =================================================================== --- include/clang/Lex/Preprocessor.h +++ include/clang/Lex/Preprocessor.h @@ -2291,8 +2291,7 @@ void HandleElifDirective(Token &ElifToken, const Token &HashToken); // Pragmas. - void HandlePragmaDirective(SourceLocation IntroducerLoc, - PragmaIntroducerKind Introducer); + void HandlePragmaDirective(PragmaIntroducer Introducer); public: void HandlePragmaOnce(Token &OnceTok); Index: lib/Frontend/PrintPreprocessedOutput.cpp =================================================================== --- lib/Frontend/PrintPreprocessedOutput.cpp +++ lib/Frontend/PrintPreprocessedOutput.cpp @@ -664,7 +664,7 @@ bool RequireTokenExpansion) : Prefix(prefix), Callbacks(callbacks), ShouldExpandTokens(RequireTokenExpansion) {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &PragmaTok) override { // Figure out what line we went to and insert the appropriate number of // newline characters. Index: lib/Lex/PPDirectives.cpp =================================================================== --- lib/Lex/PPDirectives.cpp +++ lib/Lex/PPDirectives.cpp @@ -982,7 +982,7 @@ // C99 6.10.6 - Pragma Directive. case tok::pp_pragma: - return HandlePragmaDirective(SavedHash.getLocation(), PIK_HashPragma); + return HandlePragmaDirective({PIK_HashPragma, SavedHash.getLocation()}); // GNU Extensions. case tok::pp_import: Index: lib/Lex/Pragma.cpp =================================================================== --- lib/Lex/Pragma.cpp +++ lib/Lex/Pragma.cpp @@ -63,7 +63,7 @@ EmptyPragmaHandler::EmptyPragmaHandler(StringRef Name) : PragmaHandler(Name) {} void EmptyPragmaHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, + PragmaIntroducer Introducer, Token &FirstToken) {} //===----------------------------------------------------------------------===// @@ -98,8 +98,7 @@ } void PragmaNamespace::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, - Token &Tok) { + PragmaIntroducer Introducer, Token &Tok) { // Read the 'namespace' that the directive is in, e.g. STDC. Do not macro // expand it, the user can have a STDC #define, that should not affect this. PP.LexUnexpandedToken(Tok); @@ -124,10 +123,9 @@ /// HandlePragmaDirective - The "\#pragma" directive has been parsed. Lex the /// rest of the pragma, passing it to the registered pragma handlers. -void Preprocessor::HandlePragmaDirective(SourceLocation IntroducerLoc, - PragmaIntroducerKind Introducer) { +void Preprocessor::HandlePragmaDirective(PragmaIntroducer Introducer) { if (Callbacks) - Callbacks->PragmaDirective(IntroducerLoc, Introducer); + Callbacks->PragmaDirective(Introducer.Loc, Introducer.Kind); if (!PragmasEnabled) return; @@ -321,7 +319,7 @@ EnterSourceFileWithLexer(TL, nullptr); // With everything set up, lex this as a #pragma directive. - HandlePragmaDirective(PragmaLoc, PIK__Pragma); + HandlePragmaDirective({PIK__Pragma, PragmaLoc}); // Finally, return whatever came after the pragma directive. return Lex(Tok); @@ -371,7 +369,7 @@ /*IsReinject*/ false); // With everything set up, lex this as a #pragma directive. - HandlePragmaDirective(PragmaLoc, PIK___pragma); + HandlePragmaDirective({PIK___pragma, PragmaLoc}); // Finally, return whatever came after the pragma directive. return Lex(Tok); @@ -959,7 +957,7 @@ struct PragmaOnceHandler : public PragmaHandler { PragmaOnceHandler() : PragmaHandler("once") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &OnceTok) override { PP.CheckEndOfDirective("pragma once"); PP.HandlePragmaOnce(OnceTok); @@ -971,7 +969,7 @@ struct PragmaMarkHandler : public PragmaHandler { PragmaMarkHandler() : PragmaHandler("mark") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &MarkTok) override { PP.HandlePragmaMark(); } @@ -981,7 +979,7 @@ struct PragmaPoisonHandler : public PragmaHandler { PragmaPoisonHandler() : PragmaHandler("poison") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &PoisonTok) override { PP.HandlePragmaPoison(); } @@ -992,7 +990,7 @@ struct PragmaSystemHeaderHandler : public PragmaHandler { PragmaSystemHeaderHandler() : PragmaHandler("system_header") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &SHToken) override { PP.HandlePragmaSystemHeader(SHToken); PP.CheckEndOfDirective("pragma"); @@ -1002,7 +1000,7 @@ struct PragmaDependencyHandler : public PragmaHandler { PragmaDependencyHandler() : PragmaHandler("dependency") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DepToken) override { PP.HandlePragmaDependency(DepToken); } @@ -1011,7 +1009,7 @@ struct PragmaDebugHandler : public PragmaHandler { PragmaDebugHandler() : PragmaHandler("__debug") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DebugToken) override { Token Tok; PP.LexUnexpandedToken(Tok); @@ -1151,7 +1149,7 @@ explicit PragmaDiagnosticHandler(const char *NS) : PragmaHandler("diagnostic"), Namespace(NS) {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DiagToken) override { SourceLocation DiagLoc = DiagToken.getLocation(); Token Tok; @@ -1230,7 +1228,7 @@ /// "\#pragma hdrstop []" struct PragmaHdrstopHandler : public PragmaHandler { PragmaHdrstopHandler() : PragmaHandler("hdrstop") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &DepToken) override { PP.HandlePragmaHdrstop(DepToken); } @@ -1242,7 +1240,7 @@ struct PragmaWarningHandler : public PragmaHandler { PragmaWarningHandler() : PragmaHandler("warning") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override { // Parse things like: // warning(push, 1) @@ -1365,7 +1363,7 @@ struct PragmaExecCharsetHandler : public PragmaHandler { PragmaExecCharsetHandler() : PragmaHandler("execution_character_set") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override { // Parse things like: // execution_character_set(push, "UTF-8") @@ -1427,7 +1425,7 @@ struct PragmaIncludeAliasHandler : public PragmaHandler { PragmaIncludeAliasHandler() : PragmaHandler("include_alias") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &IncludeAliasTok) override { PP.HandlePragmaIncludeAlias(IncludeAliasTok); } @@ -1470,7 +1468,7 @@ : PragmaHandler(PragmaKind(Kind, true)), Kind(Kind), Namespace(Namespace) {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override { SourceLocation MessageLoc = Tok.getLocation(); PP.Lex(Tok); @@ -1526,7 +1524,7 @@ struct PragmaModuleImportHandler : public PragmaHandler { PragmaModuleImportHandler() : PragmaHandler("import") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override { SourceLocation ImportLoc = Tok.getLocation(); @@ -1563,7 +1561,7 @@ struct PragmaModuleBeginHandler : public PragmaHandler { PragmaModuleBeginHandler() : PragmaHandler("begin") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override { SourceLocation BeginLoc = Tok.getLocation(); @@ -1623,7 +1621,7 @@ struct PragmaModuleEndHandler : public PragmaHandler { PragmaModuleEndHandler() : PragmaHandler("end") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override { SourceLocation Loc = Tok.getLocation(); @@ -1643,7 +1641,7 @@ struct PragmaModuleBuildHandler : public PragmaHandler { PragmaModuleBuildHandler() : PragmaHandler("build") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override { PP.HandlePragmaModuleBuild(Tok); } @@ -1653,7 +1651,7 @@ struct PragmaModuleLoadHandler : public PragmaHandler { PragmaModuleLoadHandler() : PragmaHandler("load") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override { SourceLocation Loc = Tok.getLocation(); @@ -1677,7 +1675,7 @@ struct PragmaPushMacroHandler : public PragmaHandler { PragmaPushMacroHandler() : PragmaHandler("push_macro") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &PushMacroTok) override { PP.HandlePragmaPushMacro(PushMacroTok); } @@ -1688,7 +1686,7 @@ struct PragmaPopMacroHandler : public PragmaHandler { PragmaPopMacroHandler() : PragmaHandler("pop_macro") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &PopMacroTok) override { PP.HandlePragmaPopMacro(PopMacroTok); } @@ -1699,7 +1697,7 @@ struct PragmaARCCFCodeAuditedHandler : public PragmaHandler { PragmaARCCFCodeAuditedHandler() : PragmaHandler("arc_cf_code_audited") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override { SourceLocation Loc = NameTok.getLocation(); bool IsBegin; @@ -1754,7 +1752,7 @@ struct PragmaAssumeNonNullHandler : public PragmaHandler { PragmaAssumeNonNullHandler() : PragmaHandler("assume_nonnull") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override { SourceLocation Loc = NameTok.getLocation(); bool IsBegin; @@ -1823,7 +1821,7 @@ struct PragmaRegionHandler : public PragmaHandler { PragmaRegionHandler(const char *pragma) : PragmaHandler(pragma) {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &NameTok) override { // #pragma region: endregion matches can be verified // __pragma(region): no sense, but ignored by msvc Index: lib/Parse/ParsePragma.cpp =================================================================== --- lib/Parse/ParsePragma.cpp +++ lib/Parse/ParsePragma.cpp @@ -26,71 +26,72 @@ struct PragmaAlignHandler : public PragmaHandler { explicit PragmaAlignHandler() : PragmaHandler("align") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; }; struct PragmaGCCVisibilityHandler : public PragmaHandler { explicit PragmaGCCVisibilityHandler() : PragmaHandler("visibility") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; }; struct PragmaOptionsHandler : public PragmaHandler { explicit PragmaOptionsHandler() : PragmaHandler("options") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; }; struct PragmaPackHandler : public PragmaHandler { explicit PragmaPackHandler() : PragmaHandler("pack") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; }; struct PragmaClangSectionHandler : public PragmaHandler { explicit PragmaClangSectionHandler(Sema &S) : PragmaHandler("section"), Actions(S) {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; + private: Sema &Actions; }; struct PragmaMSStructHandler : public PragmaHandler { explicit PragmaMSStructHandler() : PragmaHandler("ms_struct") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; }; struct PragmaUnusedHandler : public PragmaHandler { PragmaUnusedHandler() : PragmaHandler("unused") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; }; struct PragmaWeakHandler : public PragmaHandler { explicit PragmaWeakHandler() : PragmaHandler("weak") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; }; struct PragmaRedefineExtnameHandler : public PragmaHandler { explicit PragmaRedefineExtnameHandler() : PragmaHandler("redefine_extname") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; }; struct PragmaOpenCLExtensionHandler : public PragmaHandler { PragmaOpenCLExtensionHandler() : PragmaHandler("EXTENSION") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; }; struct PragmaFPContractHandler : public PragmaHandler { PragmaFPContractHandler() : PragmaHandler("FP_CONTRACT") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; }; @@ -100,7 +101,7 @@ struct PragmaSTDC_FENV_ACCESSHandler : public PragmaHandler { PragmaSTDC_FENV_ACCESSHandler() : PragmaHandler("FENV_ACCESS") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override { tok::OnOffSwitch OOS; if (PP.LexOnOffSwitch(OOS)) @@ -126,7 +127,7 @@ struct PragmaSTDC_CX_LIMITED_RANGEHandler : public PragmaHandler { PragmaSTDC_CX_LIMITED_RANGEHandler() : PragmaHandler("CX_LIMITED_RANGE") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) override { tok::OnOffSwitch OOS; PP.LexOnOffSwitch(OOS); @@ -137,7 +138,7 @@ struct PragmaSTDC_UnknownHandler : public PragmaHandler { PragmaSTDC_UnknownHandler() = default; - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &UnknownTok) override { // C99 6.10.6p2, unknown forms are not allowed. PP.Diag(UnknownTok, diag::ext_stdc_pragma_ignored); @@ -146,19 +147,19 @@ struct PragmaFPHandler : public PragmaHandler { PragmaFPHandler() : PragmaHandler("fp") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; }; struct PragmaNoOpenMPHandler : public PragmaHandler { PragmaNoOpenMPHandler() : PragmaHandler("omp") { } - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; }; struct PragmaOpenMPHandler : public PragmaHandler { PragmaOpenMPHandler() : PragmaHandler("omp") { } - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; }; @@ -166,8 +167,9 @@ struct PragmaCommentHandler : public PragmaHandler { PragmaCommentHandler(Sema &Actions) : PragmaHandler("comment"), Actions(Actions) {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; + private: Sema &Actions; }; @@ -175,27 +177,28 @@ struct PragmaDetectMismatchHandler : public PragmaHandler { PragmaDetectMismatchHandler(Sema &Actions) : PragmaHandler("detect_mismatch"), Actions(Actions) {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; + private: Sema &Actions; }; struct PragmaMSPointersToMembers : public PragmaHandler { explicit PragmaMSPointersToMembers() : PragmaHandler("pointers_to_members") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; }; struct PragmaMSVtorDisp : public PragmaHandler { explicit PragmaMSVtorDisp() : PragmaHandler("vtordisp") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; }; struct PragmaMSPragma : public PragmaHandler { explicit PragmaMSPragma(const char *name) : PragmaHandler(name) {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; }; @@ -203,21 +206,22 @@ struct PragmaOptimizeHandler : public PragmaHandler { PragmaOptimizeHandler(Sema &S) : PragmaHandler("optimize"), Actions(S) {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; + private: Sema &Actions; }; struct PragmaLoopHintHandler : public PragmaHandler { PragmaLoopHintHandler() : PragmaHandler("loop") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; }; struct PragmaUnrollHintHandler : public PragmaHandler { PragmaUnrollHintHandler(const char *name) : PragmaHandler(name) {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; }; @@ -227,20 +231,20 @@ struct PragmaMSIntrinsicHandler : public PragmaHandler { PragmaMSIntrinsicHandler() : PragmaHandler("intrinsic") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; }; struct PragmaMSOptimizeHandler : public PragmaHandler { PragmaMSOptimizeHandler() : PragmaHandler("optimize") {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; }; struct PragmaForceCUDAHostDeviceHandler : public PragmaHandler { PragmaForceCUDAHostDeviceHandler(Sema &Actions) : PragmaHandler("force_cuda_host_device"), Actions(Actions) {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; private: @@ -251,7 +255,7 @@ struct PragmaAttributeHandler : public PragmaHandler { PragmaAttributeHandler(AttributeFactory &AttrFactory) : PragmaHandler("attribute"), AttributesForPragmaAttribute(AttrFactory) {} - void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, + void HandlePragma(Preprocessor &PP, PragmaIntroducer Introducer, Token &FirstToken) override; /// A pool of attributes that were parsed in \#pragma clang attribute. @@ -1576,7 +1580,7 @@ // 'push' '(' [visibility] ')' // 'pop' void PragmaGCCVisibilityHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, + PragmaIntroducer Introducer, Token &VisTok) { SourceLocation VisLoc = VisTok.getLocation(); @@ -1637,7 +1641,7 @@ // pack '(' 'show' ')' // pack '(' ('push' | 'pop') [',' identifier] [, integer] ')' void PragmaPackHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, + PragmaIntroducer Introducer, Token &PackTok) { SourceLocation PackLoc = PackTok.getLocation(); @@ -1749,7 +1753,7 @@ // #pragma ms_struct on // #pragma ms_struct off void PragmaMSStructHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, + PragmaIntroducer Introducer, Token &MSStructTok) { PragmaMSStructKind Kind = PMSST_OFF; @@ -1792,7 +1796,8 @@ // #pragma clang section bss="abc" data="" rodata="def" text="" void PragmaClangSectionHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, Token &FirstToken) { + PragmaIntroducer Introducer, + Token &FirstToken) { Token Tok; auto SecKind = Sema::PragmaClangSectionKind::PCSK_Invalid; @@ -1905,20 +1910,20 @@ } void PragmaAlignHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, + PragmaIntroducer Introducer, Token &AlignTok) { ParseAlignPragma(PP, AlignTok, /*IsOptions=*/false); } void PragmaOptionsHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, + PragmaIntroducer Introducer, Token &OptionsTok) { ParseAlignPragma(PP, OptionsTok, /*IsOptions=*/true); } // #pragma unused(identifier) void PragmaUnusedHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, + PragmaIntroducer Introducer, Token &UnusedTok) { // FIXME: Should we be expanding macros here? My guess is no. SourceLocation UnusedLoc = UnusedTok.getLocation(); @@ -2000,7 +2005,7 @@ // #pragma weak identifier // #pragma weak identifier '=' identifier void PragmaWeakHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, + PragmaIntroducer Introducer, Token &WeakTok) { SourceLocation WeakLoc = WeakTok.getLocation(); @@ -2061,7 +2066,7 @@ // #pragma redefine_extname identifier identifier void PragmaRedefineExtnameHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, + PragmaIntroducer Introducer, Token &RedefToken) { SourceLocation RedefLoc = RedefToken.getLocation(); @@ -2104,11 +2109,9 @@ /*IsReinject=*/false); } - -void -PragmaFPContractHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, - Token &Tok) { +void PragmaFPContractHandler::HandlePragma(Preprocessor &PP, + PragmaIntroducer Introducer, + Token &Tok) { tok::OnOffSwitch OOS; if (PP.LexOnOffSwitch(OOS)) return; @@ -2125,10 +2128,9 @@ /*IsReinject=*/false); } -void -PragmaOpenCLExtensionHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, - Token &Tok) { +void PragmaOpenCLExtensionHandler::HandlePragma(Preprocessor &PP, + PragmaIntroducer Introducer, + Token &Tok) { PP.LexUnexpandedToken(Tok); if (Tok.isNot(tok::identifier)) { PP.Diag(Tok.getLocation(), diag::warn_pragma_expected_identifier) << @@ -2194,10 +2196,9 @@ /// Handle '#pragma omp ...' when OpenMP is disabled. /// -void -PragmaNoOpenMPHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, - Token &FirstTok) { +void PragmaNoOpenMPHandler::HandlePragma(Preprocessor &PP, + PragmaIntroducer Introducer, + Token &FirstTok) { if (!PP.getDiagnostics().isIgnored(diag::warn_pragma_omp_ignored, FirstTok.getLocation())) { PP.Diag(FirstTok, diag::warn_pragma_omp_ignored); @@ -2209,10 +2210,9 @@ /// Handle '#pragma omp ...' when OpenMP is enabled. /// -void -PragmaOpenMPHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, - Token &FirstTok) { +void PragmaOpenMPHandler::HandlePragma(Preprocessor &PP, + PragmaIntroducer Introducer, + Token &FirstTok) { SmallVector Pragma; Token Tok; Tok.startToken(); @@ -2256,7 +2256,7 @@ // #pragma pointers_to_members '(' 'full_generality' [',' inheritance-model] ')' // #pragma pointers_to_members '(' inheritance-model ')' void PragmaMSPointersToMembers::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, + PragmaIntroducer Introducer, Token &Tok) { SourceLocation PointersToMembersLoc = Tok.getLocation(); PP.Lex(Tok); @@ -2354,8 +2354,7 @@ // #pragma vtordisp '(' 'pop' ')' // #pragma vtordisp '(' ')' void PragmaMSVtorDisp::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, - Token &Tok) { + PragmaIntroducer Introducer, Token &Tok) { SourceLocation VtorDispLoc = Tok.getLocation(); PP.Lex(Tok); if (Tok.isNot(tok::l_paren)) { @@ -2441,8 +2440,7 @@ /// Handle all MS pragmas. Simply forwards the tokens after inserting /// an annotation token. void PragmaMSPragma::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, - Token &Tok) { + PragmaIntroducer Introducer, Token &Tok) { Token EoF, AnnotTok; EoF.startToken(); EoF.setKind(tok::eof); @@ -2480,7 +2478,7 @@ /// mismatch in the object file's values for the given name, a LNK2038 error /// is emitted. See MSDN for more details. void PragmaDetectMismatchHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, + PragmaIntroducer Introducer, Token &Tok) { SourceLocation DetectMismatchLoc = Tok.getLocation(); PP.Lex(Tok); @@ -2536,7 +2534,7 @@ /// "foo" is a string, which is fully macro expanded, and permits string /// concatenation, embedded escape characters etc. See MSDN for more details. void PragmaCommentHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, + PragmaIntroducer Introducer, Token &Tok) { SourceLocation CommentLoc = Tok.getLocation(); PP.Lex(Tok); @@ -2617,8 +2615,8 @@ // #pragma clang optimize off // #pragma clang optimize on void PragmaOptimizeHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, - Token &FirstToken) { + PragmaIntroducer Introducer, + Token &FirstToken) { Token Tok; PP.Lex(Tok); if (Tok.is(tok::eod)) { @@ -2664,8 +2662,7 @@ } // end anonymous namespace void PragmaFPHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, - Token &Tok) { + PragmaIntroducer Introducer, Token &Tok) { // fp Token PragmaName = Tok; SmallVector TokenList; @@ -2865,7 +2862,7 @@ /// loop. Specifying unroll_count(_value_) instructs llvm to try to unroll the /// loop the number of times indicated by the value. void PragmaLoopHintHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, + PragmaIntroducer Introducer, Token &Tok) { // Incoming token is "loop" from "#pragma clang loop". Token PragmaName = Tok; @@ -2958,7 +2955,7 @@ /// specified with or without parentheses. Specifying, '#pragma nounroll' /// disables unrolling of the loop. void PragmaUnrollHintHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, + PragmaIntroducer Introducer, Token &Tok) { // Incoming token is "unroll" for "#pragma unroll", or "nounroll" for // "#pragma nounroll". @@ -3024,7 +3021,7 @@ /// Anyway, we emit a warning if the function specified in \#pragma intrinsic /// isn't an intrinsic in clang and suggest to include intrin.h. void PragmaMSIntrinsicHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, + PragmaIntroducer Introducer, Token &Tok) { PP.Lex(Tok); @@ -3063,7 +3060,7 @@ // #pragma optimize("gsty", on|off) void PragmaMSOptimizeHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, + PragmaIntroducer Introducer, Token &Tok) { SourceLocation StartLoc = Tok.getLocation(); PP.Lex(Tok); @@ -3116,7 +3113,7 @@ } void PragmaForceCUDAHostDeviceHandler::HandlePragma( - Preprocessor &PP, PragmaIntroducerKind Introducer, Token &Tok) { + Preprocessor &PP, PragmaIntroducer Introducer, Token &Tok) { Token FirstTok = Tok; PP.Lex(Tok); @@ -3167,7 +3164,7 @@ /// attribute to the set of attribute-specific declarations in the active range /// of the pragma. void PragmaAttributeHandler::HandlePragma(Preprocessor &PP, - PragmaIntroducerKind Introducer, + PragmaIntroducer Introducer, Token &FirstToken) { Token Tok; PP.Lex(Tok);