diff --git a/src/IceELFSection.cpp b/src/IceELFSection.cpp
index 1910e77..fd49e61 100644
--- a/src/IceELFSection.cpp
+++ b/src/IceELFSection.cpp
@@ -55,6 +55,7 @@
   else
     Unique = GlobalSymbols.insert(std::make_pair(Key, NewSymbol)).second;
   assert(Unique);
+  (void)Unique;
 }
 
 void ELFSymbolTableSection::noteUndefinedSym(const IceString &Name,
diff --git a/src/IceGlobalContext.cpp b/src/IceGlobalContext.cpp
index 095f288..2f5269b 100644
--- a/src/IceGlobalContext.cpp
+++ b/src/IceGlobalContext.cpp
@@ -26,12 +26,14 @@
 #include "IceTimerTree.h"
 #include "IceTypes.h"
 
-template <> struct std::hash<Ice::RelocatableTuple> {
-  std::size_t operator()(const Ice::RelocatableTuple &Key) const {
-    return std::hash<Ice::IceString>()(Key.Name) +
-           std::hash<Ice::RelocOffsetT>()(Key.Offset);
+namespace std {
+template <> struct hash<Ice::RelocatableTuple> {
+  size_t operator()(const Ice::RelocatableTuple &Key) const {
+    return hash<Ice::IceString>()(Key.Name) +
+           hash<Ice::RelocOffsetT>()(Key.Offset);
   }
 };
+} // end of namespace std
 
 namespace Ice {
 
diff --git a/src/IceInst.h b/src/IceInst.h
index 16b1b65..15751d3 100644
--- a/src/IceInst.h
+++ b/src/IceInst.h
@@ -128,8 +128,17 @@
   // result in any native instructions, and a target-specific
   // instruction results in a single native instruction.
   virtual uint32_t getEmitInstCount() const { return 0; }
-  virtual void emit(const Cfg *Func) const = 0;
-  virtual void emitIAS(const Cfg *Func) const = 0;
+  // TODO(stichnot): Change Inst back to abstract once the g++ build
+  // issue is fixed.  llvm::ilist<Ice::Inst> doesn't work under g++
+  // because the resize(size_t, Ice::Inst) method is incorrectly
+  // declared and thus doesn't allow the abstract class Ice::Inst.
+  // The method should be declared resize(size_t, const Ice::Inst &).
+  // virtual void emit(const Cfg *Func) const = 0;
+  // virtual void emitIAS(const Cfg *Func) const = 0;
+  virtual void emit(const Cfg *) const {
+    llvm_unreachable("emit on abstract class");
+  }
+  virtual void emitIAS(const Cfg *Func) const { emit(Func); }
   virtual void dump(const Cfg *Func) const;
   virtual void dumpExtras(const Cfg *Func) const;
   void dumpDecorated(const Cfg *Func) const;
@@ -835,11 +844,12 @@
 
 } // end of namespace Ice
 
+namespace llvm {
+
 // Override the default ilist traits so that Inst's private ctor and
 // deleted dtor aren't invoked.
 template <>
-struct llvm::ilist_traits<Ice::Inst>
-    : public llvm::ilist_default_traits<Ice::Inst> {
+struct ilist_traits<Ice::Inst> : public ilist_default_traits<Ice::Inst> {
   Ice::Inst *createSentinel() const {
     return static_cast<Ice::Inst *>(&Sentinel);
   }
@@ -853,4 +863,6 @@
   mutable ilist_half_node<Ice::Inst> Sentinel;
 };
 
+} // end of namespace llvm
+
 #endif // SUBZERO_SRC_ICEINST_H
diff --git a/src/IceOperand.cpp b/src/IceOperand.cpp
index d7ea10b..fc2a7ca 100644
--- a/src/IceOperand.cpp
+++ b/src/IceOperand.cpp
@@ -253,6 +253,7 @@
     assert(FirstOrSingleDefinition);
     return FirstOrSingleDefinition;
   }
+  return NULL;
 }
 
 const Inst *VariableTracking::getSingleDefinition() const {
@@ -265,6 +266,7 @@
     assert(FirstOrSingleDefinition);
     return FirstOrSingleDefinition;
   }
+  return NULL;
 }
 
 void VariablesMetadata::init(MetadataKind TrackingKind) {
diff --git a/src/PNaClTranslator.cpp b/src/PNaClTranslator.cpp
index 3f14ae0..b74de0a 100644
--- a/src/PNaClTranslator.cpp
+++ b/src/PNaClTranslator.cpp
@@ -1681,6 +1681,8 @@
       Cond = Ice::InstIcmp::Sle;
       return true;
     default:
+      // Make sure Cond is always initialized.
+      Cond = static_cast<Ice::InstIcmp::ICond>(0);
       return false;
     }
   }
@@ -1739,6 +1741,8 @@
       Cond = Ice::InstFcmp::True;
       return true;
     default:
+      // Make sure Cond is always initialized.
+      Cond = static_cast<Ice::InstFcmp::FCond>(0);
       return false;
     }
   }
