1 //===--- DeclOpenMP.cpp - Declaration OpenMP AST Node Implementation ------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 /// \brief This file implements OMPThreadPrivateDecl class.
12 //===----------------------------------------------------------------------===//
14 #include "clang/AST/ASTContext.h"
15 #include "clang/AST/Decl.h"
16 #include "clang/AST/DeclBase.h"
17 #include "clang/AST/DeclOpenMP.h"
18 #include "clang/AST/Expr.h"
20 using namespace clang
;
22 //===----------------------------------------------------------------------===//
23 // OMPThreadPrivateDecl Implementation.
24 //===----------------------------------------------------------------------===//
26 void OMPThreadPrivateDecl::anchor() { }
28 OMPThreadPrivateDecl
*OMPThreadPrivateDecl::Create(ASTContext
&C
,
31 ArrayRef
<Expr
*> VL
) {
32 OMPThreadPrivateDecl
*D
= new (C
, DC
, VL
.size() * sizeof(Expr
*))
33 OMPThreadPrivateDecl(OMPThreadPrivate
, DC
, L
);
34 D
->NumVars
= VL
.size();
39 OMPThreadPrivateDecl
*OMPThreadPrivateDecl::CreateDeserialized(ASTContext
&C
,
42 OMPThreadPrivateDecl
*D
= new (C
, ID
, N
* sizeof(Expr
*))
43 OMPThreadPrivateDecl(OMPThreadPrivate
, nullptr, SourceLocation());
48 void OMPThreadPrivateDecl::setVars(ArrayRef
<Expr
*> VL
) {
49 assert(VL
.size() == NumVars
&&
50 "Number of variables is not the same as the preallocated buffer");
51 Expr
**Vars
= reinterpret_cast<Expr
**>(this + 1);
52 std::copy(VL
.begin(), VL
.end(), Vars
);