mirror of https://github.com/microsoft/clang.git
Support for #pragma region/endregion for MSVC compatibility. Patch thanks to pravic!
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@169028 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
87e2cfcec7
commit
fafd101e6b
|
@ -1203,6 +1203,29 @@ struct PragmaARCCFCodeAuditedHandler : public PragmaHandler {
|
|||
}
|
||||
};
|
||||
|
||||
/// \brief Handle "\#pragma region [...]"
|
||||
///
|
||||
/// The syntax is
|
||||
/// \code
|
||||
/// \#pragma region [optional name]
|
||||
/// \#pragma endregion [optional comment]
|
||||
/// \endcode
|
||||
///
|
||||
/// \note This is
|
||||
/// <a href="http://msdn.microsoft.com/en-us/library/b6xkz944(v=vs.80).aspx">editor-only</a>
|
||||
/// pragma, just skipped by compiler.
|
||||
struct PragmaRegionHandler : public PragmaHandler {
|
||||
PragmaRegionHandler(const char *pragma) : PragmaHandler(pragma) { }
|
||||
|
||||
virtual void HandlePragma(Preprocessor &PP, PragmaIntroducerKind Introducer,
|
||||
Token &NameTok) {
|
||||
// #pragma region: endregion matches can be verified
|
||||
// __pragma(region): no sense, but ignored by msvc
|
||||
// _Pragma is not valid for MSVC, but there isn't any point
|
||||
// to handle a _Pragma differently.
|
||||
}
|
||||
};
|
||||
|
||||
} // end anonymous namespace
|
||||
|
||||
|
||||
|
@ -1236,5 +1259,7 @@ void Preprocessor::RegisterBuiltinPragmas() {
|
|||
if (LangOpts.MicrosoftExt) {
|
||||
AddPragmaHandler(new PragmaCommentHandler());
|
||||
AddPragmaHandler(new PragmaIncludeAliasHandler());
|
||||
AddPragmaHandler(new PragmaRegionHandler("region"));
|
||||
AddPragmaHandler(new PragmaRegionHandler("endregion"));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
/* 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(void){}
|
||||
#pragma endregion long comment
|
||||
|
||||
void inner();
|
||||
|
||||
__pragma(region) // no sense, but ignored
|
||||
_Pragma("region")// ditto
|
||||
|
||||
#pragma region2 // expected-warning {{unknown pragma ignored}}
|
||||
|
||||
#pragma region one
|
||||
#pragma region inner
|
||||
//#pragma endregion inner
|
||||
|
||||
#pragma endregion end
|
||||
|
||||
// {{unclosed pragma region}} - region mismatches is not detected yet
|
Loading…
Reference in New Issue