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 |
# http://reviews.llvm.org/D10271 |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
2 |
# Backported to 3.6.2. |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
3 |
--- include/llvm/IR/DerivedTypes.h 2014-11-21 14:03:35.000000000 -0500 |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
4 |
+++ include/llvm/IR/DerivedTypes.h 2015-08-23 17:27:29.355504909 -0400 |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
5 |
@@ -140,7 +140,8 @@ |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
6 |
return T->getTypeID() == FunctionTyID; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
7 |
} |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
8 |
}; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
9 |
- |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
10 |
+static_assert(AlignOf<FunctionType>::Alignment >= AlignOf<Type *>::Alignment, |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
11 |
+ "Insufficient alignment for objects appended to FunctionType"); |
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 |
/// CompositeType - Common super class of ArrayType, StructType, PointerType |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
14 |
/// and VectorType. |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
15 |
--- include/llvm/IR/User.h 2014-10-15 16:39:05.000000000 -0400 |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
16 |
+++ include/llvm/IR/User.h 2015-08-23 17:27:29.365505148 -0400 |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
17 |
@@ -22,6 +22,7 @@ |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
18 |
#include "llvm/ADT/iterator.h" |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
19 |
#include "llvm/ADT/iterator_range.h" |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
20 |
#include "llvm/IR/Value.h" |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
21 |
+#include "llvm/Support/AlignOf.h" |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
22 |
#include "llvm/Support/ErrorHandling.h" |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
23 |
|
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
24 |
namespace llvm { |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
25 |
@@ -172,6 +173,11 @@ |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
26 |
return isa<Instruction>(V) || isa<Constant>(V); |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
27 |
} |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
28 |
}; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
29 |
+// Either Use objects, or a Use pointer can be prepended to User. |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
30 |
+static_assert(AlignOf<Use>::Alignment >= AlignOf<User>::Alignment, |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
31 |
+ "Insufficient alignment after objects prepended to User"); |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
32 |
+static_assert(AlignOf<Use *>::Alignment >= AlignOf<User>::Alignment, |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
33 |
+ "Insufficient alignment after objects prepended to User"); |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
34 |
|
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
35 |
template<> struct simplify_type<User::op_iterator> { |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
36 |
typedef Value* SimpleType; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
37 |
--- include/llvm/Support/AlignOf.h 2014-01-08 22:28:55.000000000 -0500 |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
38 |
+++ include/llvm/Support/AlignOf.h 2015-08-23 17:27:29.365505148 -0400 |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
39 |
@@ -36,9 +36,18 @@ |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
40 |
/// compile-time constant (e.g., for template instantiation). |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
41 |
template <typename T> |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
42 |
struct AlignOf { |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
43 |
+#ifndef _MSC_VER |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
44 |
+ // Avoid warnings from GCC like: |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
45 |
+ // comparison between 'enum llvm::AlignOf<X>::<anonymous>' and 'enum |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
46 |
+ // llvm::AlignOf<Y>::<anonymous>' [-Wenum-compare] |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
47 |
+ // by using constexpr instead of enum. |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
48 |
+ // (except on MSVC, since it doesn't support constexpr yet). |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
49 |
+ static constexpr unsigned Alignment = |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
50 |
+ static_cast<unsigned int>(sizeof(AlignmentCalcImpl<T>) - sizeof(T)); |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
51 |
+#else |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
52 |
enum { Alignment = |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
53 |
static_cast<unsigned int>(sizeof(AlignmentCalcImpl<T>) - sizeof(T)) }; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
54 |
- |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
55 |
+#endif |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
56 |
enum { Alignment_GreaterEqual_2Bytes = Alignment >= 2 ? 1 : 0 }; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
57 |
enum { Alignment_GreaterEqual_4Bytes = Alignment >= 4 ? 1 : 0 }; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
58 |
enum { Alignment_GreaterEqual_8Bytes = Alignment >= 8 ? 1 : 0 }; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
59 |
@@ -50,6 +59,10 @@ |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
60 |
enum { Alignment_LessEqual_16Bytes = Alignment <= 16 ? 1 : 0 }; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
61 |
}; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
62 |
|
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
63 |
+#ifndef _MSC_VER |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
64 |
+template <typename T> constexpr unsigned AlignOf<T>::Alignment; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
65 |
+#endif |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
66 |
+ |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
67 |
/// alignOf - A templated function that returns the minimum alignment of |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
68 |
/// of a type. This provides no extra functionality beyond the AlignOf |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
69 |
/// class besides some cosmetic cleanliness. Example usage: |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
70 |
--- lib/IR/AttributeImpl.h 2014-08-13 12:26:38.000000000 -0400 |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
71 |
+++ lib/IR/AttributeImpl.h 2015-08-23 17:27:29.366505172 -0400 |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
72 |
@@ -180,6 +180,9 @@ |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
73 |
AttrList[I].Profile(ID); |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
74 |
} |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
75 |
}; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
76 |
+static_assert(AlignOf<AttributeSetNode>::Alignment >= |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
77 |
+ AlignOf<Attribute>::Alignment, |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
78 |
+ "Insufficient alignment for objects appended to AttributeSetNode"); |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
79 |
|
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
80 |
//===----------------------------------------------------------------------===// |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
81 |
/// \class |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
82 |
@@ -188,9 +191,11 @@ |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
83 |
class AttributeSetImpl : public FoldingSetNode { |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
84 |
friend class AttributeSet; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
85 |
|
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
86 |
- LLVMContext &Context; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
87 |
- |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
88 |
+public: |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
89 |
typedef std::pair<unsigned, AttributeSetNode*> IndexAttrPair; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
90 |
+ |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
91 |
+private: |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
92 |
+ LLVMContext &Context; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
93 |
unsigned NumAttrs; ///< Number of entries in this set. |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
94 |
|
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
95 |
/// \brief Return a pointer to the IndexAttrPair for the specified slot. |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
96 |
@@ -205,6 +210,7 @@ |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
97 |
AttributeSetImpl(LLVMContext &C, |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
98 |
ArrayRef<std::pair<unsigned, AttributeSetNode *> > Attrs) |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
99 |
: Context(C), NumAttrs(Attrs.size()) { |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
100 |
+ |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
101 |
#ifndef NDEBUG |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
102 |
if (Attrs.size() >= 2) { |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
103 |
for (const std::pair<unsigned, AttributeSetNode *> *i = Attrs.begin() + 1, |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
104 |
@@ -266,6 +272,9 @@ |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
105 |
|
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
106 |
void dump() const; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
107 |
}; |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
108 |
+static_assert(AlignOf<AttributeSetImpl>::Alignment >= |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
109 |
+ AlignOf<AttributeSetImpl::IndexAttrPair>::Alignment, |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
110 |
+ "Insufficient alignment for objects appended to AttributeSetImpl"); |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
111 |
|
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
112 |
} // end llvm namespace |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
113 |
|
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
114 |
--- lib/IR/User.cpp 2015-08-23 17:27:29.366505172 -0400 |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
115 |
+++ lib/IR/User.cpp 2015-08-23 17:34:56.427494589 -0400 |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
116 |
@@ -40,6 +40,11 @@ |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
117 |
//===----------------------------------------------------------------------===// |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
118 |
|
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
119 |
Use *User::allocHungoffUses(unsigned N) const { |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
120 |
+ static_assert(AlignOf<Use>::Alignment >= AlignOf<Use::UserRef>::Alignment, |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
121 |
+ "Insufficient alignment for hung-off-uses objects"); |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
122 |
+ static_assert(AlignOf<Use::UserRef>::Alignment >= |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
123 |
+ AlignOf<BasicBlock*>::Alignment, |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
124 |
+ "Insufficient alignment for hung-off-uses objects"); |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
125 |
// Allocate the array of Uses, followed by a pointer (with bottom bit set) to |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
126 |
// the User. |
9f55c805ce9d
PSARC/2013/188 Clang/LLVM
Stefan Teleman <stefan.teleman@oracle.com>
parents:
diff
changeset
|
127 |
size_t size = N * sizeof(Use) + sizeof(Use::UserRef); |