In C++, an initializer on a variable doesn't necessarily mean it's the definition. With that in mind, rename getDefinition to getAnyInitializer (to distinguish it from getInit) and reimplement it in terms of isThisDeclarationADefinition. Update all code to use this new function.
llvm-svn: 94999
diff --git a/clang/lib/AST/Decl.cpp b/clang/lib/AST/Decl.cpp
index d75d355..894206a 100644
--- a/clang/lib/AST/Decl.cpp
+++ b/clang/lib/AST/Decl.cpp
@@ -522,10 +522,6 @@
return Definition;
}
-const VarDecl *VarDecl::getActingDefinition() const {
- return const_cast<VarDecl*>(this)->getActingDefinition();
-}
-
VarDecl *VarDecl::getActingDefinition() {
DefinitionKind Kind = isThisDeclarationADefinition();
if (Kind != TentativeDefinition)
@@ -553,16 +549,24 @@
if ((*I)->isThisDeclarationADefinition() == Definition)
return false;
}
- return true;
+ return true;
}
-const Expr *VarDecl::getDefinition(const VarDecl *&Def) const {
+VarDecl *VarDecl::getDefinition() {
+ for (redecl_iterator I = redecls_begin(), E = redecls_end(); I != E; ++I) {
+ if ((*I)->isThisDeclarationADefinition() == Definition)
+ return *I;
+ }
+ return 0;
+}
+
+const Expr *VarDecl::getAnyInitializer(const VarDecl *&D) const {
redecl_iterator I = redecls_begin(), E = redecls_end();
while (I != E && !I->getInit())
++I;
if (I != E) {
- Def = *I;
+ D = *I;
return I->getInit();
}
return 0;