forked from OSchip/llvm-project
[AST] Fix some Clang-tidy modernize-use-auto warnings; other minor fixes (NFC).
llvm-svn: 329036
This commit is contained in:
parent
7f0daaeb86
commit
7855e77b91
|
@ -20,6 +20,7 @@
|
|||
#include "clang/AST/ASTUnresolvedSet.h"
|
||||
#include "clang/AST/Attr.h"
|
||||
#include "clang/AST/Decl.h"
|
||||
#include "clang/AST/DeclBase.h"
|
||||
#include "clang/AST/DeclarationName.h"
|
||||
#include "clang/AST/Expr.h"
|
||||
#include "clang/AST/ExternalASTSource.h"
|
||||
|
@ -1598,7 +1599,7 @@ public:
|
|||
/// \brief If the class is a local class [class.local], returns
|
||||
/// the enclosing function declaration.
|
||||
const FunctionDecl *isLocalClass() const {
|
||||
if (const CXXRecordDecl *RD = dyn_cast<CXXRecordDecl>(getDeclContext()))
|
||||
if (const auto *RD = dyn_cast<CXXRecordDecl>(getDeclContext()))
|
||||
return RD->isLocalClass();
|
||||
|
||||
return dyn_cast<FunctionDecl>(getDeclContext());
|
||||
|
@ -2393,7 +2394,7 @@ public:
|
|||
SourceLocation getRParenLoc() const { return RParenLoc; }
|
||||
|
||||
/// \brief Get the initializer.
|
||||
Expr *getInit() const { return static_cast<Expr*>(Init); }
|
||||
Expr *getInit() const { return static_cast<Expr *>(Init); }
|
||||
};
|
||||
|
||||
/// Description of a constructor that was inherited from a base class.
|
||||
|
@ -3047,14 +3048,14 @@ public:
|
|||
|
||||
/// \brief Retrieve the namespace declaration aliased by this directive.
|
||||
NamespaceDecl *getNamespace() {
|
||||
if (NamespaceAliasDecl *AD = dyn_cast<NamespaceAliasDecl>(Namespace))
|
||||
if (auto *AD = dyn_cast<NamespaceAliasDecl>(Namespace))
|
||||
return AD->getNamespace();
|
||||
|
||||
return cast<NamespaceDecl>(Namespace);
|
||||
}
|
||||
|
||||
const NamespaceDecl *getNamespace() const {
|
||||
return const_cast<NamespaceAliasDecl*>(this)->getNamespace();
|
||||
return const_cast<NamespaceAliasDecl *>(this)->getNamespace();
|
||||
}
|
||||
|
||||
/// Returns the location of the alias name, i.e. 'foo' in
|
||||
|
|
|
@ -148,13 +148,13 @@ public:
|
|||
/// Retrieves the source range for the friend declaration.
|
||||
SourceRange getSourceRange() const override LLVM_READONLY {
|
||||
if (NamedDecl *ND = getFriendDecl()) {
|
||||
if (FunctionDecl *FD = dyn_cast<FunctionDecl>(ND))
|
||||
if (const auto *FD = dyn_cast<FunctionDecl>(ND))
|
||||
return FD->getSourceRange();
|
||||
if (FunctionTemplateDecl *FTD = dyn_cast<FunctionTemplateDecl>(ND))
|
||||
if (const auto *FTD = dyn_cast<FunctionTemplateDecl>(ND))
|
||||
return FTD->getSourceRange();
|
||||
if (ClassTemplateDecl *CTD = dyn_cast<ClassTemplateDecl>(ND))
|
||||
if (const auto *CTD = dyn_cast<ClassTemplateDecl>(ND))
|
||||
return CTD->getSourceRange();
|
||||
if (DeclaratorDecl *DD = dyn_cast<DeclaratorDecl>(ND)) {
|
||||
if (const auto *DD = dyn_cast<DeclaratorDecl>(ND)) {
|
||||
if (DD->getOuterLocStart() != DD->getInnerLocStart())
|
||||
return DD->getSourceRange();
|
||||
}
|
||||
|
|
|
@ -19,7 +19,6 @@
|
|||
#include "clang/AST/DeclBase.h"
|
||||
#include "clang/Basic/LLVM.h"
|
||||
#include "clang/Basic/Module.h"
|
||||
#include "clang/Basic/SourceLocation.h"
|
||||
#include "llvm/ADT/ArrayRef.h"
|
||||
#include "llvm/ADT/DenseMap.h"
|
||||
#include "llvm/ADT/IntrusiveRefCntPtr.h"
|
||||
|
@ -447,7 +446,7 @@ public:
|
|||
|
||||
/// Set the value of this pointer, in the current generation.
|
||||
void set(T NewValue) {
|
||||
if (LazyData *LazyVal = Value.template dyn_cast<LazyData*>()) {
|
||||
if (auto *LazyVal = Value.template dyn_cast<LazyData *>()) {
|
||||
LazyVal->LastValue = NewValue;
|
||||
return;
|
||||
}
|
||||
|
@ -459,7 +458,7 @@ public:
|
|||
|
||||
/// Get the value of this pointer, updating its owner if necessary.
|
||||
T get(Owner O) {
|
||||
if (LazyData *LazyVal = Value.template dyn_cast<LazyData*>()) {
|
||||
if (auto *LazyVal = Value.template dyn_cast<LazyData *>()) {
|
||||
if (LazyVal->LastGeneration != LazyVal->ExternalSource->getGeneration()) {
|
||||
LazyVal->LastGeneration = LazyVal->ExternalSource->getGeneration();
|
||||
(LazyVal->ExternalSource->*Update)(O);
|
||||
|
@ -471,7 +470,7 @@ public:
|
|||
|
||||
/// Get the most recently computed value of this pointer without updating it.
|
||||
T getNotUpdated() const {
|
||||
if (LazyData *LazyVal = Value.template dyn_cast<LazyData*>())
|
||||
if (auto *LazyVal = Value.template dyn_cast<LazyData *>())
|
||||
return LazyVal->LastValue;
|
||||
return Value.template get<T>();
|
||||
}
|
||||
|
|
|
@ -321,7 +321,7 @@ public:
|
|||
/// \brief Return the first declaration of this declaration or itself if this
|
||||
/// is the only declaration.
|
||||
decl_type *getFirstDecl() {
|
||||
decl_type *D = static_cast<decl_type*>(this);
|
||||
auto *D = static_cast<decl_type *>(this);
|
||||
if (!D->isFromASTFile())
|
||||
return D;
|
||||
return cast<decl_type>(getPrimaryMergedDecl(const_cast<decl_type*>(D)));
|
||||
|
@ -330,7 +330,7 @@ public:
|
|||
/// \brief Return the first declaration of this declaration or itself if this
|
||||
/// is the only declaration.
|
||||
const decl_type *getFirstDecl() const {
|
||||
const decl_type *D = static_cast<const decl_type*>(this);
|
||||
const auto *D = static_cast<const decl_type *>(this);
|
||||
if (!D->isFromASTFile())
|
||||
return D;
|
||||
return cast<decl_type>(getPrimaryMergedDecl(const_cast<decl_type*>(D)));
|
||||
|
|
|
@ -455,6 +455,7 @@ public:
|
|||
using const_child_range = llvm::iterator_range<const_child_iterator>;
|
||||
|
||||
child_range children();
|
||||
|
||||
const_child_range children() const {
|
||||
auto Children = const_cast<Stmt *>(this)->children();
|
||||
return const_child_range(Children.begin(), Children.end());
|
||||
|
@ -543,9 +544,11 @@ public:
|
|||
using decl_const_range = llvm::iterator_range<const_decl_iterator>;
|
||||
|
||||
decl_range decls() { return decl_range(decl_begin(), decl_end()); }
|
||||
|
||||
decl_const_range decls() const {
|
||||
return decl_const_range(decl_begin(), decl_end());
|
||||
}
|
||||
|
||||
decl_iterator decl_begin() { return DG.begin(); }
|
||||
decl_iterator decl_end() { return DG.end(); }
|
||||
const_decl_iterator decl_begin() const { return DG.begin(); }
|
||||
|
@ -638,6 +641,7 @@ public:
|
|||
body_iterator body_begin() { return getTrailingObjects<Stmt *>(); }
|
||||
body_iterator body_end() { return body_begin() + size(); }
|
||||
Stmt *body_front() { return !body_empty() ? body_begin()[0] : nullptr; }
|
||||
|
||||
Stmt *body_back() {
|
||||
return !body_empty() ? body_begin()[size() - 1] : nullptr;
|
||||
}
|
||||
|
@ -657,6 +661,7 @@ public:
|
|||
const_body_iterator body_begin() const {
|
||||
return getTrailingObjects<Stmt *>();
|
||||
}
|
||||
|
||||
const_body_iterator body_end() const { return body_begin() + size(); }
|
||||
|
||||
const Stmt *body_front() const {
|
||||
|
@ -795,7 +800,7 @@ public:
|
|||
SourceLocation getLocEnd() const LLVM_READONLY {
|
||||
// Handle deeply nested case statements with iteration instead of recursion.
|
||||
const CaseStmt *CS = this;
|
||||
while (const CaseStmt *CS2 = dyn_cast<CaseStmt>(CS->getSubStmt()))
|
||||
while (const auto *CS2 = dyn_cast<CaseStmt>(CS->getSubStmt()))
|
||||
CS = CS2;
|
||||
|
||||
return CS->getSubStmt()->getLocEnd();
|
||||
|
@ -843,7 +848,7 @@ public:
|
|||
};
|
||||
|
||||
inline SourceLocation SwitchCase::getLocEnd() const {
|
||||
if (const CaseStmt *CS = dyn_cast<CaseStmt>(this))
|
||||
if (const auto *CS = dyn_cast<CaseStmt>(this))
|
||||
return CS->getLocEnd();
|
||||
return cast<DefaultStmt>(this)->getLocEnd();
|
||||
}
|
||||
|
@ -906,7 +911,7 @@ class AttributedStmt final
|
|||
}
|
||||
|
||||
explicit AttributedStmt(EmptyShell Empty, unsigned NumAttrs)
|
||||
: Stmt(AttributedStmtClass, Empty), NumAttrs(NumAttrs) {
|
||||
: Stmt(AttributedStmtClass, Empty), NumAttrs(NumAttrs) {
|
||||
std::fill_n(getAttrArrayPtr(), NumAttrs, nullptr);
|
||||
}
|
||||
|
||||
|
@ -1512,8 +1517,8 @@ public:
|
|||
bool isVolatile() const { return IsVolatile; }
|
||||
void setVolatile(bool V) { IsVolatile = V; }
|
||||
|
||||
SourceLocation getLocStart() const LLVM_READONLY { return SourceLocation(); }
|
||||
SourceLocation getLocEnd() const LLVM_READONLY { return SourceLocation(); }
|
||||
SourceLocation getLocStart() const LLVM_READONLY { return {}; }
|
||||
SourceLocation getLocEnd() const LLVM_READONLY { return {}; }
|
||||
|
||||
//===--- Asm String Analysis ---===//
|
||||
|
||||
|
@ -1686,9 +1691,7 @@ public:
|
|||
bool isString() const { return MyKind == String; }
|
||||
bool isOperand() const { return MyKind == Operand; }
|
||||
|
||||
const std::string &getString() const {
|
||||
return Str;
|
||||
}
|
||||
const std::string &getString() const { return Str; }
|
||||
|
||||
unsigned getOperandNo() const {
|
||||
assert(isOperand());
|
||||
|
@ -1718,15 +1721,13 @@ public:
|
|||
|
||||
//===--- Output operands ---===//
|
||||
|
||||
IdentifierInfo *getOutputIdentifier(unsigned i) const {
|
||||
return Names[i];
|
||||
}
|
||||
IdentifierInfo *getOutputIdentifier(unsigned i) const { return Names[i]; }
|
||||
|
||||
StringRef getOutputName(unsigned i) const {
|
||||
if (IdentifierInfo *II = getOutputIdentifier(i))
|
||||
return II->getName();
|
||||
|
||||
return StringRef();
|
||||
return {};
|
||||
}
|
||||
|
||||
StringRef getOutputConstraint(unsigned i) const;
|
||||
|
@ -1754,7 +1755,7 @@ public:
|
|||
if (IdentifierInfo *II = getInputIdentifier(i))
|
||||
return II->getName();
|
||||
|
||||
return StringRef();
|
||||
return {};
|
||||
}
|
||||
|
||||
StringRef getInputConstraint(unsigned i) const;
|
||||
|
@ -1941,7 +1942,7 @@ public:
|
|||
}
|
||||
|
||||
child_range children() {
|
||||
return child_range(Children,Children+2);
|
||||
return child_range(Children, Children+2);
|
||||
}
|
||||
|
||||
static bool classof(const Stmt *T) {
|
||||
|
@ -2022,7 +2023,7 @@ public:
|
|||
SEHFinallyStmt *getFinallyHandler() const;
|
||||
|
||||
child_range children() {
|
||||
return child_range(Children,Children+2);
|
||||
return child_range(Children, Children+2);
|
||||
}
|
||||
|
||||
static bool classof(const Stmt *T) {
|
||||
|
|
|
@ -85,7 +85,7 @@ public:
|
|||
template<typename T>
|
||||
T getAs() const {
|
||||
if (!T::isKind(*this))
|
||||
return T();
|
||||
return {};
|
||||
T t;
|
||||
TypeLoc& tl = t;
|
||||
tl = *this;
|
||||
|
@ -276,7 +276,7 @@ public:
|
|||
UnqualTypeLoc getUnqualifiedLoc() const {
|
||||
unsigned align =
|
||||
TypeLoc::getLocalAlignmentForType(QualType(getTypePtr(), 0));
|
||||
uintptr_t dataInt = reinterpret_cast<uintptr_t>(Data);
|
||||
auto dataInt = reinterpret_cast<uintptr_t>(Data);
|
||||
dataInt = llvm::alignTo(dataInt, align);
|
||||
return UnqualTypeLoc(getTypePtr(), reinterpret_cast<void*>(dataInt));
|
||||
}
|
||||
|
@ -429,7 +429,7 @@ protected:
|
|||
}
|
||||
|
||||
void *getNonLocalData() const {
|
||||
uintptr_t data = reinterpret_cast<uintptr_t>(Base::Data);
|
||||
auto data = reinterpret_cast<uintptr_t>(Base::Data);
|
||||
data += asDerived()->getLocalDataSize();
|
||||
data = llvm::alignTo(data, getNextTypeAlign());
|
||||
return reinterpret_cast<void*>(data);
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -125,8 +125,8 @@ CXXRecordDecl *CXXRecordDecl::Create(const ASTContext &C, TagKind TK,
|
|||
SourceLocation IdLoc, IdentifierInfo *Id,
|
||||
CXXRecordDecl *PrevDecl,
|
||||
bool DelayTypeCreation) {
|
||||
CXXRecordDecl *R = new (C, DC) CXXRecordDecl(CXXRecord, TK, C, DC, StartLoc,
|
||||
IdLoc, Id, PrevDecl);
|
||||
auto *R = new (C, DC) CXXRecordDecl(CXXRecord, TK, C, DC, StartLoc, IdLoc, Id,
|
||||
PrevDecl);
|
||||
R->MayHaveOutOfDateDef = C.getLangOpts().Modules;
|
||||
|
||||
// FIXME: DelayTypeCreation seems like such a hack
|
||||
|
@ -140,9 +140,8 @@ CXXRecordDecl::CreateLambda(const ASTContext &C, DeclContext *DC,
|
|||
TypeSourceInfo *Info, SourceLocation Loc,
|
||||
bool Dependent, bool IsGeneric,
|
||||
LambdaCaptureDefault CaptureDefault) {
|
||||
CXXRecordDecl *R =
|
||||
new (C, DC) CXXRecordDecl(CXXRecord, TTK_Class, C, DC, Loc, Loc,
|
||||
nullptr, nullptr);
|
||||
auto *R = new (C, DC) CXXRecordDecl(CXXRecord, TTK_Class, C, DC, Loc, Loc,
|
||||
nullptr, nullptr);
|
||||
R->IsBeingDefined = true;
|
||||
R->DefinitionData =
|
||||
new (C) struct LambdaDefinitionData(R, Info, Dependent, IsGeneric,
|
||||
|
@ -155,7 +154,7 @@ CXXRecordDecl::CreateLambda(const ASTContext &C, DeclContext *DC,
|
|||
|
||||
CXXRecordDecl *
|
||||
CXXRecordDecl::CreateDeserialized(const ASTContext &C, unsigned ID) {
|
||||
CXXRecordDecl *R = new (C, ID) CXXRecordDecl(
|
||||
auto *R = new (C, ID) CXXRecordDecl(
|
||||
CXXRecord, TTK_Struct, C, nullptr, SourceLocation(), SourceLocation(),
|
||||
nullptr, nullptr);
|
||||
R->MayHaveOutOfDateDef = false;
|
||||
|
@ -198,8 +197,8 @@ CXXRecordDecl::setBases(CXXBaseSpecifier const * const *Bases,
|
|||
// Skip dependent types; we can't do any checking on them now.
|
||||
if (BaseType->isDependentType())
|
||||
continue;
|
||||
CXXRecordDecl *BaseClassDecl
|
||||
= cast<CXXRecordDecl>(BaseType->getAs<RecordType>()->getDecl());
|
||||
auto *BaseClassDecl =
|
||||
cast<CXXRecordDecl>(BaseType->getAs<RecordType>()->getDecl());
|
||||
|
||||
if (!BaseClassDecl->isEmpty()) {
|
||||
if (!data().Empty) {
|
||||
|
@ -514,7 +513,7 @@ void CXXRecordDecl::addedMember(Decl *D) {
|
|||
if (D->getFriendObjectKind() || D->isInvalidDecl())
|
||||
return;
|
||||
|
||||
FunctionTemplateDecl *FunTmpl = dyn_cast<FunctionTemplateDecl>(D);
|
||||
auto *FunTmpl = dyn_cast<FunctionTemplateDecl>(D);
|
||||
if (FunTmpl)
|
||||
D = FunTmpl->getTemplatedDecl();
|
||||
|
||||
|
@ -522,12 +521,11 @@ void CXXRecordDecl::addedMember(Decl *D) {
|
|||
Decl *DUnderlying = D;
|
||||
if (auto *ND = dyn_cast<NamedDecl>(DUnderlying)) {
|
||||
DUnderlying = ND->getUnderlyingDecl();
|
||||
if (FunctionTemplateDecl *UnderlyingFunTmpl =
|
||||
dyn_cast<FunctionTemplateDecl>(DUnderlying))
|
||||
if (auto *UnderlyingFunTmpl = dyn_cast<FunctionTemplateDecl>(DUnderlying))
|
||||
DUnderlying = UnderlyingFunTmpl->getTemplatedDecl();
|
||||
}
|
||||
|
||||
if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D)) {
|
||||
if (const auto *Method = dyn_cast<CXXMethodDecl>(D)) {
|
||||
if (Method->isVirtual()) {
|
||||
// C++ [dcl.init.aggr]p1:
|
||||
// An aggregate is an array or a class with [...] no virtual functions.
|
||||
|
@ -570,7 +568,7 @@ void CXXRecordDecl::addedMember(Decl *D) {
|
|||
unsigned SMKind = 0;
|
||||
|
||||
// Handle constructors.
|
||||
if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(D)) {
|
||||
if (const auto *Constructor = dyn_cast<CXXConstructorDecl>(D)) {
|
||||
if (!Constructor->isImplicit()) {
|
||||
// Note that we have a user-declared constructor.
|
||||
data().UserDeclaredConstructor = true;
|
||||
|
@ -612,8 +610,7 @@ void CXXRecordDecl::addedMember(Decl *D) {
|
|||
}
|
||||
|
||||
// Handle constructors, including those inherited from base classes.
|
||||
if (CXXConstructorDecl *Constructor =
|
||||
dyn_cast<CXXConstructorDecl>(DUnderlying)) {
|
||||
if (const auto *Constructor = dyn_cast<CXXConstructorDecl>(DUnderlying)) {
|
||||
// Record if we see any constexpr constructors which are neither copy
|
||||
// nor move constructors.
|
||||
// C++1z [basic.types]p10:
|
||||
|
@ -625,7 +622,7 @@ void CXXRecordDecl::addedMember(Decl *D) {
|
|||
}
|
||||
|
||||
// Handle destructors.
|
||||
if (CXXDestructorDecl *DD = dyn_cast<CXXDestructorDecl>(D)) {
|
||||
if (const auto *DD = dyn_cast<CXXDestructorDecl>(D)) {
|
||||
SMKind |= SMF_Destructor;
|
||||
|
||||
if (DD->isUserProvided())
|
||||
|
@ -643,12 +640,12 @@ void CXXRecordDecl::addedMember(Decl *D) {
|
|||
}
|
||||
|
||||
// Handle member functions.
|
||||
if (CXXMethodDecl *Method = dyn_cast<CXXMethodDecl>(D)) {
|
||||
if (const auto *Method = dyn_cast<CXXMethodDecl>(D)) {
|
||||
if (Method->isCopyAssignmentOperator()) {
|
||||
SMKind |= SMF_CopyAssignment;
|
||||
|
||||
const ReferenceType *ParamTy =
|
||||
Method->getParamDecl(0)->getType()->getAs<ReferenceType>();
|
||||
const auto *ParamTy =
|
||||
Method->getParamDecl(0)->getType()->getAs<ReferenceType>();
|
||||
if (!ParamTy || ParamTy->getPointeeType().isConstQualified())
|
||||
data().HasDeclaredCopyAssignmentWithConstParam = true;
|
||||
}
|
||||
|
@ -657,7 +654,7 @@ void CXXRecordDecl::addedMember(Decl *D) {
|
|||
SMKind |= SMF_MoveAssignment;
|
||||
|
||||
// Keep the list of conversion functions up-to-date.
|
||||
if (CXXConversionDecl *Conversion = dyn_cast<CXXConversionDecl>(D)) {
|
||||
if (auto *Conversion = dyn_cast<CXXConversionDecl>(D)) {
|
||||
// FIXME: We use the 'unsafe' accessor for the access specifier here,
|
||||
// because Sema may not have set it yet. That's really just a misdesign
|
||||
// in Sema. However, LLDB *will* have set the access specifier correctly,
|
||||
|
@ -736,7 +733,7 @@ void CXXRecordDecl::addedMember(Decl *D) {
|
|||
}
|
||||
|
||||
// Handle non-static data members.
|
||||
if (FieldDecl *Field = dyn_cast<FieldDecl>(D)) {
|
||||
if (const auto *Field = dyn_cast<FieldDecl>(D)) {
|
||||
// C++ [class.bit]p2:
|
||||
// A declaration for a bit-field that omits the identifier declares an
|
||||
// unnamed bit-field. Unnamed bit-fields are not members and cannot be
|
||||
|
@ -878,8 +875,8 @@ void CXXRecordDecl::addedMember(Decl *D) {
|
|||
if (T->isReferenceType())
|
||||
data().DefaultedMoveAssignmentIsDeleted = true;
|
||||
|
||||
if (const RecordType *RecordTy = T->getAs<RecordType>()) {
|
||||
CXXRecordDecl* FieldRec = cast<CXXRecordDecl>(RecordTy->getDecl());
|
||||
if (const auto *RecordTy = T->getAs<RecordType>()) {
|
||||
auto *FieldRec = cast<CXXRecordDecl>(RecordTy->getDecl());
|
||||
if (FieldRec->getDefinition()) {
|
||||
addedClassSubobject(FieldRec);
|
||||
|
||||
|
@ -1091,7 +1088,7 @@ void CXXRecordDecl::addedMember(Decl *D) {
|
|||
}
|
||||
|
||||
// Handle using declarations of conversion functions.
|
||||
if (UsingShadowDecl *Shadow = dyn_cast<UsingShadowDecl>(D)) {
|
||||
if (auto *Shadow = dyn_cast<UsingShadowDecl>(D)) {
|
||||
if (Shadow->getDeclName().getNameKind()
|
||||
== DeclarationName::CXXConversionFunctionName) {
|
||||
ASTContext &Ctx = getASTContext();
|
||||
|
@ -1099,7 +1096,7 @@ void CXXRecordDecl::addedMember(Decl *D) {
|
|||
}
|
||||
}
|
||||
|
||||
if (UsingDecl *Using = dyn_cast<UsingDecl>(D)) {
|
||||
if (const auto *Using = dyn_cast<UsingDecl>(D)) {
|
||||
if (Using->getDeclName().getNameKind() ==
|
||||
DeclarationName::CXXConstructorName) {
|
||||
data().HasInheritedConstructor = true;
|
||||
|
@ -1119,7 +1116,7 @@ void CXXRecordDecl::finishedDefaultedOrDeletedMember(CXXMethodDecl *D) {
|
|||
// The kind of special member this declaration is, if any.
|
||||
unsigned SMKind = 0;
|
||||
|
||||
if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(D)) {
|
||||
if (const auto *Constructor = dyn_cast<CXXConstructorDecl>(D)) {
|
||||
if (Constructor->isDefaultConstructor()) {
|
||||
SMKind |= SMF_DefaultConstructor;
|
||||
if (Constructor->isConstexpr())
|
||||
|
@ -1152,7 +1149,7 @@ void CXXRecordDecl::finishedDefaultedOrDeletedMember(CXXMethodDecl *D) {
|
|||
void CXXRecordDecl::setTrivialForCallFlags(CXXMethodDecl *D) {
|
||||
unsigned SMKind = 0;
|
||||
|
||||
if (CXXConstructorDecl *Constructor = dyn_cast<CXXConstructorDecl>(D)) {
|
||||
if (const auto *Constructor = dyn_cast<CXXConstructorDecl>(D)) {
|
||||
if (Constructor->isCopyConstructor())
|
||||
SMKind = SMF_CopyConstructor;
|
||||
else if (Constructor->isMoveConstructor())
|
||||
|
@ -1191,8 +1188,7 @@ CXXMethodDecl* CXXRecordDecl::getLambdaCallOperator() const {
|
|||
assert(Calls.size() == 1 && "More than one lambda call operator!");
|
||||
|
||||
NamedDecl *CallOp = Calls.front();
|
||||
if (FunctionTemplateDecl *CallOpTmpl =
|
||||
dyn_cast<FunctionTemplateDecl>(CallOp))
|
||||
if (const auto *CallOpTmpl = dyn_cast<FunctionTemplateDecl>(CallOp))
|
||||
return cast<CXXMethodDecl>(CallOpTmpl->getTemplatedDecl());
|
||||
|
||||
return cast<CXXMethodDecl>(CallOp);
|
||||
|
@ -1206,8 +1202,7 @@ CXXMethodDecl* CXXRecordDecl::getLambdaStaticInvoker() const {
|
|||
if (Invoker.empty()) return nullptr;
|
||||
assert(Invoker.size() == 1 && "More than one static invoker operator!");
|
||||
NamedDecl *InvokerFun = Invoker.front();
|
||||
if (FunctionTemplateDecl *InvokerTemplate =
|
||||
dyn_cast<FunctionTemplateDecl>(InvokerFun))
|
||||
if (const auto *InvokerTemplate = dyn_cast<FunctionTemplateDecl>(InvokerFun))
|
||||
return cast<CXXMethodDecl>(InvokerTemplate->getTemplatedDecl());
|
||||
|
||||
return cast<CXXMethodDecl>(InvokerFun);
|
||||
|
@ -1320,7 +1315,7 @@ static void CollectVisibleConversions(ASTContext &Context,
|
|||
= CXXRecordDecl::MergeAccess(Access, I.getAccessSpecifier());
|
||||
bool BaseInVirtual = InVirtual || I.isVirtual();
|
||||
|
||||
CXXRecordDecl *Base = cast<CXXRecordDecl>(RT->getDecl());
|
||||
auto *Base = cast<CXXRecordDecl>(RT->getDecl());
|
||||
CollectVisibleConversions(Context, Base, BaseInVirtual, BaseAccess,
|
||||
*HiddenTypes, Output, VOutput, HiddenVBaseCs);
|
||||
}
|
||||
|
@ -1447,8 +1442,7 @@ void CXXRecordDecl::setDescribedClassTemplate(ClassTemplateDecl *Template) {
|
|||
}
|
||||
|
||||
TemplateSpecializationKind CXXRecordDecl::getTemplateSpecializationKind() const{
|
||||
if (const ClassTemplateSpecializationDecl *Spec
|
||||
= dyn_cast<ClassTemplateSpecializationDecl>(this))
|
||||
if (const auto *Spec = dyn_cast<ClassTemplateSpecializationDecl>(this))
|
||||
return Spec->getSpecializationKind();
|
||||
|
||||
if (MemberSpecializationInfo *MSInfo = getMemberSpecializationInfo())
|
||||
|
@ -1459,8 +1453,7 @@ TemplateSpecializationKind CXXRecordDecl::getTemplateSpecializationKind() const{
|
|||
|
||||
void
|
||||
CXXRecordDecl::setTemplateSpecializationKind(TemplateSpecializationKind TSK) {
|
||||
if (ClassTemplateSpecializationDecl *Spec
|
||||
= dyn_cast<ClassTemplateSpecializationDecl>(this)) {
|
||||
if (auto *Spec = dyn_cast<ClassTemplateSpecializationDecl>(this)) {
|
||||
Spec->setSpecializationKind(TSK);
|
||||
return;
|
||||
}
|
||||
|
@ -1665,8 +1658,8 @@ bool CXXRecordDecl::mayBeAbstract() const {
|
|||
return false;
|
||||
|
||||
for (const auto &B : bases()) {
|
||||
CXXRecordDecl *BaseDecl
|
||||
= cast<CXXRecordDecl>(B.getType()->getAs<RecordType>()->getDecl());
|
||||
const auto *BaseDecl =
|
||||
cast<CXXRecordDecl>(B.getType()->getAs<RecordType>()->getDecl());
|
||||
if (BaseDecl->isAbstract())
|
||||
return true;
|
||||
}
|
||||
|
@ -1733,7 +1726,7 @@ CXXMethodDecl::getCorrespondingMethodInClass(const CXXRecordDecl *RD,
|
|||
}
|
||||
|
||||
for (auto *ND : RD->lookup(getDeclName())) {
|
||||
CXXMethodDecl *MD = dyn_cast<CXXMethodDecl>(ND);
|
||||
auto *MD = dyn_cast<CXXMethodDecl>(ND);
|
||||
if (!MD)
|
||||
continue;
|
||||
if (recursivelyOverrides(MD, this))
|
||||
|
@ -1746,7 +1739,7 @@ CXXMethodDecl::getCorrespondingMethodInClass(const CXXRecordDecl *RD,
|
|||
const RecordType *RT = I.getType()->getAs<RecordType>();
|
||||
if (!RT)
|
||||
continue;
|
||||
const CXXRecordDecl *Base = cast<CXXRecordDecl>(RT->getDecl());
|
||||
const auto *Base = cast<CXXRecordDecl>(RT->getDecl());
|
||||
CXXMethodDecl *T = this->getCorrespondingMethodInClass(Base);
|
||||
if (T)
|
||||
return T;
|
||||
|
@ -1821,8 +1814,8 @@ CXXMethodDecl *CXXMethodDecl::getDevirtualizedMethod(const Expr *Base,
|
|||
if (BestDynamicDecl->hasAttr<FinalAttr>())
|
||||
return DevirtualizedMethod;
|
||||
|
||||
if (const DeclRefExpr *DRE = dyn_cast<DeclRefExpr>(Base)) {
|
||||
if (const VarDecl *VD = dyn_cast<VarDecl>(DRE->getDecl()))
|
||||
if (const auto *DRE = dyn_cast<DeclRefExpr>(Base)) {
|
||||
if (const auto *VD = dyn_cast<VarDecl>(DRE->getDecl()))
|
||||
if (VD->getType()->isRecordType())
|
||||
// This is a record decl. We know the type and can devirtualize it.
|
||||
return DevirtualizedMethod;
|
||||
|
@ -1833,7 +1826,7 @@ CXXMethodDecl *CXXMethodDecl::getDevirtualizedMethod(const Expr *Base,
|
|||
// We can devirtualize calls on an object accessed by a class member access
|
||||
// expression, since by C++11 [basic.life]p6 we know that it can't refer to
|
||||
// a derived class object constructed in the same location.
|
||||
if (const MemberExpr *ME = dyn_cast<MemberExpr>(Base)) {
|
||||
if (const auto *ME = dyn_cast<MemberExpr>(Base)) {
|
||||
const ValueDecl *VD = ME->getMemberDecl();
|
||||
return VD->getType()->isRecordType() ? DevirtualizedMethod : nullptr;
|
||||
}
|
||||
|
@ -1912,7 +1905,7 @@ bool CXXMethodDecl::isUsualDeallocationFunction() const {
|
|||
DeclContext::lookup_result R = getDeclContext()->lookup(getDeclName());
|
||||
for (DeclContext::lookup_result::iterator I = R.begin(), E = R.end();
|
||||
I != E; ++I) {
|
||||
if (const FunctionDecl *FD = dyn_cast<FunctionDecl>(*I))
|
||||
if (const auto *FD = dyn_cast<FunctionDecl>(*I))
|
||||
if (FD->getNumParams() == 1)
|
||||
return false;
|
||||
}
|
||||
|
@ -1932,7 +1925,7 @@ bool CXXMethodDecl::isCopyAssignmentOperator() const {
|
|||
return false;
|
||||
|
||||
QualType ParamType = getParamDecl(0)->getType();
|
||||
if (const LValueReferenceType *Ref = ParamType->getAs<LValueReferenceType>())
|
||||
if (const auto *Ref = ParamType->getAs<LValueReferenceType>())
|
||||
ParamType = Ref->getPointeeType();
|
||||
|
||||
ASTContext &Context = getASTContext();
|
||||
|
@ -2070,7 +2063,7 @@ TypeLoc CXXCtorInitializer::getBaseClassLoc() const {
|
|||
if (isBaseInitializer())
|
||||
return Initializee.get<TypeSourceInfo*>()->getTypeLoc();
|
||||
else
|
||||
return TypeLoc();
|
||||
return {};
|
||||
}
|
||||
|
||||
const Type *CXXCtorInitializer::getBaseClass() const {
|
||||
|
@ -2087,10 +2080,10 @@ SourceLocation CXXCtorInitializer::getSourceLocation() const {
|
|||
if (isAnyMemberInitializer())
|
||||
return getMemberLocation();
|
||||
|
||||
if (TypeSourceInfo *TSInfo = Initializee.get<TypeSourceInfo*>())
|
||||
if (const auto *TSInfo = Initializee.get<TypeSourceInfo *>())
|
||||
return TSInfo->getTypeLoc().getLocalSourceRange().getBegin();
|
||||
|
||||
return SourceLocation();
|
||||
return {};
|
||||
}
|
||||
|
||||
SourceRange CXXCtorInitializer::getSourceRange() const {
|
||||
|
@ -2098,7 +2091,7 @@ SourceRange CXXCtorInitializer::getSourceRange() const {
|
|||
FieldDecl *D = getAnyMember();
|
||||
if (Expr *I = D->getInClassInitializer())
|
||||
return I->getSourceRange();
|
||||
return SourceRange();
|
||||
return {};
|
||||
}
|
||||
|
||||
return SourceRange(getSourceLocation(), getRParenLoc());
|
||||
|
@ -2142,7 +2135,7 @@ CXXConstructorDecl::init_const_iterator CXXConstructorDecl::init_begin() const {
|
|||
CXXConstructorDecl *CXXConstructorDecl::getTargetConstructor() const {
|
||||
assert(isDelegatingConstructor() && "Not a delegating constructor!");
|
||||
Expr *E = (*init_begin())->getInit()->IgnoreImplicit();
|
||||
if (CXXConstructExpr *Construct = dyn_cast<CXXConstructExpr>(E))
|
||||
if (const auto *Construct = dyn_cast<CXXConstructExpr>(E))
|
||||
return Construct->getConstructor();
|
||||
|
||||
return nullptr;
|
||||
|
@ -2188,7 +2181,7 @@ bool CXXConstructorDecl::isCopyOrMoveConstructor(unsigned &TypeQuals) const {
|
|||
const ParmVarDecl *Param = getParamDecl(0);
|
||||
|
||||
// Do we have a reference type?
|
||||
const ReferenceType *ParamRefType = Param->getType()->getAs<ReferenceType>();
|
||||
const auto *ParamRefType = Param->getType()->getAs<ReferenceType>();
|
||||
if (!ParamRefType)
|
||||
return false;
|
||||
|
||||
|
@ -2335,7 +2328,7 @@ UsingDirectiveDecl *UsingDirectiveDecl::Create(ASTContext &C, DeclContext *DC,
|
|||
SourceLocation IdentLoc,
|
||||
NamedDecl *Used,
|
||||
DeclContext *CommonAncestor) {
|
||||
if (NamespaceDecl *NS = dyn_cast_or_null<NamespaceDecl>(Used))
|
||||
if (auto *NS = dyn_cast_or_null<NamespaceDecl>(Used))
|
||||
Used = NS->getOriginalNamespace();
|
||||
return new (C, DC) UsingDirectiveDecl(DC, L, NamespaceLoc, QualifierLoc,
|
||||
IdentLoc, Used, CommonAncestor);
|
||||
|
@ -2350,8 +2343,7 @@ UsingDirectiveDecl *UsingDirectiveDecl::CreateDeserialized(ASTContext &C,
|
|||
}
|
||||
|
||||
NamespaceDecl *UsingDirectiveDecl::getNominatedNamespace() {
|
||||
if (NamespaceAliasDecl *NA =
|
||||
dyn_cast_or_null<NamespaceAliasDecl>(NominatedNamespace))
|
||||
if (auto *NA = dyn_cast_or_null<NamespaceAliasDecl>(NominatedNamespace))
|
||||
return NA->getNamespace();
|
||||
return cast_or_null<NamespaceDecl>(NominatedNamespace);
|
||||
}
|
||||
|
@ -2431,7 +2423,7 @@ NamespaceAliasDecl *NamespaceAliasDecl::Create(ASTContext &C, DeclContext *DC,
|
|||
SourceLocation IdentLoc,
|
||||
NamedDecl *Namespace) {
|
||||
// FIXME: Preserve the aliased namespace as written.
|
||||
if (NamespaceDecl *NS = dyn_cast_or_null<NamespaceDecl>(Namespace))
|
||||
if (auto *NS = dyn_cast_or_null<NamespaceDecl>(Namespace))
|
||||
Namespace = NS->getOriginalNamespace();
|
||||
return new (C, DC) NamespaceAliasDecl(C, DC, UsingLoc, AliasLoc, Alias,
|
||||
QualifierLoc, IdentLoc, Namespace);
|
||||
|
@ -2451,8 +2443,7 @@ UsingShadowDecl::UsingShadowDecl(Kind K, ASTContext &C, DeclContext *DC,
|
|||
SourceLocation Loc, UsingDecl *Using,
|
||||
NamedDecl *Target)
|
||||
: NamedDecl(K, DC, Loc, Using ? Using->getDeclName() : DeclarationName()),
|
||||
redeclarable_base(C), Underlying(),
|
||||
UsingOrNextShadow(cast<NamedDecl>(Using)) {
|
||||
redeclarable_base(C), UsingOrNextShadow(cast<NamedDecl>(Using)) {
|
||||
if (Target)
|
||||
setTargetDecl(Target);
|
||||
setImplicit();
|
||||
|
@ -2469,8 +2460,8 @@ UsingShadowDecl::CreateDeserialized(ASTContext &C, unsigned ID) {
|
|||
|
||||
UsingDecl *UsingShadowDecl::getUsingDecl() const {
|
||||
const UsingShadowDecl *Shadow = this;
|
||||
while (const UsingShadowDecl *NextShadow =
|
||||
dyn_cast<UsingShadowDecl>(Shadow->UsingOrNextShadow))
|
||||
while (const auto *NextShadow =
|
||||
dyn_cast<UsingShadowDecl>(Shadow->UsingOrNextShadow))
|
||||
Shadow = NextShadow;
|
||||
return cast<UsingDecl>(Shadow->UsingOrNextShadow);
|
||||
}
|
||||
|
@ -2689,7 +2680,7 @@ DecompositionDecl *DecompositionDecl::CreateDeserialized(ASTContext &C,
|
|||
void DecompositionDecl::printName(llvm::raw_ostream &os) const {
|
||||
os << '[';
|
||||
bool Comma = false;
|
||||
for (auto *B : bindings()) {
|
||||
for (const auto *B : bindings()) {
|
||||
if (Comma)
|
||||
os << ", ";
|
||||
B->printName(os);
|
||||
|
|
|
@ -39,7 +39,7 @@ FriendDecl *FriendDecl::Create(ASTContext &C, DeclContext *DC,
|
|||
ArrayRef<TemplateParameterList *> FriendTypeTPLists) {
|
||||
#ifndef NDEBUG
|
||||
if (Friend.is<NamedDecl *>()) {
|
||||
NamedDecl *D = Friend.get<NamedDecl*>();
|
||||
const auto *D = Friend.get<NamedDecl*>();
|
||||
assert(isa<FunctionDecl>(D) ||
|
||||
isa<CXXRecordDecl>(D) ||
|
||||
isa<FunctionTemplateDecl>(D) ||
|
||||
|
@ -57,8 +57,8 @@ FriendDecl *FriendDecl::Create(ASTContext &C, DeclContext *DC,
|
|||
std::size_t Extra =
|
||||
FriendDecl::additionalSizeToAlloc<TemplateParameterList *>(
|
||||
FriendTypeTPLists.size());
|
||||
FriendDecl *FD = new (C, DC, Extra) FriendDecl(DC, L, Friend, FriendL,
|
||||
FriendTypeTPLists);
|
||||
auto *FD = new (C, DC, Extra) FriendDecl(DC, L, Friend, FriendL,
|
||||
FriendTypeTPLists);
|
||||
cast<CXXRecordDecl>(DC)->pushFriendDecl(FD);
|
||||
return FD;
|
||||
}
|
||||
|
|
|
@ -11,14 +11,15 @@
|
|||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "clang/AST/Stmt.h"
|
||||
#include "clang/AST/ASTContext.h"
|
||||
#include "clang/AST/ASTDiagnostic.h"
|
||||
#include "clang/AST/Decl.h"
|
||||
#include "clang/AST/DeclGroup.h"
|
||||
#include "clang/AST/Expr.h"
|
||||
#include "clang/AST/ExprCXX.h"
|
||||
#include "clang/AST/ExprObjC.h"
|
||||
#include "clang/AST/ExprOpenMP.h"
|
||||
#include "clang/AST/Stmt.h"
|
||||
#include "clang/AST/StmtCXX.h"
|
||||
#include "clang/AST/StmtObjC.h"
|
||||
#include "clang/AST/StmtOpenMP.h"
|
||||
|
@ -154,11 +155,11 @@ Stmt *Stmt::IgnoreContainers(bool IgnoreCaptured) {
|
|||
const Stmt *Stmt::stripLabelLikeStatements() const {
|
||||
const Stmt *S = this;
|
||||
while (true) {
|
||||
if (const LabelStmt *LS = dyn_cast<LabelStmt>(S))
|
||||
if (const auto *LS = dyn_cast<LabelStmt>(S))
|
||||
S = LS->getSubStmt();
|
||||
else if (const SwitchCase *SC = dyn_cast<SwitchCase>(S))
|
||||
else if (const auto *SC = dyn_cast<SwitchCase>(S))
|
||||
S = SC->getSubStmt();
|
||||
else if (const AttributedStmt *AS = dyn_cast<AttributedStmt>(S))
|
||||
else if (const auto *AS = dyn_cast<AttributedStmt>(S))
|
||||
S = AS->getSubStmt();
|
||||
else
|
||||
return S;
|
||||
|
@ -173,14 +174,14 @@ namespace {
|
|||
// These silly little functions have to be static inline to suppress
|
||||
// unused warnings, and they have to be defined to suppress other
|
||||
// warnings.
|
||||
static inline good is_good(good) { return good(); }
|
||||
static good is_good(good) { return good(); }
|
||||
|
||||
typedef Stmt::child_range children_t();
|
||||
template <class T> good implements_children(children_t T::*) {
|
||||
return good();
|
||||
}
|
||||
LLVM_ATTRIBUTE_UNUSED
|
||||
static inline bad implements_children(children_t Stmt::*) {
|
||||
static bad implements_children(children_t Stmt::*) {
|
||||
return bad();
|
||||
}
|
||||
|
||||
|
@ -189,7 +190,7 @@ namespace {
|
|||
return good();
|
||||
}
|
||||
LLVM_ATTRIBUTE_UNUSED
|
||||
static inline bad implements_getLocStart(getLocStart_t Stmt::*) {
|
||||
static bad implements_getLocStart(getLocStart_t Stmt::*) {
|
||||
return bad();
|
||||
}
|
||||
|
||||
|
@ -198,7 +199,7 @@ namespace {
|
|||
return good();
|
||||
}
|
||||
LLVM_ATTRIBUTE_UNUSED
|
||||
static inline bad implements_getLocEnd(getLocEnd_t Stmt::*) {
|
||||
static bad implements_getLocEnd(getLocEnd_t Stmt::*) {
|
||||
return bad();
|
||||
}
|
||||
|
||||
|
@ -351,49 +352,49 @@ AttributedStmt *AttributedStmt::CreateEmpty(const ASTContext &C,
|
|||
}
|
||||
|
||||
std::string AsmStmt::generateAsmString(const ASTContext &C) const {
|
||||
if (const GCCAsmStmt *gccAsmStmt = dyn_cast<GCCAsmStmt>(this))
|
||||
if (const auto *gccAsmStmt = dyn_cast<GCCAsmStmt>(this))
|
||||
return gccAsmStmt->generateAsmString(C);
|
||||
if (const MSAsmStmt *msAsmStmt = dyn_cast<MSAsmStmt>(this))
|
||||
if (const auto *msAsmStmt = dyn_cast<MSAsmStmt>(this))
|
||||
return msAsmStmt->generateAsmString(C);
|
||||
llvm_unreachable("unknown asm statement kind!");
|
||||
}
|
||||
|
||||
StringRef AsmStmt::getOutputConstraint(unsigned i) const {
|
||||
if (const GCCAsmStmt *gccAsmStmt = dyn_cast<GCCAsmStmt>(this))
|
||||
if (const auto *gccAsmStmt = dyn_cast<GCCAsmStmt>(this))
|
||||
return gccAsmStmt->getOutputConstraint(i);
|
||||
if (const MSAsmStmt *msAsmStmt = dyn_cast<MSAsmStmt>(this))
|
||||
if (const auto *msAsmStmt = dyn_cast<MSAsmStmt>(this))
|
||||
return msAsmStmt->getOutputConstraint(i);
|
||||
llvm_unreachable("unknown asm statement kind!");
|
||||
}
|
||||
|
||||
const Expr *AsmStmt::getOutputExpr(unsigned i) const {
|
||||
if (const GCCAsmStmt *gccAsmStmt = dyn_cast<GCCAsmStmt>(this))
|
||||
if (const auto *gccAsmStmt = dyn_cast<GCCAsmStmt>(this))
|
||||
return gccAsmStmt->getOutputExpr(i);
|
||||
if (const MSAsmStmt *msAsmStmt = dyn_cast<MSAsmStmt>(this))
|
||||
if (const auto *msAsmStmt = dyn_cast<MSAsmStmt>(this))
|
||||
return msAsmStmt->getOutputExpr(i);
|
||||
llvm_unreachable("unknown asm statement kind!");
|
||||
}
|
||||
|
||||
StringRef AsmStmt::getInputConstraint(unsigned i) const {
|
||||
if (const GCCAsmStmt *gccAsmStmt = dyn_cast<GCCAsmStmt>(this))
|
||||
if (const auto *gccAsmStmt = dyn_cast<GCCAsmStmt>(this))
|
||||
return gccAsmStmt->getInputConstraint(i);
|
||||
if (const MSAsmStmt *msAsmStmt = dyn_cast<MSAsmStmt>(this))
|
||||
if (const auto *msAsmStmt = dyn_cast<MSAsmStmt>(this))
|
||||
return msAsmStmt->getInputConstraint(i);
|
||||
llvm_unreachable("unknown asm statement kind!");
|
||||
}
|
||||
|
||||
const Expr *AsmStmt::getInputExpr(unsigned i) const {
|
||||
if (const GCCAsmStmt *gccAsmStmt = dyn_cast<GCCAsmStmt>(this))
|
||||
if (const auto *gccAsmStmt = dyn_cast<GCCAsmStmt>(this))
|
||||
return gccAsmStmt->getInputExpr(i);
|
||||
if (const MSAsmStmt *msAsmStmt = dyn_cast<MSAsmStmt>(this))
|
||||
if (const auto *msAsmStmt = dyn_cast<MSAsmStmt>(this))
|
||||
return msAsmStmt->getInputExpr(i);
|
||||
llvm_unreachable("unknown asm statement kind!");
|
||||
}
|
||||
|
||||
StringRef AsmStmt::getClobber(unsigned i) const {
|
||||
if (const GCCAsmStmt *gccAsmStmt = dyn_cast<GCCAsmStmt>(this))
|
||||
if (const auto *gccAsmStmt = dyn_cast<GCCAsmStmt>(this))
|
||||
return gccAsmStmt->getClobber(i);
|
||||
if (const MSAsmStmt *msAsmStmt = dyn_cast<MSAsmStmt>(this))
|
||||
if (const auto *msAsmStmt = dyn_cast<MSAsmStmt>(this))
|
||||
return msAsmStmt->getClobber(i);
|
||||
llvm_unreachable("unknown asm statement kind!");
|
||||
}
|
||||
|
@ -681,14 +682,14 @@ std::string GCCAsmStmt::generateAsmString(const ASTContext &C) const {
|
|||
AnalyzeAsmString(Pieces, C, DiagOffs);
|
||||
|
||||
std::string AsmString;
|
||||
for (unsigned i = 0, e = Pieces.size(); i != e; ++i) {
|
||||
if (Pieces[i].isString())
|
||||
AsmString += Pieces[i].getString();
|
||||
else if (Pieces[i].getModifier() == '\0')
|
||||
AsmString += '$' + llvm::utostr(Pieces[i].getOperandNo());
|
||||
for (const auto &Piece : Pieces) {
|
||||
if (Piece.isString())
|
||||
AsmString += Piece.getString();
|
||||
else if (Piece.getModifier() == '\0')
|
||||
AsmString += '$' + llvm::utostr(Piece.getOperandNo());
|
||||
else
|
||||
AsmString += "${" + llvm::utostr(Pieces[i].getOperandNo()) + ':' +
|
||||
Pieces[i].getModifier() + '}';
|
||||
AsmString += "${" + llvm::utostr(Piece.getOperandNo()) + ':' +
|
||||
Piece.getModifier() + '}';
|
||||
}
|
||||
return AsmString;
|
||||
}
|
||||
|
@ -804,7 +805,7 @@ VarDecl *IfStmt::getConditionVariable() const {
|
|||
if (!SubExprs[VAR])
|
||||
return nullptr;
|
||||
|
||||
DeclStmt *DS = cast<DeclStmt>(SubExprs[VAR]);
|
||||
auto *DS = cast<DeclStmt>(SubExprs[VAR]);
|
||||
return cast<VarDecl>(DS->getSingleDecl());
|
||||
}
|
||||
|
||||
|
@ -839,7 +840,7 @@ VarDecl *ForStmt::getConditionVariable() const {
|
|||
if (!SubExprs[CONDVAR])
|
||||
return nullptr;
|
||||
|
||||
DeclStmt *DS = cast<DeclStmt>(SubExprs[CONDVAR]);
|
||||
auto *DS = cast<DeclStmt>(SubExprs[CONDVAR]);
|
||||
return cast<VarDecl>(DS->getSingleDecl());
|
||||
}
|
||||
|
||||
|
@ -867,7 +868,7 @@ VarDecl *SwitchStmt::getConditionVariable() const {
|
|||
if (!SubExprs[VAR])
|
||||
return nullptr;
|
||||
|
||||
DeclStmt *DS = cast<DeclStmt>(SubExprs[VAR]);
|
||||
auto *DS = cast<DeclStmt>(SubExprs[VAR]);
|
||||
return cast<VarDecl>(DS->getSingleDecl());
|
||||
}
|
||||
|
||||
|
@ -901,7 +902,7 @@ VarDecl *WhileStmt::getConditionVariable() const {
|
|||
if (!SubExprs[VAR])
|
||||
return nullptr;
|
||||
|
||||
DeclStmt *DS = cast<DeclStmt>(SubExprs[VAR]);
|
||||
auto *DS = cast<DeclStmt>(SubExprs[VAR]);
|
||||
return cast<VarDecl>(DS->getSingleDecl());
|
||||
}
|
||||
|
||||
|
@ -918,8 +919,7 @@ void WhileStmt::setConditionVariable(const ASTContext &C, VarDecl *V) {
|
|||
|
||||
// IndirectGotoStmt
|
||||
LabelDecl *IndirectGotoStmt::getConstantTarget() {
|
||||
if (AddrLabelExpr *E =
|
||||
dyn_cast<AddrLabelExpr>(getTarget()->IgnoreParenImpCasts()))
|
||||
if (auto *E = dyn_cast<AddrLabelExpr>(getTarget()->IgnoreParenImpCasts()))
|
||||
return E->getLabel();
|
||||
return nullptr;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue