X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FGlobalValue.h;h=d2d91303707176a9c8048a47420ee13a2a614dd5;hb=a727d5502c8e23c090da658bf14c5ebc1169a070;hp=576fbe6521ac0d679ef61be898b9caa63dccbae9;hpb=1cf55746369af7f1be476cc5c6805806a4bf225d;p=oota-llvm.git diff --git a/include/llvm/GlobalValue.h b/include/llvm/GlobalValue.h index 576fbe6521a..d2d91303707 100644 --- a/include/llvm/GlobalValue.h +++ b/include/llvm/GlobalValue.h @@ -8,9 +8,10 @@ //===----------------------------------------------------------------------===// // // This file is a common base class of all globally definable objects. As such, -// it is subclassed by GlobalVariable and by Function. This is used because you -// can do certain things with these global objects that you can't do to anything -// else. For example, use the address of one as a constant. +// it is subclassed by GlobalVariable, GlobalAlias and by Function. This is +// used because you can do certain things with these global objects that you +// can't do to anything else. For example, use the address of one as a +// constant. // //===----------------------------------------------------------------------===// @@ -29,7 +30,7 @@ class GlobalValue : public Constant { public: /// @brief An enumeration for the kinds of linkage for global values. enum LinkageTypes { - ExternalLinkage, ///< Externally visible function + ExternalLinkage = 0,///< Externally visible function LinkOnceLinkage, ///< Keep one copy of function when linking (inline) WeakLinkage, ///< Keep one copy of named function when linking (weak) AppendingLinkage, ///< Special purpose, only applies to global arrays @@ -42,8 +43,9 @@ public: /// @brief An enumeration for the kinds of visibility of global values. enum VisibilityTypes { - DefaultVisibility, ///< The GV is visible - HiddenVisibility ///< The GV is hidden + DefaultVisibility = 0, ///< The GV is visible + HiddenVisibility, ///< The GV is hidden + ProtectedVisibility ///< The GV is protected }; protected: @@ -55,10 +57,12 @@ protected: } Module *Parent; - LinkageTypes Linkage; // The linkage of this global - VisibilityTypes Visibility; // The visibility style of this global - unsigned Alignment; // Alignment of this symbol, must be power of two - std::string Section; // Section to emit this into, empty mean default + // Note: VC++ treats enums as signed, so an extra bit is required to prevent + // Linkage and Visibility from turning into negative values. + LinkageTypes Linkage : 5; // The linkage of this global + unsigned Visibility : 2; // The visibility style of this global + unsigned Alignment : 16; // Alignment of this symbol, must be power of two + std::string Section; // Section to emit this into, empty mean default public: ~GlobalValue() { removeDeadConstantUsers(); // remove any dead constants using this. @@ -70,8 +74,11 @@ public: Alignment = Align; } - VisibilityTypes getVisibility() const { return Visibility; } + VisibilityTypes getVisibility() const { return (VisibilityTypes)Visibility; } bool hasHiddenVisibility() const { return Visibility == HiddenVisibility; } + bool hasProtectedVisibility() const { + return Visibility == ProtectedVisibility; + } void setVisibility(VisibilityTypes V) { Visibility = V; } bool hasSection() const { return !Section.empty(); } @@ -133,8 +140,9 @@ public: // Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const GlobalValue *) { return true; } static inline bool classof(const Value *V) { - return V->getValueType() == Value::FunctionVal || - V->getValueType() == Value::GlobalVariableVal; + return V->getValueID() == Value::FunctionVal || + V->getValueID() == Value::GlobalVariableVal || + V->getValueID() == Value::GlobalAliasVal; } };