On 6 May 2014 11:08, Alexey Bataev <[email protected]> wrote: > Author: abataev > Date: Tue May 6 05:08:46 2014 > New Revision: 208077 > > URL: http://llvm.org/viewvc/llvm-project?rev=208077&view=rev > Log: > [OPENMP] Initial codegen for '#pragma omp parallel' > > Added: > cfe/trunk/lib/CodeGen/CGOpenMPRuntime.cpp (with props) > cfe/trunk/lib/CodeGen/CGOpenMPRuntime.h (with props) > cfe/trunk/lib/CodeGen/CGStmtOpenMP.cpp (with props) > cfe/trunk/test/OpenMP/parallel_codegen.cpp (with props) > Modified: > cfe/trunk/include/clang/AST/Decl.h > cfe/trunk/include/clang/Sema/Sema.h > cfe/trunk/lib/CodeGen/CGException.cpp > cfe/trunk/lib/CodeGen/CGStmt.cpp > cfe/trunk/lib/CodeGen/CMakeLists.txt > cfe/trunk/lib/CodeGen/CodeGenFunction.cpp > cfe/trunk/lib/CodeGen/CodeGenFunction.h > cfe/trunk/lib/CodeGen/CodeGenModule.cpp > cfe/trunk/lib/CodeGen/CodeGenModule.h > cfe/trunk/lib/Parse/ParseOpenMP.cpp > cfe/trunk/lib/Sema/SemaOpenMP.cpp > cfe/trunk/lib/Sema/SemaStmt.cpp > cfe/trunk/lib/Sema/TreeTransform.h > cfe/trunk/lib/Serialization/ASTReaderDecl.cpp > cfe/trunk/lib/Serialization/ASTWriterDecl.cpp
> Modified: cfe/trunk/lib/Sema/SemaStmt.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaStmt.cpp?rev=208077&r1=208076&r2=208077&view=diff > ============================================================================== > --- cfe/trunk/lib/Sema/SemaStmt.cpp (original) > +++ cfe/trunk/lib/Sema/SemaStmt.cpp Tue May 6 05:08:46 2014 > @@ -3322,20 +3322,9 @@ Sema::CreateCapturedStmtRecordDecl(Captu > RD->setImplicit(); > RD->startDefinition(); > > + assert(NumParams > 0 && "CapturedStmt requires context parameter"); > CD = CapturedDecl::Create(Context, CurContext, NumParams); > DC->addDecl(CD); > - > - // Build the context parameter > - assert(NumParams > 0 && "CapturedStmt requires context parameter"); > - DC = CapturedDecl::castToDeclContext(CD); > - IdentifierInfo *VarName = &Context.Idents.get("__context"); > - QualType ParamType = Context.getPointerType(Context.getTagDeclType(RD)); > - ImplicitParamDecl *Param > - = ImplicitParamDecl::Create(Context, DC, Loc, VarName, ParamType); > - DC->addDecl(Param); > - > - CD->setContextParam(Param); > - > return RD; > } > > @@ -3367,9 +3356,62 @@ static void buildCapturedStmtCaptureList > void Sema::ActOnCapturedRegionStart(SourceLocation Loc, Scope *CurScope, > CapturedRegionKind Kind, > unsigned NumParams) { > - CapturedDecl *CD = 0; > + CapturedDecl *CD = nullptr; > RecordDecl *RD = CreateCapturedStmtRecordDecl(CD, Loc, NumParams); > > + // Build the context parameter > + DeclContext *DC = CapturedDecl::castToDeclContext(CD); > + IdentifierInfo *ParamName = &Context.Idents.get("__context"); > + QualType ParamType = Context.getPointerType(Context.getTagDeclType(RD)); > + ImplicitParamDecl *Param > + = ImplicitParamDecl::Create(Context, DC, Loc, ParamName, ParamType); > + DC->addDecl(Param); > + > + CD->setContextParam(0, Param); > + > + // Enter the capturing scope for this captured region. > + PushCapturedRegionScope(CurScope, CD, RD, Kind); > + > + if (CurScope) > + PushDeclContext(CurScope, CD); > + else > + CurContext = CD; > + > + PushExpressionEvaluationContext(PotentiallyEvaluated); > +} > + > +void Sema::ActOnCapturedRegionStart(SourceLocation Loc, Scope *CurScope, > + CapturedRegionKind Kind, > + ArrayRef<CapturedParamNameType> Params) { > + CapturedDecl *CD = nullptr; > + RecordDecl *RD = CreateCapturedStmtRecordDecl(CD, Loc, Params.size()); > + > + // Build the context parameter > + DeclContext *DC = CapturedDecl::castToDeclContext(CD); > + bool ContextIsFound = false; > + unsigned ParamNum = 0; > + for (ArrayRef<CapturedParamNameType>::iterator I = Params.begin(), > + E = Params.end(); > + I != E; ++I, ++ParamNum) { > + if (I->second.isNull()) { > + assert(!ContextIsFound && > + "null type has been found already for '__context' parameter"); > + IdentifierInfo *ParamName = &Context.Idents.get("__context"); > + QualType ParamType = > Context.getPointerType(Context.getTagDeclType(RD)); > + ImplicitParamDecl *Param > + = ImplicitParamDecl::Create(Context, DC, Loc, ParamName, ParamType); > + DC->addDecl(Param); > + CD->setContextParam(ParamNum, Param); > + ContextIsFound = true; > + } else { > + IdentifierInfo *ParamName = &Context.Idents.get(I->first); > + ImplicitParamDecl *Param > + = ImplicitParamDecl::Create(Context, DC, Loc, ParamName, I->second); > + DC->addDecl(Param); > + CD->setParam(ParamNum, Param); > + } > + } > + assert(ContextIsFound && "no null type for '__context' parameter"); In a Release build, built with GCC, I get: /home/jay/svn/llvm-project/llvm/trunk/tools/clang/lib/Sema/SemaStmt.cpp:3391:8: warning: variable ‘ContextIsFound’ set but not used [-Wunused-but-set-variable] bool ContextIsFound = false; ^ Jay. _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
