GCC 3.1 fixes

llvm-svn: 3066
diff --git a/llvm/include/Support/HashExtras.h b/llvm/include/Support/HashExtras.h
index da9e3f5..5887a83 100644
--- a/llvm/include/Support/HashExtras.h
+++ b/llvm/include/Support/HashExtras.h
@@ -14,10 +14,10 @@
 #include <Support/hash_map>
 
 // Cannot specialize hash template from outside of the std namespace.
-namespace std {
+namespace HASH_NAMESPACE {
 
-template <> struct hash<string> {
-  size_t operator()(string const &str) const {
+template <> struct hash<std::string> {
+  size_t operator()(std::string const &str) const {
     return hash<char const *>()(str.c_str());
   }
 };
diff --git a/llvm/include/Support/PostOrderIterator.h b/llvm/include/Support/PostOrderIterator.h
index 29d315e..4f94141 100644
--- a/llvm/include/Support/PostOrderIterator.h
+++ b/llvm/include/Support/PostOrderIterator.h
@@ -10,13 +10,14 @@
 #define LLVM_SUPPORT_POSTORDER_ITERATOR_H
 
 #include "Support/GraphTraits.h"
-#include <iterator>
+#include <Support/iterator>
 #include <stack>
 #include <set>
 
 template<class GraphT, class GT = GraphTraits<GraphT> >
-class po_iterator : public std::forward_iterator<typename GT::NodeType,
-                                                 ptrdiff_t> {
+class po_iterator : public forward_iterator<typename GT::NodeType, ptrdiff_t> {
+  typedef forward_iterator<typename GT::NodeType, ptrdiff_t> super;
+  typedef typename super::pointer pointer;
   typedef typename GT::NodeType          NodeType;
   typedef typename GT::ChildIteratorType ChildItTy;
 
diff --git a/llvm/include/Support/hash_map b/llvm/include/Support/hash_map
index d6a0ac0..af727c4 100644
--- a/llvm/include/Support/hash_map
+++ b/llvm/include/Support/hash_map
@@ -12,9 +12,17 @@
 
 #if __GNUC__ == 3
 #include <ext/hash_map>
-using __gnu_cxx::hash_map;
+#ifndef HASH_NAMESPACE
+#define HASH_NAMESPACE __gnu_cxx
+#endif
 #else
 #include <hash_map>
+#ifndef HASH_NAMESPACE
+#define HASH_NAMESPACE std
 #endif
+#endif
+
+using HASH_NAMESPACE::hash_map;
+using HASH_NAMESPACE::hash;
 
 #endif
diff --git a/llvm/include/Support/hash_set b/llvm/include/Support/hash_set
index 094f892..2214b91 100644
--- a/llvm/include/Support/hash_set
+++ b/llvm/include/Support/hash_set
@@ -11,7 +11,14 @@
 #define SUPPORT_HASHSET_H
 #if __GNUC__==3
 #include <ext/hash_set>
-using __gnu_cxx::hash_set;
+#define HASH_NAMESPACE __gnu_cxx
 #else
 #include <hash_set>
+#define HASH_NAMESPACE std
 #endif
+
+using HASH_NAMESPACE::hash_set;
+using HASH_NAMESPACE::hash;
+
+#endif
+