blob: 2c474106e89bc3d2559b3bb8050bc615477946a5 [file] [log] [blame]
Alexey Bataeva769e072013-03-22 06:34:35 +00001//===--- DeclOpenMP.cpp - Declaration OpenMP AST Node Implementation ------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9/// \file
Alexey Bataev4244be22016-02-11 05:35:55 +000010/// \brief This file implements OMPThreadPrivateDecl, OMPCapturedExprDecl
Alexey Bataev90c228f2016-02-08 09:29:13 +000011/// classes.
Alexey Bataeva769e072013-03-22 06:34:35 +000012///
13//===----------------------------------------------------------------------===//
14
15#include "clang/AST/ASTContext.h"
Alexey Bataeva769e072013-03-22 06:34:35 +000016#include "clang/AST/Decl.h"
Chandler Carruth5553d0d2014-01-07 11:51:46 +000017#include "clang/AST/DeclBase.h"
Alexey Bataeva769e072013-03-22 06:34:35 +000018#include "clang/AST/DeclOpenMP.h"
19#include "clang/AST/Expr.h"
20
21using namespace clang;
22
23//===----------------------------------------------------------------------===//
24// OMPThreadPrivateDecl Implementation.
25//===----------------------------------------------------------------------===//
26
27void OMPThreadPrivateDecl::anchor() { }
28
29OMPThreadPrivateDecl *OMPThreadPrivateDecl::Create(ASTContext &C,
30 DeclContext *DC,
31 SourceLocation L,
Alexey Bataev6f6f3b42013-05-13 04:18:18 +000032 ArrayRef<Expr *> VL) {
James Y Knight967eb202015-12-29 22:13:13 +000033 OMPThreadPrivateDecl *D =
34 new (C, DC, additionalSizeToAlloc<Expr *>(VL.size()))
35 OMPThreadPrivateDecl(OMPThreadPrivate, DC, L);
Alexey Bataeva769e072013-03-22 06:34:35 +000036 D->NumVars = VL.size();
37 D->setVars(VL);
38 return D;
39}
40
41OMPThreadPrivateDecl *OMPThreadPrivateDecl::CreateDeserialized(ASTContext &C,
42 unsigned ID,
43 unsigned N) {
James Y Knight967eb202015-12-29 22:13:13 +000044 OMPThreadPrivateDecl *D = new (C, ID, additionalSizeToAlloc<Expr *>(N))
Craig Topper36250ad2014-05-12 05:36:57 +000045 OMPThreadPrivateDecl(OMPThreadPrivate, nullptr, SourceLocation());
Alexey Bataeva769e072013-03-22 06:34:35 +000046 D->NumVars = N;
47 return D;
48}
49
Alexey Bataev6f6f3b42013-05-13 04:18:18 +000050void OMPThreadPrivateDecl::setVars(ArrayRef<Expr *> VL) {
Alexey Bataeva769e072013-03-22 06:34:35 +000051 assert(VL.size() == NumVars &&
52 "Number of variables is not the same as the preallocated buffer");
James Y Knight967eb202015-12-29 22:13:13 +000053 std::uninitialized_copy(VL.begin(), VL.end(), getTrailingObjects<Expr *>());
Alexey Bataeva769e072013-03-22 06:34:35 +000054}
Alexey Bataev5ec3eb12013-07-19 03:13:43 +000055
Alexey Bataev90c228f2016-02-08 09:29:13 +000056//===----------------------------------------------------------------------===//
Alexey Bataev4244be22016-02-11 05:35:55 +000057// OMPCapturedExprDecl Implementation.
Alexey Bataev90c228f2016-02-08 09:29:13 +000058//===----------------------------------------------------------------------===//
59
Alexey Bataev4244be22016-02-11 05:35:55 +000060void OMPCapturedExprDecl::anchor() {}
Alexey Bataev90c228f2016-02-08 09:29:13 +000061
Alexey Bataev4244be22016-02-11 05:35:55 +000062OMPCapturedExprDecl *OMPCapturedExprDecl::Create(ASTContext &C, DeclContext *DC,
63 IdentifierInfo *Id,
64 QualType T) {
65 return new (C, DC) OMPCapturedExprDecl(C, DC, Id, T);
Alexey Bataev90c228f2016-02-08 09:29:13 +000066}
67
Alexey Bataev4244be22016-02-11 05:35:55 +000068OMPCapturedExprDecl *OMPCapturedExprDecl::CreateDeserialized(ASTContext &C,
69 unsigned ID) {
70 return new (C, ID) OMPCapturedExprDecl(C, nullptr, nullptr, QualType());
Alexey Bataev90c228f2016-02-08 09:29:13 +000071}
72