mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2025-02-14 14:56:47 +00:00
Implement isDefined by call to isThisDeclarationADefinition.
Modifies FunctionDecl::isThisDeclarationADefinition so that it covers all the cases checked by FunctionDecl::isDefined. Implements the latter method by call to isThisDeclarationADefinition. This change is a part of the patch D30170. llvm-svn: 304684
This commit is contained in:
parent
3bfba2c569
commit
10673c98bd
@ -1829,14 +1829,15 @@ public:
|
||||
return getBody(Definition);
|
||||
}
|
||||
|
||||
/// isThisDeclarationADefinition - Returns whether this specific
|
||||
/// declaration of the function is also a definition. This does not
|
||||
/// determine whether the function has been defined (e.g., in a
|
||||
/// previous definition); for that information, use isDefined. Note
|
||||
/// that this returns false for a defaulted function unless that function
|
||||
/// has been implicitly defined (possibly as deleted).
|
||||
/// Returns whether this specific declaration of the function is also a
|
||||
/// definition that does not contain uninstantiated body.
|
||||
///
|
||||
/// This does not determine whether the function has been defined (e.g., in a
|
||||
/// previous definition); for that information, use isDefined.
|
||||
///
|
||||
bool isThisDeclarationADefinition() const {
|
||||
return IsDeleted || Body || IsLateTemplateParsed;
|
||||
return IsDeleted || IsDefaulted || Body || IsLateTemplateParsed ||
|
||||
hasDefiningAttr();
|
||||
}
|
||||
|
||||
/// doesThisDeclarationHaveABody - Returns whether this specific
|
||||
|
@ -2534,9 +2534,8 @@ bool FunctionDecl::hasTrivialBody() const
|
||||
|
||||
bool FunctionDecl::isDefined(const FunctionDecl *&Definition) const {
|
||||
for (auto I : redecls()) {
|
||||
if (I->IsDeleted || I->IsDefaulted || I->Body || I->IsLateTemplateParsed ||
|
||||
I->hasDefiningAttr()) {
|
||||
Definition = I->IsDeleted ? I->getCanonicalDecl() : I;
|
||||
if (I->isThisDeclarationADefinition()) {
|
||||
Definition = I;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -136,13 +136,13 @@ struct bad_decls {
|
||||
};
|
||||
|
||||
struct DefaultDelete {
|
||||
DefaultDelete() = default; // expected-note {{previous declaration is here}}
|
||||
DefaultDelete() = default; // expected-note {{previous definition is here}}
|
||||
DefaultDelete() = delete; // expected-error {{constructor cannot be redeclared}}
|
||||
|
||||
~DefaultDelete() = default; // expected-note {{previous declaration is here}}
|
||||
~DefaultDelete() = default; // expected-note {{previous definition is here}}
|
||||
~DefaultDelete() = delete; // expected-error {{destructor cannot be redeclared}}
|
||||
|
||||
DefaultDelete &operator=(const DefaultDelete &) = default; // expected-note {{previous declaration is here}}
|
||||
DefaultDelete &operator=(const DefaultDelete &) = default; // expected-note {{previous definition is here}}
|
||||
DefaultDelete &operator=(const DefaultDelete &) = delete; // expected-error {{class member cannot be redeclared}}
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user