Coverage Report

Created: 2020-09-22 08:39

/Users/buildslave/jenkins/workspace/coverage/llvm-project/clang/lib/AST/DeclOpenMP.cpp
Line
Count
Source (jump to first uncovered line)
1
//===--- DeclOpenMP.cpp - Declaration OpenMP AST Node Implementation ------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
/// \file
9
/// This file implements OMPThreadPrivateDecl, OMPCapturedExprDecl
10
/// classes.
11
///
12
//===----------------------------------------------------------------------===//
13
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"
19
20
using namespace clang;
21
22
//===----------------------------------------------------------------------===//
23
// OMPThreadPrivateDecl Implementation.
24
//===----------------------------------------------------------------------===//
25
26
0
void OMPThreadPrivateDecl::anchor() {}
27
28
OMPThreadPrivateDecl *OMPThreadPrivateDecl::Create(ASTContext &C,
29
                                                   DeclContext *DC,
30
                                                   SourceLocation L,
31
2.60k
                                                   ArrayRef<Expr *> VL) {
32
2.60k
  auto *D = OMPDeclarativeDirective::createDirective<OMPThreadPrivateDecl>(
33
2.60k
      C, DC, llvm::None, VL.size(), L);
34
2.60k
  D->setVars(VL);
35
2.60k
  return D;
36
2.60k
}
37
38
OMPThreadPrivateDecl *OMPThreadPrivateDecl::CreateDeserialized(ASTContext &C,
39
                                                               unsigned ID,
40
240
                                                               unsigned N) {
41
240
  return OMPDeclarativeDirective::createEmptyDirective<OMPThreadPrivateDecl>(
42
240
      C, ID, 0, N);
43
240
}
44
45
2.60k
void OMPThreadPrivateDecl::setVars(ArrayRef<Expr *> VL) {
46
2.60k
  assert(VL.size() == Data->getNumChildren() &&
47
2.60k
         "Number of variables is not the same as the preallocated buffer");
48
2.60k
  llvm::copy(VL, getVars().begin());
49
2.60k
}
50
51
//===----------------------------------------------------------------------===//
52
// OMPAllocateDecl Implementation.
53
//===----------------------------------------------------------------------===//
54
55
0
void OMPAllocateDecl::anchor() { }
56
57
OMPAllocateDecl *OMPAllocateDecl::Create(ASTContext &C, DeclContext *DC,
58
                                         SourceLocation L, ArrayRef<Expr *> VL,
59
488
                                         ArrayRef<OMPClause *> CL) {
60
488
  auto *D = OMPDeclarativeDirective::createDirective<OMPAllocateDecl>(
61
488
      C, DC, CL, VL.size(), L);
62
488
  D->setVars(VL);
63
488
  return D;
64
488
}
65
66
OMPAllocateDecl *OMPAllocateDecl::CreateDeserialized(ASTContext &C, unsigned ID,
67
                                                     unsigned NVars,
68
120
                                                     unsigned NClauses) {
69
120
  return OMPDeclarativeDirective::createEmptyDirective<OMPAllocateDecl>(
70
120
      C, ID, NClauses, NVars, SourceLocation());
71
120
}
72
73
488
void OMPAllocateDecl::setVars(ArrayRef<Expr *> VL) {
74
488
  assert(VL.size() == Data->getNumChildren() &&
75
488
         "Number of variables is not the same as the preallocated buffer");
76
488
  llvm::copy(VL, getVars().begin());
77
488
}
78
79
//===----------------------------------------------------------------------===//
80
// OMPRequiresDecl Implementation.
81
//===----------------------------------------------------------------------===//
82
83
0
void OMPRequiresDecl::anchor() {}
84
85
OMPRequiresDecl *OMPRequiresDecl::Create(ASTContext &C, DeclContext *DC,
86
                                         SourceLocation L,
87
155
                                         ArrayRef<OMPClause *> CL) {
88
155
  return OMPDeclarativeDirective::createDirective<OMPRequiresDecl>(C, DC, CL, 0,
89
155
                                                                   L);
90
155
}
91
92
OMPRequiresDecl *OMPRequiresDecl::CreateDeserialized(ASTContext &C, unsigned ID,
93
20
                                                     unsigned N) {
94
20
  return OMPDeclarativeDirective::createEmptyDirective<OMPRequiresDecl>(
95
20
      C, ID, N, 0, SourceLocation());
96
20
}
97
98
//===----------------------------------------------------------------------===//
99
// OMPDeclareReductionDecl Implementation.
100
//===----------------------------------------------------------------------===//
101
102
OMPDeclareReductionDecl::OMPDeclareReductionDecl(
103
    Kind DK, DeclContext *DC, SourceLocation L, DeclarationName Name,
104
    QualType Ty, OMPDeclareReductionDecl *PrevDeclInScope)
