[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