]> granicus.if.org Git - clang/commitdiff
Get rid of mostly-unused, buggy method.
authorEli Friedman <eli.friedman@gmail.com>
Sat, 29 Aug 2009 19:09:59 +0000 (19:09 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Sat, 29 Aug 2009 19:09:59 +0000 (19:09 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@80432 91177308-0d34-0410-b5e6-96231b3b80d8

include/clang/AST/Expr.h
lib/AST/Expr.cpp
lib/AST/ExprConstant.cpp

index 64ab17982b3843ebb5730c43160c25e10c40ed41..809473bc41755a460e153db42b7582bb114eface 100644 (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;
index 46532cafae64f1952204f71dbddcf13e454e25b3..c890812d91b0ee6cee49ebb0d1a8dbff25c3068f 100644 (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 {
index 2844ab4f36b1927f53107d3cecd1893cfb3de9c0..7d281494d6966f2ae675ce41dbc7c703b882a170 100644 (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());
   }