blob: 5b06ce0778a7073140730ff3a11807a04c343ecc [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 Bataev94a4f0c2016-03-03 05:21:39 +000057// OMPDeclareReductionDecl Implementation.
58//===----------------------------------------------------------------------===//
59
60void OMPDeclareReductionDecl::anchor() {}
61
62OMPDeclareReductionDecl *OMPDeclareReductionDecl::Create(
63 ASTContext &C, DeclContext *DC, SourceLocation L, DeclarationName Name,
64 QualType T, OMPDeclareReductionDecl *PrevDeclInScope) {
65 return new (C, DC) OMPDeclareReductionDecl(OMPDeclareReduction, DC, L, Name,
66 T, PrevDeclInScope);
67}
68
69OMPDeclareReductionDecl *
70OMPDeclareReductionDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
71 return new (C, ID) OMPDeclareReductionDecl(
72 OMPDeclareReduction, /*DC=*/nullptr, SourceLocation(), DeclarationName(),
73 QualType(), /*PrevDeclInScope=*/nullptr);
74}
75
76OMPDeclareReductionDecl *OMPDeclareReductionDecl::getPrevDeclInScope() {
77 return cast_or_null<OMPDeclareReductionDecl>(
78 PrevDeclInScope.get(getASTContext().getExternalSource()));
79}
80const OMPDeclareReductionDecl *
81OMPDeclareReductionDecl::getPrevDeclInScope() const {
82 return cast_or_null<OMPDeclareReductionDecl>(
83 PrevDeclInScope.get(getASTContext().getExternalSource()));
84}
85
86//===----------------------------------------------------------------------===//
Alexey Bataev4244be22016-02-11 05:35:55 +000087// OMPCapturedExprDecl Implementation.
Alexey Bataev90c228f2016-02-08 09:29:13 +000088//===----------------------------------------------------------------------===//
89
Alexey Bataev4244be22016-02-11 05:35:55 +000090void OMPCapturedExprDecl::anchor() {}
Alexey Bataev90c228f2016-02-08 09:29:13 +000091
Alexey Bataev4244be22016-02-11 05:35:55 +000092OMPCapturedExprDecl *OMPCapturedExprDecl::Create(ASTContext &C, DeclContext *DC,
93 IdentifierInfo *Id,
94 QualType T) {
95 return new (C, DC) OMPCapturedExprDecl(C, DC, Id, T);
Alexey Bataev90c228f2016-02-08 09:29:13 +000096}
97
Alexey Bataev4244be22016-02-11 05:35:55 +000098OMPCapturedExprDecl *OMPCapturedExprDecl::CreateDeserialized(ASTContext &C,
99 unsigned ID) {
100 return new (C, ID) OMPCapturedExprDecl(C, nullptr, nullptr, QualType());
Alexey Bataev90c228f2016-02-08 09:29:13 +0000101}
102