]> granicus.if.org Git - clang/commitdiff
Make isWeakDecl available as a method on ValueDecl.
authorLang Hames <lhames@gmail.com>
Mon, 5 Dec 2011 20:16:26 +0000 (20:16 +0000)
committerLang Hames <lhames@gmail.com>
Mon, 5 Dec 2011 20:16:26 +0000 (20:16 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@145845 91177308-0d34-0410-b5e6-96231b3b80d8

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

index 28a01cf04e9e326cf4552689d07fb93d6b31d794..c8120eb361a561d716a715274faa54abac105592 100644 (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; }
index 81fe7e3a4e1b10350968f9225bcf3698b3f40dad..438bef5de8767faf2fc0b736381021bf4ccd11ec 100644 (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();