105
    : ValueDecl(DK, DC, L, Name, Ty), DeclContext(DK), Combiner(nullptr),
106
884
      PrevDeclInScope(PrevDeclInScope) {
107
884
  setInitializer(nullptr, CallInit);
108
884
}
109
110
0
void OMPDeclareReductionDecl::anchor() {}
111
112
OMPDeclareReductionDecl *OMPDeclareReductionDecl::Create(
113
    ASTContext &C, DeclContext *DC, SourceLocation L, DeclarationName Name,
114
752
    QualType T, OMPDeclareReductionDecl *PrevDeclInScope) {
115
752
  return new (C, DC) OMPDeclareReductionDecl(OMPDeclareReduction, DC, L, Name,
116
752
                                             T, PrevDeclInScope);
117
752
}
118
119
OMPDeclareReductionDecl *
120
132
OMPDeclareReductionDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
121
132
  return new (C, ID) OMPDeclareReductionDecl(
122
132
      OMPDeclareReduction, /*DC=*/nullptr, SourceLocation(), DeclarationName(),
123
132
      QualType(), /*PrevDeclInScope=*/nullptr);
124
132
}
125
126
334
OMPDeclareReductionDecl *OMPDeclareReductionDecl::getPrevDeclInScope() {
127
334
  return cast_or_null<OMPDeclareReductionDecl>(
128
334
      PrevDeclInScope.get(getASTContext().getExternalSource()));
129
334
}
130
const OMPDeclareReductionDecl *
131
0
OMPDeclareReductionDecl::getPrevDeclInScope() const {
132
0
  return cast_or_null<OMPDeclareReductionDecl>(
133
0
      PrevDeclInScope.get(getASTContext().getExternalSource()));
134
0
}
135
136
//===----------------------------------------------------------------------===//
137
// OMPDeclareMapperDecl Implementation.
138
//===----------------------------------------------------------------------===//
139
140
0
void OMPDeclareMapperDecl::anchor() {}
141
142
OMPDeclareMapperDecl *OMPDeclareMapperDecl::Create(
143
    ASTContext &C, DeclContext *DC, SourceLocation L, DeclarationName Name,
144
    QualType T, DeclarationName VarName, ArrayRef<OMPClause *> Clauses,
145
320
    OMPDeclareMapperDecl *PrevDeclInScope) {
146
320
  return OMPDeclarativeDirective::createDirective<OMPDeclareMapperDecl>(
147
320
      C, DC, Clauses, 1, L, Name, T, VarName, PrevDeclInScope);
148
320
}
149
150
OMPDeclareMapperDecl *OMPDeclareMapperDecl::CreateDeserialized(ASTContext &C,
151
                                                               unsigned ID,
152
82
                                                               unsigned N) {
153
82
  return OMPDeclarativeDirective::createEmptyDirective<OMPDeclareMapperDecl>(
154
82
      C, ID, N, 1, SourceLocation(), DeclarationName(), QualType(),
155
82
      DeclarationName(), /*PrevDeclInScope=*/nullptr);
156
82
}
157
158
134
OMPDeclareMapperDecl *OMPDeclareMapperDecl::getPrevDeclInScope() {
159
134
  return cast_or_null<OMPDeclareMapperDecl>(
160
134
      PrevDeclInScope.get(getASTContext().getExternalSource()));
161
134
}
162
163
0
const OMPDeclareMapperDecl *OMPDeclareMapperDecl::getPrevDeclInScope() const {
164
0
  return cast_or_null<OMPDeclareMapperDecl>(
165
0
      PrevDeclInScope.get(getASTContext().getExternalSource()));
166
0
}
167
168
//===----------------------------------------------------------------------===//
169
// OMPCapturedExprDecl Implementation.
170
//===----------------------------------------------------------------------===//
171
172
0
void OMPCapturedExprDecl::anchor() {}
173
174
OMPCapturedExprDecl *OMPCapturedExprDecl::Create(ASTContext &C, DeclContext *DC,
175
                                                 IdentifierInfo *Id, QualType T,
176
64.8k
                                                 SourceLocation StartLoc) {
177
64.8k
  return new (C, DC) OMPCapturedExprDecl(
178
64.8k
      C, DC, Id, T, C.getTrivialTypeSourceInfo(T), StartLoc);
179
64.8k
}
180
181
OMPCapturedExprDecl *OMPCapturedExprDecl::CreateDeserialized(ASTContext &C,
182
3.95k
                                                             unsigned ID) {
183
3.95k
  return new (C, ID) OMPCapturedExprDecl(C, nullptr, nullptr, QualType(),
184
3.95k
                                         /*TInfo=*/nullptr, SourceLocation());
185
3.95k
}
186
187
96
SourceRange OMPCapturedExprDecl::getSourceRange() const {
188
96
  assert(hasInit());
189
96
  return SourceRange(getInit()->getBeginLoc(), getInit()->getEndLoc());
190
96
}