[clang] [OpenACC] Implement Duffs-Device restriction for Compute Constructs (PR #83460)
Alexey Bataev via cfe-commits
cfe-commits at lists.llvm.org
Thu Feb 29 10:31:29 PST 2024
================
@@ -534,6 +534,25 @@ class Scope {
return false;
}
+ /// Determine if this scope (or its parents) are a compute construct inside of
+ /// the nearest 'switch' scope. This is needed to check whether we are inside
+ /// of a 'duffs' device, which is an illegal branch into a compute construct.
+ bool isInOpenACCComputeConstructBeforeSwitch() const {
+ for (const Scope *S = this; S; S = S->getParent()) {
+ if (S->getFlags() & Scope::OpenACCComputeConstructScope)
+ return true;
+ if (S->getFlags() & Scope::SwitchScope)
+ return false;
+
+ if (S->getFlags() &
+ (Scope::FnScope | Scope::ClassScope | Scope::BlockScope |
+ Scope::TemplateParamScope | Scope::FunctionPrototypeScope |
+ Scope::AtCatchScope | Scope::ObjCMethodScope))
+ return false;
----------------
alexey-bataev wrote:
Merge this?
https://github.com/llvm/llvm-project/pull/83460
More information about the cfe-commits
mailing list