Avoid undefined behavior when vector is empty.
authorRafael Espindola <rafael.espindola@gmail.com>
Thu, 10 Dec 2015 16:35:06 +0000 (16:35 +0000)
committerRafael Espindola <rafael.espindola@gmail.com>
Thu, 10 Dec 2015 16:35:06 +0000 (16:35 +0000)
Found by ubsan.

llvm-svn: 255258

llvm/include/llvm/ADT/SetVector.h
llvm/lib/Linker/LinkModules.cpp

index 3ab202d..bc56357 100644 (file)
@@ -58,6 +58,8 @@ public:
     insert(Start, End);
   }
 
+  ArrayRef<T> getArrayRef() const { return vector_; }
+
   /// \brief Determine if the SetVector is empty or not.
   bool empty() const {
     return vector_.empty();
index 3d3454f..a596697 100644 (file)
@@ -772,8 +772,7 @@ bool ModuleLinker::run() {
       Internalize.insert(GV->getName());
   }
 
-  if (Mover.move(SrcM,
-                 makeArrayRef(&*ValuesToLink.begin(), ValuesToLink.size()),
+  if (Mover.move(SrcM, ValuesToLink.getArrayRef(),
                  [this](GlobalValue &GV, IRMover::ValueAdder Add) {
                    addLazyFor(GV, Add);
                  }))