author | xiao qing lu - Sun Microsystems - Beijing China <xiaoqing.lu@oracle.com> |
Tue, 12 Jul 2016 19:50:03 -0700 | |
changeset 6403 | 9d25dbe7eb71 |
parent 5434 | 9f55c805ce9d |
permissions | -rw-r--r-- |
5434
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
1 |
# https://llvm.org/bugs/show_bug.cgi?id=24615 |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
2 |
--- tools/clang/lib/Sema/TypeLocBuilder.h 2014-08-13 09:25:19.000000000 -0700 |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
3 |
+++ tools/clang/lib/Sema/TypeLocBuilder.h 2015-08-28 16:45:41.733661825 -0700 |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
4 |
@@ -39,7 +39,7 @@ |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
5 |
#endif |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
6 |
|
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
7 |
/// The inline buffer. |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
8 |
- enum { BufferMaxAlignment = llvm::AlignOf<void*>::Alignment }; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
9 |
+ enum { BufferMaxAlignment = llvm::AlignOf<uint64_t>::Alignment }; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
10 |
llvm::AlignedCharArray<BufferMaxAlignment, InlineCapacity> InlineBuffer; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
11 |
unsigned NumBytesAtAlign4, NumBytesAtAlign8; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
12 |
|
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
13 |
@@ -52,7 +52,7 @@ |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
14 |
|
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
15 |
~TypeLocBuilder() { |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
16 |
if (Buffer != InlineBuffer.buffer) |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
17 |
- delete[] Buffer; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
18 |
+ std::free(Buffer); |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
19 |
} |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
20 |
|
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
21 |
/// Ensures that this buffer has at least as much capacity as described. |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
22 |
--- tools/clang/lib/Sema/TypeLocBuilder.cpp 2014-05-25 23:22:03.000000000 -0700 |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
23 |
+++ tools/clang/lib/Sema/TypeLocBuilder.cpp 2015-08-25 18:53:43.000000000 -0700 |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
24 |
@@ -13,6 +13,8 @@ |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
25 |
//===----------------------------------------------------------------------===// |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
26 |
|
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
27 |
#include "TypeLocBuilder.h" |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
28 |
+#include <cstring> |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
29 |
+#include <stdlib.h> |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
30 |
|
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
31 |
using namespace clang; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
32 |
|
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
33 |
@@ -46,14 +48,36 @@ |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
34 |
assert(NewCapacity > Capacity); |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
35 |
|
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
36 |
// Allocate the new buffer and copy the old data into it. |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
37 |
- char *NewBuffer = new char[NewCapacity]; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
38 |
+ char *NewBuffer; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
39 |
+ |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
40 |
+#if defined(_MSC_VER) |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
41 |
+ NewBuffer = _aligned_malloc(NewCapacity, (size_t) BufferMaxAlignment); |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
42 |
+ assert(NewBuffer && "_aligned_malloc failed!"); |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
43 |
+ if (!NewBuffer) { |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
44 |
+ llvm::errs() << __PRETTY_FUNCTION__ << ": _aligned_malloc failed!\n"; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
45 |
+ abort(); |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
46 |
+ } |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
47 |
+#else |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
48 |
+ int R = posix_memalign((void**) &NewBuffer, |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
49 |
+ (size_t) BufferMaxAlignment, NewCapacity); |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
50 |
+ assert((R == 0) && "posix_memalign failed!"); |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
51 |
+ assert(NewBuffer && "posix_memalign failed!"); |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
52 |
+ if ((R != 0) || (!NewBuffer)) { |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
53 |
+ llvm::errs() << __PRETTY_FUNCTION__ << ": posix_memalign failed!\n"; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
54 |
+ abort(); |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
55 |
+ } |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
56 |
+#endif |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
57 |
+ |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
58 |
+ (void) std::memset(NewBuffer, 0, NewCapacity); |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
59 |
+ |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
60 |
unsigned NewIndex = Index + NewCapacity - Capacity; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
61 |
- memcpy(&NewBuffer[NewIndex], |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
62 |
+ (void) std::memcpy(&NewBuffer[NewIndex], |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
63 |
&Buffer[Index], |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
64 |
Capacity - Index); |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
65 |
|
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
66 |
- if (Buffer != InlineBuffer.buffer) |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
67 |
- delete[] Buffer; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
68 |
+ if (Buffer != InlineBuffer.buffer) { |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
69 |
+ std::free(Buffer); |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
70 |
+ } |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
71 |
|
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
72 |
Buffer = NewBuffer; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
73 |
Capacity = NewCapacity; |