Get rid of mostly-unused, buggy method.

llvm-svn: 80432
This commit is contained in:
Eli Friedman 2009-08-29 19:09:59 +00:00
parent b83f691931
commit 9ab0319b2b
3 changed files with 3 additions and 46 deletions

View File

@ -257,11 +257,6 @@ public:
/// cast to void*.
bool isNullPointerConstant(ASTContext &Ctx) const;
/// hasGlobalStorage - Return true if this expression has static storage
/// duration. This means that the address of this expression is a link-time
/// constant.
bool hasGlobalStorage() const;
/// isOBJCGCCandidate - Return true if this expression may be used in a read/
/// write barrier.
bool isOBJCGCCandidate(ASTContext &Ctx) const;

View File

@ -926,44 +926,6 @@ Expr::isModifiableLvalue(ASTContext &Ctx, SourceLocation *Loc) const {
return MLV_Valid;
}
/// hasGlobalStorage - Return true if this expression has static storage
/// duration. This means that the address of this expression is a link-time
/// constant.
bool Expr::hasGlobalStorage() const {
switch (getStmtClass()) {
default:
return false;
case BlockExprClass:
return true;
case ParenExprClass:
return cast<ParenExpr>(this)->getSubExpr()->hasGlobalStorage();
case ImplicitCastExprClass:
return cast<ImplicitCastExpr>(this)->getSubExpr()->hasGlobalStorage();
case CompoundLiteralExprClass:
return cast<CompoundLiteralExpr>(this)->isFileScope();
case DeclRefExprClass:
case QualifiedDeclRefExprClass: {
const Decl *D = cast<DeclRefExpr>(this)->getDecl();
if (const VarDecl *VD = dyn_cast<VarDecl>(D))
return VD->hasGlobalStorage();
if (isa<FunctionDecl>(D))
return true;
return false;
}
case MemberExprClass:
case CXXQualifiedMemberExprClass: {
const MemberExpr *M = cast<MemberExpr>(this);
return !M->isArrow() && M->getBase()->hasGlobalStorage();
}
case ArraySubscriptExprClass:
return cast<ArraySubscriptExpr>(this)->getBase()->hasGlobalStorage();
case PredefinedExprClass:
return true;
case CXXDefaultArgExprClass:
return cast<CXXDefaultArgExpr>(this)->getExpr()->hasGlobalStorage();
}
}
/// isOBJCGCCandidate - Check if an expression is objc gc'able.
///
bool Expr::isOBJCGCCandidate(ASTContext &Ctx) const {

View File

@ -187,14 +187,14 @@ static bool EvaluateLValue(const Expr* E, APValue& Result, EvalInfo &Info) {
APValue LValueExprEvaluator::VisitDeclRefExpr(DeclRefExpr *E)
{
if (!E->hasGlobalStorage())
return APValue();
if (isa<FunctionDecl>(E->getDecl())) {
return APValue(E, 0);
} else if (VarDecl* VD = dyn_cast<VarDecl>(E->getDecl())) {
if (!VD->hasGlobalStorage())
return APValue();
if (!VD->getType()->isReferenceType())
return APValue(E, 0);
// FIXME: Check whether VD might be overridden!
if (VD->getInit())
return Visit(VD->getInit());
}