@@ -2763,14 +2763,19 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
27632763 }
27642764
27652765 static VarDecl *createKernelObjClone (ASTContext &Ctx, DeclContext *DC,
2766- const CXXRecordDecl *KernelObj) {
2766+ const CXXRecordDecl *KernelObj,
2767+ FunctionDecl *KernelCallerFunc) {
27672768 TypeSourceInfo *TSInfo =
27682769 KernelObj->isLambda () ? KernelObj->getLambdaTypeInfo () : nullptr ;
2770+ auto Type = QualType (KernelObj->getTypeForDecl (), 0 );
2771+ Type->getAsRecordDecl ()->setAnonymousStructOrUnion (true );
27692772 VarDecl *VD = VarDecl::Create (
27702773 Ctx, DC, KernelObj->getLocation (), KernelObj->getLocation (),
2771- KernelObj->getIdentifier (), QualType (KernelObj-> getTypeForDecl (), 0 ) ,
2774+ KernelObj->getIdentifier (), Type ,
27722775 TSInfo, SC_None);
2773-
2776+ if (getKernelInvocationKind (KernelCallerFunc) == InvokeParallelForWorkGroup)
2777+ VD->addAttr (
2778+ SYCLScopeAttr::CreateImplicit (Ctx, SYCLScopeAttr::Level::WorkGroup));
27742779 return VD;
27752780 }
27762781
@@ -2846,7 +2851,8 @@ class SyclKernelBodyCreator : public SyclKernelFieldHandler {
28462851 FunctionDecl *KernelCallerFunc)
28472852 : SyclKernelFieldHandler(S), DeclCreator(DC),
28482853 KernelObjClone (createKernelObjClone(S.getASTContext(),
2849- DC.getKernelDecl(), KernelObj)),
2854+ DC.getKernelDecl(), KernelObj,
2855+ KernelCallerFunc)),
28502856 VarEntity(InitializedEntity::InitializeVariable(KernelObjClone)),
28512857 KernelObj(KernelObj), KernelCallerFunc(KernelCallerFunc),
28522858 KernelCallerSrcLoc(KernelCallerFunc->getLocation ()) {
0 commit comments