123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- //===--- DeclOpenMP.cpp - Declaration OpenMP AST Node Implementation ------===//
- //
- // The LLVM Compiler Infrastructure
- //
- // This file is distributed under the University of Illinois Open Source
- // License. See LICENSE.TXT for details.
- //
- //===----------------------------------------------------------------------===//
- /// \file
- /// \brief This file implements OMPThreadPrivateDecl class.
- ///
- //===----------------------------------------------------------------------===//
- #include "clang/AST/ASTContext.h"
- #include "clang/AST/Decl.h"
- #include "clang/AST/DeclBase.h"
- #include "clang/AST/DeclOpenMP.h"
- #include "clang/AST/Expr.h"
- using namespace clang;
- //===----------------------------------------------------------------------===//
- // OMPThreadPrivateDecl Implementation.
- //===----------------------------------------------------------------------===//
- void OMPThreadPrivateDecl::anchor() { }
- OMPThreadPrivateDecl *OMPThreadPrivateDecl::Create(ASTContext &C,
- DeclContext *DC,
- SourceLocation L,
- ArrayRef<Expr *> VL) {
- OMPThreadPrivateDecl *D = new (C, DC, VL.size() * sizeof(Expr *))
- OMPThreadPrivateDecl(OMPThreadPrivate, DC, L);
- D->NumVars = VL.size();
- D->setVars(VL);
- return D;
- }
- OMPThreadPrivateDecl *OMPThreadPrivateDecl::CreateDeserialized(ASTContext &C,
- unsigned ID,
- unsigned N) {
- OMPThreadPrivateDecl *D = new (C, ID, N * sizeof(Expr *))
- OMPThreadPrivateDecl(OMPThreadPrivate, nullptr, SourceLocation());
- D->NumVars = N;
- return D;
- }
- void OMPThreadPrivateDecl::setVars(ArrayRef<Expr *> VL) {
- assert(VL.size() == NumVars &&
- "Number of variables is not the same as the preallocated buffer");
- Expr **Vars = reinterpret_cast<Expr **>(this + 1);
- std::copy(VL.begin(), VL.end(), Vars);
- }
|