[llvm-dev] include/llvm/ADT/SmallVector.h:491:7: warning: array subscript 1 is outside array bounds of ‘char [1]’ [-Warray-bounds]

Dimitry Andric via llvm-dev llvm-dev at lists.llvm.org
Sat Sep 5 14:21:32 PDT 2020


FWIW these are all emitted by recent versions of gcc, for SmallVectorImpl::insert(), in llvm/include/llvm/ADT/SmallVector.h:

   513    iterator insert(iterator I, T &&Elt) {
   514      if (I == this->end()) {  // Important special case for empty vector.
   515        this->push_back(::std::move(Elt));
   516        return this->end()-1;
   517      }
   518
   519      assert(I >= this->begin() && "Insertion iterator is out of bounds.");
   520      assert(I <= this->end() && "Inserting past the end of the vector.");
   521
   522      if (this->size() >= this->capacity()) {
   523        size_t EltNo = I-this->begin();
   524        this->grow();
   525        I = this->begin()+EltNo;
   526      }
   527
   528      ::new ((void*) this->end()) T(::std::move(this->back()));
   529      // Push everything else over.
   530      std::move_backward(I, this->end()-1, this->end());
   531      this->set_size(this->size() + 1);
   532
   533      // If we just moved the element we're inserting, be sure to update
   534      // the reference.
   535      T *EltPtr = &Elt;
   536      if (I <= EltPtr && EltPtr < this->end())
-> 537        ++EltPtr;
   538
   539      *I = ::std::move(*EltPtr);
   540      return I;
   541    }

For example:

In file included from /home/dim/src/llvm/llvm-project/llvm/include/llvm/ADT/ArrayRef.h:14,
                 from /home/dim/src/llvm/llvm-project/llvm/include/llvm/IR/DataLayout.h:22,
                 from /home/dim/src/llvm/llvm-project/llvm/lib/IR/DataLayout.cpp:18:
/home/dim/src/llvm/llvm-project/llvm/include/llvm/ADT/SmallVector.h: In member function ‘llvm::Error llvm::DataLayout::setAlignment(llvm::AlignTypeEnum, llvm::Align, llvm::Align, uint32_t)’:
/home/dim/src/llvm/llvm-project/llvm/include/llvm/ADT/SmallVector.h:537:7: warning: array subscript 8 is outside array bounds of ‘llvm::LayoutAlignElem [1]’ [-Warray-bounds]
  537 |       ++EltPtr;
      |       ^~
/home/dim/src/llvm/llvm-project/llvm/lib/IR/DataLayout.cpp:573:68: note: while referencing ‘<anonymous>’
  573 |                                               pref_align, bit_width));
      |                                                                    ^

In file included from /home/dim/src/llvm/llvm-project/llvm/lib/CodeGen/BranchRelaxation.cpp:9:
/home/dim/src/llvm/llvm-project/llvm/include/llvm/ADT/SmallVector.h: In member function ‘llvm::MachineBasicBlock* {anonymous}::BranchRelaxation::createNewBlockAfter(llvm::MachineBasicBlock&)’:
/home/dim/src/llvm/llvm-project/llvm/include/llvm/ADT/SmallVector.h:537:7: warning: array subscript 1 is outside array bounds of ‘{anonymous}::BranchRelaxation::BasicBlockInfo [1]’ [-Warray-bounds]
  537 |       ++EltPtr;
      |       ^~
/home/dim/src/llvm/llvm-project/llvm/lib/CodeGen/BranchRelaxation.cpp:213:75: note: while referencing ‘<anonymous>’
  213 |   BlockInfo.insert(BlockInfo.begin() + NewBB->getNumber(), BasicBlockInfo());
      |                                                                           ^
In file included from /home/dim/src/llvm/llvm-project/llvm/lib/CodeGen/BranchRelaxation.cpp:9:
/home/dim/src/llvm/llvm-project/llvm/include/llvm/ADT/SmallVector.h: In member function ‘virtual bool {anonymous}::BranchRelaxation::runOnMachineFunction(llvm::MachineFunction&)’:
/home/dim/src/llvm/llvm-project/llvm/include/llvm/ADT/SmallVector.h:537:7: warning: array subscript 1 is outside array bounds of ‘{anonymous}::BranchRelaxation::BasicBlockInfo [1]’ [-Warray-bounds]
  537 |       ++EltPtr;
      |       ^~
/home/dim/src/llvm/llvm-project/llvm/lib/CodeGen/BranchRelaxation.cpp:240:75: note: while referencing ‘<anonymous>’
  240 |   BlockInfo.insert(BlockInfo.begin() + NewBB->getNumber(), BasicBlockInfo());
      |                                                                           ^

