Author: dim Date: Sat Feb 14 23:28:09 2015 New Revision: 278789 URL: https://svnweb.freebsd.org/changeset/base/278789
Log: Add clang patches corresponding to r278788. Added: stable/9/contrib/llvm/patches/patch-r278788-clang-r201130-pch-miscompilation.diff Changes in other areas also in this revision: Added: stable/10/contrib/llvm/patches/patch-r278788-clang-r201130-pch-miscompilation.diff Added: stable/9/contrib/llvm/patches/patch-r278788-clang-r201130-pch-miscompilation.diff ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ stable/9/contrib/llvm/patches/patch-r278788-clang-r201130-pch-miscompilation.diff Sat Feb 14 23:28:09 2015 (r278789) @@ -0,0 +1,67 @@ +Pull in r201130 from upstream clang trunk (by Ted Kremenek): + + Fix PCH deserialization bug with local static symbols being treated + as local extern. + + This triggered a miscompilation of code using Boost's + function_template.hpp when it was included inside a PCH file. A + local static within that header would be treated as local extern, + resulting in the wrong mangling. This only occurred during PCH + deserialization. + + Fixes <rdar://problem/15975816> and <rdar://problem/15926311>. + +This fixes a crash in audio/murmur, which is using both PCH and Boost. + +Introduced here: http://svnweb.freebsd.org/changeset/base/278788 + +Index: tools/clang/lib/Serialization/ASTReaderDecl.cpp +=================================================================== +--- tools/clang/lib/Serialization/ASTReaderDecl.cpp ++++ tools/clang/lib/Serialization/ASTReaderDecl.cpp +@@ -971,7 +971,7 @@ ASTDeclReader::RedeclarableResult ASTDeclReader::V + VD->setCachedLinkage(VarLinkage); + + // Reconstruct the one piece of the IdentifierNamespace that we need. +- if (VarLinkage != NoLinkage && ++ if (VD->getStorageClass() == SC_Extern && VarLinkage != NoLinkage && + VD->getLexicalDeclContext()->isFunctionOrMethod()) + VD->setLocalExternDecl(); + +Index: tools/clang/test/PCH/local_static.cpp +=================================================================== +--- tools/clang/test/PCH/local_static.cpp ++++ tools/clang/test/PCH/local_static.cpp +@@ -0,0 +1,20 @@ ++// Test this without PCH. ++// RUN: %clang_cc1 -triple x86_64-apple-macosx10.9.0 -include %S/local_static.h -fsyntax-only %s -emit-llvm -o %t.no_pch.ll %s ++// RUN: FileCheck --input-file %t.no_pch.ll %s ++ ++// Test with PCH. ++// RUN: %clang_cc1 -triple x86_64-apple-macosx10.9.0 -x c++-header -emit-pch -o %t.pch %S/local_static.h ++// RUN: %clang_cc1 -triple x86_64-apple-macosx10.9.0 -include-pch %t.pch -emit-llvm -o %t.pch.ll %s ++// RUN: FileCheck --input-file %t.pch.ll %s ++ ++void test(Bar &b) { ++ b.f<int>(); ++ static int s; ++} ++ ++// Check if the mangling of static and local extern variables ++// are correct and preserved by PCH. ++ ++// CHECK: @_ZZ4testR3BarE1s = internal global i32 0, align 4 ++// CHECK: @_ZZN3Bar1fIiEEvvE1y = linkonce_odr constant i32 0, align 4 ++ +Index: tools/clang/test/PCH/local_static.h +=================================================================== +--- tools/clang/test/PCH/local_static.h ++++ tools/clang/test/PCH/local_static.h +@@ -0,0 +1,7 @@ ++class Bar { ++public: ++ template<typename T> ++ void f() { ++ static const T y = 0; ++ } ++}; _______________________________________________ svn-src-stable-9@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/svn-src-stable-9 To unsubscribe, send any mail to "svn-src-stable-9-unsubscr...@freebsd.org"