[cfe-commits] r46471 - /cfe/trunk/Analysis/GRConstants.cpp

Bill Wendling isanbard at gmail.com
Mon Jan 28 15:56:12 PST 2008


On Jan 28, 2008 2:51 PM, Ted Kremenek <kremenek at apple.com> wrote:
> Author: kremenek
> Date: Mon Jan 28 16:51:57 2008
> New Revision: 46471
>
> URL: http://llvm.org/viewvc/llvm-project?rev=46471&view=rev
> Log:
> Added RValue class "UninitializedValue".
>
> Modified:
>     cfe/trunk/Analysis/GRConstants.cpp
>
> Modified: cfe/trunk/Analysis/GRConstants.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Analysis/GRConstants.cpp?rev=46471&r1=46470&r2=46471&view=diff
>
> ==============================================================================
> --- cfe/trunk/Analysis/GRConstants.cpp (original)
> +++ cfe/trunk/Analysis/GRConstants.cpp Mon Jan 28 16:51:57 2008
> @@ -203,8 +203,8 @@
>
>  class VISIBILITY_HIDDEN RValue {
>  public:
> -  enum BaseKind { InvalidKind=0x0, LValueKind=0x1, NonLValueKind=0x2,
> -                  BaseFlags = 0x3 };
> +  enum BaseKind { LValueKind=0x0, NonLValueKind=0x1,
> +                  UninitializedKind=0x2, InvalidKind=0x3, BaseFlags = 0x3 };
>
Did you mean to assign InvalidKind and BaseFlags the same value?

>  private:
>    void* Data;
> @@ -215,8 +215,8 @@
>      : Data(const_cast<void*>(d)),
>        Kind((isLValue ? LValueKind : NonLValueKind) | (ValKind << 2)) {}
>
> -  explicit RValue()
> -    : Data(0), Kind(InvalidKind) {}
> +  explicit RValue(BaseKind k)
> +    : Data(0), Kind(k) {}
>
>    void* getRawPtr() const {
>      return reinterpret_cast<void*>(Data);
> @@ -252,12 +252,21 @@
>
>  class VISIBILITY_HIDDEN InvalidValue : public RValue {
>  public:
> -  InvalidValue() {}
> +  InvalidValue() : RValue(InvalidKind) {}
>
>    static inline bool classof(const RValue* V) {
>      return V->getBaseKind() == InvalidKind;
>    }
>  };
> +
> +class VISIBILITY_HIDDEN UninitializedValue : public RValue {
> +public:
> +  UninitializedValue() : RValue(UninitializedKind) {}
> +
> +  static inline bool classof(const RValue* V) {
> +    return V->getBaseKind() == UninitializedKind;
> +  }
> +};
>
>  class VISIBILITY_HIDDEN LValue : public RValue {
>  protected:
> @@ -289,7 +298,7 @@
>
>    // Implement isa<T> support.
>    static inline bool classof(const RValue* V) {
> -    return V->getBaseKind() == NonLValueKind;
> +    return V->getBaseKind() >= NonLValueKind;
>    }
>  };
>
> @@ -425,6 +434,9 @@
>  switch (getSubKind()*NumNonLValueKind+RHS.getSubKind()){\
>    RVALUE_DISPATCH_CASE(ConcreteInt,ConcreteInt,Op)\
>    default:\
> +    if (getBaseKind() == UninitializedKind ||\
> +        RHS.getBaseKind() == UninitializedKind)\
> +      return cast<NonLValue>(UninitializedValue());\
>      assert (!isValid() || !RHS.isValid() && "Missing case.");\
>      break;\
>  }\
> @@ -485,6 +497,10 @@
>        assert (false && "FIXME: LValue printing not implemented.");
>        break;
>
> +    case UninitializedKind:
> +      Out << "Uninitialized";
> +      break;
> +
>      default:
>        assert (false && "Invalid RValue.");
>    }
> @@ -866,8 +882,11 @@
>    StateTy St = Pred->getState();
>
>    for (const ScopedDecl* D = DS->getDecl(); D; D = D->getNextDeclarator())
> -    if (const VarDecl* VD = dyn_cast<VarDecl>(D))
> -      St = SetValue(St, LValueDecl(VD), GetValue(St, VD->getInit()));
> +    if (const VarDecl* VD = dyn_cast<VarDecl>(D)) {
> +      const Expr* E = VD->getInit();
> +      St = SetValue(St, LValueDecl(VD),
> +                    E ? GetValue(St, E) : UninitializedValue());
> +    }
>
>    Nodify(Dst, DS, Pred, St);
>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>



More information about the cfe-commits mailing list