In file included from /home/dim/src/llvm/llvm-project/llvm/include/llvm/CodeGen/ExecutionDomainFix.h:25,
                 from /home/dim/src/llvm/llvm-project/llvm/lib/CodeGen/ExecutionDomainFix.cpp:9:
/home/dim/src/llvm/llvm-project/llvm/include/llvm/ADT/SmallVector.h: In member function ‘void llvm::ExecutionDomainFix::visitSoftInstr(llvm::MachineInstr*, unsigned int)’:
/home/dim/src/llvm/llvm-project/llvm/include/llvm/ADT/SmallVector.h:566:7: warning: array subscript 1 is outside array bounds of ‘int [1]’ [-Warray-bounds]
  566 |       ++EltPtr;
      |       ^~
/home/dim/src/llvm/llvm-project/llvm/lib/CodeGen/ExecutionDomainFix.cpp:330:12: note: while referencing ‘rx’
  330 |   for (int rx : used) {
      |            ^~

In file included from /home/dim/src/llvm/llvm-project/llvm/include/llvm/ADT/SmallSet.h:18,
                 from /home/dim/src/llvm/llvm-project/llvm/lib/CodeGen/ReachingDefAnalysis.cpp:9:
/home/dim/src/llvm/llvm-project/llvm/include/llvm/ADT/SmallVector.h: In member function ‘void llvm::ReachingDefAnalysis::reprocessBasicBlock(llvm::MachineBasicBlock*)’:
/home/dim/src/llvm/llvm-project/llvm/include/llvm/ADT/SmallVector.h:566:7: warning: array subscript 1 is outside array bounds of ‘const llvm::ReachingDef [1]’ [-Warray-bounds]
  566 |       ++EltPtr;
      |       ^~
/home/dim/src/llvm/llvm-project/llvm/lib/CodeGen/ReachingDefAnalysis.cpp:174:59: note: while referencing ‘<anonymous>’
  174 |         MBBReachingDefs[MBBNumber][Unit].insert(Start, Def);
      |                                                           ^

I think these are all false positives, but maybe somebody with more knowledge about SmallVectorImpl internals can comment. :)

-Dimitry

> On 5 Sep 2020, at 13:50, Luke A. Guest via llvm-dev <llvm-dev at lists.llvm.org> wrote:
> 
> Hi,
> 
> Built llvm/clang 10.0.1 on Gentoo today and got the folowing error
> building clang:
> 
> *   LLVM_BUILD_TESTS
> 
> * QA Notice: Package triggers severe warnings which indicate that it
> *            may exhibit random runtime failures.
> * /usr/lib/llvm/10/include/llvm/ADT/SmallVector.h:491:7: warning: array
> subscript 1 is outside array bounds of ‘char [1]’ [-Warray-bounds]
> * /usr/lib/llvm/10/include/llvm/ADT/SmallVector.h:491:7: warning: array
> subscript 1 is outside array bounds of ‘clang::CanQualType [1]’ {aka
> ‘clang::CanQual<clang::Type> [1]’} [-Warray-bounds]
> * /usr/lib/llvm/10/include/llvm/ADT/SmallVector.h:491:7: warning: array
> subscript 1 is outside array bounds of ‘char [1]’ [-Warray-bounds]
> * /usr/lib/llvm/10/include/llvm/ADT/SmallVector.h:491:7: warning: array
> subscript 1 is outside array bounds of ‘clang::CanQualType [1]’ {aka
> ‘clang::CanQual<clang::Type> [1]’} [-Warray-bounds]
> * /usr/lib/llvm/10/include/llvm/ADT/SmallVector.h:491:7: warning: array
> subscript 1 is outside array bounds of ‘char [1]’ [-Warray-bounds]
> 
> * Please do not file a Gentoo bug and instead report the above QA
> * issues directly to the upstream developers of this software.
> * Homepage: https://llvm.org/
> strip: x86_64-pc-linux-gnu-strip --strip-unneeded -N
> __gentoo_check_ldflags__ -R .comment -R .GCC.command.line -R
> .note.gnu.gold-version
>   /usr/lib/llvm/10/bin/pp-trace
>   /usr/lib/llvm/10/bin/diagtool
>   /usr/lib/llvm/10/bin/clang-10
>   /usr/lib/llvm/10/lib32/libclang.so.10
>   /usr/lib/llvm/10/lib32/libclang-cpp.so.10
> 
> 
> https://bugs.gentoo.org/740456
> _______________________________________________
> LLVM Developers mailing list
> llvm-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20200905/1b36aa30/attachment.html>


More information about the llvm-dev mailing list