Coverage Report

Created: 2024-01-17 10:31

/src/llvm-project/clang/lib/AST/Stmt.cpp
Line
Count
Source (jump to first uncovered line)
1
//===- Stmt.cpp - Statement 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
//
9
// This file implements the Stmt class and statement subclasses.
10
//
11
//===----------------------------------------------------------------------===//
12
13
#include "clang/AST/Stmt.h"
14
#include "clang/AST/ASTContext.h"
15
#include "clang/AST/ASTDiagnostic.h"
16
#include "clang/AST/Attr.h"
17
#include "clang/AST/Decl.h"
18
#include "clang/AST/DeclGroup.h"
19
#include "clang/AST/Expr.h"
20
#include "clang/AST/ExprCXX.h"
21
#include "clang/AST/ExprConcepts.h"
22
#include "clang/AST/ExprObjC.h"
23
#include "clang/AST/ExprOpenMP.h"
24
#include "clang/AST/StmtCXX.h"
25
#include "clang/AST/StmtObjC.h"
26
#include "clang/AST/StmtOpenMP.h"
27
#include "clang/AST/Type.h"
28
#include "clang/Basic/CharInfo.h"
29
#include "clang/Basic/LLVM.h"
30
#include "clang/Basic/SourceLocation.h"
31
#include "clang/Basic/TargetInfo.h"
32
#include "clang/Lex/Token.h"
33
#include "llvm/ADT/SmallVector.h"
34
#include "llvm/ADT/StringExtras.h"
35
#include "llvm/ADT/StringRef.h"
36
#include "llvm/Support/Casting.h"
37
#include "llvm/Support/Compiler.h"
38
#include "llvm/Support/ErrorHandling.h"
39
#include "llvm/Support/MathExtras.h"
40
#include "llvm/Support/raw_ostream.h"
41
#include <algorithm>
42
#include <cassert>
43
#include <cstring>
44
#include <optional>
45
#include <string>
46
#include <type_traits>
47
#include <utility>
48
49
using namespace clang;
50
51
static struct StmtClassNameTable {
52
  const char *Name;
53
  unsigned Counter;
54
  unsigned Size;
55
} StmtClassInfo[Stmt::lastStmtConstant+1];
56
57
0
static StmtClassNameTable &getStmtInfoTableEntry(Stmt::StmtClass E) {
58
0
  static bool Initialized = false;
59
0
  if (Initialized)
60
0
    return StmtClassInfo[E];
61
62
  // Initialize the table on the first use.
63
0
  Initialized = true;
64
0
#define ABSTRACT_STMT(STMT)
65
0
#define STMT(CLASS, PARENT) \
66
0
  StmtClassInfo[(unsigned)Stmt::CLASS##Class].Name = #CLASS;    \
67
0
  StmtClassInfo[(unsigned)Stmt::CLASS##Class].Size = sizeof(CLASS);
68
0
#include "clang/AST/StmtNodes.inc"
69
70
0
  return StmtClassInfo[E];
71
0
}
72
73
void *Stmt::operator new(size_t bytes, const ASTContext& C,
74
125
                         unsigned alignment) {
75
125
  return ::operator new(bytes, C, alignment);
76
125
}
77
78
0
const char *Stmt::getStmtClassName() const {
79
0
  return getStmtInfoTableEntry((StmtClass) StmtBits.sClass).Name;
80
0
}
81
82
// Check that no statement / expression class is polymorphic. LLVM style RTTI
83
// should be used instead. If absolutely needed an exception can still be added
84
// here by defining the appropriate macro (but please don't do this).
85
#define STMT(CLASS, PARENT) \
86
  static_assert(!std::is_polymorphic<CLASS>::value, \
87
                #CLASS " should not be polymorphic!");
88
#include "clang/AST/StmtNodes.inc"
89
90
// Check that no statement / expression class has a non-trival destructor.
91
// Statements and expressions are allocated with the BumpPtrAllocator from
92
// ASTContext and therefore their destructor is not executed.
93
#define STMT(CLASS, PARENT)                                                    \
94
  static_assert(std::is_trivially_destructible<CLASS>::value,                  \
95
                #CLASS " should be trivially destructible!");
96
// FIXME: InitListExpr is not trivially destructible due to its ASTVector.
97
#define INITLISTEXPR(CLASS, PARENT)
98
#include "clang/AST/StmtNodes.inc"
99
100
0
void Stmt::PrintStats() {
101
  // Ensure the table is primed.
102
0
  getStmtInfoTableEntry(Stmt::NullStmtClass);
103
104
0
  unsigned sum = 0;
105
0
  llvm::errs() << "\n*** Stmt/Expr Stats:\n";
106
0
  for (int i = 0; i != Stmt::lastStmtConstant+1; i++) {
107
0
    if (StmtClassInfo[i].Name == nullptr) continue;
108
0
    sum += StmtClassInfo[i].Counter;
109
0
  }
110
0
  llvm::errs() << "  " << sum << " stmts/exprs total.\n";
111
0
  sum = 0;
112
0
  for (int i = 0; i != Stmt::lastStmtConstant+1; i++) {
113
0
    if (StmtClassInfo[i].Name == nullptr) continue;
114
0
    if (StmtClassInfo[i].Counter == 0) continue;
115
0
    llvm::errs() << "    " << StmtClassInfo[i].Counter << " "
116
0
                 << StmtClassInfo[i].Name << ", " << StmtClassInfo[i].Size
117
0
                 << " each (" << StmtClassInfo[i].Counter*StmtClassInfo[i].Size
118
0
                 << " bytes)\n";
119
0
    sum += StmtClassInfo[i].Counter*StmtClassInfo[i].Size;
120
0
  }
121
122
0
  llvm::errs() << "Total bytes = " << sum << "\n";
123
0
}
124
125
0
void Stmt::addStmtClass(StmtClass s) {
126
0
  ++getStmtInfoTableEntry(s).Counter;
127
0
}
128
129
bool Stmt::StatisticsEnabled = false;
130
0
void Stmt::EnableStatistics() {
131
0
  StatisticsEnabled = true;
132
0
}
133
134
static std::pair<Stmt::Likelihood, const Attr *>
135
0
getLikelihood(ArrayRef<const Attr *> Attrs) {
136
0
  for (const auto *A : Attrs) {
137
0
    if (isa<LikelyAttr>(A))
138
0
      return std::make_pair(Stmt::LH_Likely, A);
139
140
0
    if (isa<UnlikelyAttr>(A))
141
0
      return std::make_pair(Stmt::LH_Unlikely, A);
142
0
  }
143
144
0
  return std::make_pair(Stmt::LH_None, nullptr);
145
0
}
146
147
0
static std::pair<Stmt::Likelihood, const Attr *> getLikelihood(const Stmt *S) {
148
0
  if (const auto *AS = dyn_cast_or_null<AttributedStmt>(S))
149
0
    return getLikelihood(AS->getAttrs());
150
151
0
  return std::make_pair(Stmt::LH_None, nullptr);
152
0
}
153
154
0
Stmt::Likelihood Stmt::getLikelihood(ArrayRef<const Attr *> Attrs) {
155
0
  return ::getLikelihood(Attrs).first;
156
0
}
157
158
0
Stmt::Likelihood Stmt::getLikelihood(const Stmt *S) {
159
0
  return ::getLikelihood(S).first;
160
0
}
161
162
0
const Attr *Stmt::getLikelihoodAttr(const Stmt *S) {
163
0
  return ::getLikelihood(S).second;
164
0
}
165
166
0
Stmt::Likelihood Stmt::getLikelihood(const Stmt *Then, const Stmt *Else) {
167
0
  Likelihood LHT = ::getLikelihood(Then).first;
168
0
  Likelihood LHE = ::getLikelihood(Else).first;
169
0
  if (LHE == LH_None)
170
0
    return LHT;
171
172
  // If the same attribute is used on both branches there's a conflict.
173
0
  if (LHT == LHE)
174
0
    return LH_None;
175
176
0
  if (LHT != LH_None)
177
0
    return LHT;
178
179
  // Invert the value of Else to get the value for Then.
180
0
  return LHE == LH_Likely ? LH_Unlikely : LH_Likely;
181
0
}
182
183
std::tuple<bool, const Attr *, const Attr *>
184
0
Stmt::determineLikelihoodConflict(const Stmt *Then, const Stmt *Else) {
185
0
  std::pair<Likelihood, const Attr *> LHT = ::getLikelihood(Then);
186
0
  std::pair<Likelihood, const Attr *> LHE = ::getLikelihood(Else);
187
  // If the same attribute is used on both branches there's a conflict.
188
0
  if (LHT.first != LH_None && LHT.first == LHE.first)
189
0
    return std::make_tuple(true, LHT.second, LHE.second);
190
191
0
  return std::make_tuple(false, nullptr, nullptr);
192
0
}
193
194
/// Skip no-op (attributed, compound) container stmts and skip captured
195
/// stmt at the top, if \a IgnoreCaptured is true.
196
0
Stmt *Stmt::IgnoreContainers(bool IgnoreCaptured) {
197
0
  Stmt *S = this;
198
0
  if (IgnoreCaptured)
199
0
    if (auto CapS = dyn_cast_or_null<CapturedStmt>(S))
200
0
      S = CapS->getCapturedStmt();
201
0
  while (true) {
202
0
    if (auto AS = dyn_cast_or_null<AttributedStmt>(S))
203
0
      S = AS->getSubStmt();
204
0
    else if (auto CS = dyn_cast_or_null<CompoundStmt>(S)) {
205
0
      if (CS->size() != 1)
206
0
        break;
207
0
      S = CS->body_back();
208
0
    } else
209
0
      break;
210
0
  }
211
0
  return S;
212
0
}
213
214
/// Strip off all label-like statements.
215
///
216
/// This will strip off label statements, case statements, attributed
217
/// statements and default statements recursively.
218
0
const Stmt *Stmt::stripLabelLikeStatements() const {
219
0
  const Stmt *S = this;
220
0
  while (true) {
221
0
    if (const auto *LS = dyn_cast<LabelStmt>(S))
222
0
      S = LS->getSubStmt();
223
0
    else if (const auto *SC = dyn_cast<SwitchCase>(S))
224
0
      S = SC->getSubStmt();
225
0
    else if (const auto *AS = dyn_cast<AttributedStmt>(S))
226
0
      S = AS->getSubStmt();
227
0
    else
228
0
      return S;
229
0
  }
230
0
}
231
232
namespace {
233
234
  struct good {};
235
  struct bad {};
236
237
  // These silly little functions have to be static inline to suppress
238
  // unused warnings, and they have to be defined to suppress other
239
  // warnings.
240
0
  static good is_good(good) { return good(); }
241
242
  typedef Stmt::child_range children_t();
243
0
  template <class T> good implements_children(children_t T::*) {
244
0
    return good();
245
0
  }
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::WhileStmt>(llvm::iterator_range<clang::StmtIterator> (clang::WhileStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::LabelStmt>(llvm::iterator_range<clang::StmtIterator> (clang::LabelStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::VAArgExpr>(llvm::iterator_range<clang::StmtIterator> (clang::VAArgExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::UnaryOperator>(llvm::iterator_range<clang::StmtIterator> (clang::UnaryOperator::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::UnaryExprOrTypeTraitExpr>(llvm::iterator_range<clang::StmtIterator> (clang::UnaryExprOrTypeTraitExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::TypoExpr>(llvm::iterator_range<clang::StmtIterator> (clang::TypoExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::TypeTraitExpr>(llvm::iterator_range<clang::StmtIterator> (clang::TypeTraitExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::SubstNonTypeTemplateParmPackExpr>(llvm::iterator_range<clang::StmtIterator> (clang::SubstNonTypeTemplateParmPackExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::SubstNonTypeTemplateParmExpr>(llvm::iterator_range<clang::StmtIterator> (clang::SubstNonTypeTemplateParmExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::StringLiteral>(llvm::iterator_range<clang::StmtIterator> (clang::StringLiteral::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::StmtExpr>(llvm::iterator_range<clang::StmtIterator> (clang::StmtExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::SourceLocExpr>(llvm::iterator_range<clang::StmtIterator> (clang::SourceLocExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::SizeOfPackExpr>(llvm::iterator_range<clang::StmtIterator> (clang::SizeOfPackExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ShuffleVectorExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ShuffleVectorExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::SYCLUniqueStableNameExpr>(llvm::iterator_range<clang::StmtIterator> (clang::SYCLUniqueStableNameExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::RequiresExpr>(llvm::iterator_range<clang::StmtIterator> (clang::RequiresExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::RecoveryExpr>(llvm::iterator_range<clang::StmtIterator> (clang::RecoveryExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::PseudoObjectExpr>(llvm::iterator_range<clang::StmtIterator> (clang::PseudoObjectExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::PredefinedExpr>(llvm::iterator_range<clang::StmtIterator> (clang::PredefinedExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ParenListExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ParenListExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ParenExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ParenExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::PackExpansionExpr>(llvm::iterator_range<clang::StmtIterator> (clang::PackExpansionExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::UnresolvedMemberExpr>(llvm::iterator_range<clang::StmtIterator> (clang::UnresolvedMemberExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::UnresolvedLookupExpr>(llvm::iterator_range<clang::StmtIterator> (clang::UnresolvedLookupExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::OpaqueValueExpr>(llvm::iterator_range<clang::StmtIterator> (clang::OpaqueValueExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::OffsetOfExpr>(llvm::iterator_range<clang::StmtIterator> (clang::OffsetOfExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ObjCSubscriptRefExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ObjCSubscriptRefExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ObjCStringLiteral>(llvm::iterator_range<clang::StmtIterator> (clang::ObjCStringLiteral::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ObjCSelectorExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ObjCSelectorExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ObjCProtocolExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ObjCProtocolExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ObjCPropertyRefExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ObjCPropertyRefExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ObjCMessageExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ObjCMessageExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ObjCIvarRefExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ObjCIvarRefExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ObjCIsaExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ObjCIsaExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ObjCIndirectCopyRestoreExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ObjCIndirectCopyRestoreExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ObjCEncodeExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ObjCEncodeExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ObjCDictionaryLiteral>(llvm::iterator_range<clang::StmtIterator> (clang::ObjCDictionaryLiteral::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ObjCBoxedExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ObjCBoxedExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ObjCBoolLiteralExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ObjCBoolLiteralExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ObjCAvailabilityCheckExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ObjCAvailabilityCheckExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ObjCArrayLiteral>(llvm::iterator_range<clang::StmtIterator> (clang::ObjCArrayLiteral::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::OMPIteratorExpr>(llvm::iterator_range<clang::StmtIterator> (clang::OMPIteratorExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::OMPArrayShapingExpr>(llvm::iterator_range<clang::StmtIterator> (clang::OMPArrayShapingExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::OMPArraySectionExpr>(llvm::iterator_range<clang::StmtIterator> (clang::OMPArraySectionExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::NoInitExpr>(llvm::iterator_range<clang::StmtIterator> (clang::NoInitExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::MemberExpr>(llvm::iterator_range<clang::StmtIterator> (clang::MemberExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::MatrixSubscriptExpr>(llvm::iterator_range<clang::StmtIterator> (clang::MatrixSubscriptExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::MaterializeTemporaryExpr>(llvm::iterator_range<clang::StmtIterator> (clang::MaterializeTemporaryExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::MSPropertySubscriptExpr>(llvm::iterator_range<clang::StmtIterator> (clang::MSPropertySubscriptExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::MSPropertyRefExpr>(llvm::iterator_range<clang::StmtIterator> (clang::MSPropertyRefExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::LambdaExpr>(llvm::iterator_range<clang::StmtIterator> (clang::LambdaExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::IntegerLiteral>(llvm::iterator_range<clang::StmtIterator> (clang::IntegerLiteral::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::InitListExpr>(llvm::iterator_range<clang::StmtIterator> (clang::InitListExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ImplicitValueInitExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ImplicitValueInitExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ImaginaryLiteral>(llvm::iterator_range<clang::StmtIterator> (clang::ImaginaryLiteral::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::GenericSelectionExpr>(llvm::iterator_range<clang::StmtIterator> (clang::GenericSelectionExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::GNUNullExpr>(llvm::iterator_range<clang::StmtIterator> (clang::GNUNullExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::FunctionParmPackExpr>(llvm::iterator_range<clang::StmtIterator> (clang::FunctionParmPackExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ExprWithCleanups>(llvm::iterator_range<clang::StmtIterator> (clang::ExprWithCleanups::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ConstantExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ConstantExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::FloatingLiteral>(llvm::iterator_range<clang::StmtIterator> (clang::FloatingLiteral::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::FixedPointLiteral>(llvm::iterator_range<clang::StmtIterator> (clang::FixedPointLiteral::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ExtVectorElementExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ExtVectorElementExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ExpressionTraitExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ExpressionTraitExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::DesignatedInitUpdateExpr>(llvm::iterator_range<clang::StmtIterator> (clang::DesignatedInitUpdateExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::DesignatedInitExpr>(llvm::iterator_range<clang::StmtIterator> (clang::DesignatedInitExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::DependentScopeDeclRefExpr>(llvm::iterator_range<clang::StmtIterator> (clang::DependentScopeDeclRefExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::DependentCoawaitExpr>(llvm::iterator_range<clang::StmtIterator> (clang::DependentCoawaitExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::DeclRefExpr>(llvm::iterator_range<clang::StmtIterator> (clang::DeclRefExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CoroutineSuspendExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CoroutineSuspendExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ConvertVectorExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ConvertVectorExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ConceptSpecializationExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ConceptSpecializationExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CompoundLiteralExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CompoundLiteralExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ChooseExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ChooseExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CharacterLiteral>(llvm::iterator_range<clang::StmtIterator> (clang::CharacterLiteral::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CastExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CastExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CallExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CallExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXUuidofExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CXXUuidofExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXUnresolvedConstructExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CXXUnresolvedConstructExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXTypeidExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CXXTypeidExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXThrowExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CXXThrowExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXThisExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CXXThisExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXStdInitializerListExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CXXStdInitializerListExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXScalarValueInitExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CXXScalarValueInitExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXRewrittenBinaryOperator>(llvm::iterator_range<clang::StmtIterator> (clang::CXXRewrittenBinaryOperator::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXPseudoDestructorExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CXXPseudoDestructorExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXParenListInitExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CXXParenListInitExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXNullPtrLiteralExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CXXNullPtrLiteralExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXNoexceptExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CXXNoexceptExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXNewExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CXXNewExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXInheritedCtorInitExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CXXInheritedCtorInitExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXFoldExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CXXFoldExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXDependentScopeMemberExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CXXDependentScopeMemberExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXDeleteExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CXXDeleteExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXDefaultInitExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CXXDefaultInitExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXDefaultArgExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CXXDefaultArgExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXConstructExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CXXConstructExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXBoolLiteralExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CXXBoolLiteralExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXBindTemporaryExpr>(llvm::iterator_range<clang::StmtIterator> (clang::CXXBindTemporaryExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::BlockExpr>(llvm::iterator_range<clang::StmtIterator> (clang::BlockExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::BinaryOperator>(llvm::iterator_range<clang::StmtIterator> (clang::BinaryOperator::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::AtomicExpr>(llvm::iterator_range<clang::StmtIterator> (clang::AtomicExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::AsTypeExpr>(llvm::iterator_range<clang::StmtIterator> (clang::AsTypeExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ArrayTypeTraitExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ArrayTypeTraitExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ArraySubscriptExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ArraySubscriptExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ArrayInitLoopExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ArrayInitLoopExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ArrayInitIndexExpr>(llvm::iterator_range<clang::StmtIterator> (clang::ArrayInitIndexExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::AddrLabelExpr>(llvm::iterator_range<clang::StmtIterator> (clang::AddrLabelExpr::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ConditionalOperator>(llvm::iterator_range<clang::StmtIterator> (clang::ConditionalOperator::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::BinaryConditionalOperator>(llvm::iterator_range<clang::StmtIterator> (clang::BinaryConditionalOperator::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::AttributedStmt>(llvm::iterator_range<clang::StmtIterator> (clang::AttributedStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::SwitchStmt>(llvm::iterator_range<clang::StmtIterator> (clang::SwitchStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::DefaultStmt>(llvm::iterator_range<clang::StmtIterator> (clang::DefaultStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CaseStmt>(llvm::iterator_range<clang::StmtIterator> (clang::CaseStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::SEHTryStmt>(llvm::iterator_range<clang::StmtIterator> (clang::SEHTryStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::SEHLeaveStmt>(llvm::iterator_range<clang::StmtIterator> (clang::SEHLeaveStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::SEHFinallyStmt>(llvm::iterator_range<clang::StmtIterator> (clang::SEHFinallyStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::SEHExceptStmt>(llvm::iterator_range<clang::StmtIterator> (clang::SEHExceptStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ReturnStmt>(llvm::iterator_range<clang::StmtIterator> (clang::ReturnStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ObjCForCollectionStmt>(llvm::iterator_range<clang::StmtIterator> (clang::ObjCForCollectionStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ObjCAutoreleasePoolStmt>(llvm::iterator_range<clang::StmtIterator> (clang::ObjCAutoreleasePoolStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ObjCAtTryStmt>(llvm::iterator_range<clang::StmtIterator> (clang::ObjCAtTryStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ObjCAtThrowStmt>(llvm::iterator_range<clang::StmtIterator> (clang::ObjCAtThrowStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ObjCAtSynchronizedStmt>(llvm::iterator_range<clang::StmtIterator> (clang::ObjCAtSynchronizedStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ObjCAtFinallyStmt>(llvm::iterator_range<clang::StmtIterator> (clang::ObjCAtFinallyStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ObjCAtCatchStmt>(llvm::iterator_range<clang::StmtIterator> (clang::ObjCAtCatchStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::OMPExecutableDirective>(llvm::iterator_range<clang::StmtIterator> (clang::OMPExecutableDirective::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::OMPCanonicalLoop>(llvm::iterator_range<clang::StmtIterator> (clang::OMPCanonicalLoop::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::NullStmt>(llvm::iterator_range<clang::StmtIterator> (clang::NullStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::MSDependentExistsStmt>(llvm::iterator_range<clang::StmtIterator> (clang::MSDependentExistsStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::IndirectGotoStmt>(llvm::iterator_range<clang::StmtIterator> (clang::IndirectGotoStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::IfStmt>(llvm::iterator_range<clang::StmtIterator> (clang::IfStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::GotoStmt>(llvm::iterator_range<clang::StmtIterator> (clang::GotoStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ForStmt>(llvm::iterator_range<clang::StmtIterator> (clang::ForStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::DoStmt>(llvm::iterator_range<clang::StmtIterator> (clang::DoStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::DeclStmt>(llvm::iterator_range<clang::StmtIterator> (clang::DeclStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CoroutineBodyStmt>(llvm::iterator_range<clang::StmtIterator> (clang::CoroutineBodyStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CoreturnStmt>(llvm::iterator_range<clang::StmtIterator> (clang::CoreturnStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::ContinueStmt>(llvm::iterator_range<clang::StmtIterator> (clang::ContinueStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CompoundStmt>(llvm::iterator_range<clang::StmtIterator> (clang::CompoundStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CapturedStmt>(llvm::iterator_range<clang::StmtIterator> (clang::CapturedStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXTryStmt>(llvm::iterator_range<clang::StmtIterator> (clang::CXXTryStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXForRangeStmt>(llvm::iterator_range<clang::StmtIterator> (clang::CXXForRangeStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::CXXCatchStmt>(llvm::iterator_range<clang::StmtIterator> (clang::CXXCatchStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::BreakStmt>(llvm::iterator_range<clang::StmtIterator> (clang::BreakStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::MSAsmStmt>(llvm::iterator_range<clang::StmtIterator> (clang::MSAsmStmt::*)())
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_children<clang::AsmStmt>(llvm::iterator_range<clang::StmtIterator> (clang::AsmStmt::*)())
246
  LLVM_ATTRIBUTE_UNUSED
247
0
  static bad implements_children(children_t Stmt::*) {
248
0
    return bad();
249
0
  }
250
251
  typedef SourceLocation getBeginLoc_t() const;
252
0
  template <class T> good implements_getBeginLoc(getBeginLoc_t T::*) {
253
0
    return good();
254
0
  }
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::WhileStmt>(clang::SourceLocation (clang::WhileStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::LabelStmt>(clang::SourceLocation (clang::LabelStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::VAArgExpr>(clang::SourceLocation (clang::VAArgExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::UnaryOperator>(clang::SourceLocation (clang::UnaryOperator::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::UnaryExprOrTypeTraitExpr>(clang::SourceLocation (clang::UnaryExprOrTypeTraitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::TypoExpr>(clang::SourceLocation (clang::TypoExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::TypeTraitExpr>(clang::SourceLocation (clang::TypeTraitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::SubstNonTypeTemplateParmPackExpr>(clang::SourceLocation (clang::SubstNonTypeTemplateParmPackExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::SubstNonTypeTemplateParmExpr>(clang::SourceLocation (clang::SubstNonTypeTemplateParmExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::StringLiteral>(clang::SourceLocation (clang::StringLiteral::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::StmtExpr>(clang::SourceLocation (clang::StmtExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::SourceLocExpr>(clang::SourceLocation (clang::SourceLocExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::SizeOfPackExpr>(clang::SourceLocation (clang::SizeOfPackExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ShuffleVectorExpr>(clang::SourceLocation (clang::ShuffleVectorExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::SYCLUniqueStableNameExpr>(clang::SourceLocation (clang::SYCLUniqueStableNameExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::RequiresExpr>(clang::SourceLocation (clang::RequiresExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::RecoveryExpr>(clang::SourceLocation (clang::RecoveryExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::PseudoObjectExpr>(clang::SourceLocation (clang::PseudoObjectExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::PredefinedExpr>(clang::SourceLocation (clang::PredefinedExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ParenListExpr>(clang::SourceLocation (clang::ParenListExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ParenExpr>(clang::SourceLocation (clang::ParenExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::PackExpansionExpr>(clang::SourceLocation (clang::PackExpansionExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::UnresolvedMemberExpr>(clang::SourceLocation (clang::UnresolvedMemberExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::UnresolvedLookupExpr>(clang::SourceLocation (clang::UnresolvedLookupExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::OpaqueValueExpr>(clang::SourceLocation (clang::OpaqueValueExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::OffsetOfExpr>(clang::SourceLocation (clang::OffsetOfExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCSubscriptRefExpr>(clang::SourceLocation (clang::ObjCSubscriptRefExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCStringLiteral>(clang::SourceLocation (clang::ObjCStringLiteral::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCSelectorExpr>(clang::SourceLocation (clang::ObjCSelectorExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCProtocolExpr>(clang::SourceLocation (clang::ObjCProtocolExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCPropertyRefExpr>(clang::SourceLocation (clang::ObjCPropertyRefExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCMessageExpr>(clang::SourceLocation (clang::ObjCMessageExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCIvarRefExpr>(clang::SourceLocation (clang::ObjCIvarRefExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCIsaExpr>(clang::SourceLocation (clang::ObjCIsaExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCIndirectCopyRestoreExpr>(clang::SourceLocation (clang::ObjCIndirectCopyRestoreExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCEncodeExpr>(clang::SourceLocation (clang::ObjCEncodeExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCDictionaryLiteral>(clang::SourceLocation (clang::ObjCDictionaryLiteral::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCBoxedExpr>(clang::SourceLocation (clang::ObjCBoxedExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCBoolLiteralExpr>(clang::SourceLocation (clang::ObjCBoolLiteralExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCAvailabilityCheckExpr>(clang::SourceLocation (clang::ObjCAvailabilityCheckExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCArrayLiteral>(clang::SourceLocation (clang::ObjCArrayLiteral::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::OMPIteratorExpr>(clang::SourceLocation (clang::OMPIteratorExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::OMPArrayShapingExpr>(clang::SourceLocation (clang::OMPArrayShapingExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::OMPArraySectionExpr>(clang::SourceLocation (clang::OMPArraySectionExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::NoInitExpr>(clang::SourceLocation (clang::NoInitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::MemberExpr>(clang::SourceLocation (clang::MemberExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::MatrixSubscriptExpr>(clang::SourceLocation (clang::MatrixSubscriptExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::MaterializeTemporaryExpr>(clang::SourceLocation (clang::MaterializeTemporaryExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::MSPropertySubscriptExpr>(clang::SourceLocation (clang::MSPropertySubscriptExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::MSPropertyRefExpr>(clang::SourceLocation (clang::MSPropertyRefExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::LambdaExpr>(clang::SourceLocation (clang::LambdaExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::IntegerLiteral>(clang::SourceLocation (clang::IntegerLiteral::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::InitListExpr>(clang::SourceLocation (clang::InitListExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ImplicitValueInitExpr>(clang::SourceLocation (clang::ImplicitValueInitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ImaginaryLiteral>(clang::SourceLocation (clang::ImaginaryLiteral::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::GenericSelectionExpr>(clang::SourceLocation (clang::GenericSelectionExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::GNUNullExpr>(clang::SourceLocation (clang::GNUNullExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::FunctionParmPackExpr>(clang::SourceLocation (clang::FunctionParmPackExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ExprWithCleanups>(clang::SourceLocation (clang::ExprWithCleanups::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ConstantExpr>(clang::SourceLocation (clang::ConstantExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::FloatingLiteral>(clang::SourceLocation (clang::FloatingLiteral::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::FixedPointLiteral>(clang::SourceLocation (clang::FixedPointLiteral::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ExtVectorElementExpr>(clang::SourceLocation (clang::ExtVectorElementExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ExpressionTraitExpr>(clang::SourceLocation (clang::ExpressionTraitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::DesignatedInitUpdateExpr>(clang::SourceLocation (clang::DesignatedInitUpdateExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::DesignatedInitExpr>(clang::SourceLocation (clang::DesignatedInitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::DependentScopeDeclRefExpr>(clang::SourceLocation (clang::DependentScopeDeclRefExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::DependentCoawaitExpr>(clang::SourceLocation (clang::DependentCoawaitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::DeclRefExpr>(clang::SourceLocation (clang::DeclRefExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CoroutineSuspendExpr>(clang::SourceLocation (clang::CoroutineSuspendExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ConvertVectorExpr>(clang::SourceLocation (clang::ConvertVectorExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ConceptSpecializationExpr>(clang::SourceLocation (clang::ConceptSpecializationExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CompoundLiteralExpr>(clang::SourceLocation (clang::CompoundLiteralExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ChooseExpr>(clang::SourceLocation (clang::ChooseExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CharacterLiteral>(clang::SourceLocation (clang::CharacterLiteral::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ImplicitCastExpr>(clang::SourceLocation (clang::ImplicitCastExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCBridgedCastExpr>(clang::SourceLocation (clang::ObjCBridgedCastExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXNamedCastExpr>(clang::SourceLocation (clang::CXXNamedCastExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXFunctionalCastExpr>(clang::SourceLocation (clang::CXXFunctionalCastExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CStyleCastExpr>(clang::SourceLocation (clang::CStyleCastExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::BuiltinBitCastExpr>(clang::SourceLocation (clang::BuiltinBitCastExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CallExpr>(clang::SourceLocation (clang::CallExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::UserDefinedLiteral>(clang::SourceLocation (clang::UserDefinedLiteral::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXOperatorCallExpr>(clang::SourceLocation (clang::CXXOperatorCallExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXUuidofExpr>(clang::SourceLocation (clang::CXXUuidofExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXUnresolvedConstructExpr>(clang::SourceLocation (clang::CXXUnresolvedConstructExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXTypeidExpr>(clang::SourceLocation (clang::CXXTypeidExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXThrowExpr>(clang::SourceLocation (clang::CXXThrowExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXThisExpr>(clang::SourceLocation (clang::CXXThisExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXStdInitializerListExpr>(clang::SourceLocation (clang::CXXStdInitializerListExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXScalarValueInitExpr>(clang::SourceLocation (clang::CXXScalarValueInitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXRewrittenBinaryOperator>(clang::SourceLocation (clang::CXXRewrittenBinaryOperator::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXPseudoDestructorExpr>(clang::SourceLocation (clang::CXXPseudoDestructorExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXParenListInitExpr>(clang::SourceLocation (clang::CXXParenListInitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXNullPtrLiteralExpr>(clang::SourceLocation (clang::CXXNullPtrLiteralExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXNoexceptExpr>(clang::SourceLocation (clang::CXXNoexceptExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXNewExpr>(clang::SourceLocation (clang::CXXNewExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXInheritedCtorInitExpr>(clang::SourceLocation (clang::CXXInheritedCtorInitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXFoldExpr>(clang::SourceLocation (clang::CXXFoldExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXDependentScopeMemberExpr>(clang::SourceLocation (clang::CXXDependentScopeMemberExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXDeleteExpr>(clang::SourceLocation (clang::CXXDeleteExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXDefaultInitExpr>(clang::SourceLocation (clang::CXXDefaultInitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXDefaultArgExpr>(clang::SourceLocation (clang::CXXDefaultArgExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXConstructExpr>(clang::SourceLocation (clang::CXXConstructExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXTemporaryObjectExpr>(clang::SourceLocation (clang::CXXTemporaryObjectExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXBoolLiteralExpr>(clang::SourceLocation (clang::CXXBoolLiteralExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXBindTemporaryExpr>(clang::SourceLocation (clang::CXXBindTemporaryExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::BlockExpr>(clang::SourceLocation (clang::BlockExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::BinaryOperator>(clang::SourceLocation (clang::BinaryOperator::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::AtomicExpr>(clang::SourceLocation (clang::AtomicExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::AsTypeExpr>(clang::SourceLocation (clang::AsTypeExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ArrayTypeTraitExpr>(clang::SourceLocation (clang::ArrayTypeTraitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ArraySubscriptExpr>(clang::SourceLocation (clang::ArraySubscriptExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ArrayInitLoopExpr>(clang::SourceLocation (clang::ArrayInitLoopExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ArrayInitIndexExpr>(clang::SourceLocation (clang::ArrayInitIndexExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::AddrLabelExpr>(clang::SourceLocation (clang::AddrLabelExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ConditionalOperator>(clang::SourceLocation (clang::ConditionalOperator::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::BinaryConditionalOperator>(clang::SourceLocation (clang::BinaryConditionalOperator::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::AttributedStmt>(clang::SourceLocation (clang::AttributedStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::SwitchStmt>(clang::SourceLocation (clang::SwitchStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::DefaultStmt>(clang::SourceLocation (clang::DefaultStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CaseStmt>(clang::SourceLocation (clang::CaseStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::SEHTryStmt>(clang::SourceLocation (clang::SEHTryStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::SEHLeaveStmt>(clang::SourceLocation (clang::SEHLeaveStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::SEHFinallyStmt>(clang::SourceLocation (clang::SEHFinallyStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::SEHExceptStmt>(clang::SourceLocation (clang::SEHExceptStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ReturnStmt>(clang::SourceLocation (clang::ReturnStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCForCollectionStmt>(clang::SourceLocation (clang::ObjCForCollectionStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCAutoreleasePoolStmt>(clang::SourceLocation (clang::ObjCAutoreleasePoolStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCAtTryStmt>(clang::SourceLocation (clang::ObjCAtTryStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCAtThrowStmt>(clang::SourceLocation (clang::ObjCAtThrowStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCAtSynchronizedStmt>(clang::SourceLocation (clang::ObjCAtSynchronizedStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCAtFinallyStmt>(clang::SourceLocation (clang::ObjCAtFinallyStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ObjCAtCatchStmt>(clang::SourceLocation (clang::ObjCAtCatchStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::OMPExecutableDirective>(clang::SourceLocation (clang::OMPExecutableDirective::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::OMPCanonicalLoop>(clang::SourceLocation (clang::OMPCanonicalLoop::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::NullStmt>(clang::SourceLocation (clang::NullStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::MSDependentExistsStmt>(clang::SourceLocation (clang::MSDependentExistsStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::IndirectGotoStmt>(clang::SourceLocation (clang::IndirectGotoStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::IfStmt>(clang::SourceLocation (clang::IfStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::GotoStmt>(clang::SourceLocation (clang::GotoStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ForStmt>(clang::SourceLocation (clang::ForStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::DoStmt>(clang::SourceLocation (clang::DoStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::DeclStmt>(clang::SourceLocation (clang::DeclStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CoroutineBodyStmt>(clang::SourceLocation (clang::CoroutineBodyStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CoreturnStmt>(clang::SourceLocation (clang::CoreturnStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::ContinueStmt>(clang::SourceLocation (clang::ContinueStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CompoundStmt>(clang::SourceLocation (clang::CompoundStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CapturedStmt>(clang::SourceLocation (clang::CapturedStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXTryStmt>(clang::SourceLocation (clang::CXXTryStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXForRangeStmt>(clang::SourceLocation (clang::CXXForRangeStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::CXXCatchStmt>(clang::SourceLocation (clang::CXXCatchStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::BreakStmt>(clang::SourceLocation (clang::BreakStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::MSAsmStmt>(clang::SourceLocation (clang::MSAsmStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getBeginLoc<clang::GCCAsmStmt>(clang::SourceLocation (clang::GCCAsmStmt::*)() const)
255
  LLVM_ATTRIBUTE_UNUSED
256
0
  static bad implements_getBeginLoc(getBeginLoc_t Stmt::*) { return bad(); }
257
258
  typedef SourceLocation getLocEnd_t() const;
259
0
  template <class T> good implements_getEndLoc(getLocEnd_t T::*) {
260
0
    return good();
261
0
  }
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::WhileStmt>(clang::SourceLocation (clang::WhileStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::LabelStmt>(clang::SourceLocation (clang::LabelStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::VAArgExpr>(clang::SourceLocation (clang::VAArgExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::UnaryOperator>(clang::SourceLocation (clang::UnaryOperator::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::UnaryExprOrTypeTraitExpr>(clang::SourceLocation (clang::UnaryExprOrTypeTraitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::TypoExpr>(clang::SourceLocation (clang::TypoExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::TypeTraitExpr>(clang::SourceLocation (clang::TypeTraitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::SubstNonTypeTemplateParmPackExpr>(clang::SourceLocation (clang::SubstNonTypeTemplateParmPackExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::SubstNonTypeTemplateParmExpr>(clang::SourceLocation (clang::SubstNonTypeTemplateParmExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::StringLiteral>(clang::SourceLocation (clang::StringLiteral::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::StmtExpr>(clang::SourceLocation (clang::StmtExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::SourceLocExpr>(clang::SourceLocation (clang::SourceLocExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::SizeOfPackExpr>(clang::SourceLocation (clang::SizeOfPackExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ShuffleVectorExpr>(clang::SourceLocation (clang::ShuffleVectorExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::SYCLUniqueStableNameExpr>(clang::SourceLocation (clang::SYCLUniqueStableNameExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::RequiresExpr>(clang::SourceLocation (clang::RequiresExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::RecoveryExpr>(clang::SourceLocation (clang::RecoveryExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::PseudoObjectExpr>(clang::SourceLocation (clang::PseudoObjectExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::PredefinedExpr>(clang::SourceLocation (clang::PredefinedExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ParenListExpr>(clang::SourceLocation (clang::ParenListExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ParenExpr>(clang::SourceLocation (clang::ParenExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::PackExpansionExpr>(clang::SourceLocation (clang::PackExpansionExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::UnresolvedMemberExpr>(clang::SourceLocation (clang::UnresolvedMemberExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::UnresolvedLookupExpr>(clang::SourceLocation (clang::UnresolvedLookupExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::OpaqueValueExpr>(clang::SourceLocation (clang::OpaqueValueExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::OffsetOfExpr>(clang::SourceLocation (clang::OffsetOfExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCSubscriptRefExpr>(clang::SourceLocation (clang::ObjCSubscriptRefExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCStringLiteral>(clang::SourceLocation (clang::ObjCStringLiteral::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCSelectorExpr>(clang::SourceLocation (clang::ObjCSelectorExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCProtocolExpr>(clang::SourceLocation (clang::ObjCProtocolExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCPropertyRefExpr>(clang::SourceLocation (clang::ObjCPropertyRefExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCMessageExpr>(clang::SourceLocation (clang::ObjCMessageExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCIvarRefExpr>(clang::SourceLocation (clang::ObjCIvarRefExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCIsaExpr>(clang::SourceLocation (clang::ObjCIsaExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCIndirectCopyRestoreExpr>(clang::SourceLocation (clang::ObjCIndirectCopyRestoreExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCEncodeExpr>(clang::SourceLocation (clang::ObjCEncodeExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCDictionaryLiteral>(clang::SourceLocation (clang::ObjCDictionaryLiteral::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCBoxedExpr>(clang::SourceLocation (clang::ObjCBoxedExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCBoolLiteralExpr>(clang::SourceLocation (clang::ObjCBoolLiteralExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCAvailabilityCheckExpr>(clang::SourceLocation (clang::ObjCAvailabilityCheckExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCArrayLiteral>(clang::SourceLocation (clang::ObjCArrayLiteral::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::OMPIteratorExpr>(clang::SourceLocation (clang::OMPIteratorExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::OMPArrayShapingExpr>(clang::SourceLocation (clang::OMPArrayShapingExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::OMPArraySectionExpr>(clang::SourceLocation (clang::OMPArraySectionExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::NoInitExpr>(clang::SourceLocation (clang::NoInitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::MemberExpr>(clang::SourceLocation (clang::MemberExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::MatrixSubscriptExpr>(clang::SourceLocation (clang::MatrixSubscriptExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::MaterializeTemporaryExpr>(clang::SourceLocation (clang::MaterializeTemporaryExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::MSPropertySubscriptExpr>(clang::SourceLocation (clang::MSPropertySubscriptExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::MSPropertyRefExpr>(clang::SourceLocation (clang::MSPropertyRefExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::LambdaExpr>(clang::SourceLocation (clang::LambdaExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::IntegerLiteral>(clang::SourceLocation (clang::IntegerLiteral::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::InitListExpr>(clang::SourceLocation (clang::InitListExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ImplicitValueInitExpr>(clang::SourceLocation (clang::ImplicitValueInitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ImaginaryLiteral>(clang::SourceLocation (clang::ImaginaryLiteral::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::GenericSelectionExpr>(clang::SourceLocation (clang::GenericSelectionExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::GNUNullExpr>(clang::SourceLocation (clang::GNUNullExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::FunctionParmPackExpr>(clang::SourceLocation (clang::FunctionParmPackExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ExprWithCleanups>(clang::SourceLocation (clang::ExprWithCleanups::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ConstantExpr>(clang::SourceLocation (clang::ConstantExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::FloatingLiteral>(clang::SourceLocation (clang::FloatingLiteral::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::FixedPointLiteral>(clang::SourceLocation (clang::FixedPointLiteral::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ExtVectorElementExpr>(clang::SourceLocation (clang::ExtVectorElementExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ExpressionTraitExpr>(clang::SourceLocation (clang::ExpressionTraitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::DesignatedInitUpdateExpr>(clang::SourceLocation (clang::DesignatedInitUpdateExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::DesignatedInitExpr>(clang::SourceLocation (clang::DesignatedInitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::DependentScopeDeclRefExpr>(clang::SourceLocation (clang::DependentScopeDeclRefExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::DependentCoawaitExpr>(clang::SourceLocation (clang::DependentCoawaitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::DeclRefExpr>(clang::SourceLocation (clang::DeclRefExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CoroutineSuspendExpr>(clang::SourceLocation (clang::CoroutineSuspendExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ConvertVectorExpr>(clang::SourceLocation (clang::ConvertVectorExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ConceptSpecializationExpr>(clang::SourceLocation (clang::ConceptSpecializationExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CompoundLiteralExpr>(clang::SourceLocation (clang::CompoundLiteralExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ChooseExpr>(clang::SourceLocation (clang::ChooseExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CharacterLiteral>(clang::SourceLocation (clang::CharacterLiteral::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ImplicitCastExpr>(clang::SourceLocation (clang::ImplicitCastExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCBridgedCastExpr>(clang::SourceLocation (clang::ObjCBridgedCastExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXNamedCastExpr>(clang::SourceLocation (clang::CXXNamedCastExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXFunctionalCastExpr>(clang::SourceLocation (clang::CXXFunctionalCastExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CStyleCastExpr>(clang::SourceLocation (clang::CStyleCastExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::BuiltinBitCastExpr>(clang::SourceLocation (clang::BuiltinBitCastExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CallExpr>(clang::SourceLocation (clang::CallExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::UserDefinedLiteral>(clang::SourceLocation (clang::UserDefinedLiteral::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXOperatorCallExpr>(clang::SourceLocation (clang::CXXOperatorCallExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXUuidofExpr>(clang::SourceLocation (clang::CXXUuidofExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXUnresolvedConstructExpr>(clang::SourceLocation (clang::CXXUnresolvedConstructExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXTypeidExpr>(clang::SourceLocation (clang::CXXTypeidExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXThrowExpr>(clang::SourceLocation (clang::CXXThrowExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXThisExpr>(clang::SourceLocation (clang::CXXThisExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXStdInitializerListExpr>(clang::SourceLocation (clang::CXXStdInitializerListExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXScalarValueInitExpr>(clang::SourceLocation (clang::CXXScalarValueInitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXRewrittenBinaryOperator>(clang::SourceLocation (clang::CXXRewrittenBinaryOperator::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXPseudoDestructorExpr>(clang::SourceLocation (clang::CXXPseudoDestructorExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXParenListInitExpr>(clang::SourceLocation (clang::CXXParenListInitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXNullPtrLiteralExpr>(clang::SourceLocation (clang::CXXNullPtrLiteralExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXNoexceptExpr>(clang::SourceLocation (clang::CXXNoexceptExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXNewExpr>(clang::SourceLocation (clang::CXXNewExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXInheritedCtorInitExpr>(clang::SourceLocation (clang::CXXInheritedCtorInitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXFoldExpr>(clang::SourceLocation (clang::CXXFoldExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXDependentScopeMemberExpr>(clang::SourceLocation (clang::CXXDependentScopeMemberExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXDeleteExpr>(clang::SourceLocation (clang::CXXDeleteExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXDefaultInitExpr>(clang::SourceLocation (clang::CXXDefaultInitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXDefaultArgExpr>(clang::SourceLocation (clang::CXXDefaultArgExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXConstructExpr>(clang::SourceLocation (clang::CXXConstructExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXTemporaryObjectExpr>(clang::SourceLocation (clang::CXXTemporaryObjectExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXBoolLiteralExpr>(clang::SourceLocation (clang::CXXBoolLiteralExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXBindTemporaryExpr>(clang::SourceLocation (clang::CXXBindTemporaryExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::BlockExpr>(clang::SourceLocation (clang::BlockExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::BinaryOperator>(clang::SourceLocation (clang::BinaryOperator::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::AtomicExpr>(clang::SourceLocation (clang::AtomicExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::AsTypeExpr>(clang::SourceLocation (clang::AsTypeExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ArrayTypeTraitExpr>(clang::SourceLocation (clang::ArrayTypeTraitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ArraySubscriptExpr>(clang::SourceLocation (clang::ArraySubscriptExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ArrayInitLoopExpr>(clang::SourceLocation (clang::ArrayInitLoopExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ArrayInitIndexExpr>(clang::SourceLocation (clang::ArrayInitIndexExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::AddrLabelExpr>(clang::SourceLocation (clang::AddrLabelExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ConditionalOperator>(clang::SourceLocation (clang::ConditionalOperator::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::BinaryConditionalOperator>(clang::SourceLocation (clang::BinaryConditionalOperator::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::AttributedStmt>(clang::SourceLocation (clang::AttributedStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::SwitchStmt>(clang::SourceLocation (clang::SwitchStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::DefaultStmt>(clang::SourceLocation (clang::DefaultStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CaseStmt>(clang::SourceLocation (clang::CaseStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::SEHTryStmt>(clang::SourceLocation (clang::SEHTryStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::SEHLeaveStmt>(clang::SourceLocation (clang::SEHLeaveStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::SEHFinallyStmt>(clang::SourceLocation (clang::SEHFinallyStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::SEHExceptStmt>(clang::SourceLocation (clang::SEHExceptStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ReturnStmt>(clang::SourceLocation (clang::ReturnStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCForCollectionStmt>(clang::SourceLocation (clang::ObjCForCollectionStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCAutoreleasePoolStmt>(clang::SourceLocation (clang::ObjCAutoreleasePoolStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCAtTryStmt>(clang::SourceLocation (clang::ObjCAtTryStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCAtThrowStmt>(clang::SourceLocation (clang::ObjCAtThrowStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCAtSynchronizedStmt>(clang::SourceLocation (clang::ObjCAtSynchronizedStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCAtFinallyStmt>(clang::SourceLocation (clang::ObjCAtFinallyStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ObjCAtCatchStmt>(clang::SourceLocation (clang::ObjCAtCatchStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::OMPExecutableDirective>(clang::SourceLocation (clang::OMPExecutableDirective::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::OMPCanonicalLoop>(clang::SourceLocation (clang::OMPCanonicalLoop::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::NullStmt>(clang::SourceLocation (clang::NullStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::MSDependentExistsStmt>(clang::SourceLocation (clang::MSDependentExistsStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::IndirectGotoStmt>(clang::SourceLocation (clang::IndirectGotoStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::IfStmt>(clang::SourceLocation (clang::IfStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::GotoStmt>(clang::SourceLocation (clang::GotoStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ForStmt>(clang::SourceLocation (clang::ForStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::DoStmt>(clang::SourceLocation (clang::DoStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::DeclStmt>(clang::SourceLocation (clang::DeclStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CoroutineBodyStmt>(clang::SourceLocation (clang::CoroutineBodyStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CoreturnStmt>(clang::SourceLocation (clang::CoreturnStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::ContinueStmt>(clang::SourceLocation (clang::ContinueStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CompoundStmt>(clang::SourceLocation (clang::CompoundStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CapturedStmt>(clang::SourceLocation (clang::CapturedStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXTryStmt>(clang::SourceLocation (clang::CXXTryStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXForRangeStmt>(clang::SourceLocation (clang::CXXForRangeStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::CXXCatchStmt>(clang::SourceLocation (clang::CXXCatchStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::BreakStmt>(clang::SourceLocation (clang::BreakStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::MSAsmStmt>(clang::SourceLocation (clang::MSAsmStmt::*)() const)
Unexecuted instantiation: Stmt.cpp:(anonymous namespace)::good (anonymous namespace)::implements_getEndLoc<clang::GCCAsmStmt>(clang::SourceLocation (clang::GCCAsmStmt::*)() const)
262
  LLVM_ATTRIBUTE_UNUSED
263
0
  static bad implements_getEndLoc(getLocEnd_t Stmt::*) { return bad(); }
264
265
#define ASSERT_IMPLEMENTS_children(type) \
266
  (void) is_good(implements_children(&type::children))
267
#define ASSERT_IMPLEMENTS_getBeginLoc(type)                                    \
268
  (void)is_good(implements_getBeginLoc(&type::getBeginLoc))
269
#define ASSERT_IMPLEMENTS_getEndLoc(type)                                      \
270
  (void)is_good(implements_getEndLoc(&type::getEndLoc))
271
272
} // namespace
273
274
/// Check whether the various Stmt classes implement their member
275
/// functions.
276
LLVM_ATTRIBUTE_UNUSED
277
0
static inline void check_implementations() {
278
0
#define ABSTRACT_STMT(type)
279
0
#define STMT(type, base)                                                       \
280
0
  ASSERT_IMPLEMENTS_children(type);                                            \
281
0
  ASSERT_IMPLEMENTS_getBeginLoc(type);                                         \
282
0
  ASSERT_IMPLEMENTS_getEndLoc(type);
283
0
#include "clang/AST/StmtNodes.inc"
284
0
}
285
286
174
Stmt::child_range Stmt::children() {
287
174
  switch (getStmtClass()) {
288
0
  case Stmt::NoStmtClass: llvm_unreachable("statement without class");
289
0
#define ABSTRACT_STMT(type)
290
0
#define STMT(type, base) \
291
174
  case Stmt::type##Class: \
292
174
    return static_cast<type*>(this)->children();
293
174
#include "clang/AST/StmtNodes.inc"
294
174
  }
295
0
  llvm_unreachable("unknown statement kind!");
296
0
}
297
298
// Amusing macro metaprogramming hack: check whether a class provides
299
// a more specific implementation of getSourceRange.
300
//
301
// See also Expr.cpp:getExprLoc().
302
namespace {
303
304
  /// This implementation is used when a class provides a custom
305
  /// implementation of getSourceRange.
306
  template <class S, class T>
307
  SourceRange getSourceRangeImpl(const Stmt *stmt,
308
0
                                 SourceRange (T::*v)() const) {
309
0
    return static_cast<const S*>(stmt)->getSourceRange();
310
0
  }
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCDictionaryLiteral, clang::ObjCDictionaryLiteral>(clang::Stmt const*, clang::SourceRange (clang::ObjCDictionaryLiteral::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCBoxedExpr, clang::ObjCBoxedExpr>(clang::Stmt const*, clang::SourceRange (clang::ObjCBoxedExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCAvailabilityCheckExpr, clang::ObjCAvailabilityCheckExpr>(clang::Stmt const*, clang::SourceRange (clang::ObjCAvailabilityCheckExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCArrayLiteral, clang::ObjCArrayLiteral>(clang::Stmt const*, clang::SourceRange (clang::ObjCArrayLiteral::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::MSPropertyRefExpr, clang::MSPropertyRefExpr>(clang::Stmt const*, clang::SourceRange (clang::MSPropertyRefExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXOperatorCallExpr, clang::CXXOperatorCallExpr>(clang::Stmt const*, clang::SourceRange (clang::CXXOperatorCallExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXUuidofExpr, clang::CXXUuidofExpr>(clang::Stmt const*, clang::SourceRange (clang::CXXUuidofExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXTypeidExpr, clang::CXXTypeidExpr>(clang::Stmt const*, clang::SourceRange (clang::CXXTypeidExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXStdInitializerListExpr, clang::CXXStdInitializerListExpr>(clang::Stmt const*, clang::SourceRange (clang::CXXStdInitializerListExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXRewrittenBinaryOperator, clang::CXXRewrittenBinaryOperator>(clang::Stmt const*, clang::SourceRange (clang::CXXRewrittenBinaryOperator::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXParenListInitExpr, clang::CXXParenListInitExpr>(clang::Stmt const*, clang::SourceRange (clang::CXXParenListInitExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXNoexceptExpr, clang::CXXNoexceptExpr>(clang::Stmt const*, clang::SourceRange (clang::CXXNoexceptExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXNewExpr, clang::CXXNewExpr>(clang::Stmt const*, clang::SourceRange (clang::CXXNewExpr::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CapturedStmt, clang::CapturedStmt>(clang::Stmt const*, clang::SourceRange (clang::CapturedStmt::*)() const)
311
312
  /// This implementation is used when a class doesn't provide a custom
313
  /// implementation of getSourceRange.  Overload resolution should pick it over
314
  /// the implementation above because it's more specialized according to
315
  /// function template partial ordering.
316
  template <class S>
317
  SourceRange getSourceRangeImpl(const Stmt *stmt,
318
17
                                 SourceRange (Stmt::*v)() const) {
319
17
    return SourceRange(static_cast<const S *>(stmt)->getBeginLoc(),
320
17
                       static_cast<const S *>(stmt)->getEndLoc());
321
17
  }
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::WhileStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::LabelStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::VAArgExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::UnaryOperator>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Line
Count
Source
318
2
                                 SourceRange (Stmt::*v)() const) {
319
2
    return SourceRange(static_cast<const S *>(stmt)->getBeginLoc(),
320
2
                       static_cast<const S *>(stmt)->getEndLoc());
321
2
  }
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::UnaryExprOrTypeTraitExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::TypoExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::TypeTraitExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::SubstNonTypeTemplateParmPackExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::SubstNonTypeTemplateParmExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::StringLiteral>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::StmtExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::SourceLocExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::SizeOfPackExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ShuffleVectorExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::SYCLUniqueStableNameExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::RequiresExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::RecoveryExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::PseudoObjectExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::PredefinedExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ParenListExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ParenExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::PackExpansionExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::UnresolvedMemberExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::UnresolvedLookupExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OpaqueValueExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OffsetOfExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCSubscriptRefExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCStringLiteral>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCSelectorExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCProtocolExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCPropertyRefExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCMessageExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCIvarRefExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCIsaExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCIndirectCopyRestoreExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCEncodeExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCBoolLiteralExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPIteratorExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPArrayShapingExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPArraySectionExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::NoInitExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::MemberExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::MatrixSubscriptExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::MaterializeTemporaryExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::MSPropertySubscriptExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::LambdaExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::IntegerLiteral>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::InitListExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ImplicitValueInitExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ImaginaryLiteral>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::GenericSelectionExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::GNUNullExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::FunctionParmPackExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ExprWithCleanups>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ConstantExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Line
Count
Source
318
2
                                 SourceRange (Stmt::*v)() const) {
319
2
    return SourceRange(static_cast<const S *>(stmt)->getBeginLoc(),
320
2
                       static_cast<const S *>(stmt)->getEndLoc());
321
2
  }
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::FloatingLiteral>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::FixedPointLiteral>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ExtVectorElementExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ExpressionTraitExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::DesignatedInitUpdateExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::DesignatedInitExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::DependentScopeDeclRefExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::DependentCoawaitExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::DeclRefExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Line
Count
Source
318
7
                                 SourceRange (Stmt::*v)() const) {
319
7
    return SourceRange(static_cast<const S *>(stmt)->getBeginLoc(),
320
7
                       static_cast<const S *>(stmt)->getEndLoc());
321
7
  }
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CoyieldExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CoawaitExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ConvertVectorExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ConceptSpecializationExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CompoundLiteralExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ChooseExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CharacterLiteral>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ImplicitCastExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Line
Count
Source
318
5
                                 SourceRange (Stmt::*v)() const) {
319
5
    return SourceRange(static_cast<const S *>(stmt)->getBeginLoc(),
320
5
                       static_cast<const S *>(stmt)->getEndLoc());
321
5
  }
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCBridgedCastExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXStaticCastExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXReinterpretCastExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXDynamicCastExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXConstCastExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXAddrspaceCastExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXFunctionalCastExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CStyleCastExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::BuiltinBitCastExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CallExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::UserDefinedLiteral>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXMemberCallExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CUDAKernelCallExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXUnresolvedConstructExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXThrowExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXThisExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXScalarValueInitExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXPseudoDestructorExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXNullPtrLiteralExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXInheritedCtorInitExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXFoldExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXDependentScopeMemberExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXDeleteExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXDefaultInitExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXDefaultArgExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXConstructExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXTemporaryObjectExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXBoolLiteralExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXBindTemporaryExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::BlockExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Line
Count
Source
318
1
                                 SourceRange (Stmt::*v)() const) {
319
1
    return SourceRange(static_cast<const S *>(stmt)->getBeginLoc(),
320
1
                       static_cast<const S *>(stmt)->getEndLoc());
321
1
  }
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::BinaryOperator>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CompoundAssignOperator>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::AtomicExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::AsTypeExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ArrayTypeTraitExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ArraySubscriptExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ArrayInitLoopExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ArrayInitIndexExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::AddrLabelExpr>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ConditionalOperator>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::BinaryConditionalOperator>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::AttributedStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::SwitchStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::DefaultStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CaseStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::SEHTryStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::SEHLeaveStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::SEHFinallyStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::SEHExceptStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ReturnStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCForCollectionStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCAutoreleasePoolStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCAtTryStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCAtThrowStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCAtSynchronizedStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCAtFinallyStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ObjCAtCatchStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTeamsDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTaskyieldDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTaskwaitDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTaskgroupDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTaskDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTargetUpdateDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTargetTeamsDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTargetParallelForDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTargetParallelDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTargetExitDataDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTargetEnterDataDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTargetDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTargetDataDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPSingleDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPSectionsDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPSectionDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPScopeDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPScanDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPParallelSectionsDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPParallelMasterDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPParallelMaskedDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPParallelDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPOrderedDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPMetaDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPMasterDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPMaskedDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPUnrollDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTileDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTeamsGenericLoopDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTeamsDistributeSimdDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTeamsDistributeParallelForSimdDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTeamsDistributeParallelForDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTeamsDistributeDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTaskLoopSimdDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTaskLoopDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTargetTeamsGenericLoopDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTargetTeamsDistributeSimdDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTargetTeamsDistributeParallelForSimdDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTargetTeamsDistributeParallelForDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTargetTeamsDistributeDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTargetSimdDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTargetParallelGenericLoopDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPTargetParallelForSimdDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPSimdDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPParallelMasterTaskLoopSimdDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPParallelMasterTaskLoopDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPParallelMaskedTaskLoopSimdDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPParallelMaskedTaskLoopDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPParallelGenericLoopDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPParallelForSimdDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPParallelForDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPMasterTaskLoopSimdDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPMasterTaskLoopDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPMaskedTaskLoopSimdDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPMaskedTaskLoopDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPGenericLoopDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPForSimdDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPForDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPDistributeSimdDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPDistributeParallelForSimdDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPDistributeParallelForDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPDistributeDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPInteropDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPFlushDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPErrorDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPDispatchDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPDepobjDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPCriticalDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPCancellationPointDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPCancelDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPBarrierDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPAtomicDirective>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::OMPCanonicalLoop>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::NullStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::MSDependentExistsStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::IndirectGotoStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::IfStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::GotoStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ForStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::DoStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::DeclStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CoroutineBodyStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CoreturnStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::ContinueStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CompoundStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXTryStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXForRangeStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::CXXCatchStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::BreakStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::MSAsmStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
Unexecuted instantiation: Stmt.cpp:clang::SourceRange (anonymous namespace)::getSourceRangeImpl<clang::GCCAsmStmt>(clang::Stmt const*, clang::SourceRange (clang::Stmt::*)() const)
322
323
} // namespace
324
325
17
SourceRange Stmt::getSourceRange() const {
326
17
  switch (getStmtClass()) {
327
0
  case Stmt::NoStmtClass: llvm_unreachable("statement without class");
328
0
#define ABSTRACT_STMT(type)
329
0
#define STMT(type, base) \
330
17
  case Stmt::type##Class: \
331
17
    return getSourceRangeImpl<type>(this, &type::getSourceRange);
332
17
#include "clang/AST/StmtNodes.inc"
333
17
  }
334
0
  llvm_unreachable("unknown statement kind!");
335
0
}
336
337
69
SourceLocation Stmt::getBeginLoc() const {
338
69
  switch (getStmtClass()) {
339
0
  case Stmt::NoStmtClass: llvm_unreachable("statement without class");
340
0
#define ABSTRACT_STMT(type)
341
0
#define STMT(type, base)                                                       \
342
69
  case Stmt::type##Class:                                                      \
343
69
    return static_cast<const type *>(this)->getBeginLoc();
344
69
#include "clang/AST/StmtNodes.inc"
345
69
  }
346
0
  llvm_unreachable("unknown statement kind");
347
0
}
348
349
16
SourceLocation Stmt::getEndLoc() const {
350
16
  switch (getStmtClass()) {
351
0
  case Stmt::NoStmtClass: llvm_unreachable("statement without class");
352
0
#define ABSTRACT_STMT(type)
353
0
#define STMT(type, base)                                                       \
354
16
  case Stmt::type##Class:                                                      \
355
16
    return static_cast<const type *>(this)->getEndLoc();
356
16
#include "clang/AST/StmtNodes.inc"
357
16
  }
358
0
  llvm_unreachable("unknown statement kind");
359
0
}
360
361
0
int64_t Stmt::getID(const ASTContext &Context) const {
362
0
  return Context.getAllocator().identifyKnownAlignedObject<Stmt>(this);
363
0
}
364
365
CompoundStmt::CompoundStmt(ArrayRef<Stmt *> Stmts, FPOptionsOverride FPFeatures,
366
                           SourceLocation LB, SourceLocation RB)
367
1
    : Stmt(CompoundStmtClass), LBraceLoc(LB), RBraceLoc(RB) {
368
1
  CompoundStmtBits.NumStmts = Stmts.size();
369
1
  CompoundStmtBits.HasFPFeatures = FPFeatures.requiresTrailingStorage();
370
1
  setStmts(Stmts);
371
1
  if (hasStoredFPFeatures())
372
0
    setStoredFPFeatures(FPFeatures);
373
1
}
374
375
1
void CompoundStmt::setStmts(ArrayRef<Stmt *> Stmts) {
376
1
  assert(CompoundStmtBits.NumStmts == Stmts.size() &&
377
1
         "NumStmts doesn't fit in bits of CompoundStmtBits.NumStmts!");
378
379
0
  std::copy(Stmts.begin(), Stmts.end(), body_begin());
380
1
}
381
382
CompoundStmt *CompoundStmt::Create(const ASTContext &C, ArrayRef<Stmt *> Stmts,
383
                                   FPOptionsOverride FPFeatures,
384
1
                                   SourceLocation LB, SourceLocation RB) {
385
1
  void *Mem =
386
1
      C.Allocate(totalSizeToAlloc<Stmt *, FPOptionsOverride>(
387
1
                     Stmts.size(), FPFeatures.requiresTrailingStorage()),
388
1
                 alignof(CompoundStmt));
389
1
  return new (Mem) CompoundStmt(Stmts, FPFeatures, LB, RB);
390
1
}
391
392
CompoundStmt *CompoundStmt::CreateEmpty(const ASTContext &C, unsigned NumStmts,
393
0
                                        bool HasFPFeatures) {
394
0
  void *Mem = C.Allocate(
395
0
      totalSizeToAlloc<Stmt *, FPOptionsOverride>(NumStmts, HasFPFeatures),
396
0
      alignof(CompoundStmt));
397
0
  CompoundStmt *New = new (Mem) CompoundStmt(EmptyShell());
398
0
  New->CompoundStmtBits.NumStmts = NumStmts;
399
0
  New->CompoundStmtBits.HasFPFeatures = HasFPFeatures;
400
0
  return New;
401
0
}
402
403
0
const Expr *ValueStmt::getExprStmt() const {
404
0
  const Stmt *S = this;
405
0
  do {
406
0
    if (const auto *E = dyn_cast<Expr>(S))
407
0
      return E;
408
409
0
    if (const auto *LS = dyn_cast<LabelStmt>(S))
410
0
      S = LS->getSubStmt();
411
0
    else if (const auto *AS = dyn_cast<AttributedStmt>(S))
412
0
      S = AS->getSubStmt();
413
0
    else
414
0
      llvm_unreachable("unknown kind of ValueStmt");
415
0
  } while (isa<ValueStmt>(S));
416
417
0
  return nullptr;
418
0
}
419
420
0
const char *LabelStmt::getName() const {
421
0
  return getDecl()->getIdentifier()->getNameStart();
422
0
}
423
424
AttributedStmt *AttributedStmt::Create(const ASTContext &C, SourceLocation Loc,
425
                                       ArrayRef<const Attr*> Attrs,
426
0
                                       Stmt *SubStmt) {
427
0
  assert(!Attrs.empty() && "Attrs should not be empty");
428
0
  void *Mem = C.Allocate(totalSizeToAlloc<const Attr *>(Attrs.size()),
429
0
                         alignof(AttributedStmt));
430
0
  return new (Mem) AttributedStmt(Loc, Attrs, SubStmt);
431
0
}
432
433
AttributedStmt *AttributedStmt::CreateEmpty(const ASTContext &C,
434
0
                                            unsigned NumAttrs) {
435
0
  assert(NumAttrs > 0 && "NumAttrs should be greater than zero");
436
0
  void *Mem = C.Allocate(totalSizeToAlloc<const Attr *>(NumAttrs),
437
0
                         alignof(AttributedStmt));
438
0
  return new (Mem) AttributedStmt(EmptyShell(), NumAttrs);
439
0
}
440
441
0
std::string AsmStmt::generateAsmString(const ASTContext &C) const {
442
0
  if (const auto *gccAsmStmt = dyn_cast<GCCAsmStmt>(this))
443
0
    return gccAsmStmt->generateAsmString(C);
444
0
  if (const auto *msAsmStmt = dyn_cast<MSAsmStmt>(this))
445
0
    return msAsmStmt->generateAsmString(C);
446
0
  llvm_unreachable("unknown asm statement kind!");
447
0
}
448
449
0
StringRef AsmStmt::getOutputConstraint(unsigned i) const {
450
0
  if (const auto *gccAsmStmt = dyn_cast<GCCAsmStmt>(this))
451
0
    return gccAsmStmt->getOutputConstraint(i);
452
0
  if (const auto *msAsmStmt = dyn_cast<MSAsmStmt>(this))
453
0
    return msAsmStmt->getOutputConstraint(i);
454
0
  llvm_unreachable("unknown asm statement kind!");
455
0
}
456
457
0
const Expr *AsmStmt::getOutputExpr(unsigned i) const {
458
0
  if (const auto *gccAsmStmt = dyn_cast<GCCAsmStmt>(this))
459
0
    return gccAsmStmt->getOutputExpr(i);
460
0
  if (const auto *msAsmStmt = dyn_cast<MSAsmStmt>(this))
461
0
    return msAsmStmt->getOutputExpr(i);
462
0
  llvm_unreachable("unknown asm statement kind!");
463
0
}
464
465
0
StringRef AsmStmt::getInputConstraint(unsigned i) const {
466
0
  if (const auto *gccAsmStmt = dyn_cast<GCCAsmStmt>(this))
467
0
    return gccAsmStmt->getInputConstraint(i);
468
0
  if (const auto *msAsmStmt = dyn_cast<MSAsmStmt>(this))
469
0
    return msAsmStmt->getInputConstraint(i);
470
0
  llvm_unreachable("unknown asm statement kind!");
471
0
}
472
473
0
const Expr *AsmStmt::getInputExpr(unsigned i) const {
474
0
  if (const auto *gccAsmStmt = dyn_cast<GCCAsmStmt>(this))
475
0
    return gccAsmStmt->getInputExpr(i);
476
0
  if (const auto *msAsmStmt = dyn_cast<MSAsmStmt>(this))
477
0
    return msAsmStmt->getInputExpr(i);
478
0
  llvm_unreachable("unknown asm statement kind!");
479
0
}
480
481
0
StringRef AsmStmt::getClobber(unsigned i) const {
482
0
  if (const auto *gccAsmStmt = dyn_cast<GCCAsmStmt>(this))
483
0
    return gccAsmStmt->getClobber(i);
484
0
  if (const auto *msAsmStmt = dyn_cast<MSAsmStmt>(this))
485
0
    return msAsmStmt->getClobber(i);
486
0
  llvm_unreachable("unknown asm statement kind!");
487
0
}
488
489
/// getNumPlusOperands - Return the number of output operands that have a "+"
490
/// constraint.
491
0
unsigned AsmStmt::getNumPlusOperands() const {
492
0
  unsigned Res = 0;
493
0
  for (unsigned i = 0, e = getNumOutputs(); i != e; ++i)
494
0
    if (isOutputPlusConstraint(i))
495
0
      ++Res;
496
0
  return Res;
497
0
}
498
499
0
char GCCAsmStmt::AsmStringPiece::getModifier() const {
500
0
  assert(isOperand() && "Only Operands can have modifiers.");
501
0
  return isLetter(Str[0]) ? Str[0] : '\0';
502
0
}
503
504
0
StringRef GCCAsmStmt::getClobber(unsigned i) const {
505
0
  return getClobberStringLiteral(i)->getString();
506
0
}
507
508
0
Expr *GCCAsmStmt::getOutputExpr(unsigned i) {
509
0
  return cast<Expr>(Exprs[i]);
510
0
}
511
512
/// getOutputConstraint - Return the constraint string for the specified
513
/// output operand.  All output constraints are known to be non-empty (either
514
/// '=' or '+').
515
0
StringRef GCCAsmStmt::getOutputConstraint(unsigned i) const {
516
0
  return getOutputConstraintLiteral(i)->getString();
517
0
}
518
519
0
Expr *GCCAsmStmt::getInputExpr(unsigned i) {
520
0
  return cast<Expr>(Exprs[i + NumOutputs]);
521
0
}
522
523
0
void GCCAsmStmt::setInputExpr(unsigned i, Expr *E) {
524
0
  Exprs[i + NumOutputs] = E;
525
0
}
526
527
0
AddrLabelExpr *GCCAsmStmt::getLabelExpr(unsigned i) const {
528
0
  return cast<AddrLabelExpr>(Exprs[i + NumOutputs + NumInputs]);
529
0
}
530
531
0
StringRef GCCAsmStmt::getLabelName(unsigned i) const {
532
0
  return getLabelExpr(i)->getLabel()->getName();
533
0
}
534
535
/// getInputConstraint - Return the specified input constraint.  Unlike output
536
/// constraints, these can be empty.
537
0
StringRef GCCAsmStmt::getInputConstraint(unsigned i) const {
538
0
  return getInputConstraintLiteral(i)->getString();
539
0
}
540
541
void GCCAsmStmt::setOutputsAndInputsAndClobbers(const ASTContext &C,
542
                                                IdentifierInfo **Names,
543
                                                StringLiteral **Constraints,
544
                                                Stmt **Exprs,
545
                                                unsigned NumOutputs,
546
                                                unsigned NumInputs,
547
                                                unsigned NumLabels,
548
                                                StringLiteral **Clobbers,
549
0
                                                unsigned NumClobbers) {
550
0
  this->NumOutputs = NumOutputs;
551
0
  this->NumInputs = NumInputs;
552
0
  this->NumClobbers = NumClobbers;
553
0
  this->NumLabels = NumLabels;
554
555
0
  unsigned NumExprs = NumOutputs + NumInputs + NumLabels;
556
557
0
  C.Deallocate(this->Names);
558
0
  this->Names = new (C) IdentifierInfo*[NumExprs];
559
0
  std::copy(Names, Names + NumExprs, this->Names);
560
561
0
  C.Deallocate(this->Exprs);
562
0
  this->Exprs = new (C) Stmt*[NumExprs];
563
0
  std::copy(Exprs, Exprs + NumExprs, this->Exprs);
564
565
0
  unsigned NumConstraints = NumOutputs + NumInputs;
566
0
  C.Deallocate(this->Constraints);
567
0
  this->Constraints = new (C) StringLiteral*[NumConstraints];
568
0
  std::copy(Constraints, Constraints + NumConstraints, this->Constraints);
569
570
0
  C.Deallocate(this->Clobbers);
571
0
  this->Clobbers = new (C) StringLiteral*[NumClobbers];
572
0
  std::copy(Clobbers, Clobbers + NumClobbers, this->Clobbers);
573
0
}
574
575
/// getNamedOperand - Given a symbolic operand reference like %[foo],
576
/// translate this into a numeric value needed to reference the same operand.
577
/// This returns -1 if the operand name is invalid.
578
0
int GCCAsmStmt::getNamedOperand(StringRef SymbolicName) const {
579
  // Check if this is an output operand.
580
0
  unsigned NumOutputs = getNumOutputs();
581
0
  for (unsigned i = 0; i != NumOutputs; ++i)
582
0
    if (getOutputName(i) == SymbolicName)
583
0
      return i;
584
585
0
  unsigned NumInputs = getNumInputs();
586
0
  for (unsigned i = 0; i != NumInputs; ++i)
587
0
    if (getInputName(i) == SymbolicName)
588
0
      return NumOutputs + i;
589
590
0
  for (unsigned i = 0, e = getNumLabels(); i != e; ++i)
591
0
    if (getLabelName(i) == SymbolicName)
592
0
      return NumOutputs + NumInputs + getNumPlusOperands() + i;
593
594
  // Not found.
595
0
  return -1;
596
0
}
597
598
/// AnalyzeAsmString - Analyze the asm string of the current asm, decomposing
599
/// it into pieces.  If the asm string is erroneous, emit errors and return
600
/// true, otherwise return false.
601
unsigned GCCAsmStmt::AnalyzeAsmString(SmallVectorImpl<AsmStringPiece>&Pieces,
602
0
                                const ASTContext &C, unsigned &DiagOffs) const {
603
0
  StringRef Str = getAsmString()->getString();
604
0
  const char *StrStart = Str.begin();
605
0
  const char *StrEnd = Str.end();
606
0
  const char *CurPtr = StrStart;
607
608
  // "Simple" inline asms have no constraints or operands, just convert the asm
609
  // string to escape $'s.
610
0
  if (isSimple()) {
611
0
    std::string Result;
612
0
    for (; CurPtr != StrEnd; ++CurPtr) {
613
0
      switch (*CurPtr) {
614
0
      case '$':
615
0
        Result += "$$";
616
0
        break;
617
0
      default:
618
0
        Result += *CurPtr;
619
0
        break;
620
0
      }
621
0
    }
622
0
    Pieces.push_back(AsmStringPiece(Result));
623
0
    return 0;
624
0
  }
625
626
  // CurStringPiece - The current string that we are building up as we scan the
627
  // asm string.
628
0
  std::string CurStringPiece;
629
630
0
  bool HasVariants = !C.getTargetInfo().hasNoAsmVariants();
631
632
0
  unsigned LastAsmStringToken = 0;
633
0
  unsigned LastAsmStringOffset = 0;
634
635
0
  while (true) {
636
    // Done with the string?
637
0
    if (CurPtr == StrEnd) {
638
0
      if (!CurStringPiece.empty())
639
0
        Pieces.push_back(AsmStringPiece(CurStringPiece));
640
0
      return 0;
641
0
    }
642
643
0
    char CurChar = *CurPtr++;
644
0
    switch (CurChar) {
645
0
    case '$': CurStringPiece += "$$"; continue;
646
0
    case '{': CurStringPiece += (HasVariants ? "$(" : "{"); continue;
647
0
    case '|': CurStringPiece += (HasVariants ? "$|" : "|"); continue;
648
0
    case '}': CurStringPiece += (HasVariants ? "$)" : "}"); continue;
649
0
    case '%':
650
0
      break;
651
0
    default:
652
0
      CurStringPiece += CurChar;
653
0
      continue;
654
0
    }
655
656
0
    const TargetInfo &TI = C.getTargetInfo();
657
658
    // Escaped "%" character in asm string.
659
0
    if (CurPtr == StrEnd) {
660
      // % at end of string is invalid (no escape).
661
0
      DiagOffs = CurPtr-StrStart-1;
662
0
      return diag::err_asm_invalid_escape;
663
0
    }
664
    // Handle escaped char and continue looping over the asm string.
665
0
    char EscapedChar = *CurPtr++;
666
0
    switch (EscapedChar) {
667
0
    default:
668
      // Handle target-specific escaped characters.
669
0
      if (auto MaybeReplaceStr = TI.handleAsmEscapedChar(EscapedChar)) {
670
0
        CurStringPiece += *MaybeReplaceStr;
671
0
        continue;
672
0
      }
673
0
      break;
674
0
    case '%': // %% -> %
675
0
    case '{': // %{ -> {
676
0
    case '}': // %} -> }
677
0
      CurStringPiece += EscapedChar;
678
0
      continue;
679
0
    case '=': // %= -> Generate a unique ID.
680
0
      CurStringPiece += "${:uid}";
681
0
      continue;
682
0
    }
683
684
    // Otherwise, we have an operand.  If we have accumulated a string so far,
685
    // add it to the Pieces list.
686
0
    if (!CurStringPiece.empty()) {
687
0
      Pieces.push_back(AsmStringPiece(CurStringPiece));
688
0
      CurStringPiece.clear();
689
0
    }
690
691
    // Handle operands that have asmSymbolicName (e.g., %x[foo]) and those that
692
    // don't (e.g., %x4). 'x' following the '%' is the constraint modifier.
693
694
0
    const char *Begin = CurPtr - 1; // Points to the character following '%'.
695
0
    const char *Percent = Begin - 1; // Points to '%'.
696
697
0
    if (isLetter(EscapedChar)) {
698
0
      if (CurPtr == StrEnd) { // Premature end.
699
0
        DiagOffs = CurPtr-StrStart-1;
700
0
        return diag::err_asm_invalid_escape;
701
0
      }
702
0
      EscapedChar = *CurPtr++;
703
0
    }
704
705
0
    const SourceManager &SM = C.getSourceManager();
706
0
    const LangOptions &LO = C.getLangOpts();
707
708
    // Handle operands that don't have asmSymbolicName (e.g., %x4).
709
0
    if (isDigit(EscapedChar)) {
710
      // %n - Assembler operand n
711
0
      unsigned N = 0;
712
713
0
      --CurPtr;
714
0
      while (CurPtr != StrEnd && isDigit(*CurPtr))
715
0
        N = N*10 + ((*CurPtr++)-'0');
716
717
0
      unsigned NumOperands = getNumOutputs() + getNumPlusOperands() +
718
0
                             getNumInputs() + getNumLabels();
719
0
      if (N >= NumOperands) {
720
0
        DiagOffs = CurPtr-StrStart-1;
721
0
        return diag::err_asm_invalid_operand_number;
722
0
      }
723
724
      // Str contains "x4" (Operand without the leading %).
725
0
      std::string Str(Begin, CurPtr - Begin);
726
727
      // (BeginLoc, EndLoc) represents the range of the operand we are currently
728
      // processing. Unlike Str, the range includes the leading '%'.
729
0
      SourceLocation BeginLoc = getAsmString()->getLocationOfByte(
730
0
          Percent - StrStart, SM, LO, TI, &LastAsmStringToken,
731
0
          &LastAsmStringOffset);
732
0
      SourceLocation EndLoc = getAsmString()->getLocationOfByte(
733
0
          CurPtr - StrStart, SM, LO, TI, &LastAsmStringToken,
734
0
          &LastAsmStringOffset);
735
736
0
      Pieces.emplace_back(N, std::move(Str), BeginLoc, EndLoc);
737
0
      continue;
738
0
    }
739
740
    // Handle operands that have asmSymbolicName (e.g., %x[foo]).
741
0
    if (EscapedChar == '[') {
742
0
      DiagOffs = CurPtr-StrStart-1;
743
744
      // Find the ']'.
745
0
      const char *NameEnd = (const char*)memchr(CurPtr, ']', StrEnd-CurPtr);
746
0
      if (NameEnd == nullptr)
747
0
        return diag::err_asm_unterminated_symbolic_operand_name;
748
0
      if (NameEnd == CurPtr)
749
0
        return diag::err_asm_empty_symbolic_operand_name;
750
751
0
      StringRef SymbolicName(CurPtr, NameEnd - CurPtr);
752
753
0
      int N = getNamedOperand(SymbolicName);
754
0
      if (N == -1) {
755
        // Verify that an operand with that name exists.
756
0
        DiagOffs = CurPtr-StrStart;
757
0
        return diag::err_asm_unknown_symbolic_operand_name;
758
0
      }
759
760
      // Str contains "x[foo]" (Operand without the leading %).
761
0
      std::string Str(Begin, NameEnd + 1 - Begin);
762
763
      // (BeginLoc, EndLoc) represents the range of the operand we are currently
764
      // processing. Unlike Str, the range includes the leading '%'.
765
0
      SourceLocation BeginLoc = getAsmString()->getLocationOfByte(
766
0
          Percent - StrStart, SM, LO, TI, &LastAsmStringToken,
767
0
          &LastAsmStringOffset);
768
0
      SourceLocation EndLoc = getAsmString()->getLocationOfByte(
769
0
          NameEnd + 1 - StrStart, SM, LO, TI, &LastAsmStringToken,
770
0
          &LastAsmStringOffset);
771
772
0
      Pieces.emplace_back(N, std::move(Str), BeginLoc, EndLoc);
773
774
0
      CurPtr = NameEnd+1;
775
0
      continue;
776
0
    }
777
778
0
    DiagOffs = CurPtr-StrStart-1;
779
0
    return diag::err_asm_invalid_escape;
780
0
  }
781
0
}
782
783
/// Assemble final IR asm string (GCC-style).
784
0
std::string GCCAsmStmt::generateAsmString(const ASTContext &C) const {
785
  // Analyze the asm string to decompose it into its pieces.  We know that Sema
786
  // has already done this, so it is guaranteed to be successful.
787
0
  SmallVector<GCCAsmStmt::AsmStringPiece, 4> Pieces;
788
0
  unsigned DiagOffs;
789
0
  AnalyzeAsmString(Pieces, C, DiagOffs);
790
791
0
  std::string AsmString;
792
0
  for (const auto &Piece : Pieces) {
793
0
    if (Piece.isString())
794
0
      AsmString += Piece.getString();
795
0
    else if (Piece.getModifier() == '\0')
796
0
      AsmString += '$' + llvm::utostr(Piece.getOperandNo());
797
0
    else
798
0
      AsmString += "${" + llvm::utostr(Piece.getOperandNo()) + ':' +
799
0
                   Piece.getModifier() + '}';
800
0
  }
801
0
  return AsmString;
802
0
}
803
804
/// Assemble final IR asm string (MS-style).
805
0
std::string MSAsmStmt::generateAsmString(const ASTContext &C) const {
806
  // FIXME: This needs to be translated into the IR string representation.
807
0
  SmallVector<StringRef, 8> Pieces;
808
0
  AsmStr.split(Pieces, "\n\t");
809
0
  std::string MSAsmString;
810
0
  for (size_t I = 0, E = Pieces.size(); I < E; ++I) {
811
0
    StringRef Instruction = Pieces[I];
812
    // For vex/vex2/vex3/evex masm style prefix, convert it to att style
813
    // since we don't support masm style prefix in backend.
814
0
    if (Instruction.starts_with("vex "))
815
0
      MSAsmString += '{' + Instruction.substr(0, 3).str() + '}' +
816
0
                     Instruction.substr(3).str();
817
0
    else if (Instruction.starts_with("vex2 ") ||
818
0
             Instruction.starts_with("vex3 ") ||
819
0
             Instruction.starts_with("evex "))
820
0
      MSAsmString += '{' + Instruction.substr(0, 4).str() + '}' +
821
0
                     Instruction.substr(4).str();
822
0
    else
823
0
      MSAsmString += Instruction.str();
824
    // If this is not the last instruction, adding back the '\n\t'.
825
0
    if (I < E - 1)
826
0
      MSAsmString += "\n\t";
827
0
  }
828
0
  return MSAsmString;
829
0
}
830
831
0
Expr *MSAsmStmt::getOutputExpr(unsigned i) {
832
0
  return cast<Expr>(Exprs[i]);
833
0
}
834
835
0
Expr *MSAsmStmt::getInputExpr(unsigned i) {
836
0
  return cast<Expr>(Exprs[i + NumOutputs]);
837
0
}
838
839
0
void MSAsmStmt::setInputExpr(unsigned i, Expr *E) {
840
0
  Exprs[i + NumOutputs] = E;
841
0
}
842
843
//===----------------------------------------------------------------------===//
844
// Constructors
845
//===----------------------------------------------------------------------===//
846
847
GCCAsmStmt::GCCAsmStmt(const ASTContext &C, SourceLocation asmloc,
848
                       bool issimple, bool isvolatile, unsigned numoutputs,
849
                       unsigned numinputs, IdentifierInfo **names,
850
                       StringLiteral **constraints, Expr **exprs,
851
                       StringLiteral *asmstr, unsigned numclobbers,
852
                       StringLiteral **clobbers, unsigned numlabels,
853
                       SourceLocation rparenloc)
854
    : AsmStmt(GCCAsmStmtClass, asmloc, issimple, isvolatile, numoutputs,
855
              numinputs, numclobbers),
856
0
              RParenLoc(rparenloc), AsmStr(asmstr), NumLabels(numlabels) {
857
0
  unsigned NumExprs = NumOutputs + NumInputs + NumLabels;
858
859
0
  Names = new (C) IdentifierInfo*[NumExprs];
860
0
  std::copy(names, names + NumExprs, Names);
861
862
0
  Exprs = new (C) Stmt*[NumExprs];
863
0
  std::copy(exprs, exprs + NumExprs, Exprs);
864
865
0
  unsigned NumConstraints = NumOutputs + NumInputs;
866
0
  Constraints = new (C) StringLiteral*[NumConstraints];
867
0
  std::copy(constraints, constraints + NumConstraints, Constraints);
868
869
0
  Clobbers = new (C) StringLiteral*[NumClobbers];
870
0
  std::copy(clobbers, clobbers + NumClobbers, Clobbers);
871
0
}
872
873
MSAsmStmt::MSAsmStmt(const ASTContext &C, SourceLocation asmloc,
874
                     SourceLocation lbraceloc, bool issimple, bool isvolatile,
875
                     ArrayRef<Token> asmtoks, unsigned numoutputs,
876
                     unsigned numinputs,
877
                     ArrayRef<StringRef> constraints, ArrayRef<Expr*> exprs,
878
                     StringRef asmstr, ArrayRef<StringRef> clobbers,
879
                     SourceLocation endloc)
880
    : AsmStmt(MSAsmStmtClass, asmloc, issimple, isvolatile, numoutputs,
881
              numinputs, clobbers.size()), LBraceLoc(lbraceloc),
882
0
              EndLoc(endloc), NumAsmToks(asmtoks.size()) {
883
0
  initialize(C, asmstr, asmtoks, constraints, exprs, clobbers);
884
0
}
885
886
0
static StringRef copyIntoContext(const ASTContext &C, StringRef str) {
887
0
  return str.copy(C);
888
0
}
889
890
void MSAsmStmt::initialize(const ASTContext &C, StringRef asmstr,
891
                           ArrayRef<Token> asmtoks,
892
                           ArrayRef<StringRef> constraints,
893
                           ArrayRef<Expr*> exprs,
894
0
                           ArrayRef<StringRef> clobbers) {
895
0
  assert(NumAsmToks == asmtoks.size());
896
0
  assert(NumClobbers == clobbers.size());
897
898
0
  assert(exprs.size() == NumOutputs + NumInputs);
899
0
  assert(exprs.size() == constraints.size());
900
901
0
  AsmStr = copyIntoContext(C, asmstr);
902
903
0
  Exprs = new (C) Stmt*[exprs.size()];
904
0
  std::copy(exprs.begin(), exprs.end(), Exprs);
905
906
0
  AsmToks = new (C) Token[asmtoks.size()];
907
0
  std::copy(asmtoks.begin(), asmtoks.end(), AsmToks);
908
909
0
  Constraints = new (C) StringRef[exprs.size()];
910
0
  std::transform(constraints.begin(), constraints.end(), Constraints,
911
0
                 [&](StringRef Constraint) {
912
0
                   return copyIntoContext(C, Constraint);
913
0
                 });
914
915
0
  Clobbers = new (C) StringRef[NumClobbers];
916
  // FIXME: Avoid the allocation/copy if at all possible.
917
0
  std::transform(clobbers.begin(), clobbers.end(), Clobbers,
918
0
                 [&](StringRef Clobber) {
919
0
                   return copyIntoContext(C, Clobber);
920
0
                 });
921
0
}
922
923
IfStmt::IfStmt(const ASTContext &Ctx, SourceLocation IL, IfStatementKind Kind,
924
               Stmt *Init, VarDecl *Var, Expr *Cond, SourceLocation LPL,
925
               SourceLocation RPL, Stmt *Then, SourceLocation EL, Stmt *Else)
926
0
    : Stmt(IfStmtClass), LParenLoc(LPL), RParenLoc(RPL) {
927
0
  bool HasElse = Else != nullptr;
928
0
  bool HasVar = Var != nullptr;
929
0
  bool HasInit = Init != nullptr;
930
0
  IfStmtBits.HasElse = HasElse;
931
0
  IfStmtBits.HasVar = HasVar;
932
0
  IfStmtBits.HasInit = HasInit;
933
934
0
  setStatementKind(Kind);
935
936
0
  setCond(Cond);
937
0
  setThen(Then);
938
0
  if (HasElse)
939
0
    setElse(Else);
940
0
  if (HasVar)
941
0
    setConditionVariable(Ctx, Var);
942
0
  if (HasInit)
943
0
    setInit(Init);
944
945
0
  setIfLoc(IL);
946
0
  if (HasElse)
947
0
    setElseLoc(EL);
948
0
}
949
950
IfStmt::IfStmt(EmptyShell Empty, bool HasElse, bool HasVar, bool HasInit)
951
0
    : Stmt(IfStmtClass, Empty) {
952
0
  IfStmtBits.HasElse = HasElse;
953
0
  IfStmtBits.HasVar = HasVar;
954
0
  IfStmtBits.HasInit = HasInit;
955
0
}
956
957
IfStmt *IfStmt::Create(const ASTContext &Ctx, SourceLocation IL,
958
                       IfStatementKind Kind, Stmt *Init, VarDecl *Var,
959
                       Expr *Cond, SourceLocation LPL, SourceLocation RPL,
960
0
                       Stmt *Then, SourceLocation EL, Stmt *Else) {
961
0
  bool HasElse = Else != nullptr;
962
0
  bool HasVar = Var != nullptr;
963
0
  bool HasInit = Init != nullptr;
964
0
  void *Mem = Ctx.Allocate(
965
0
      totalSizeToAlloc<Stmt *, SourceLocation>(
966
0
          NumMandatoryStmtPtr + HasElse + HasVar + HasInit, HasElse),
967
0
      alignof(IfStmt));
968
0
  return new (Mem)
969
0
      IfStmt(Ctx, IL, Kind, Init, Var, Cond, LPL, RPL, Then, EL, Else);
970
0
}
971
972
IfStmt *IfStmt::CreateEmpty(const ASTContext &Ctx, bool HasElse, bool HasVar,
973
0
                            bool HasInit) {
974
0
  void *Mem = Ctx.Allocate(
975
0
      totalSizeToAlloc<Stmt *, SourceLocation>(
976
0
          NumMandatoryStmtPtr + HasElse + HasVar + HasInit, HasElse),
977
0
      alignof(IfStmt));
978
0
  return new (Mem) IfStmt(EmptyShell(), HasElse, HasVar, HasInit);
979
0
}
980
981
0
VarDecl *IfStmt::getConditionVariable() {
982
0
  auto *DS = getConditionVariableDeclStmt();
983
0
  if (!DS)
984
0
    return nullptr;
985
0
  return cast<VarDecl>(DS->getSingleDecl());
986
0
}
987
988
0
void IfStmt::setConditionVariable(const ASTContext &Ctx, VarDecl *V) {
989
0
  assert(hasVarStorage() &&
990
0
         "This if statement has no storage for a condition variable!");
991
992
0
  if (!V) {
993
0
    getTrailingObjects<Stmt *>()[varOffset()] = nullptr;
994
0
    return;
995
0
  }
996
997
0
  SourceRange VarRange = V->getSourceRange();
998
0
  getTrailingObjects<Stmt *>()[varOffset()] = new (Ctx)
999
0
      DeclStmt(DeclGroupRef(V), VarRange.getBegin(), VarRange.getEnd());
1000
0
}
1001
1002
0
bool IfStmt::isObjCAvailabilityCheck() const {
1003
0
  return isa<ObjCAvailabilityCheckExpr>(getCond());
1004
0
}
1005
1006
0
std::optional<Stmt *> IfStmt::getNondiscardedCase(const ASTContext &Ctx) {
1007
0
  if (!isConstexpr() || getCond()->isValueDependent())
1008
0
    return std::nullopt;
1009
0
  return !getCond()->EvaluateKnownConstInt(Ctx) ? getElse() : getThen();
1010
0
}
1011
1012
std::optional<const Stmt *>
1013
0
IfStmt::getNondiscardedCase(const ASTContext &Ctx) const {
1014
0
  if (std::optional<Stmt *> Result =
1015
0
          const_cast<IfStmt *>(this)->getNondiscardedCase(Ctx))
1016
0
    return *Result;
1017
0
  return std::nullopt;
1018
0
}
1019
1020
ForStmt::ForStmt(const ASTContext &C, Stmt *Init, Expr *Cond, VarDecl *condVar,
1021
                 Expr *Inc, Stmt *Body, SourceLocation FL, SourceLocation LP,
1022
                 SourceLocation RP)
1023
  : Stmt(ForStmtClass), LParenLoc(LP), RParenLoc(RP)
1024
0
{
1025
0
  SubExprs[INIT] = Init;
1026
0
  setConditionVariable(C, condVar);
1027
0
  SubExprs[COND] = Cond;
1028
0
  SubExprs[INC] = Inc;
1029
0
  SubExprs[BODY] = Body;
1030
0
  ForStmtBits.ForLoc = FL;
1031
0
}
1032
1033
0
VarDecl *ForStmt::getConditionVariable() const {
1034
0
  if (!SubExprs[CONDVAR])
1035
0
    return nullptr;
1036
1037
0
  auto *DS = cast<DeclStmt>(SubExprs[CONDVAR]);
1038
0
  return cast<VarDecl>(DS->getSingleDecl());
1039
0
}
1040
1041
0
void ForStmt::setConditionVariable(const ASTContext &C, VarDecl *V) {
1042
0
  if (!V) {
1043
0
    SubExprs[CONDVAR] = nullptr;
1044
0
    return;
1045
0
  }
1046
1047
0
  SourceRange VarRange = V->getSourceRange();
1048
0
  SubExprs[CONDVAR] = new (C) DeclStmt(DeclGroupRef(V), VarRange.getBegin(),
1049
0
                                       VarRange.getEnd());
1050
0
}
1051
1052
SwitchStmt::SwitchStmt(const ASTContext &Ctx, Stmt *Init, VarDecl *Var,
1053
                       Expr *Cond, SourceLocation LParenLoc,
1054
                       SourceLocation RParenLoc)
1055
    : Stmt(SwitchStmtClass), FirstCase(nullptr), LParenLoc(LParenLoc),
1056
0
      RParenLoc(RParenLoc) {
1057
0
  bool HasInit = Init != nullptr;
1058
0
  bool HasVar = Var != nullptr;
1059
0
  SwitchStmtBits.HasInit = HasInit;
1060
0
  SwitchStmtBits.HasVar = HasVar;
1061
0
  SwitchStmtBits.AllEnumCasesCovered = false;
1062
1063
0
  setCond(Cond);
1064
0
  setBody(nullptr);
1065
0
  if (HasInit)
1066
0
    setInit(Init);
1067
0
  if (HasVar)
1068
0
    setConditionVariable(Ctx, Var);
1069
1070
0
  setSwitchLoc(SourceLocation{});
1071
0
}
1072
1073
SwitchStmt::SwitchStmt(EmptyShell Empty, bool HasInit, bool HasVar)
1074
0
    : Stmt(SwitchStmtClass, Empty) {
1075
0
  SwitchStmtBits.HasInit = HasInit;
1076
0
  SwitchStmtBits.HasVar = HasVar;
1077
0
  SwitchStmtBits.AllEnumCasesCovered = false;
1078
0
}
1079
1080
SwitchStmt *SwitchStmt::Create(const ASTContext &Ctx, Stmt *Init, VarDecl *Var,
1081
                               Expr *Cond, SourceLocation LParenLoc,
1082
0
                               SourceLocation RParenLoc) {
1083
0
  bool HasInit = Init != nullptr;
1084
0
  bool HasVar = Var != nullptr;
1085
0
  void *Mem = Ctx.Allocate(
1086
0
      totalSizeToAlloc<Stmt *>(NumMandatoryStmtPtr + HasInit + HasVar),
1087
0
      alignof(SwitchStmt));
1088
0
  return new (Mem) SwitchStmt(Ctx, Init, Var, Cond, LParenLoc, RParenLoc);
1089
0
}
1090
1091
SwitchStmt *SwitchStmt::CreateEmpty(const ASTContext &Ctx, bool HasInit,
1092
0
                                    bool HasVar) {
1093
0
  void *Mem = Ctx.Allocate(
1094
0
      totalSizeToAlloc<Stmt *>(NumMandatoryStmtPtr + HasInit + HasVar),
1095
0
      alignof(SwitchStmt));
1096
0
  return new (Mem) SwitchStmt(EmptyShell(), HasInit, HasVar);
1097
0
}
1098
1099
0
VarDecl *SwitchStmt::getConditionVariable() {
1100
0
  auto *DS = getConditionVariableDeclStmt();
1101
0
  if (!DS)
1102
0
    return nullptr;
1103
0
  return cast<VarDecl>(DS->getSingleDecl());
1104
0
}
1105
1106
0
void SwitchStmt::setConditionVariable(const ASTContext &Ctx, VarDecl *V) {
1107
0
  assert(hasVarStorage() &&
1108
0
         "This switch statement has no storage for a condition variable!");
1109
1110
0
  if (!V) {
1111
0
    getTrailingObjects<Stmt *>()[varOffset()] = nullptr;
1112
0
    return;
1113
0
  }
1114
1115
0
  SourceRange VarRange = V->getSourceRange();
1116
0
  getTrailingObjects<Stmt *>()[varOffset()] = new (Ctx)
1117
0
      DeclStmt(DeclGroupRef(V), VarRange.getBegin(), VarRange.getEnd());
1118
0
}
1119
1120
WhileStmt::WhileStmt(const ASTContext &Ctx, VarDecl *Var, Expr *Cond,
1121
                     Stmt *Body, SourceLocation WL, SourceLocation LParenLoc,
1122
                     SourceLocation RParenLoc)
1123
0
    : Stmt(WhileStmtClass) {
1124
0
  bool HasVar = Var != nullptr;
1125
0
  WhileStmtBits.HasVar = HasVar;
1126
1127
0
  setCond(Cond);
1128
0
  setBody(Body);
1129
0
  if (HasVar)
1130
0
    setConditionVariable(Ctx, Var);
1131
1132
0
  setWhileLoc(WL);
1133
0
  setLParenLoc(LParenLoc);
1134
0
  setRParenLoc(RParenLoc);
1135
0
}
1136
1137
WhileStmt::WhileStmt(EmptyShell Empty, bool HasVar)
1138
0
    : Stmt(WhileStmtClass, Empty) {
1139
0
  WhileStmtBits.HasVar = HasVar;
1140
0
}
1141
1142
WhileStmt *WhileStmt::Create(const ASTContext &Ctx, VarDecl *Var, Expr *Cond,
1143
                             Stmt *Body, SourceLocation WL,
1144
                             SourceLocation LParenLoc,
1145
0
                             SourceLocation RParenLoc) {
1146
0
  bool HasVar = Var != nullptr;
1147
0
  void *Mem =
1148
0
      Ctx.Allocate(totalSizeToAlloc<Stmt *>(NumMandatoryStmtPtr + HasVar),
1149
0
                   alignof(WhileStmt));
1150
0
  return new (Mem) WhileStmt(Ctx, Var, Cond, Body, WL, LParenLoc, RParenLoc);
1151
0
}
1152
1153
0
WhileStmt *WhileStmt::CreateEmpty(const ASTContext &Ctx, bool HasVar) {
1154
0
  void *Mem =
1155
0
      Ctx.Allocate(totalSizeToAlloc<Stmt *>(NumMandatoryStmtPtr + HasVar),
1156
0
                   alignof(WhileStmt));
1157
0
  return new (Mem) WhileStmt(EmptyShell(), HasVar);
1158
0
}
1159
1160
0
VarDecl *WhileStmt::getConditionVariable() {
1161
0
  auto *DS = getConditionVariableDeclStmt();
1162
0
  if (!DS)
1163
0
    return nullptr;
1164
0
  return cast<VarDecl>(DS->getSingleDecl());
1165
0
}
1166
1167
0
void WhileStmt::setConditionVariable(const ASTContext &Ctx, VarDecl *V) {
1168
0
  assert(hasVarStorage() &&
1169
0
         "This while statement has no storage for a condition variable!");
1170
1171
0
  if (!V) {
1172
0
    getTrailingObjects<Stmt *>()[varOffset()] = nullptr;
1173
0
    return;
1174
0
  }
1175
1176
0
  SourceRange VarRange = V->getSourceRange();
1177
0
  getTrailingObjects<Stmt *>()[varOffset()] = new (Ctx)
1178
0
      DeclStmt(DeclGroupRef(V), VarRange.getBegin(), VarRange.getEnd());
1179
0
}
1180
1181
// IndirectGotoStmt
1182
0
LabelDecl *IndirectGotoStmt::getConstantTarget() {
1183
0
  if (auto *E = dyn_cast<AddrLabelExpr>(getTarget()->IgnoreParenImpCasts()))
1184
0
    return E->getLabel();
1185
0
  return nullptr;
1186
0
}
1187
1188
// ReturnStmt
1189
ReturnStmt::ReturnStmt(SourceLocation RL, Expr *E, const VarDecl *NRVOCandidate)
1190
0
    : Stmt(ReturnStmtClass), RetExpr(E) {
1191
0
  bool HasNRVOCandidate = NRVOCandidate != nullptr;
1192
0
  ReturnStmtBits.HasNRVOCandidate = HasNRVOCandidate;
1193
0
  if (HasNRVOCandidate)
1194
0
    setNRVOCandidate(NRVOCandidate);
1195
0
  setReturnLoc(RL);
1196
0
}
1197
1198
ReturnStmt::ReturnStmt(EmptyShell Empty, bool HasNRVOCandidate)
1199
0
    : Stmt(ReturnStmtClass, Empty) {
1200
0
  ReturnStmtBits.HasNRVOCandidate = HasNRVOCandidate;
1201
0
}
1202
1203
ReturnStmt *ReturnStmt::Create(const ASTContext &Ctx, SourceLocation RL,
1204
0
                               Expr *E, const VarDecl *NRVOCandidate) {
1205
0
  bool HasNRVOCandidate = NRVOCandidate != nullptr;
1206
0
  void *Mem = Ctx.Allocate(totalSizeToAlloc<const VarDecl *>(HasNRVOCandidate),
1207
0
                           alignof(ReturnStmt));
1208
0
  return new (Mem) ReturnStmt(RL, E, NRVOCandidate);
1209
0
}
1210
1211
ReturnStmt *ReturnStmt::CreateEmpty(const ASTContext &Ctx,
1212
0
                                    bool HasNRVOCandidate) {
1213
0
  void *Mem = Ctx.Allocate(totalSizeToAlloc<const VarDecl *>(HasNRVOCandidate),
1214
0
                           alignof(ReturnStmt));
1215
0
  return new (Mem) ReturnStmt(EmptyShell(), HasNRVOCandidate);
1216
0
}
1217
1218
// CaseStmt
1219
CaseStmt *CaseStmt::Create(const ASTContext &Ctx, Expr *lhs, Expr *rhs,
1220
                           SourceLocation caseLoc, SourceLocation ellipsisLoc,
1221
0
                           SourceLocation colonLoc) {
1222
0
  bool CaseStmtIsGNURange = rhs != nullptr;
1223
0
  void *Mem = Ctx.Allocate(
1224
0
      totalSizeToAlloc<Stmt *, SourceLocation>(
1225
0
          NumMandatoryStmtPtr + CaseStmtIsGNURange, CaseStmtIsGNURange),
1226
0
      alignof(CaseStmt));
1227
0
  return new (Mem) CaseStmt(lhs, rhs, caseLoc, ellipsisLoc, colonLoc);
1228
0
}
1229
1230
CaseStmt *CaseStmt::CreateEmpty(const ASTContext &Ctx,
1231
0
                                bool CaseStmtIsGNURange) {
1232
0
  void *Mem = Ctx.Allocate(
1233
0
      totalSizeToAlloc<Stmt *, SourceLocation>(
1234
0
          NumMandatoryStmtPtr + CaseStmtIsGNURange, CaseStmtIsGNURange),
1235
0
      alignof(CaseStmt));
1236
0
  return new (Mem) CaseStmt(EmptyShell(), CaseStmtIsGNURange);
1237
0
}
1238
1239
SEHTryStmt::SEHTryStmt(bool IsCXXTry, SourceLocation TryLoc, Stmt *TryBlock,
1240
                       Stmt *Handler)
1241
0
    : Stmt(SEHTryStmtClass), IsCXXTry(IsCXXTry), TryLoc(TryLoc) {
1242
0
  Children[TRY]     = TryBlock;
1243
0
  Children[HANDLER] = Handler;
1244
0
}
1245
1246
SEHTryStmt* SEHTryStmt::Create(const ASTContext &C, bool IsCXXTry,
1247
                               SourceLocation TryLoc, Stmt *TryBlock,
1248
0
                               Stmt *Handler) {
1249
0
  return new(C) SEHTryStmt(IsCXXTry,TryLoc,TryBlock,Handler);
1250
0
}
1251
1252
0
SEHExceptStmt* SEHTryStmt::getExceptHandler() const {
1253
0
  return dyn_cast<SEHExceptStmt>(getHandler());
1254
0
}
1255
1256
0
SEHFinallyStmt* SEHTryStmt::getFinallyHandler() const {
1257
0
  return dyn_cast<SEHFinallyStmt>(getHandler());
1258
0
}
1259
1260
SEHExceptStmt::SEHExceptStmt(SourceLocation Loc, Expr *FilterExpr, Stmt *Block)
1261
0
    : Stmt(SEHExceptStmtClass), Loc(Loc) {
1262
0
  Children[FILTER_EXPR] = FilterExpr;
1263
0
  Children[BLOCK]       = Block;
1264
0
}
1265
1266
SEHExceptStmt* SEHExceptStmt::Create(const ASTContext &C, SourceLocation Loc,
1267
0
                                     Expr *FilterExpr, Stmt *Block) {
1268
0
  return new(C) SEHExceptStmt(Loc,FilterExpr,Block);
1269
0
}
1270
1271
SEHFinallyStmt::SEHFinallyStmt(SourceLocation Loc, Stmt *Block)
1272
0
    : Stmt(SEHFinallyStmtClass), Loc(Loc), Block(Block) {}
1273
1274
SEHFinallyStmt* SEHFinallyStmt::Create(const ASTContext &C, SourceLocation Loc,
1275
0
                                       Stmt *Block) {
1276
0
  return new(C)SEHFinallyStmt(Loc,Block);
1277
0
}
1278
1279
CapturedStmt::Capture::Capture(SourceLocation Loc, VariableCaptureKind Kind,
1280
                               VarDecl *Var)
1281
0
    : VarAndKind(Var, Kind), Loc(Loc) {
1282
0
  switch (Kind) {
1283
0
  case VCK_This:
1284
0
    assert(!Var && "'this' capture cannot have a variable!");
1285
0
    break;
1286
0
  case VCK_ByRef:
1287
0
    assert(Var && "capturing by reference must have a variable!");
1288
0
    break;
1289
0
  case VCK_ByCopy:
1290
0
    assert(Var && "capturing by copy must have a variable!");
1291
0
    break;
1292
0
  case VCK_VLAType:
1293
0
    assert(!Var &&
1294
0
           "Variable-length array type capture cannot have a variable!");
1295
0
    break;
1296
0
  }
1297
0
}
1298
1299
CapturedStmt::VariableCaptureKind
1300
0
CapturedStmt::Capture::getCaptureKind() const {
1301
0
  return VarAndKind.getInt();
1302
0
}
1303
1304
0
VarDecl *CapturedStmt::Capture::getCapturedVar() const {
1305
0
  assert((capturesVariable() || capturesVariableByCopy()) &&
1306
0
         "No variable available for 'this' or VAT capture");
1307
0
  return VarAndKind.getPointer();
1308
0
}
1309
1310
0
CapturedStmt::Capture *CapturedStmt::getStoredCaptures() const {
1311
0
  unsigned Size = sizeof(CapturedStmt) + sizeof(Stmt *) * (NumCaptures + 1);
1312
1313
  // Offset of the first Capture object.
1314
0
  unsigned FirstCaptureOffset = llvm::alignTo(Size, alignof(Capture));
1315
1316
0
  return reinterpret_cast<Capture *>(
1317
0
      reinterpret_cast<char *>(const_cast<CapturedStmt *>(this))
1318
0
      + FirstCaptureOffset);
1319
0
}
1320
1321
CapturedStmt::CapturedStmt(Stmt *S, CapturedRegionKind Kind,
1322
                           ArrayRef<Capture> Captures,
1323
                           ArrayRef<Expr *> CaptureInits,
1324
                           CapturedDecl *CD,
1325
                           RecordDecl *RD)
1326
  : Stmt(CapturedStmtClass), NumCaptures(Captures.size()),
1327
0
    CapDeclAndKind(CD, Kind), TheRecordDecl(RD) {
1328
0
  assert( S && "null captured statement");
1329
0
  assert(CD && "null captured declaration for captured statement");
1330
0
  assert(RD && "null record declaration for captured statement");
1331
1332
  // Copy initialization expressions.
1333
0
  Stmt **Stored = getStoredStmts();
1334
0
  for (unsigned I = 0, N = NumCaptures; I != N; ++I)
1335
0
    *Stored++ = CaptureInits[I];
1336
1337
  // Copy the statement being captured.
1338
0
  *Stored = S;
1339
1340
  // Copy all Capture objects.
1341
0
  Capture *Buffer = getStoredCaptures();
1342
0
  std::copy(Captures.begin(), Captures.end(), Buffer);
1343
0
}
1344
1345
CapturedStmt::CapturedStmt(EmptyShell Empty, unsigned NumCaptures)
1346
  : Stmt(CapturedStmtClass, Empty), NumCaptures(NumCaptures),
1347
0
    CapDeclAndKind(nullptr, CR_Default) {
1348
0
  getStoredStmts()[NumCaptures] = nullptr;
1349
1350
  // Construct default capture objects.
1351
0
  Capture *Buffer = getStoredCaptures();
1352
0
  for (unsigned I = 0, N = NumCaptures; I != N; ++I)
1353
0
    new (Buffer++) Capture();
1354
0
}
1355
1356
CapturedStmt *CapturedStmt::Create(const ASTContext &Context, Stmt *S,
1357
                                   CapturedRegionKind Kind,
1358
                                   ArrayRef<Capture> Captures,
1359
                                   ArrayRef<Expr *> CaptureInits,
1360
                                   CapturedDecl *CD,
1361
0
                                   RecordDecl *RD) {
1362
  // The layout is
1363
  //
1364
  // -----------------------------------------------------------
1365
  // | CapturedStmt, Init, ..., Init, S, Capture, ..., Capture |
1366
  // ----------------^-------------------^----------------------
1367
  //                 getStoredStmts()    getStoredCaptures()
1368
  //
1369
  // where S is the statement being captured.
1370
  //
1371
0
  assert(CaptureInits.size() == Captures.size() && "wrong number of arguments");
1372
1373
0
  unsigned Size = sizeof(CapturedStmt) + sizeof(Stmt *) * (Captures.size() + 1);
1374
0
  if (!Captures.empty()) {
1375
    // Realign for the following Capture array.
1376
0
    Size = llvm::alignTo(Size, alignof(Capture));
1377
0
    Size += sizeof(Capture) * Captures.size();
1378
0
  }
1379
1380
0
  void *Mem = Context.Allocate(Size);
1381
0
  return new (Mem) CapturedStmt(S, Kind, Captures, CaptureInits, CD, RD);
1382
0
}
1383
1384
CapturedStmt *CapturedStmt::CreateDeserialized(const ASTContext &Context,
1385
0
                                               unsigned NumCaptures) {
1386
0
  unsigned Size = sizeof(CapturedStmt) + sizeof(Stmt *) * (NumCaptures + 1);
1387
0
  if (NumCaptures > 0) {
1388
    // Realign for the following Capture array.
1389
0
    Size = llvm::alignTo(Size, alignof(Capture));
1390
0
    Size += sizeof(Capture) * NumCaptures;
1391
0
  }
1392
1393
0
  void *Mem = Context.Allocate(Size);
1394
0
  return new (Mem) CapturedStmt(EmptyShell(), NumCaptures);
1395
0
}
1396
1397
0
Stmt::child_range CapturedStmt::children() {
1398
  // Children are captured field initializers.
1399
0
  return child_range(getStoredStmts(), getStoredStmts() + NumCaptures);
1400
0
}
1401
1402
0
Stmt::const_child_range CapturedStmt::children() const {
1403
0
  return const_child_range(getStoredStmts(), getStoredStmts() + NumCaptures);
1404
0
}
1405
1406
0
CapturedDecl *CapturedStmt::getCapturedDecl() {
1407
0
  return CapDeclAndKind.getPointer();
1408
0
}
1409
1410
0
const CapturedDecl *CapturedStmt::getCapturedDecl() const {
1411
0
  return CapDeclAndKind.getPointer();
1412
0
}
1413
1414
/// Set the outlined function declaration.
1415
0
void CapturedStmt::setCapturedDecl(CapturedDecl *D) {
1416
0
  assert(D && "null CapturedDecl");
1417
0
  CapDeclAndKind.setPointer(D);
1418
0
}
1419
1420
/// Retrieve the captured region kind.
1421
0
CapturedRegionKind CapturedStmt::getCapturedRegionKind() const {
1422
0
  return CapDeclAndKind.getInt();
1423
0
}
1424
1425
/// Set the captured region kind.
1426
0
void CapturedStmt::setCapturedRegionKind(CapturedRegionKind Kind) {
1427
0
  CapDeclAndKind.setInt(Kind);
1428
0
}
1429
1430
0
bool CapturedStmt::capturesVariable(const VarDecl *Var) const {
1431
0
  for (const auto &I : captures()) {
1432
0
    if (!I.capturesVariable() && !I.capturesVariableByCopy())
1433
0
      continue;
1434
0
    if (I.getCapturedVar()->getCanonicalDecl() == Var->getCanonicalDecl())
1435
0
      return true;
1436
0
  }
1437
1438
0
  return false;
1439
0
}