aboutsummaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorAnton Korobeynikov <asl@math.spbu.ru>2007-04-25 16:42:39 +0000
committerAnton Korobeynikov <asl@math.spbu.ru>2007-04-25 16:42:39 +0000
commit7bc428fa6f182f5adf04ff62d72370091f64beeb (patch)
tree222f48cc1b280666c8f313317a3b3684bd910281 /include
parent305b8a5f62c9d027f3d8a870fc12fc2abf69aeea (diff)
downloadexternal_llvm-7bc428fa6f182f5adf04ff62d72370091f64beeb.zip
external_llvm-7bc428fa6f182f5adf04ff62d72370091f64beeb.tar.gz
external_llvm-7bc428fa6f182f5adf04ff62d72370091f64beeb.tar.bz2
Add missed file
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36439 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r--include/llvm/GlobalAlias.h83
1 files changed, 83 insertions, 0 deletions
diff --git a/include/llvm/GlobalAlias.h b/include/llvm/GlobalAlias.h
new file mode 100644
index 0000000..ec6ea77
--- /dev/null
+++ b/include/llvm/GlobalAlias.h
@@ -0,0 +1,83 @@
+//===______-- llvm/GlobalAlias.h - GlobalAlias class ------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file was developed by Anton Korobeynikov and is distributed under
+// the University of Illinois Open Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file contains the declaration of the GlobalAlias class, which
+// represents a single function or variable alias in the VM.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_GLOBAL_ALIAS_H
+#define LLVM_GLOBAL_ALIAS_H
+
+#include "llvm/GlobalValue.h"
+
+namespace llvm {
+
+class Module;
+class Constant;
+class PointerType;
+template<typename ValueSubClass, typename ItemParentClass>
+ class SymbolTableListTraits;
+
+class GlobalAlias : public GlobalValue {
+ friend class SymbolTableListTraits<GlobalAlias, Module>;
+ void operator=(const GlobalAlias &); // Do not implement
+ GlobalAlias(const GlobalAlias &); // Do not implement
+
+ void setParent(Module *parent);
+
+ GlobalAlias *Prev, *Next;
+ void setNext(GlobalAlias *N) { Next = N; }
+ void setPrev(GlobalAlias *N) { Prev = N; }
+
+ const GlobalValue* Aliasee;
+ std::string Target;
+public:
+ /// GlobalAlias ctor - If a parent module is specified, the alias is
+ /// automatically inserted into the end of the specified modules alias list.
+ GlobalAlias(const Type *Ty, LinkageTypes Linkage, const std::string &Name = "",
+ const GlobalValue* Aliasee = 0, Module *Parent = 0);
+
+ /// isDeclaration - Is this global variable lacking an initializer? If so,
+ /// the global variable is defined in some other translation unit, and is thus
+ /// only a declaration here.
+ virtual bool isDeclaration() const;
+
+ /// removeFromParent - This method unlinks 'this' from the containing module,
+ /// but does not delete it.
+ ///
+ virtual void removeFromParent();
+
+ /// eraseFromParent - This method unlinks 'this' from the containing module
+ /// and deletes it.
+ ///
+ virtual void eraseFromParent();
+
+ virtual void print(std::ostream &OS) const;
+ void print(std::ostream *OS) const { if (OS) print(*OS); }
+
+ void setAliasee(const GlobalValue* GV);
+ const GlobalValue* getAliasee() const { return Aliasee; }
+
+ // Methods for support type inquiry through isa, cast, and dyn_cast:
+ static inline bool classof(const GlobalAlias *) { return true; }
+ static inline bool classof(const Value *V) {
+ return V->getValueID() == Value::GlobalAliasVal;
+ }
+private:
+ // getNext/Prev - Return the next or previous alias in the list.
+ GlobalAlias *getNext() { return Next; }
+ const GlobalAlias *getNext() const { return Next; }
+ GlobalAlias *getPrev() { return Prev; }
+ const GlobalAlias *getPrev() const { return Prev; }
+};
+
+} // End llvm namespace
+
+#endif