* Sync the 3.8 changes into 3.9

* Disable the usage of ld gold on powerpc (Closes: #833583)
* Revert drop-avx512-from-skylake.diff, it is causing some regressions in the
  testsuite
* Disable lldb on ppc64
* libfuzzer depends on the same version of clang (Closes: #833564)
* Fix the detection of gcc. This broke the build on the latest unstable
* Ship libFuzzer in its own package (libfuzzer-X.Y-dev) (Closes: #820159)
* Sync from Ubuntu. Many thanks to Matthias Klose
  - drop-avx512-from-skylake.diff: Don't enable AVX512 on Skylake, as it's
    a server cpu feature and breaks llvmpipe on workstations.
  - Remove the build tree before calling dh_strip; at least the amd64 buildd
    runs out of diskspace at this step.
  - Add support for gcc's attribute abi_tag (needed for compatibility with
    GCC 5's libstdc++); taken from the trunk (Closes: #797038)
    (LP: #1510042, #1488254)
    D17567-PR23529-Sema-part-of-attrbute-abi_tag-support.diff
    D18035-PR23529-Mangler-part-of-attrbute-abi_tag-support.diff
* Try to fix mips64el build, by enabling the same
  packages as the mips and mipsel versions
* Link mips* with latomic.
* Disable lldb on sparc64 (Closes: #832371)
* Hopefully fix the FTBFS on armel
* Fix the FTBFS under mips/mipsel? (enable the link against atomic)
  (Closes: #820537)
* Bring back llvm-3.8-tools to life
* ship clang-tblgen & yaml-bench as part of the libclang-common-X.Y-dev
  package
* Add -gsplit-dwarf to CXXFLAGS to workaround the memory allocation
  issue on i386 (hopefully)
* Add a symlink from usr/lib/llvm-3.8/share/llvm/cmake
  pointing to usr/share/llvm-3.8/cmake
* Remove python-lldb-3.8 where liblldb-3.8-dev is not built
* New maintenance release
* debian/rules: Ensure ld-gold is used. CMake invokes the linker through
  g++ most of the time, therefore we need to set -Wl,-fuse-ld=gold.
* Followup to fix the cmake install (Closes: #819072)
* Enable FPXX by default on mips/mipsel (Closes: #826749)
* New RC release
* Improve the cmake detection (used for llvm.org/apt)
* Standards-Version updated to 3.9.8
* Ignore outdated-autotools-helper-file
* Install cmake files in usr/share/llvm-@LLVM_VERSION@/cmake/ instead of
  usr/share/llvm-@LLVM_VERSION@/cmake/
* Also install libLLVM-3.8.so.1 as a symlink
* debian/patches/fix-cmake-config-prefix.diff:
  cover the CMake build system too
(Closes: #819072)
* Fix python-lldb dependencies and make proper symlinks to libLLVM
  and liblldb as suggested by Graham Inggs (Closes: #821022)
* Fix liblldb suffix in lldb/scripts/Python/finishSwigPythonLLDB.py
  (Closes: #813798)
* Fix LLVM bug 26158 - clang packages don't provide man pages
* Add python-six as a dependency of python-lldb (thanks to Askar Safin).
* Make python-lldb-3.8 depend on lldb-3.8-dev, to pick all
  the required dependencies
* Unbreak circular dependency by Suggesting the python binding from
  liblldb-3.8-dev
* Fix an issue with scan-view (Closes: #825101)
* Team upload.
* Disable polly on s390x and fix polly check.
* Fix VCS fields.
* Fix txt file installation issue, by putting a README.txt file
  with some explanation.
* Tighten llvm dev dependency (Closes: #814142).
* New upstream release
* Install a missing library to unbreak lldb (Closes: #815809)
* New snapshot release
* Update the clang description for something more accurate (C++-11, 14, etc)
* Update debian/orig-tar.sh to remove autoconf/config.sub autoconf/config.guess
  in polly
* clang-tidy-3.8: Remove Breaks/Replaces on clang-modernize-3.8.
* Disable lldb on s390x.
* New snapshot release
* Remove build-llvm/ after the install step to save space.
  Most of the rc1 builds failed because of hd space.
* New snapshot release
* Cmake migration. Done by Andrew Wilkins. Many thanks to him
  - Update patches to set SONAME in CMake build
  - Create symlinks with ".links", don't install from build tree
  - Remove LLVM-internal tools (lit, FileCheck, not, tblgen, etc.)
  - Remove llvm-X.Y-tools package, because it contained only
    internal tools that are not intended for distribution.
  - Remove autotools-specific artifacts from packages.
  - Remove "dummy" documentation artifacts from llvm-X.Y-docs
    package. Not built/installed by CMake, not useful.
  - Update control/rules to support CMake
  - Patch LLDB SWIG interfaces to workaround a bug in SWIG
    See https://llvm.org/bugs/show_bug.cgi?id=25468
  - add missing files to clang-format
  - Add patch to fix sanitizer lit invocation
  - removed LLVM-internal tools (lit, FileCheck, not, *-tblgen, etc.);
    not installed by CMake, not intended for distribution
  - removed llvm-X.Y-tools (contained only internal tools)
  - removed autotools-specific artifacts (configure, Makefile, etc.)
  - removed dummy documentation files
This commit is contained in:
Sylvestre Ledru 2016-08-07 13:58:54 +00:00
commit 584e8ad0b9
16 changed files with 1882 additions and 46 deletions

194
debian/changelog vendored
View File

@ -1,5 +1,6 @@
llvm-toolchain-3.9 (1:3.9~svn275918-1~exp2) experimental; urgency=medium
* Sync the 3.8 changes into 3.9
* Fix the cmake paths in llvm-3.9-dev deb package. Thanks to Brad King
for the patch (Closes: #819072)
* LLVMConfig.cmake is now installed to <prefix>/lib/cmake/llvm instead of
@ -161,6 +162,197 @@ llvm-toolchain-3.8 (1:3.8~+rc1-1~exp1) experimental; urgency=medium
-- Sylvestre Ledru <sylvestre@debian.org> Wed, 20 Jan 2016 16:09:01 +0100
llvm-toolchain-3.8 (1:3.8.1-8) unstable; urgency=medium
* Disable the usage of ld gold on powerpc (Closes: #833583)
* Revert drop-avx512-from-skylake.diff, it is causing some regressions in the
testsuite
* Disable lldb on ppc64
* libfuzzer depends on the same version of clang (Closes: #833564)
-- Sylvestre Ledru <sylvestre@debian.org> Sun, 07 Aug 2016 14:10:09 +0200
llvm-toolchain-3.8 (1:3.8.1-7) unstable; urgency=medium
* Fix the detection of gcc. This broke the build on the latest unstable
-- Sylvestre Ledru <sylvestre@debian.org> Fri, 05 Aug 2016 09:55:15 +0200
llvm-toolchain-3.8 (1:3.8.1-6) unstable; urgency=medium
* Ship libFuzzer in its own package (libfuzzer-X.Y-dev) (Closes: #820159)
* Sync from Ubuntu. Many thanks to Matthias Klose
- drop-avx512-from-skylake.diff: Don't enable AVX512 on Skylake, as it's
a server cpu feature and breaks llvmpipe on workstations.
- Remove the build tree before calling dh_strip; at least the amd64 buildd
runs out of diskspace at this step.
- Add support for gcc's attribute abi_tag (needed for compatibility with
GCC 5's libstdc++); taken from the trunk (Closes: #797038)
(LP: #1510042, #1488254)
D17567-PR23529-Sema-part-of-attrbute-abi_tag-support.diff
D18035-PR23529-Mangler-part-of-attrbute-abi_tag-support.diff
-- Sylvestre Ledru <sylvestre@debian.org> Thu, 28 Jul 2016 11:15:04 +0200
llvm-toolchain-3.8 (1:3.8.1-5) unstable; urgency=medium
[ Gianfranco Costamagna ]
* Try to fix mips64el build, by enabling the same
packages as the mips and mipsel versions
* Link mips* with latomic.
[ Sylvestre Ledru ]
* Disable lldb on sparc64 (Closes: #832371)
* Hopefully fix the FTBFS on armel
-- Sylvestre Ledru <sylvestre@debian.org> Wed, 27 Jul 2016 22:49:09 +0200
llvm-toolchain-3.8 (1:3.8.1-4) unstable; urgency=medium
* Fix the FTBFS under mips/mipsel? (enable the link against atomic)
(Closes: #820537)
* Bring back llvm-3.8-tools to life
* ship clang-tblgen & yaml-bench as part of the libclang-common-X.Y-dev
package
-- Sylvestre Ledru <sylvestre@debian.org> Wed, 20 Jul 2016 10:20:46 +0200
llvm-toolchain-3.8 (1:3.8.1-3) unstable; urgency=medium
* Add -gsplit-dwarf to CXXFLAGS to workaround the memory allocation
issue on i386 (hopefully)
-- Sylvestre Ledru <sylvestre@debian.org> Sat, 02 Jul 2016 20:59:08 +0200
llvm-toolchain-3.8 (1:3.8.1-2) unstable; urgency=medium
[ Sylvestre Ledru ]
* Add a symlink from usr/lib/llvm-3.8/share/llvm/cmake
pointing to usr/share/llvm-3.8/cmake
[ Gianfranco Costamagna ]
* Remove python-lldb-3.8 where liblldb-3.8-dev is not built
-- Sylvestre Ledru <sylvestre@debian.org> Tue, 28 Jun 2016 14:44:48 +0200
llvm-toolchain-3.8 (1:3.8.1-1) unstable; urgency=medium
* New maintenance release
[ Kai Wasserbäch ]
* debian/rules: Ensure ld-gold is used. CMake invokes the linker through
g++ most of the time, therefore we need to set -Wl,-fuse-ld=gold.
[ Brad King ]
* Followup to fix the cmake install (Closes: #819072)
[ YunQiang Su ]
* Enable FPXX by default on mips/mipsel (Closes: #826749)
-- Sylvestre Ledru <sylvestre@debian.org> Thu, 23 Jun 2016 08:49:29 +0200
llvm-toolchain-3.8 (1:3.8.1~+rc1-1~exp1) experimental; urgency=medium
* New RC release
* Improve the cmake detection (used for llvm.org/apt)
* Standards-Version updated to 3.9.8
* Ignore outdated-autotools-helper-file
[ Brad King ]
* Install cmake files in usr/share/llvm-@LLVM_VERSION@/cmake/ instead of
usr/share/llvm-@LLVM_VERSION@/cmake/
* Also install libLLVM-3.8.so.1 as a symlink
* debian/patches/fix-cmake-config-prefix.diff:
cover the CMake build system too
(Closes: #819072)
[ Pablo Oliveira ]
* Fix python-lldb dependencies and make proper symlinks to libLLVM
and liblldb as suggested by Graham Inggs (Closes: #821022)
* Fix liblldb suffix in lldb/scripts/Python/finishSwigPythonLLDB.py
(Closes: #813798)
* Fix LLVM bug 26158 - clang packages don't provide man pages
* Add python-six as a dependency of python-lldb (thanks to Askar Safin).
[ Gianfranco Costamagna ]
* Make python-lldb-3.8 depend on lldb-3.8-dev, to pick all
the required dependencies
* Unbreak circular dependency by Suggesting the python binding from
liblldb-3.8-dev
[ Alexis La Goutte ]
* Fix an issue with scan-view (Closes: #825101)
-- Sylvestre Ledru <sylvestre@debian.org> Thu, 26 May 2016 17:30:00 +0200
llvm-toolchain-3.8 (1:3.8-2) unstable; urgency=medium
* Team upload.
* Disable polly on s390x and fix polly check.
* Fix VCS fields.
[ Sylvestre Ledru ]
* Fix txt file installation issue, by putting a README.txt file
with some explanation.
[ Graham Inggs ]
* Tighten llvm dev dependency (Closes: #814142).
-- Gianfranco Costamagna <locutusofborg@debian.org> Mon, 07 Mar 2016 10:56:05 +0100
llvm-toolchain-3.8 (1:3.8-1) unstable; urgency=medium
* New upstream release
* Install a missing library to unbreak lldb (Closes: #815809)
-- Sylvestre Ledru <sylvestre@debian.org> Thu, 03 Mar 2016 21:16:21 +0100
llvm-toolchain-3.8 (1:3.8~+rc3-1~exp1) experimental; urgency=medium
* New snapshot release
* Update the clang description for something more accurate (C++-11, 14, etc)
* Update debian/orig-tar.sh to remove autoconf/config.sub autoconf/config.guess
in polly
[ Matthias Klose ]
* clang-tidy-3.8: Remove Breaks/Replaces on clang-modernize-3.8.
* Disable lldb on s390x.
-- Sylvestre Ledru <sylvestre@debian.org> Thu, 25 Feb 2016 14:26:14 +0100
llvm-toolchain-3.8 (1:3.8~+rc2-1~exp1) experimental; urgency=medium
* New snapshot release
* Remove build-llvm/ after the install step to save space.
Most of the rc1 builds failed because of hd space.
-- Sylvestre Ledru <sylvestre@debian.org> Wed, 03 Feb 2016 08:59:32 +0100
llvm-toolchain-3.8 (1:3.8~+rc1-1~exp1) experimental; urgency=medium
* New snapshot release
* Cmake migration. Done by Andrew Wilkins. Many thanks to him
- Update patches to set SONAME in CMake build
- Create symlinks with ".links", don't install from build tree
- Remove LLVM-internal tools (lit, FileCheck, not, tblgen, etc.)
- Remove llvm-X.Y-tools package, because it contained only
internal tools that are not intended for distribution.
- Remove autotools-specific artifacts from packages.
- Remove "dummy" documentation artifacts from llvm-X.Y-docs
package. Not built/installed by CMake, not useful.
- Update control/rules to support CMake
- Patch LLDB SWIG interfaces to workaround a bug in SWIG
See https://llvm.org/bugs/show_bug.cgi?id=25468
- add missing files to clang-format
- Add patch to fix sanitizer lit invocation
- removed LLVM-internal tools (lit, FileCheck, not, *-tblgen, etc.);
not installed by CMake, not intended for distribution
- removed llvm-X.Y-tools (contained only internal tools)
- removed autotools-specific artifacts (configure, Makefile, etc.)
- removed dummy documentation files
-- Sylvestre Ledru <sylvestre@debian.org> Wed, 20 Jan 2016 16:09:01 +0100
llvm-toolchain-snapshot (1:3.8~svn255217-1~exp1) experimental; urgency=medium
* New snapshot release
@ -767,7 +959,7 @@ llvm-toolchain-3.4 (1:3.4~+rc1-3) unstable; urgency=low
* If we get an unexpected pass, do not break the tests
do-not-fail-on-unexpected-pass.diff (I am disabling some tests)
* Fix the path detection of the objective h headers.
* Also add usr/lib/llvm-3.4/lib/clang/3.4/include =>
* Also add usr/lib/llvm-3.4/lib/clang/3.4/include =>
usr/lib/clang/3.4/include symlink to simplify the path detection
-- Sylvestre Ledru <sylvestre@debian.org> Sun, 01 Dec 2013 17:49:46 +0100

View File

@ -35,4 +35,3 @@ usr/bin/modularize-@LLVM_VERSION@
usr/bin/scan-build-@LLVM_VERSION@
usr/bin/scan-view-@LLVM_VERSION@
usr/bin/c-index-test-@LLVM_VERSION@

View File

@ -1,4 +1,4 @@
#build-llvm/tools/clang/docs/tools/clang-@LLVM_VERSION@.1
clang/docs/_build/man/clang-@LLVM_VERSION@.1
clang/tools/scan-build/man/scan-build-@LLVM_VERSION@.1
debian/man/clang-check-@LLVM_VERSION@.1
debian/man/scan-view-@LLVM_VERSION@.1

32
debian/control vendored
View File

@ -10,11 +10,11 @@ Build-Depends: debhelper (>= 9.0), flex, bison, dejagnu, tcl, expect,
libjsoncpp-dev,
lcov, procps, help2man, dh-ocaml, zlib1g-dev
Build-Conflicts: oprofile, ocaml, libllvm-3.4-ocaml-dev, libllvm-3.5-ocaml-dev,
libllvm-3.9-ocaml-dev
libllvm-3.8-ocaml-dev, libllvm-3.9-ocaml-dev
Standards-Version: 3.9.8
Homepage: http://www.llvm.org/
Vcs-Svn: svn://anonscm.debian.org/svn/pkg-llvm/llvm-toolchain/branches/snapshot/
Vcs-Browser: http://svn.debian.org/viewsvn/pkg-llvm/llvm-toolchain/branches/snapshot/
Vcs-Svn: svn://anonscm.debian.org/svn/pkg-llvm/llvm-toolchain/branches/3.8/
Vcs-Browser: https://svn.debian.org/viewsvn/pkg-llvm/llvm-toolchain/branches/3.8/
# ------------- clang -------------
@ -156,6 +156,27 @@ Description: clang library - Common development package
(profiling, etc).
Package: libfuzzer-3.9-dev
Architecture: any
Section: libdevel
Depends: ${shlibs:Depends}, ${misc:Depends}, clang-3.9 (= ${binary:Version})
Description: Library for coverage-guided fuzz testing
LibFuzzer is a library for in-process, coverage-guided, evolutionary fuzzing
of other libraries.
.
LibFuzzer is similar in concept to American Fuzzy Lop (AFL), but it performs
all of its fuzzing inside a single process. This in-process fuzzing can be
more restrictive and fragile, but is potentially much faster as there is no
overhead for process start-up.
.
The fuzzer is linked with the library under test, and feeds fuzzed inputs to
the library via a specific fuzzing entrypoint (aka 'target function'); the
fuzzer then tracks which areas of the code are reached, and generates mutations
on the corpus of input data in order to maximize the code coverage. The code
coverage information for libFuzzer is provided by LLVM's SanitizerCoverage
instrumentation.
Package: python-clang-3.9
Section: python
Architecture: any
@ -270,7 +291,7 @@ Description: Modular compiler and toolchain technologies, IR interpreter
Package: llvm-3.9-dev
Architecture: any
Depends: ${shlibs:Depends}, libffi-dev (>= 3.0.9), ${misc:Depends},
llvm-3.9 (= ${binary:Version}), libtinfo-dev
llvm-3.9 (= ${binary:Version}), libllvm3.9 (= ${binary:Version}), libtinfo-dev
Replaces: llvm (<< 2.2-3)
Description: Modular compiler and toolchain technologies, libraries and headers
LLVM is a collection of libraries and tools that make it easy to build
@ -307,7 +328,6 @@ Description: Modular compiler and toolchain technologies, tools
.
This package provides tools for testing.
Package: libllvm-3.9-ocaml-dev
Section: ocaml
Architecture: any
@ -426,7 +446,7 @@ Description: Modular compiler and toolchain technologies, examples
# ------------- lldb -------------
Package: lldb-3.9
Architecture: amd64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 s390 sparc alpha hppa m68k powerpcspe ppc64 sh4 x32 mips mipsel
Architecture: amd64 armel armhf i386 kfreebsd-amd64 kfreebsd-i386 s390 s390x sparc alpha hppa m68k powerpcspe ppc64 sh4 x32 mips mipsel
# ia64 mips mipsel hurd powerpc ppc64el sparc64 have been removed
Depends: ${shlibs:Depends}, ${misc:Depends}, libllvm3.9 (= ${binary:Version}), llvm-3.9-dev
Suggests: python-lldb-3.9

View File

@ -1,3 +1,2 @@
usr/lib/llvm-@LLVM_VERSION@/lib/libclang-@LLVM_VERSION@.so.1 /usr/lib/@DEB_HOST_MULTIARCH@/
usr/lib/llvm-@LLVM_VERSION@/lib/libclang.so.1

View File

@ -1,8 +1,6 @@
usr/lib/llvm-@LLVM_VERSION@/bin/lli
usr/lib/llvm-@LLVM_VERSION@/bin/lli-child-target
usr/bin/lli-@LLVM_VERSION@
usr/bin/lli-child-target-@LLVM_VERSION@
debian/llvm-@LLVM_VERSION@-runtime.binfmt usr/share/binfmts/

View File

@ -0,0 +1,322 @@
Index: b/clang/docs/ItaniumMangleAbiTags.rst
===================================================================
--- /dev/null
+++ b/clang/docs/ItaniumMangleAbiTags.rst
@@ -0,0 +1,101 @@
+========
+ABI tags
+========
+
+Introduction
+============
+
+This text tries to describe gcc semantic for mangling "abi_tag" attributes
+described in https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html
+
+There is no guarantee the following rules are correct, complete or make sense
+in any way as they were determined empirically by experiments with gcc5.
+
+Declaration
+===========
+
+ABI tags are declared in an abi_tag attribute and can be applied to a
+function, variable, class or inline namespace declaration. The attribute takes
+one or more strings (called tags); the order does not matter.
+
+See https://gcc.gnu.org/onlinedocs/gcc/C_002b_002b-Attributes.html for
+details.
+
+Tags on an inline namespace are called "implicit tags", all other tags are
+"explicit tags".
+
+Mangling
+========
+
+All tags that are "active" on an <unqualified-name> are emitted after the
+<unqualified-name>, before <template-args> or <discriminator>, and are part of
+the same <substitution> the <unqualified-name> is.
+
+They are mangled as:
+
+ <abi-tags> ::= <abi-tag>* # sort by name
+ <abi-tag> ::= B <tag source-name>
+
+Example:
+
+ __attribute__((abi_tag("test")))
+ void Func();
+
+ gets mangled as: _Z4FuncB4testv (prettified as `Func[abi:test]()`)
+
+Active tags
+===========
+
+A namespace does not have any active tags. For types (class / struct / union /
+enum), the explicit tags are the active tags.
+
+For variables and functions, the active tags are the explicit tags plus any
+"required tags" which are not in the "available tags" set:
+
+ derived-tags := (required-tags - available-tags)
+ active-tags := explicit-tags + derived-tags
+
+Required tags for a function
+============================
+
+If a function is used as a local scope for another name, and is part of
+another function as local scope, it doesn't have any required tags.
+
+If a function is used as a local scope for a guard variable name, it doesn't
+have any required tags.
+
+Otherwise the function requires any implicit or explicit tag used in the name
+for the return type.
+
+Example:
+ namespace A {
+ inline namespace B __attribute__((abi_tag)) {
+ struct C { int x; };
+ }
+ }
+
+ A::C foo();
+
+ gets mangled as: _Z3fooB1Bv (prettified as `foo[abi:B]()`)
+
+Required tags for a variable
+============================
+
+A variable requires any implicit or explicit tag used in its type.
+
+Available tags
+==============
+
+All tags used in the prefix and in the template arguments for a name are
+available. Also, for functions, all tags from the <bare-function-type>
+(which might include the return type for template functions) are available.
+
+For <local-name>s all active tags used in the local part (<function-
+encoding>) are available, but not implicit tags which were not active.
+
+Implicit and explicit tags used in the <unqualified-name> for a function (as
+in the type of a cast operator) are NOT available.
+
+Example: a cast operator to std::string (which is
+std::__cxx11::basic_string<...>) will use 'cxx11' as an active tag, as it is
+required from the return type `std::string` but not available.
Index: b/clang/include/clang/Basic/Attr.td
===================================================================
--- a/clang/include/clang/Basic/Attr.td
+++ b/clang/include/clang/Basic/Attr.td
@@ -349,6 +349,14 @@ class IgnoredAttr : Attr {
// Attributes begin here
//
+def AbiTag : Attr {
+ let Spellings = [GCC<"abi_tag">];
+ let Args = [VariadicStringArgument<"Tags">];
+ let Subjects = SubjectList<[Struct, Var, Function, Namespace], ErrorDiag,
+ "ExpectedStructClassVariableFunctionOrInlineNamespace">;
+ let Documentation = [AbiTagsDocs];
+}
+
def AddressSpace : TypeAttr {
let Spellings = [GNU<"address_space">];
let Args = [IntArgument<"AddressSpace">];
Index: b/clang/include/clang/Basic/AttrDocs.td
===================================================================
--- a/clang/include/clang/Basic/AttrDocs.td
+++ b/clang/include/clang/Basic/AttrDocs.td
@@ -1859,3 +1859,16 @@ Marking virtual functions as ``disable_t
}];
}
+
+def AbiTagsDocs : Documentation {
+ let Content = [{
+The ``abi_tag`` attribute can be applied to a function, variable, class or
+inline namespace declaration to modify the mangled name of the entity. It gives
+the ability to distinguish between different versions of the same entity but
+with different ABI versions supported. For example, a newer version of a class
+could have a different set of data members and thus have a different size. Using
+the ``abi_tag`` attribute, it is possible to have different mangled names for
+a global variable of the class type. Therefor, the old code could keep using
+the old manged name and the new code will use the new mangled name with tags.
+ }];
+}
Index: b/clang/include/clang/Basic/DiagnosticSemaKinds.td
===================================================================
--- a/clang/include/clang/Basic/DiagnosticSemaKinds.td
+++ b/clang/include/clang/Basic/DiagnosticSemaKinds.td
@@ -2434,7 +2434,8 @@ def warn_attribute_wrong_decl_type : War
"Objective-C instance methods|init methods of interface or class extension declarations|"
"variables, functions and classes|Objective-C protocols|"
"functions and global variables|structs, unions, and typedefs|structs and typedefs|"
- "interface or protocol declarations|kernel functions|non-K&R-style functions}1">,
+ "interface or protocol declarations|kernel functions|non-K&R-style functions|"
+ "structs, classes, variables, functions, and inline namespaces}1">,
InGroup<IgnoredAttributes>;
def err_attribute_wrong_decl_type : Error<warn_attribute_wrong_decl_type.Text>;
def warn_type_attribute_wrong_type : Warning<
@@ -4144,6 +4145,13 @@ def err_definition_of_explicitly_default
def err_redefinition_extern_inline : Error<
"redefinition of a 'extern inline' function %0 is not supported in "
"%select{C99 mode|C++}1">;
+def warn_attr_abi_tag_namespace : Warning<
+ "'abi_tag' attribute on %select{non-inline|anonymous}0 namespace ignored">,
+ InGroup<IgnoredAttributes>;
+def err_abi_tag_on_redeclaration : Error<
+ "cannot add 'abi_tag' attribute in a redeclaration">;
+def err_new_abi_tag_on_redeclaration : Error<
+ "'abi_tag' %0 missing in original declaration">;
def note_deleted_dtor_no_operator_delete : Note<
"virtual destructor requires an unambiguous, accessible 'operator delete'">;
Index: b/clang/include/clang/Sema/AttributeList.h
===================================================================
--- a/clang/include/clang/Sema/AttributeList.h
+++ b/clang/include/clang/Sema/AttributeList.h
@@ -855,7 +855,8 @@ enum AttributeDeclKind {
ExpectedStructOrTypedef,
ExpectedObjectiveCInterfaceOrProtocol,
ExpectedKernelFunction,
- ExpectedFunctionWithProtoType
+ ExpectedFunctionWithProtoType,
+ ExpectedStructClassVariableFunctionOrInlineNamespace
};
} // end namespace clang
Index: b/clang/lib/Sema/SemaDecl.cpp
===================================================================
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -2396,6 +2396,24 @@ void Sema::mergeDeclAttributes(NamedDecl
}
}
+ // Re-declaration cannot add abi_tag's.
+ if (const auto *NewAbiTagAttr = New->getAttr<AbiTagAttr>()) {
+ if (const auto *OldAbiTagAttr = Old->getAttr<AbiTagAttr>()) {
+ for (const auto &NewTag : NewAbiTagAttr->tags()) {
+ if (std::find(OldAbiTagAttr->tags_begin(), OldAbiTagAttr->tags_end(),
+ NewTag) == OldAbiTagAttr->tags_end()) {
+ Diag(NewAbiTagAttr->getLocation(),
+ diag::err_new_abi_tag_on_redeclaration)
+ << NewTag;
+ Diag(OldAbiTagAttr->getLocation(), diag::note_previous_declaration);
+ }
+ }
+ } else {
+ Diag(NewAbiTagAttr->getLocation(), diag::err_abi_tag_on_redeclaration);
+ Diag(Old->getLocation(), diag::note_previous_declaration);
+ }
+ }
+
if (!Old->hasAttrs())
return;
Index: b/clang/lib/Sema/SemaDeclAttr.cpp
===================================================================
--- a/clang/lib/Sema/SemaDeclAttr.cpp
+++ b/clang/lib/Sema/SemaDeclAttr.cpp
@@ -4446,6 +4446,42 @@ static void handleDeclspecThreadAttr(Sem
Attr.getRange(), S.Context, Attr.getAttributeSpellingListIndex()));
}
+static void handleAbiTagAttr(Sema &S, Decl *D, const AttributeList &Attr) {
+ SmallVector<std::string, 4> Tags;
+ for (unsigned I = 0, E = Attr.getNumArgs(); I != E; ++I) {
+ StringRef Tag;
+ if (!S.checkStringLiteralArgumentAttr(Attr, I, Tag))
+ return;
+ Tags.push_back(Tag);
+ }
+
+ if (const auto *NS = dyn_cast<NamespaceDecl>(D)) {
+ if (!NS->isInline()) {
+ S.Diag(Attr.getLoc(), diag::warn_attr_abi_tag_namespace) << 0;
+ return;
+ }
+ if (NS->isAnonymousNamespace()) {
+ S.Diag(Attr.getLoc(), diag::warn_attr_abi_tag_namespace) << 1;
+ return;
+ }
+ if (Attr.getNumArgs() == 0)
+ Tags.push_back(NS->getName());
+ } else if (!checkAttributeAtLeastNumArgs(S, Attr, 1))
+ return;
+
+ // Store tags sorted and without duplicates.
+ std::sort(Tags.begin(), Tags.end());
+ Tags.erase(std::unique(Tags.begin(), Tags.end()), Tags.end());
+
+ D->addAttr(::new (S.Context)
+ AbiTagAttr(Attr.getRange(), S.Context, Tags.data(), Tags.size(),
+ Attr.getAttributeSpellingListIndex()));
+
+ // FIXME: remove this warning as soon as mangled part is ready.
+ S.Diag(Attr.getRange().getBegin(), diag::warn_attribute_ignored)
+ << Attr.getName();
+}
+
static void handleARMInterruptAttr(Sema &S, Decl *D,
const AttributeList &Attr) {
// Check the attribute arguments.
@@ -5360,6 +5396,9 @@ static void ProcessDeclAttribute(Sema &S
case AttributeList::AT_Thread:
handleDeclspecThreadAttr(S, D, Attr);
break;
+ case AttributeList::AT_AbiTag:
+ handleAbiTagAttr(S, D, Attr);
+ break;
// Thread safety attributes:
case AttributeList::AT_AssertExclusiveLock:
Index: b/clang/test/SemaCXX/attr-abi-tag-syntax.cpp
===================================================================
--- /dev/null
+++ b/clang/test/SemaCXX/attr-abi-tag-syntax.cpp
@@ -0,0 +1,43 @@
+// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify %s
+
+namespace N1 {
+
+namespace __attribute__((__abi_tag__)) {}
+// expected-warning@-1 {{'abi_tag' attribute on non-inline namespace ignored}}
+
+namespace N __attribute__((__abi_tag__)) {}
+// expected-warning@-1 {{'abi_tag' attribute on non-inline namespace ignored}}
+
+} // namespace N1
+
+namespace N2 {
+
+inline namespace __attribute__((__abi_tag__)) {}
+// expected-warning@-1 {{'abi_tag' attribute on anonymous namespace ignored}}
+
+inline namespace N __attribute__((__abi_tag__)) {}
+// FIXME: remove this warning as soon as attribute fully supported.
+// expected-warning@-2 {{'__abi_tag__' attribute ignored}}
+
+} // namespcace N2
+
+__attribute__((abi_tag("B", "A"))) extern int a1;
+// FIXME: remove this warning as soon as attribute fully supported.
+// expected-warning@-2 {{'abi_tag' attribute ignored}}
+
+__attribute__((abi_tag("A", "B"))) extern int a1;
+// expected-note@-1 {{previous declaration is here}}
+// FIXME: remove this warning as soon as attribute fully supported.
+// expected-warning@-3 {{'abi_tag' attribute ignored}}
+
+__attribute__((abi_tag("A", "C"))) extern int a1;
+// expected-error@-1 {{'abi_tag' C missing in original declaration}}
+// FIXME: remove this warning as soon as attribute fully supported.
+// expected-warning@-3 {{'abi_tag' attribute ignored}}
+
+extern int a2;
+// expected-note@-1 {{previous declaration is here}}
+__attribute__((abi_tag("A")))extern int a2;
+// expected-error@-1 {{cannot add 'abi_tag' attribute in a redeclaration}}
+// FIXME: remove this warning as soon as attribute fully supported.
+// expected-warning@-3 {{'abi_tag' attribute ignored}}

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,19 @@
Description: Link with -latomic when mips* processor is detected
Author: Gianfranco Costamagna <locutusofborg@debian.org>
Last-Update: 2016-07-27
--- llvm-toolchain-3.8-3.8.1.orig/lldb/cmake/LLDBDependencies.cmake
+++ llvm-toolchain-3.8-3.8.1/lldb/cmake/LLDBDependencies.cmake
@@ -172,6 +172,12 @@ if (LLVM_BUILD_STATIC)
endif()
endif()
+if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "mips" OR
+ CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "mipsel" OR
+ CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "mips64el")
+ list(APPEND LLDB_SYSTEM_LIBS atomic)
+endif()
+
set( LLVM_LINK_COMPONENTS
${LLVM_TARGETS_TO_BUILD}
interpreter

View File

@ -1,14 +0,0 @@
--- a/lldb/scripts/interface/SBError.i
+++ b/lldb/scripts/interface/SBError.i
@@ -57,6 +57,11 @@
condition and we get back a void process object.
") SBError;
+%{
+// https://llvm.org/bugs/show_bug.cgi?id=25468
+#pragma GCC diagnostic ignored "-Wformat-security"
+%}
+
class SBError {
public:
SBError ();

View File

@ -0,0 +1,11 @@
--- a/compiler-rt/cmake/Modules/SanitizerUtils.cmake
+++ b/compiler-rt/cmake/Modules/SanitizerUtils.cmake
@@ -86,7 +86,7 @@
# Add target to check code style for sanitizer runtimes.
if(UNIX)
add_custom_target(SanitizerLintCheck
- COMMAND LLVM_CHECKOUT=${LLVM_MAIN_SRC_DIR} SILENT=1 TMPDIR=
+ COMMAND env LLVM_CHECKOUT=${LLVM_MAIN_SRC_DIR} SILENT=1 TMPDIR=
PYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}
COMPILER_RT=${COMPILER_RT_SOURCE_DIR}
${SANITIZER_LINT_SCRIPT}

View File

@ -27,9 +27,10 @@ hurd-EIEIO-undef.diff
silent-MCJIIT-tests.diff
clang-analyzer-force-version.diff
llvm25468-lldb-swig-format-security.diff
#silent-test-transforms.diff
install-scan-build-py.diff
#scan-build-py-default.diff
scan-view-fix-path.diff
mips-fpxx-enable.diff
disable-test-failing-sparc-i386.diff
fix-cmake-config-prefix.diff
lldb-test-makefile.diff
lldb-link-atomic-cmake.patch

View File

@ -49,6 +49,7 @@ Index: llvm-toolchain-snapshot_3.9~svn266048/test/Feature/load_module.ll
@junk = global i32 0
<<<<<<< .working
Index: llvm-toolchain-snapshot_3.9~svn266048/clang/test/SemaCXX/warn-memsize-comparison.cpp
===================================================================
--- llvm-toolchain-snapshot_3.9~svn266048.orig/clang/test/SemaCXX/warn-memsize-comparison.cpp
@ -81,3 +82,39 @@ Index: llvm-toolchain-snapshot_3.9~svn266048/clang/test/SemaCXX/warn-memsize-com
if (memset(b1, 0, sizeof(b1) / 2)) {}
if (memset(b1, 0, sizeof(b1) >> 2)) {}
if (memset(b1, 0, 4 << 2)) {}
||||||| .merge-left.r1825
=======
Index: llvm-toolchain-3.8_3.8~+rc1/clang/test/SemaCXX/warn-memsize-comparison.cpp
===================================================================
--- llvm-toolchain-3.8_3.8~+rc1.orig/clang/test/SemaCXX/warn-memsize-comparison.cpp
+++ llvm-toolchain-3.8_3.8~+rc1/clang/test/SemaCXX/warn-memsize-comparison.cpp
@@ -11,8 +11,6 @@ extern "C" int strncasecmp(const char *s
extern "C" char *strncpy(char *dst, const char *src, size_t n);
extern "C" char *strncat(char *dst, const char *src, size_t n);
extern "C" char *strndup(const char *src, size_t n);
-extern "C" size_t strlcpy(char *dst, const char *src, size_t size);
-extern "C" size_t strlcat(char *dst, const char *src, size_t size);
void f() {
char b1[80], b2[80];
@@ -70,18 +68,6 @@ void f() {
expected-note {{explicitly cast the argument}}
if (strndup(b1, sizeof(b1)) != 0) {}
- if (strlcpy(b1, b2, sizeof(b1) != 0)) {} // \
- expected-warning{{size argument in 'strlcpy' call is a comparison}} \
- expected-note {{did you mean to compare}} \
- expected-note {{explicitly cast the argument}}
- if (strlcpy(b1, b2, sizeof(b1)) != 0) {}
-
- if (strlcat(b1, b2, sizeof(b1) != 0)) {} // \
- expected-warning{{size argument in 'strlcat' call is a comparison}} \
- expected-note {{did you mean to compare}} \
- expected-note {{explicitly cast the argument}}
- if (strlcat(b1, b2, sizeof(b1)) != 0) {}
-
if (memset(b1, 0, sizeof(b1) / 2)) {}
if (memset(b1, 0, sizeof(b1) >> 2)) {}
if (memset(b1, 0, 4 << 2)) {}
>>>>>>> .merge-right.r2043

50
debian/rules vendored
View File

@ -3,9 +3,9 @@
TARGET_BUILD := build-llvm
DEB_INST := $(CURDIR)/debian/tmp/
#GCC_VERSION := 4.8
# The 5| in the regexp is a crappy workaround. g++ 5.2 in Debian is not providing a g++-5.2 binary (only g++-5)
# The 5|6| in the regexp is a crappy workaround. g++ 5.2 in Debian is not providing a g++-5.2 binary (only g++-5)
# accomodate that by hardcoding the 5 detection
GCC_VERSION := $(shell dpkg-query -W -f '$${Version}' g++ | sed -rne 's,^([0-9]+:)?(5|[0-9]+\.[0-9]+|[0-9]+).*$$,\2,p')
GCC_VERSION := $(shell dpkg-query -W -f '$${Version}' g++ | sed -rne 's,^([0-9]+:)?(5|6|[0-9]+\.[0-9]+|[0-9]+).*$$,\2,p')
LLVM_VERSION := 3.9
LLVM_VERSION_FULL := $(LLVM_VERSION).0
SONAME_EXT := 1
@ -17,6 +17,8 @@ endif
VENDOR=$(shell lsb_release -is)
BUILD_DIR=Release
DEB_HOST_MULTIARCH = $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
DEB_HOST_GNU_TYPE = $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE)
DEB_HOST_ARCH_BITS = $(shell dpkg-architecture -qDEB_HOST_ARCH_BITS)
@ -44,6 +46,9 @@ export CXX=g++-$(GCC_VERSION)
opt_flags = -g -O2
ifneq (,$(findstring $(DEB_HOST_ARCH),armel))
opt_flags += -marm
# 3.8 fails to build, disable the compiler_rt builtins
# See http://lists.llvm.org/pipermail/llvm-dev/2016-May/099761.html
CMAKE_EXTRA += -DCOMPILER_RT_BUILD_BUILTINS=OFF
endif
ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' g++-$(GCC_VERSION)) ge 4.8-20121128-1~ ; echo $$?),0)
@ -54,9 +59,9 @@ else
control_vars = '-Vdep:devlibs=libstdc++6-$(GCC_VERSION)-dev'
endif
BINUTILS_GOLD_ARCHS := amd64 armhf i386 powerpc powerpcspe ppc64 ppc64el sparc sparc64 x32
BINUTILS_GOLD_ARCHS := amd64 armhf i386 powerpcspe ppc64 ppc64el sparc sparc64 x32
ifeq ($(shell dpkg --compare-versions $(shell dpkg-query -W -f '$${Version}' binutils) ge 2.23.1-1~exp3 ; echo $$?),0)
ifneq (,$(findstring $(DEB_HOST_ARCH),$(BINUTILS_GOLD_ARCHS)))
ifneq (,$(filter $(DEB_HOST_ARCH),$(BINUTILS_GOLD_ARCHS)))
# -fused-ld=gold enables the gold linker (but is not supported by all archs / distro)
LDFLAGS_EXTRA += -fuse-ld=gold
CXXFLAGS_EXTRA += -Wl,-fuse-ld=gold
@ -64,8 +69,9 @@ endif
endif
# Enable polly (or not)
ifeq (,$(filter $(DEB_HOST_ARCH), powerpc))
POLLY_ENABLE=yes
POLLY_ENABLE=yes
ifeq (,$(filter-out $(DEB_HOST_ARCH), powerpc s390x))
POLLY_ENABLE=no
endif
ifneq (,$(filter codecoverage,$(DEB_BUILD_OPTIONS)))
@ -222,12 +228,16 @@ override_dh_auto_configure: preconfigure
-DLLVM_ENABLE_RTTI=ON \
-DLLVM_ENABLE_FFI=ON \
$(CMAKE_EXTRA) \
-DLIBCLANG_LIBRARY_VERSION=$(SONAME_EXT); \
-DLIBCLANG_LIBRARY_VERSION=$(SONAME_EXT)
override_dh_auto_build:
$(PRE_PROCESS) $(MAKE) $(NJOBS) -C $(TARGET_BUILD) VERBOSE=1 CLANG_VENDOR=$(VENDOR) CXXFLAGS="$(CXXFLAGS_EXTRA)" LDFLAGS="$(LDFLAGS_EXTRA)" REQUIRES_RTTI=1 DEBUGMAKE=1
cd $(TARGET_BUILD) \
CFLAGS=`dpkg-buildflags --get CFLAGS`; \
CFLAGS="$$CFLAGS `dpkg-buildflags --get CPPFLAGS`"; \
echo $$CFLAGS; \
bin/clang++ -c $$CFLAGS -std=c++11 ../lib/Fuzzer/*.cpp -IFuzzer; \
ar ruv libFuzzer.a Fuzzer*.o
override_dh_prep: build_doc
dh_prep
@ -245,6 +255,8 @@ build_doc:
done; \
fi
cd $(CURDIR)/clang/docs/_build/man/; mv clang.1 clang-$(LLVM_VERSION).1
# Remove the copy of jquery. See bug #701087
for d in $(TARGET_BUILD)/docs/html/_static/ $(TARGET_BUILD)/tools/clang/docs/html/_static/ $(TARGET_BUILD)/tools/clang/tools/extra/docs/html/_static/ $(TARGET_BUILD)/tools/polly/docs/html/_static/; do \
cd $$d && rm -f jquery.js && ln -s /usr/share/javascript/jquery/jquery.js && cd -; \
@ -277,12 +289,6 @@ override_dh_auto_install:
cd debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib/ && rm -f libclang.so.$(SONAME_EXT) libclang-$(LLVM_VERSION).so; \
ln -s libclang-$(LLVM_VERSION).so.$(SONAME_EXT) libclang.so.$(SONAME_EXT)
# cd debian/tmp/usr/lib/llvm-$(LLVM_VERSION)/lib/ && \
# mv liblldb.so.$(LLVM_VERSION_FULL) liblldb-$(LLVM_VERSION).so.$(SONAME_EXT) && \
# rm -f liblldb.so && \
# ln -s liblldb-$(LLVM_VERSION).so.$(SONAME_EXT) liblldb.so && \
# ln -s liblldb-$(LLVM_VERSION).so.$(SONAME_EXT) liblldb.so.$(LLVM_VERSION_FULL)
# Remove artefact (where compiler-rt is built)
# if test -d $(TARGET_BUILD)/tools/clang/runtime/compiler-rt/clang_linux; then \
# cd $(TARGET_BUILD)/tools/clang/runtime/compiler-rt/clang_linux && rm -rf $$(find . -mindepth 2 -maxdepth 2 -type d) && rm -rf $$(find -empty) && rm -rf */.dir; \
@ -291,6 +297,9 @@ override_dh_auto_install:
mkdir -p $(CURDIR)/debian/clang-$(LLVM_VERSION)/usr/bin/
cp compiler-rt/lib/asan/scripts/asan_symbolize.py $(CURDIR)/debian/clang-$(LLVM_VERSION)/usr/bin/asan_symbolize-$(LLVM_VERSION)
mkdir -p $(CURDIR)/debian/libfuzzer-$(LLVM_VERSION)-dev/usr/lib/llvm-$(LLVM_VERSION)/lib/
cp -v $(TARGET_BUILD)/libFuzzer.a $(CURDIR)/debian/libfuzzer-$(LLVM_VERSION)-dev/usr/lib/llvm-$(LLVM_VERSION)/lib/
# Create this fake directory to make the install libclang-common-dev happy
# under the unsupported archs of compiler-rt
mkdir -p $(DEB_INST)/usr/lib/clang/$(LLVM_VERSION)/lib
@ -298,6 +307,10 @@ override_dh_auto_install:
mkdir -p $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION)/lib/clang_linux/
mkdir -p $(TARGET_BUILD)/tools/clang/runtime/compiler-rt/clang_linux/
mkdir -p $(TARGET_BUILD)/tools/clang/runtime/compiler-rt/clang_linux/
# On some archs, the sanatizers are not built. As we explicitly includes some txt files, create
# a fake txt to make sure it doesn't fail
echo "The *.txt files, if available, contain helper to override some of the errors messages." > $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION_FULL)/README.txt
echo "Please visit https://github.com/google/sanitizers/wiki/AddressSanitizer for help" >> $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/clang/$(LLVM_VERSION_FULL)/README.txt
# idem for the lldb python binding
mkdir -p $(DEB_INST)/usr/lib/llvm-$(LLVM_VERSION)/lib/python2.7/site-packages/lldb/
@ -314,15 +327,14 @@ override_dh_auto_install:
# Rename binaries
mkdir -p $(DEB_INST)/usr/bin/
cd $(DEB_INST)/usr/bin/; rm -f *; \
cd $(DEB_INST)/usr/bin/; \
rm -f *; \
for f in ../lib/llvm-$(LLVM_VERSION)/bin/*; do \
ln -s $$f `basename $$f`-$(LLVM_VERSION); \
echo "Link $$f to `basename $$f`-$(LLVM_VERSION)"; \
done
# Rename some stuff with the version name
# cp $(CURDIR)/$(TARGET_BUILD)/tools/clang/docs/tools/clang.1 $(CURDIR)/$(TARGET_BUILD)/tools/clang/docs/tools/clang-$(LLVM_VERSION).1
cp $(CURDIR)/clang/tools/scan-build/man/scan-build.1 $(CURDIR)/clang/tools/scan-build/man/scan-build-$(LLVM_VERSION).1
# copy the vim files (except that tablegen does not exist for indent
@ -390,6 +402,8 @@ override_dh_installman:
override_dh_strip:
: # running out of diskspace on the buildds
find $(TARGET_BUILD) -name '*.o' -o -name '*.a' | xargs -r rm -f
dh_strip -p libclang$(SONAME_EXT)-$(LLVM_VERSION) --dbg-package=libclang$(SONAME_EXT)-$(LLVM_VERSION)-dbg
dh_strip -p libllvm$(LLVM_VERSION) --dbg-package=libllvm$(LLVM_VERSION)-dbg
dh_strip -p liblldb-$(LLVM_VERSION) --dbg-package=liblldb-$(LLVM_VERSION)-dbg

View File

@ -1,2 +1,6 @@
# Removed by patch remove-dbtree.diff
source: source-is-missing clang/www/analyzer/scripts/dbtree.js
# No longer used (we are using cmake now)
source: outdated-autotools-helper-file autoconf/config.guess 2011-08-20
source: outdated-autotools-helper-file autoconf/config.sub 2011-11-02