Make isWeakDecl available as a method on ValueDecl.

llvm-svn: 145845
This commit is contained in:
Lang Hames 2011-12-05 20:16:26 +00:00
parent 9e90c5cde3
commit d42bb47782
2 changed files with 9 additions and 9 deletions

View File

@ -508,6 +508,12 @@ public:
QualType getType() const { return DeclType; }
void setType(QualType newType) { DeclType = newType; }
/// \brief Determine whether this symbol is weakly-imported,
/// or declared with the weak or weak-ref attr.
bool isWeak() const {
return hasAttr<WeakAttr>() || hasAttr<WeakRefAttr>() || isWeakImported();
}
// Implement isa/cast/dyncast/etc.
static bool classof(const Decl *D) { return classofKind(D->getKind()); }
static bool classof(const ValueDecl *D) { return true; }

View File

@ -580,15 +580,9 @@ static bool IsLiteralLValue(const LValue &Value) {
return Value.Base.dyn_cast<const Expr*>() && !Value.Frame;
}
static bool IsWeakDecl(const ValueDecl *Decl) {
return Decl->hasAttr<WeakAttr>() ||
Decl->hasAttr<WeakRefAttr>() ||
Decl->isWeakImported();
}
static bool IsWeakLValue(const LValue &Value) {
const ValueDecl *Decl = GetLValueBaseDecl(Value);
return Decl && IsWeakDecl(Decl);
return Decl && Decl->isWeak();
}
static bool EvalPointerValueAsBool(const CCValue &Value, bool &Result) {
@ -607,7 +601,7 @@ static bool EvalPointerValueAsBool(const CCValue &Value, bool &Result) {
// a weak declaration it can be null at runtime.
Result = true;
const ValueDecl *Decl = Value.getLValueBase().dyn_cast<const ValueDecl*>();
return !Decl || !IsWeakDecl(Decl);
return !Decl || !Decl->isWeak();
}
static bool HandleConversionToBool(const CCValue &Val, bool &Result) {
@ -866,7 +860,7 @@ static bool EvaluateVarDeclInit(EvalInfo &Info, const VarDecl *VD,
// Never evaluate the initializer of a weak variable. We can't be sure that
// this is the definition which will be used.
if (IsWeakDecl(VD))
if (VD->isWeak())
return false;
const Expr *Init = VD->getAnyInitializer();