diff --git a/include/clang/Basic/Attr.td b/include/clang/Basic/Attr.td index 5a16f53208311a5137af2c98dad65b08e960f244..e03bc9b30ae5b403c0d7ef3c131a04cf664222c2 100644 --- a/include/clang/Basic/Attr.td +++ b/include/clang/Basic/Attr.td @@ -2183,7 +2183,7 @@ def Loopbound : Attr { def Platina : Attr { // #pragma platina guard <str> - let Spellings = [Pragma<"platina", "guard">]; + let Spellings = [Pragma<"platina", "guard">, Pragma<"platina", "callee">]; let Args = [IdentifierArgument<"Type">, StringArgument<"PlatinaExpr">]; let Documentation = [Undocumented]; diff --git a/include/clang/Parse/Parser.h b/include/clang/Parse/Parser.h index 5ab03ecfc440cfaffa4e8d6a55f67141c170d369..26b8d18f209efe956cf5e6851563a17c7817488a 100644 --- a/include/clang/Parse/Parser.h +++ b/include/clang/Parse/Parser.h @@ -169,6 +169,7 @@ class Parser : public CodeCompletionHandler { std::unique_ptr<PragmaHandler> OptimizeHandler; std::unique_ptr<PragmaHandler> LoopboundHandler; std::unique_ptr<PragmaHandler> PlatinaGuardHandler; + std::unique_ptr<PragmaHandler> PlatinaCalleeHandler; std::unique_ptr<PragmaHandler> PlatinHandler; std::unique_ptr<PragmaHandler> LoopHintHandler; std::unique_ptr<PragmaHandler> UnrollHintHandler; diff --git a/lib/Parse/ParsePragma.cpp b/lib/Parse/ParsePragma.cpp index 90ace83078a44a6aa426528797a1071f038be7fd..659a333e1b86744827a1dbcc60dce606f590f7fa 100644 --- a/lib/Parse/ParsePragma.cpp +++ b/lib/Parse/ParsePragma.cpp @@ -163,6 +163,10 @@ struct PragmaPlatinaGuardHandler : public PragmaPlatinaHandler { PragmaPlatinaGuardHandler() : PragmaPlatinaHandler("guard") {} }; +struct PragmaPlatinaCalleeHandler : public PragmaPlatinaHandler { + PragmaPlatinaCalleeHandler() : PragmaPlatinaHandler("callee") {} +}; + struct PragmaPlatinHandler : public PragmaHandler { PragmaPlatinHandler() : PragmaHandler("platin") { } void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer, @@ -264,6 +268,9 @@ void Parser::initializePragmaHandlers() { PlatinaGuardHandler.reset(new PragmaPlatinaGuardHandler()); PP.AddPragmaHandler("platina", PlatinaGuardHandler.get()); + PlatinaCalleeHandler.reset(new PragmaPlatinaCalleeHandler()); + PP.AddPragmaHandler("platina", PlatinaCalleeHandler.get()); + PlatinHandler.reset(new PragmaPlatinHandler()); PP.AddPragmaHandler(PlatinHandler.get()); @@ -347,6 +354,9 @@ void Parser::resetPragmaHandlers() { PP.RemovePragmaHandler("platina", PlatinaGuardHandler.get()); PlatinaGuardHandler.reset(); + PP.RemovePragmaHandler("platina", PlatinaCalleeHandler.get()); + PlatinaCalleeHandler.reset(); + PP.RemovePragmaHandler("clang", LoopHintHandler.get()); LoopHintHandler.reset();