Hi asl, triton, chapuni,

Description: http://msdn.microsoft.com/en-us/library/b6xkz944(v=vs.80).aspx

This is editor pragma and its line just ignored by compiler with 
-fms-extensions mode.

Tests inside.

http://llvm-reviews.chandlerc.com/D65

Files:
  lib/Lex/Pragma.cpp
  test/Lexer/pragma-region.c

Index: lib/Lex/Pragma.cpp
===================================================================
--- lib/Lex/Pragma.cpp
+++ lib/Lex/Pragma.cpp
@@ -1278,6 +1278,28 @@
   }
 };
 
+/// \bried PragmaRegionHandler - "\#pragma region [...]"
+///
+/// The syntax is
+/// \code
+///   \#pragma region [optional name]
+///   \#pragma endregion [optional comment]
+/// \endcode
+struct PragmaRegionHandler : public PragmaHandler {
+  PragmaRegionHandler(const char* pragma)
+    :PragmaHandler(pragma)
+  {}
+
+  virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
+    Token &NameTok) {
+      // just skip it
+  }
+
+
+};
+
+
+
 }  // end anonymous namespace
 
 
@@ -1311,5 +1333,7 @@
   if (LangOpts.MicrosoftExt) {
     AddPragmaHandler(new PragmaCommentHandler());
     AddPragmaHandler(new PragmaIncludeAliasHandler());
+    AddPragmaHandler(new PragmaRegionHandler("region"));
+    AddPragmaHandler(new PragmaRegionHandler("endregion"));
   }
 }
Index: test/Lexer/pragma-region.c
===================================================================
--- test/Lexer/pragma-region.c
+++ test/Lexer/pragma-region.c
@@ -0,0 +1,20 @@
+/* Test pragma region directive from
+   http://msdn.microsoft.com/en-us/library/b6xkz944(v=vs.80).aspx */
+
+// Editor-only pragma, just skipped by compiler.
+// Syntax:
+// #pragma region optional name
+// #pragma endregion optional comment
+//
+// RUN: %clang_cc1 -fsyntax-only -verify -Wall -fms-extensions %s
+
+#pragma region
+/* inner space */
+#pragma endregion
+
+#pragma region long name
+/* inner space */
+void foo(){}
+#pragma endregion long comment
+
+#pragma region2 // // expected-warning {{unknown pragma ignored}}
Index: lib/Lex/Pragma.cpp
===================================================================
--- lib/Lex/Pragma.cpp
+++ lib/Lex/Pragma.cpp
@@ -1278,6 +1278,28 @@
   }
 };
 
+/// \bried PragmaRegionHandler - "\#pragma region [...]"
+///
+/// The syntax is
+/// \code
+///   \#pragma region [optional name]
+///   \#pragma endregion [optional comment]
+/// \endcode
+struct PragmaRegionHandler : public PragmaHandler {
+  PragmaRegionHandler(const char* pragma)
+    :PragmaHandler(pragma)
+  {}
+
+  virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
+    Token &NameTok) {
+      // just skip it
+  }
+
+
+};
+
+
+
 }  // end anonymous namespace
 
 
@@ -1311,5 +1333,7 @@
   if (LangOpts.MicrosoftExt) {
     AddPragmaHandler(new PragmaCommentHandler());
     AddPragmaHandler(new PragmaIncludeAliasHandler());
+    AddPragmaHandler(new PragmaRegionHandler("region"));
+    AddPragmaHandler(new PragmaRegionHandler("endregion"));
   }
 }
Index: test/Lexer/pragma-region.c
===================================================================
--- test/Lexer/pragma-region.c
+++ test/Lexer/pragma-region.c
@@ -0,0 +1,20 @@
+/* Test pragma region directive from
+   http://msdn.microsoft.com/en-us/library/b6xkz944(v=vs.80).aspx */
+
+// Editor-only pragma, just skipped by compiler.
+// Syntax:
+// #pragma region optional name
+// #pragma endregion optional comment
+//
+// RUN: %clang_cc1 -fsyntax-only -verify -Wall -fms-extensions %s
+
+#pragma region
+/* inner space */
+#pragma endregion
+
+#pragma region long name
+/* inner space */
+void foo(){}
+#pragma endregion long comment
+
+#pragma region2 // // expected-warning {{unknown pragma ignored}}
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to