mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-15 20:12:50 +00:00
Enable coroutines under -std=c++2a.
llvm-svn: 354736
This commit is contained in:
parent
456e7afbca
commit
10ab78e854
@ -136,7 +136,7 @@ LANGOPT(Freestanding, 1, 0, "freestanding implementation")
|
||||
LANGOPT(NoBuiltin , 1, 0, "disable builtin functions")
|
||||
LANGOPT(NoMathBuiltin , 1, 0, "disable math builtin functions")
|
||||
LANGOPT(GNUAsm , 1, 1, "GNU-style inline assembly")
|
||||
LANGOPT(CoroutinesTS , 1, 0, "C++ coroutines TS")
|
||||
LANGOPT(Coroutines , 1, 0, "C++20 coroutines")
|
||||
LANGOPT(DllExportInlines , 1, 1, "dllexported classes dllexport inline methods")
|
||||
LANGOPT(RelaxedTemplateTemplateArgs, 1, 0, "C++17 relaxed matching of template template arguments")
|
||||
|
||||
|
@ -32,6 +32,9 @@
|
||||
#ifndef CONCEPTS_KEYWORD
|
||||
#define CONCEPTS_KEYWORD(X) CXX2A_KEYWORD(X,KEYCONCEPTS)
|
||||
#endif
|
||||
#ifndef COROUTINES_KEYWORD
|
||||
#define COROUTINES_KEYWORD(X) CXX2A_KEYWORD(X,KEYCOROUTINES)
|
||||
#endif
|
||||
#ifndef MODULES_KEYWORD
|
||||
#define MODULES_KEYWORD(X) KEYWORD(X,KEYMODULES)
|
||||
#endif
|
||||
@ -254,8 +257,7 @@ PUNCTUATOR(caretcaret, "^^")
|
||||
// KEYZVECTOR - This is a keyword for the System z vector extensions,
|
||||
// which are heavily based on AltiVec
|
||||
// KEYBORLAND - This is a keyword if Borland extensions are enabled
|
||||
// KEYCOROUTINES - This is a keyword if support for the C++ coroutines
|
||||
// TS is enabled
|
||||
// KEYCOROUTINES - This is a keyword if support for C++ coroutines is enabled
|
||||
// BOOLSUPPORT - This is a keyword if 'bool' is a built-in type
|
||||
// HALFSUPPORT - This is a keyword if 'half' is a built-in type
|
||||
// WCHARSUPPORT - This is a keyword if 'wchar_t' is a built-in type
|
||||
@ -371,17 +373,17 @@ CXX11_KEYWORD(thread_local , 0)
|
||||
CONCEPTS_KEYWORD(concept)
|
||||
CONCEPTS_KEYWORD(requires)
|
||||
|
||||
// C++ coroutines TS keywords
|
||||
KEYWORD(co_await , KEYCOROUTINES)
|
||||
KEYWORD(co_return , KEYCOROUTINES)
|
||||
KEYWORD(co_yield , KEYCOROUTINES)
|
||||
// C++2a / coroutines TS keywords
|
||||
COROUTINES_KEYWORD(co_await)
|
||||
COROUTINES_KEYWORD(co_return)
|
||||
COROUTINES_KEYWORD(co_yield)
|
||||
|
||||
// C++ modules TS keywords
|
||||
MODULES_KEYWORD(module)
|
||||
MODULES_KEYWORD(import)
|
||||
|
||||
// C++ char8_t proposal
|
||||
KEYWORD(char8_t , CHAR8SUPPORT)
|
||||
CXX2A_KEYWORD(char8_t , CHAR8SUPPORT)
|
||||
|
||||
// C11 Extension
|
||||
KEYWORD(_Float16 , KEYALL)
|
||||
|
@ -143,7 +143,7 @@ static KeywordStatus getKeywordStatus(const LangOptions &LangOpts,
|
||||
// in non-arc mode.
|
||||
if (LangOpts.ObjC && (Flags & KEYOBJC)) return KS_Enabled;
|
||||
if (LangOpts.ConceptsTS && (Flags & KEYCONCEPTS)) return KS_Enabled;
|
||||
if (LangOpts.CoroutinesTS && (Flags & KEYCOROUTINES)) return KS_Enabled;
|
||||
if (LangOpts.Coroutines && (Flags & KEYCOROUTINES)) return KS_Enabled;
|
||||
if (LangOpts.ModulesTS && (Flags & KEYMODULES)) return KS_Enabled;
|
||||
if (LangOpts.CPlusPlus && (Flags & KEYALLCXX)) return KS_Future;
|
||||
return KS_Disabled;
|
||||
|
@ -108,7 +108,7 @@ static bool hasFeature(StringRef Feature, const LangOptions &LangOpts,
|
||||
bool HasFeature = llvm::StringSwitch<bool>(Feature)
|
||||
.Case("altivec", LangOpts.AltiVec)
|
||||
.Case("blocks", LangOpts.Blocks)
|
||||
.Case("coroutines", LangOpts.CoroutinesTS)
|
||||
.Case("coroutines", LangOpts.Coroutines)
|
||||
.Case("cplusplus", LangOpts.CPlusPlus)
|
||||
.Case("cplusplus11", LangOpts.CPlusPlus11)
|
||||
.Case("cplusplus14", LangOpts.CPlusPlus14)
|
||||
|
@ -581,7 +581,7 @@ void EmitAssemblyHelper::CreatePasses(legacy::PassManager &MPM,
|
||||
addObjCARCOptPass);
|
||||
}
|
||||
|
||||
if (LangOpts.CoroutinesTS)
|
||||
if (LangOpts.Coroutines)
|
||||
addCoroutinePassesToExtensionPoints(PMBuilder);
|
||||
|
||||
if (LangOpts.Sanitize.has(SanitizerKind::LocalBounds)) {
|
||||
|
@ -2577,7 +2577,7 @@ static void ParseLangArgs(LangOptions &Opts, ArgList &Args, InputKind IK,
|
||||
Opts.Blocks = Args.hasArg(OPT_fblocks) || (Opts.OpenCL
|
||||
&& Opts.OpenCLVersion == 200);
|
||||
Opts.BlocksRuntimeOptional = Args.hasArg(OPT_fblocks_runtime_optional);
|
||||
Opts.CoroutinesTS = Args.hasArg(OPT_fcoroutines_ts);
|
||||
Opts.Coroutines = Opts.CPlusPlus2a || Args.hasArg(OPT_fcoroutines_ts);
|
||||
|
||||
// Enable [[]] attributes in C++11 by default.
|
||||
Opts.DoubleSquareBracketAttributes =
|
||||
|
@ -547,7 +547,7 @@ static void InitializeCPlusPlusFeatureTestMacros(const LangOptions &LangOpts,
|
||||
// TS features.
|
||||
if (LangOpts.ConceptsTS)
|
||||
Builder.defineMacro("__cpp_experimental_concepts", "1L");
|
||||
if (LangOpts.CoroutinesTS)
|
||||
if (LangOpts.Coroutines)
|
||||
Builder.defineMacro("__cpp_coroutines", "201703L");
|
||||
}
|
||||
|
||||
|
@ -13116,7 +13116,7 @@ Decl *Sema::ActOnFinishFunctionBody(Decl *dcl, Stmt *Body,
|
||||
sema::AnalysisBasedWarnings::Policy WP = AnalysisWarnings.getDefaultPolicy();
|
||||
sema::AnalysisBasedWarnings::Policy *ActivePolicy = nullptr;
|
||||
|
||||
if (getLangOpts().CoroutinesTS && getCurFunction()->isCoroutine())
|
||||
if (getLangOpts().Coroutines && getCurFunction()->isCoroutine())
|
||||
CheckCompletedCoroutineBody(FD, Body);
|
||||
|
||||
// Do not call PopExpressionEvaluationContext() if it is a lambda because one
|
||||
|
@ -271,6 +271,6 @@
|
||||
#error "wrong value for __cpp_experimental_concepts"
|
||||
#endif
|
||||
|
||||
#if defined(COROUTINES) ? check(coroutines, 201703L, 201703L, 201703L, 201703L, 201703L) : check(coroutines, 0, 0, 0, 0, 0)
|
||||
#if defined(COROUTINES) ? check(coroutines, 201703L, 201703L, 201703L, 201703L, 201703L) : check(coroutines, 0, 0, 0, 0, 201703L)
|
||||
#error "wrong value for __cpp_coroutines"
|
||||
#endif
|
||||
|
@ -5,5 +5,9 @@ template<typename T>
|
||||
concept x = 0;
|
||||
#undef concept
|
||||
|
||||
int co_await = 0; // expected-warning {{'co_await' is a keyword in C++2a}}
|
||||
int co_return = 0; // expected-warning {{'co_return' is a keyword in C++2a}}
|
||||
int co_yield = 0; // expected-warning {{'co_yield' is a keyword in C++2a}}
|
||||
int char8_t = 0; // expected-warning {{'char8_t' is a keyword in C++2a}}
|
||||
int concept = 0; // expected-warning {{'concept' is a keyword in C++2a}}
|
||||
int requires = 0; // expected-warning {{'requires' is a keyword in C++2a}}
|
||||
|
@ -1060,7 +1060,7 @@ as the draft C++2a standard evolves.
|
||||
<tr>
|
||||
<td>Coroutines</td>
|
||||
<td><a href="http://wg21.link/p0912r5">P0912R5</a></td>
|
||||
<td class="partial" align="center">Partial (<tt>-fcoroutines-ts</tt>)</td>
|
||||
<td class="partial" align="center">Partial</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user