@@ -2763,14 +2763,19 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
2763
2763
}
2764
2764
2765
2765
static VarDecl *createKernelObjClone (ASTContext &Ctx, DeclContext *DC,
2766
- const CXXRecordDecl *KernelObj) {
2766
+ const CXXRecordDecl *KernelObj,
2767
+ FunctionDecl *KernelCallerFunc) {
2767
2768
TypeSourceInfo *TSInfo =
2768
2769
KernelObj->isLambda () ? KernelObj->getLambdaTypeInfo () : nullptr ;
2770
+ auto Type = QualType (KernelObj->getTypeForDecl (), 0 );
2771
+ Type->getAsRecordDecl ()->setAnonymousStructOrUnion (true );
2769
2772
VarDecl *VD = VarDecl::Create (
2770
2773
Ctx, DC, KernelObj->getLocation (), KernelObj->getLocation (),
2771
- KernelObj->getIdentifier (), QualType (KernelObj-> getTypeForDecl (), 0 ) ,
2774
+ KernelObj->getIdentifier (), Type ,
2772
2775
TSInfo, SC_None);
2773
-
2776
+ if (getKernelInvocationKind (KernelCallerFunc) == InvokeParallelForWorkGroup)
2777
+ VD->addAttr (
2778
+ SYCLScopeAttr::CreateImplicit (Ctx, SYCLScopeAttr::Level::WorkGroup));
2774
2779
return VD;
2775
2780
}
2776
2781
@@ -2846,7 +2851,8 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
2846
2851
FunctionDecl *KernelCallerFunc)
2847
2852
: SyclKernelFieldHandler(S), DeclCreator(DC),
2848
2853
KernelObjClone (createKernelObjClone(S.getASTContext(),
2849
- DC.getKernelDecl(), KernelObj)),
2854
+ DC.getKernelDecl(), KernelObj,
2855
+ KernelCallerFunc)),
2850
2856
VarEntity(InitializedEntity::InitializeVariable(KernelObjClone)),
2851
2857
KernelObj(KernelObj), KernelCallerFunc(KernelCallerFunc),
2852
2858
KernelCallerSrcLoc(KernelCallerFunc->getLocation ()) {
0 commit comments