Merging r243945-243950.
authorHans Wennborg <hans@hanshq.net>
Thu, 6 Aug 2015 15:53:49 +0000 (15:53 +0000)
committerHans Wennborg <hans@hanshq.net>
Thu, 6 Aug 2015 15:53:49 +0000 (15:53 +0000)
commite2c9b2285d808b1ac25825f973a8f591c5ddd58d
tree02b958a00b25ba4a244f52bc6ec5791e4ec030ef
parent0c0116f5826045008e6627967abe0e9320700e2b
Merging r243945-243950.
------------------------------------------------------------------------
r243945 | chandlerc | 2015-08-03 20:52:52 -0700 (Mon, 03 Aug 2015) | 5 lines

[UB] Fix two cases of UB in copy/pasted code from SmallVector.

We should really stop copying and pasting code around. =/

Found by UBSan.
------------------------------------------------------------------------

------------------------------------------------------------------------
r243946 | chandlerc | 2015-08-03 20:52:56 -0700 (Mon, 03 Aug 2015) | 9 lines

[UB] Fix the two ways that we would try to memcpy from a null buffer in
the nested name specifier code.

First, skip the entire thing when the input is empty.

Next, handle the case where we started off with a null buffer and a zero
capacity to skip copying and freeing.

This was found with UBSan.
------------------------------------------------------------------------

------------------------------------------------------------------------
r243947 | chandlerc | 2015-08-03 20:52:58 -0700 (Mon, 03 Aug 2015) | 4 lines

[UB] When attaching empty strings to the AST, use an empty StringRef
rather than forcing the bump pointer allocator to produce a viable
pointer. This also fixes UB when we would try to memcpy from the null
incoming StringRef.
------------------------------------------------------------------------

------------------------------------------------------------------------
r243948 | chandlerc | 2015-08-03 20:53:00 -0700 (Mon, 03 Aug 2015) | 9 lines

[UB] Another place where we were trying to put string data into
a BumpPtrAllocator. This at least now handles the case where there is no
concatentation without calling memcpy on a null pointer. It might be
interesting to handle the case where everything is empty without
round-tripping through the allocator, but it wasn't clear to me if the
pointer returned is significant in any way, so I've left it in
a conservatively more-correct state.

Again, found with UBSan.
------------------------------------------------------------------------

------------------------------------------------------------------------
r243949 | chandlerc | 2015-08-03 20:53:01 -0700 (Mon, 03 Aug 2015) | 4 lines

[UB] Guard two calls to memcpy in generated attribute code to handle
null StringRef objects as inputs.

Found by UBSan.
------------------------------------------------------------------------

------------------------------------------------------------------------
r243950 | chandlerc | 2015-08-03 20:53:04 -0700 (Mon, 03 Aug 2015) | 8 lines

[UB] Avoid a really broken call to realloc that would later result in
a bad call to memcpy.

When we only have a buffer from one of the two reparse calls, we can
just return that buffer rather than going through the realloc/memcpy
dance.

Found with UBsan.
------------------------------------------------------------------------

git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_37@244223 91177308-0d34-0410-b5e6-96231b3b80d8
include/clang/AST/ASTVector.h
include/clang/Analysis/Support/BumpVector.h
lib/AST/NestedNameSpecifier.cpp
lib/AST/Stmt.cpp
lib/CodeGen/CGDebugInfo.h
tools/c-index-test/c-index-test.c
utils/TableGen/ClangAttrEmitter.cpp