From 2a674f0b0c31145b3ffd7a9fa6b09bd15895991e Mon Sep 17 00:00:00 2001
From: Simon Schuster <schuster+git@cs.fau.de>
Date: Sun, 31 Jan 2021 20:26:19 +0100
Subject: [PATCH] Add new annotation type 'platina glet'

---
 include/clang/Basic/Attr.td  |  1 +
 include/clang/Parse/Parser.h |  1 +
 lib/Parse/ParsePragma.cpp    | 10 ++++++++++
 3 files changed, 12 insertions(+)

diff --git a/include/clang/Basic/Attr.td b/include/clang/Basic/Attr.td
index a37e19f9f32..c50c8831969 100644
--- a/include/clang/Basic/Attr.td
+++ b/include/clang/Basic/Attr.td
@@ -2862,6 +2862,7 @@ def Platina : Attr {
                   , Pragma<"platina", "do">
                   , Pragma<"platina", "lbound">
                   , Pragma<"platina", "let">
+                  , Pragma<"platina", "glet">
                   ];
   let Args = [IdentifierArgument<"Type">, StringArgument<"PlatinaExpr">];
 
diff --git a/include/clang/Parse/Parser.h b/include/clang/Parse/Parser.h
index e0f46179d3b..ed9e191460b 100644
--- a/include/clang/Parse/Parser.h
+++ b/include/clang/Parse/Parser.h
@@ -189,6 +189,7 @@ class Parser : public CodeCompletionHandler {
   std::unique_ptr<PragmaHandler> PlatinaCalleeHandler;
   std::unique_ptr<PragmaHandler> PlatinaDoHandler;
   std::unique_ptr<PragmaHandler> PlatinaLetHandler;
+  std::unique_ptr<PragmaHandler> PlatinaGLetHandler;
   std::unique_ptr<PragmaHandler> PlatinaLoopboundHandler;
   std::unique_ptr<PragmaHandler> PlatinHandler;
   std::unique_ptr<PragmaHandler> LoopHintHandler;
diff --git a/lib/Parse/ParsePragma.cpp b/lib/Parse/ParsePragma.cpp
index 16d4bb03f35..72c181e09dc 100644
--- a/lib/Parse/ParsePragma.cpp
+++ b/lib/Parse/ParsePragma.cpp
@@ -229,6 +229,10 @@ struct PragmaPlatinaLetHandler : public PragmaPlatinaHandler {
   PragmaPlatinaLetHandler() : PragmaPlatinaHandler("let") {}
 };
 
+struct PragmaPlatinaGLetHandler : public PragmaPlatinaHandler {
+  PragmaPlatinaGLetHandler() : PragmaPlatinaHandler("glet") {}
+};
+
 struct PragmaPlatinaLoopboundHandler : public PragmaPlatinaHandler {
   // Sorry, we have to settle for lbound here, as tablegen seems to ignore
   // pragma namespaces and bugs on the duplicated "loopbound"
@@ -401,6 +405,9 @@ void Parser::initializePragmaHandlers() {
   PlatinaLetHandler.reset(new PragmaPlatinaLetHandler());
   PP.AddPragmaHandler("platina", PlatinaLetHandler.get());
 
+  PlatinaGLetHandler.reset(new PragmaPlatinaGLetHandler());
+  PP.AddPragmaHandler("platina", PlatinaGLetHandler.get());
+
   PlatinaLoopboundHandler.reset(new PragmaPlatinaLoopboundHandler());
   PP.AddPragmaHandler("platina", PlatinaLoopboundHandler.get());
 
@@ -524,6 +531,9 @@ void Parser::resetPragmaHandlers() {
   PP.RemovePragmaHandler("platina", PlatinaLetHandler.get());
   PlatinaLetHandler.reset();
 
+  PP.RemovePragmaHandler("platina", PlatinaGLetHandler.get());
+  PlatinaGLetHandler.reset();
+
   PP.RemovePragmaHandler("platina", PlatinaLoopboundHandler.get());
   PlatinaLoopboundHandler.reset();
 
-- 
GitLab