/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 | } |