summaryrefslogtreecommitdiffstats
path: root/contrib/llvm/patches
diff options
context:
space:
mode:
authordim <dim@FreeBSD.org>2015-04-03 18:42:38 +0000
committerdim <dim@FreeBSD.org>2015-04-03 18:42:38 +0000
commit0315882c1b8cbec68197617a2de850895440ea52 (patch)
tree3807a63015a9203208956b891b328113c6c39b69 /contrib/llvm/patches
parentac52330ec1fa3ebd5b06ecc5f6e03bc7bf50f965 (diff)
downloadFreeBSD-src-0315882c1b8cbec68197617a2de850895440ea52.zip
FreeBSD-src-0315882c1b8cbec68197617a2de850895440ea52.tar.gz
Add clang patch corresponding to r281046.
Diffstat (limited to 'contrib/llvm/patches')
-rw-r--r--contrib/llvm/patches/patch-12-clang-r227115-constantarraytype.diff50
1 files changed, 50 insertions, 0 deletions
diff --git a/contrib/llvm/patches/patch-12-clang-r227115-constantarraytype.diff b/contrib/llvm/patches/patch-12-clang-r227115-constantarraytype.diff
new file mode 100644
index 0000000..33ca358
--- /dev/null
+++ b/contrib/llvm/patches/patch-12-clang-r227115-constantarraytype.diff
@@ -0,0 +1,50 @@
+Pull in r227115 from upstream clang trunk (by Ben Langmuir):
+
+ Fix assert instantiating string init of static variable
+
+ ... when the variable's type is a typedef of a ConstantArrayType. Just
+ look through the typedef (and any other sugar). We only use the
+ constant array type here to get the element count.
+
+This fixes an assertion failure when building the games/redeclipse port.
+
+Introduced here: http://svnweb.freebsd.org/changeset/base/281046
+
+Index: tools/clang/lib/Sema/SemaInit.cpp
+===================================================================
+--- tools/clang/lib/Sema/SemaInit.cpp
++++ tools/clang/lib/Sema/SemaInit.cpp
+@@ -149,10 +149,10 @@ static void updateStringLiteralType(Expr *E, QualT
+ static void CheckStringInit(Expr *Str, QualType &DeclT, const ArrayType *AT,
+ Sema &S) {
+ // Get the length of the string as parsed.
+- uint64_t StrLength =
+- cast<ConstantArrayType>(Str->getType())->getSize().getZExtValue();
++ auto *ConstantArrayTy =
++ cast<ConstantArrayType>(Str->getType()->getUnqualifiedDesugaredType());
++ uint64_t StrLength = ConstantArrayTy->getSize().getZExtValue();
+
+-
+ if (const IncompleteArrayType *IAT = dyn_cast<IncompleteArrayType>(AT)) {
+ // C99 6.7.8p14. We have an array of character type with unknown size
+ // being initialized to a string literal.
+Index: tools/clang/test/SemaTemplate/instantiate-static-var.cpp
+===================================================================
+--- tools/clang/test/SemaTemplate/instantiate-static-var.cpp
++++ tools/clang/test/SemaTemplate/instantiate-static-var.cpp
+@@ -114,3 +114,15 @@ namespace PR6449 {
+ template class X1<char>;
+
+ }
++
++typedef char MyString[100];
++template <typename T>
++struct StaticVarWithTypedefString {
++ static MyString str;
++};
++template <typename T>
++MyString StaticVarWithTypedefString<T>::str = "";
++
++void testStaticVarWithTypedefString() {
++ (void)StaticVarWithTypedefString<int>::str;
++}
OpenPOWER on IntegriCloud