DeclOpenMP.cpp revision 263508
1204076Spjd//===--- DeclOpenMP.cpp - Declaration OpenMP AST Node Implementation ------===// 2204076Spjd// 3219351Spjd// The LLVM Compiler Infrastructure 4204076Spjd// 5204076Spjd// This file is distributed under the University of Illinois Open Source 6204076Spjd// License. See LICENSE.TXT for details. 7204076Spjd// 8204076Spjd//===----------------------------------------------------------------------===// 9204076Spjd/// \file 10204076Spjd/// \brief This file implements OMPThreadPrivateDecl class. 11204076Spjd/// 12204076Spjd//===----------------------------------------------------------------------===// 13204076Spjd 14204076Spjd#include "clang/AST/ASTContext.h" 15204076Spjd#include "clang/AST/DeclBase.h" 16204076Spjd#include "clang/AST/Decl.h" 17204076Spjd#include "clang/AST/DeclOpenMP.h" 18204076Spjd#include "clang/AST/Expr.h" 19204076Spjd 20204076Spjdusing namespace clang; 21204076Spjd 22204076Spjd//===----------------------------------------------------------------------===// 23204076Spjd// OMPThreadPrivateDecl Implementation. 24204076Spjd//===----------------------------------------------------------------------===// 25204076Spjd 26204076Spjdvoid OMPThreadPrivateDecl::anchor() { } 27204076Spjd 28204076SpjdOMPThreadPrivateDecl *OMPThreadPrivateDecl::Create(ASTContext &C, 29204076Spjd DeclContext *DC, 30204076Spjd SourceLocation L, 31204076Spjd ArrayRef<Expr *> VL) { 32204076Spjd unsigned Size = sizeof(OMPThreadPrivateDecl) + 33204076Spjd (VL.size() * sizeof(Expr *)); 34204076Spjd 35204076Spjd void *Mem = C.Allocate(Size, llvm::alignOf<OMPThreadPrivateDecl>()); 36204076Spjd OMPThreadPrivateDecl *D = new (Mem) OMPThreadPrivateDecl(OMPThreadPrivate, 37204076Spjd DC, L); 38204076Spjd D->NumVars = VL.size(); 39204076Spjd D->setVars(VL); 40204076Spjd return D; 41204076Spjd} 42204076Spjd 43204076SpjdOMPThreadPrivateDecl *OMPThreadPrivateDecl::CreateDeserialized(ASTContext &C, 44204076Spjd unsigned ID, 45204076Spjd unsigned N) { 46204076Spjd unsigned Size = sizeof(OMPThreadPrivateDecl) + (N * sizeof(Expr *)); 47204076Spjd 48211982Spjd void *Mem = AllocateDeserializedDecl(C, ID, Size); 49204076Spjd OMPThreadPrivateDecl *D = new (Mem) OMPThreadPrivateDecl(OMPThreadPrivate, 50204076Spjd 0, SourceLocation()); 51204076Spjd D->NumVars = N; 52204076Spjd return D; 53204076Spjd} 54204076Spjd 55204076Spjdvoid OMPThreadPrivateDecl::setVars(ArrayRef<Expr *> VL) { 56204076Spjd assert(VL.size() == NumVars && 57204076Spjd "Number of variables is not the same as the preallocated buffer"); 58204076Spjd Expr **Vars = reinterpret_cast<Expr **>(this + 1); 59204076Spjd std::copy(VL.begin(), VL.end(), Vars); 60212038Spjd} 61204076Spjd 62204076Spjd