# DP: updates from the 9 branch upto 20191109 (r278002). last_update() { cat > ${dir}LAST_UPDATED + + Backport from trunk + PR fortran/91422 + * testsuite/libgomp.oacc-fortran/routine-7.f90: Correct array + dimension. + 2019-08-12 Release Manager * GCC 9.2.0 released. Index: libgomp/testsuite/libgomp.oacc-fortran/routine-7.f90 =================================================================== --- a/src/libgomp/testsuite/libgomp.oacc-fortran/routine-7.f90 (.../tags/gcc_9_2_0_release) +++ b/src/libgomp/testsuite/libgomp.oacc-fortran/routine-7.f90 (.../branches/gcc-9-branch) @@ -109,7 +109,7 @@ subroutine seq (a) !$acc routine seq - integer, intent (inout) :: a(M) + integer, intent (inout) :: a(N) integer :: i do i = 1, N Index: libquadmath/ChangeLog =================================================================== --- a/src/libquadmath/ChangeLog (.../tags/gcc_9_2_0_release) +++ b/src/libquadmath/ChangeLog (.../branches/gcc-9-branch) @@ -1,3 +1,12 @@ +2019-10-21 Jakub Jelinek + + Backported from mainline + 2019-08-02 Jakub Jelinek + + * quadmath.h (M_Eq, M_LOG2Eq, M_LOG10Eq, M_LN2q, M_LN10q, M_PIq, + M_PI_2q, M_PI_4q, M_1_PIq, M_2_PIq, M_2_SQRTPIq, M_SQRT2q, + M_SQRT1_2q): Use two more decimal places. + 2019-08-12 Release Manager * GCC 9.2.0 released. Index: libquadmath/quadmath.h =================================================================== --- a/src/libquadmath/quadmath.h (.../tags/gcc_9_2_0_release) +++ b/src/libquadmath/quadmath.h (.../branches/gcc-9-branch) @@ -1,5 +1,5 @@ /* GCC Quad-Precision Math Library - Copyright (C) 2010, 2011 Free Software Foundation, Inc. + Copyright (C) 2010-2019 Free Software Foundation, Inc. Written by Francois-Xavier Coudert This file is part of the libquadmath library. @@ -165,19 +165,19 @@ (floating constant exceeds range of ‘__float128’) */ /* #define HUGE_VALQ (__extension__ 0x1.0p32767Q) */ -#define M_Eq 2.7182818284590452353602874713526625Q /* e */ -#define M_LOG2Eq 1.4426950408889634073599246810018921Q /* log_2 e */ -#define M_LOG10Eq 0.4342944819032518276511289189166051Q /* log_10 e */ -#define M_LN2q 0.6931471805599453094172321214581766Q /* log_e 2 */ -#define M_LN10q 2.3025850929940456840179914546843642Q /* log_e 10 */ -#define M_PIq 3.1415926535897932384626433832795029Q /* pi */ -#define M_PI_2q 1.5707963267948966192313216916397514Q /* pi/2 */ -#define M_PI_4q 0.7853981633974483096156608458198757Q /* pi/4 */ -#define M_1_PIq 0.3183098861837906715377675267450287Q /* 1/pi */ -#define M_2_PIq 0.6366197723675813430755350534900574Q /* 2/pi */ -#define M_2_SQRTPIq 1.1283791670955125738961589031215452Q /* 2/sqrt(pi) */ -#define M_SQRT2q 1.4142135623730950488016887242096981Q /* sqrt(2) */ -#define M_SQRT1_2q 0.7071067811865475244008443621048490Q /* 1/sqrt(2) */ +#define M_Eq 2.718281828459045235360287471352662498Q /* e */ +#define M_LOG2Eq 1.442695040888963407359924681001892137Q /* log_2 e */ +#define M_LOG10Eq 0.434294481903251827651128918916605082Q /* log_10 e */ +#define M_LN2q 0.693147180559945309417232121458176568Q /* log_e 2 */ +#define M_LN10q 2.302585092994045684017991454684364208Q /* log_e 10 */ +#define M_PIq 3.141592653589793238462643383279502884Q /* pi */ +#define M_PI_2q 1.570796326794896619231321691639751442Q /* pi/2 */ +#define M_PI_4q 0.785398163397448309615660845819875721Q /* pi/4 */ +#define M_1_PIq 0.318309886183790671537767526745028724Q /* 1/pi */ +#define M_2_PIq 0.636619772367581343075535053490057448Q /* 2/pi */ +#define M_2_SQRTPIq 1.128379167095512573896158903121545172Q /* 2/sqrt(pi) */ +#define M_SQRT2q 1.414213562373095048801688724209698079Q /* sqrt(2) */ +#define M_SQRT1_2q 0.707106781186547524400844362104849039Q /* 1/sqrt(2) */ #define __quadmath_extern_inline \ extern inline __attribute__ ((__gnu_inline__)) Index: libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc =================================================================== --- a/src/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc (.../tags/gcc_9_2_0_release) +++ b/src/libsanitizer/sanitizer_common/sanitizer_platform_limits_posix.cc (.../branches/gcc-9-branch) @@ -1156,8 +1156,12 @@ CHECK_SIZE_AND_OFFSET(ipc_perm, gid); CHECK_SIZE_AND_OFFSET(ipc_perm, cuid); CHECK_SIZE_AND_OFFSET(ipc_perm, cgid); -#if !defined(__aarch64__) || !SANITIZER_LINUX || __GLIBC_PREREQ (2, 21) +#if (!defined(__aarch64__) || !SANITIZER_LINUX || __GLIBC_PREREQ (2, 21)) && \ + !defined(__arm__) /* On aarch64 glibc 2.20 and earlier provided incorrect mode field. */ +/* On Arm glibc 2.31 and later provide a different mode field, this field is + never used by libsanitizer so we can simply ignore this assert for all glibc + versions. */ CHECK_SIZE_AND_OFFSET(ipc_perm, mode); #endif Index: libsanitizer/asan/Makefile.in =================================================================== --- a/src/libsanitizer/asan/Makefile.in (.../tags/gcc_9_2_0_release) +++ b/src/libsanitizer/asan/Makefile.in (.../branches/gcc-9-branch) @@ -90,7 +90,7 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ -@USING_MAC_INTERPOSE_TRUE@am__append_1 = -DMAC_INTERPOSE_FUNCTIONS -DMISSING_BLOCKS_SUPPORT +@USING_MAC_INTERPOSE_TRUE@am__append_1 = -DMAC_INTERPOSE_FUNCTIONS -DMISSING_BLOCKS_SUPPORT -DASAN_HAS_CXA_RETHROW_PRIMARY_EXCEPTION=0 @USING_MAC_INTERPOSE_FALSE@am__append_2 = $(top_builddir)/interception/libinterception.la @LIBBACKTRACE_SUPPORTED_TRUE@am__append_3 = $(top_builddir)/libbacktrace/libsanitizer_libbacktrace.la subdir = asan Index: libsanitizer/asan/asan_interceptors.h =================================================================== --- a/src/libsanitizer/asan/asan_interceptors.h (.../tags/gcc_9_2_0_release) +++ b/src/libsanitizer/asan/asan_interceptors.h (.../branches/gcc-9-branch) @@ -79,7 +79,12 @@ #if ASAN_HAS_EXCEPTIONS && !SANITIZER_WINDOWS && !SANITIZER_SOLARIS && \ !SANITIZER_NETBSD # define ASAN_INTERCEPT___CXA_THROW 1 -# define ASAN_INTERCEPT___CXA_RETHROW_PRIMARY_EXCEPTION 1 +# if ! defined(ASAN_HAS_CXA_RETHROW_PRIMARY_EXCEPTION) \ + || ASAN_HAS_CXA_RETHROW_PRIMARY_EXCEPTION +# define ASAN_INTERCEPT___CXA_RETHROW_PRIMARY_EXCEPTION 1 +# else +# define ASAN_INTERCEPT___CXA_RETHROW_PRIMARY_EXCEPTION 0 +# endif # if defined(_GLIBCXX_SJLJ_EXCEPTIONS) || (SANITIZER_IOS && defined(__arm__)) # define ASAN_INTERCEPT__UNWIND_SJLJ_RAISEEXCEPTION 1 # else Index: libsanitizer/asan/Makefile.am =================================================================== --- a/src/libsanitizer/asan/Makefile.am (.../tags/gcc_9_2_0_release) +++ b/src/libsanitizer/asan/Makefile.am (.../branches/gcc-9-branch) @@ -5,7 +5,7 @@ DEFS = -D_GNU_SOURCE -D_DEBUG -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D__STDC_LIMIT_MACROS -DASAN_HAS_EXCEPTIONS=1 -DASAN_NEEDS_SEGV=1 -DCAN_SANITIZE_UB=0 if USING_MAC_INTERPOSE -DEFS += -DMAC_INTERPOSE_FUNCTIONS -DMISSING_BLOCKS_SUPPORT +DEFS += -DMAC_INTERPOSE_FUNCTIONS -DMISSING_BLOCKS_SUPPORT -DASAN_HAS_CXA_RETHROW_PRIMARY_EXCEPTION=0 endif AM_CXXFLAGS = -Wall -W -Wno-unused-parameter -Wwrite-strings -pedantic -Wno-long-long -fPIC -fno-builtin -fno-exceptions -fno-rtti -fomit-frame-pointer -funwind-tables -fvisibility=hidden -Wno-variadic-macros -fno-ipa-icf AM_CXXFLAGS += $(LIBSTDCXX_RAW_CXX_CXXFLAGS) Index: libsanitizer/ChangeLog =================================================================== --- a/src/libsanitizer/ChangeLog (.../tags/gcc_9_2_0_release) +++ b/src/libsanitizer/ChangeLog (.../branches/gcc-9-branch) @@ -1,3 +1,24 @@ +2019-11-08 Jakub Jelinek + + Backported from mainline + 2019-10-22 Tamar Christina + + PR sanitizer/92154 + * sanitizer_common/sanitizer_platform_limits_posix.cc: + Cherry-pick compiler-rt revision r375220. + +2019-08-18 Iain Sandoe + + Backport from mainline + 2019-06-18 Iain Sandoe + + PR libsanitizer/87880 + * asan/asan_interceptors.h: + (ASAN_INTERCEPT___CXA_RETHROW_PRIMARY_EXCEPTION): New. + * asan/Makefile.am (DEFS): Add (for Darwin only) + ASAN_HAS_CXA_RETHROW_PRIMARY_EXCEPTION, defined to 0. + * asan/Makefile.in: Regenerated. + 2019-08-12 Release Manager * GCC 9.2.0 released. Index: libstdc++-v3/configure =================================================================== --- a/src/libstdc++-v3/configure (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/configure (.../branches/gcc-9-branch) @@ -79469,7 +79469,7 @@ fi # For libtool versioning info, format is CURRENT:REVISION:AGE -libtool_VERSION=6:27:0 +libtool_VERSION=6:28:0 # Everything parsed; figure out what files and settings to use. case $enable_symvers in Index: libstdc++-v3/python/libstdcxx/v6/xmethods.py =================================================================== --- a/src/libstdc++-v3/python/libstdcxx/v6/xmethods.py (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/python/libstdcxx/v6/xmethods.py (.../branches/gcc-9-branch) @@ -728,7 +728,7 @@ return gdb.lookup_type('long') def __call__(self, obj): - refcounts = ['_M_refcount']['_M_pi'] + refcounts = obj['_M_refcount']['_M_pi'] return refcounts['_M_use_count'] if refcounts else 0 class SharedPtrUniqueWorker(SharedPtrUseCountWorker): Index: libstdc++-v3/src/c++17/string-inst.cc =================================================================== --- a/src/libstdc++-v3/src/c++17/string-inst.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/src/c++17/string-inst.cc (.../branches/gcc-9-branch) @@ -26,6 +26,12 @@ // ISO C++ 14882:2017 24 Strings library // +#ifndef _GLIBCXX_USE_CXX11_ABI +// Instantiations in this file use the new SSO std::string ABI unless included +// by another file which defines _GLIBCXX_USE_CXX11_ABI=0. +# define _GLIBCXX_USE_CXX11_ABI 1 +#endif + #include namespace std _GLIBCXX_VISIBILITY(default) Index: libstdc++-v3/src/filesystem/ops-common.h =================================================================== --- a/src/libstdc++-v3/src/filesystem/ops-common.h (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/src/filesystem/ops-common.h (.../branches/gcc-9-branch) @@ -76,7 +76,7 @@ inline int stat(const wchar_t* path, stat_type* buffer) { return ::_wstat(path, buffer); } - inline lstat(const wchar_t* path, stat_type* buffer) + inline int lstat(const wchar_t* path, stat_type* buffer) { // TODO symlinks not currently supported return stat(path, buffer); Index: libstdc++-v3/doc/xml/manual/allocator.xml =================================================================== --- a/src/libstdc++-v3/doc/xml/manual/allocator.xml (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/doc/xml/manual/allocator.xml (.../branches/gcc-9-branch) @@ -499,12 +499,12 @@ - - <link xmlns:xlink="http://www.w3.org/1999/xlink" - xlink:href="http://www.drdobbs.com/the-standard-librarian-what-are-allocato/184403759"> + <title> + <link xmlns:xlink="http://www.w3.org/1999/xlink" + xlink:href="https://web.archive.org/web/20190622154249/http://www.drdobbs.com/the-standard-librarian-what-are-allocato/184403759"> The Standard Librarian: What Are Allocators Good For? - </link> - + + MattAustern @@ -512,12 +512,13 @@ C/C++ Users Journal + 2000-12 <link xmlns:xlink="http://www.w3.org/1999/xlink" - xlink:href="https://www.hoard.org"> + xlink:href="http://hoard.org"> The Hoard Memory Allocator </link> Index: libstdc++-v3/doc/xml/manual/abi.xml =================================================================== --- a/src/libstdc++-v3/doc/xml/manual/abi.xml (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/doc/xml/manual/abi.xml (.../branches/gcc-9-branch) @@ -268,7 +268,9 @@ GCC 7.1.0: libstdc++.so.6.0.23 GCC 7.2.0: libstdc++.so.6.0.24 GCC 8.0.0: libstdc++.so.6.0.25 - GCC 9.0.0: libstdc++.so.6.0.26 + GCC 9.1.0: libstdc++.so.6.0.26 + GCC 9.2.0: libstdc++.so.6.0.27 + GCC 9.3.0: libstdc++.so.6.0.28 Note 1: Error should be libstdc++.so.3.0.3. Index: libstdc++-v3/doc/xml/manual/documentation_hacking.xml =================================================================== --- a/src/libstdc++-v3/doc/xml/manual/documentation_hacking.xml (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/doc/xml/manual/documentation_hacking.xml (.../branches/gcc-9-branch) @@ -805,7 +805,7 @@ - Generated files are output into separate sub directores of + Generated files are output into separate sub-directores of doc/docbook/ in the build directory, based on the output format. For instance, the HTML docs will be in + The doc-html-docbook-regenerate target will generate + the HTML files and copy them back to the libstdc++ source tree. + This can be used to update the HTML files that are checked in to + version control. + + + If the Docbook stylesheets are installed in a custom location, one can use the variable XSL_STYLE_DIR to override the Makefile defaults. For example: Index: libstdc++-v3/doc/xml/manual/status_cxx2020.xml =================================================================== --- a/src/libstdc++-v3/doc/xml/manual/status_cxx2020.xml (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/doc/xml/manual/status_cxx2020.xml (.../branches/gcc-9-branch) @@ -309,7 +309,6 @@ - Constexpr iterator requirements @@ -316,8 +315,9 @@ P0858R0 - - + 9.1 + __cpp_lib_string_view >= 201803L + and __cpp_lib_array_constexpr >= 201803L Index: libstdc++-v3/doc/Makefile.in =================================================================== --- a/src/libstdc++-v3/doc/Makefile.in (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/doc/Makefile.in (.../branches/gcc-9-branch) @@ -978,7 +978,6 @@ ${docbook_outdir}/html: mkdir -p ${docbook_outdir}/html - mkdir -p ${docbook_outdir}/html/ext mkdir -p ${docbook_outdir}/html/images mkdir -p ${docbook_outdir}/html/manual @@ -1030,6 +1029,12 @@ $(STAMP) stamp-html-docbook doc-html-docbook: stamp-html-docbook-data + +# Generate the HTML pages and copy them back to the source tree. +doc-html-docbook-regenerate: doc-html-docbook + $(INSTALL_DATA) ${docbook_outdir}/html/*.html ${top_srcdir}/doc/html + $(INSTALL_DATA) ${docbook_outdir}/html/images/* ${top_srcdir}/doc/html/images + $(INSTALL_DATA) ${docbook_outdir}/html/manual/*.html ${top_srcdir}/doc/html/manual stamp-html-single-docbook: $(xml_sources) ${docbook_outdir}/html @echo "Generating html single file..." $(XSLTPROC) $(XSLT_PARAM) $(XSLT_FLAGS) -o ${manual_html} \ Index: libstdc++-v3/doc/html/manual/status.html =================================================================== --- a/src/libstdc++-v3/doc/html/manual/status.html (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/doc/html/manual/status.html (.../branches/gcc-9-branch) @@ -1110,11 +1110,12 @@ P0809R0 -   Constexpr iterator requirements +   Constexpr iterator requirements P0858R0 -   Symmetry for spaceship + 9.1 __cpp_lib_string_view >= 201803L + and __cpp_lib_array_constexpr >= 201803L Symmetry for spaceship P0905R1 Index: libstdc++-v3/doc/html/manual/abi.html =================================================================== --- a/src/libstdc++-v3/doc/html/manual/abi.html (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/doc/html/manual/abi.html (.../branches/gcc-9-branch) @@ -110,7 +110,7 @@ has the same filename and DT_SONAME as the preceding release.

It is versioned as follows: -

  • GCC 3.0.0: libstdc++.so.3.0.0

  • GCC 3.0.1: libstdc++.so.3.0.1

  • GCC 3.0.2: libstdc++.so.3.0.2

  • GCC 3.0.3: libstdc++.so.3.0.2 (See Note 1)

  • GCC 3.0.4: libstdc++.so.3.0.4

  • GCC 3.1.0: libstdc++.so.4.0.0 (Incompatible with previous)

  • GCC 3.1.1: libstdc++.so.4.0.1

  • GCC 3.2.0: libstdc++.so.5.0.0 (Incompatible with previous)

  • GCC 3.2.1: libstdc++.so.5.0.1

  • GCC 3.2.2: libstdc++.so.5.0.2

  • GCC 3.2.3: libstdc++.so.5.0.3 (See Note 2)

  • GCC 3.3.0: libstdc++.so.5.0.4

  • GCC 3.3.1: libstdc++.so.5.0.5

  • GCC 3.4.0: libstdc++.so.6.0.0 (Incompatible with previous)

  • GCC 3.4.1: libstdc++.so.6.0.1

  • GCC 3.4.2: libstdc++.so.6.0.2

  • GCC 3.4.3: libstdc++.so.6.0.3

  • GCC 4.0.0: libstdc++.so.6.0.4

  • GCC 4.0.1: libstdc++.so.6.0.5

  • GCC 4.0.2: libstdc++.so.6.0.6

  • GCC 4.0.3: libstdc++.so.6.0.7

  • GCC 4.1.0: libstdc++.so.6.0.7

  • GCC 4.1.1: libstdc++.so.6.0.8

  • GCC 4.2.0: libstdc++.so.6.0.9

  • GCC 4.2.1: libstdc++.so.6.0.9 (See Note 3)

  • GCC 4.2.2: libstdc++.so.6.0.9

  • GCC 4.3.0: libstdc++.so.6.0.10

  • GCC 4.4.0: libstdc++.so.6.0.11

  • GCC 4.4.1: libstdc++.so.6.0.12

  • GCC 4.4.2: libstdc++.so.6.0.13

  • GCC 4.5.0: libstdc++.so.6.0.14

  • GCC 4.6.0: libstdc++.so.6.0.15

  • GCC 4.6.1: libstdc++.so.6.0.16

  • GCC 4.7.0: libstdc++.so.6.0.17

  • GCC 4.8.0: libstdc++.so.6.0.18

  • GCC 4.8.3: libstdc++.so.6.0.19

  • GCC 4.9.0: libstdc++.so.6.0.20

  • GCC 5.1.0: libstdc++.so.6.0.21

  • GCC 6.1.0: libstdc++.so.6.0.22

  • GCC 7.1.0: libstdc++.so.6.0.23

  • GCC 7.2.0: libstdc++.so.6.0.24

  • GCC 8.0.0: libstdc++.so.6.0.25

  • GCC 9.0.0: libstdc++.so.6.0.26

+

  • GCC 3.0.0: libstdc++.so.3.0.0

  • GCC 3.0.1: libstdc++.so.3.0.1

  • GCC 3.0.2: libstdc++.so.3.0.2

  • GCC 3.0.3: libstdc++.so.3.0.2 (See Note 1)

  • GCC 3.0.4: libstdc++.so.3.0.4

  • GCC 3.1.0: libstdc++.so.4.0.0 (Incompatible with previous)

  • GCC 3.1.1: libstdc++.so.4.0.1

  • GCC 3.2.0: libstdc++.so.5.0.0 (Incompatible with previous)

  • GCC 3.2.1: libstdc++.so.5.0.1

  • GCC 3.2.2: libstdc++.so.5.0.2

  • GCC 3.2.3: libstdc++.so.5.0.3 (See Note 2)

  • GCC 3.3.0: libstdc++.so.5.0.4

  • GCC 3.3.1: libstdc++.so.5.0.5

  • GCC 3.4.0: libstdc++.so.6.0.0 (Incompatible with previous)

  • GCC 3.4.1: libstdc++.so.6.0.1

  • GCC 3.4.2: libstdc++.so.6.0.2

  • GCC 3.4.3: libstdc++.so.6.0.3

  • GCC 4.0.0: libstdc++.so.6.0.4

  • GCC 4.0.1: libstdc++.so.6.0.5

  • GCC 4.0.2: libstdc++.so.6.0.6

  • GCC 4.0.3: libstdc++.so.6.0.7

  • GCC 4.1.0: libstdc++.so.6.0.7

  • GCC 4.1.1: libstdc++.so.6.0.8

  • GCC 4.2.0: libstdc++.so.6.0.9

  • GCC 4.2.1: libstdc++.so.6.0.9 (See Note 3)

  • GCC 4.2.2: libstdc++.so.6.0.9

  • GCC 4.3.0: libstdc++.so.6.0.10

  • GCC 4.4.0: libstdc++.so.6.0.11

  • GCC 4.4.1: libstdc++.so.6.0.12

  • GCC 4.4.2: libstdc++.so.6.0.13

  • GCC 4.5.0: libstdc++.so.6.0.14

  • GCC 4.6.0: libstdc++.so.6.0.15

  • GCC 4.6.1: libstdc++.so.6.0.16

  • GCC 4.7.0: libstdc++.so.6.0.17

  • GCC 4.8.0: libstdc++.so.6.0.18

  • GCC 4.8.3: libstdc++.so.6.0.19

  • GCC 4.9.0: libstdc++.so.6.0.20

  • GCC 5.1.0: libstdc++.so.6.0.21

  • GCC 6.1.0: libstdc++.so.6.0.22

  • GCC 7.1.0: libstdc++.so.6.0.23

  • GCC 7.2.0: libstdc++.so.6.0.24

  • GCC 8.0.0: libstdc++.so.6.0.25

  • GCC 9.1.0: libstdc++.so.6.0.26

  • GCC 9.2.0: libstdc++.so.6.0.27

  • GCC 9.3.0: libstdc++.so.6.0.28

Note 1: Error should be libstdc++.so.3.0.3.

Note 2: Not strictly required. Index: libstdc++-v3/doc/html/manual/memory.html =================================================================== --- a/src/libstdc++-v3/doc/html/manual/memory.html (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/doc/html/manual/memory.html (.../branches/gcc-9-branch) @@ -314,13 +314,13 @@ . isoc++_1998 20.4 Memory.

- + The Standard Librarian: What Are Allocators Good For? - - . Matt Austern. + + . Matt Austern. C/C++ Users Journal - .

Index: libstdc++-v3/doc/html/manual/documentation_hacking.html =================================================================== --- a/src/libstdc++-v3/doc/html/manual/documentation_hacking.html (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/doc/html/manual/documentation_hacking.html (.../branches/gcc-9-branch) @@ -381,11 +381,16 @@

make doc-xml-single-docbook

- Generated files are output into separate sub directores of + Generated files are output into separate sub-directores of doc/docbook/ in the build directory, based on the output format. For instance, the HTML docs will be in doc/docbook/html.

+ The

doc-html-docbook-regenerate

target will generate + the HTML files and copy them back to the libstdc++ source tree. + This can be used to update the HTML files that are checked in to + version control. +

If the Docbook stylesheets are installed in a custom location, one can use the variable XSL_STYLE_DIR to override the Makefile defaults. For example: Index: libstdc++-v3/doc/Makefile.am =================================================================== --- a/src/libstdc++-v3/doc/Makefile.am (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/doc/Makefile.am (.../branches/gcc-9-branch) @@ -477,7 +477,6 @@ ${docbook_outdir}/html: mkdir -p ${docbook_outdir}/html - mkdir -p ${docbook_outdir}/html/ext mkdir -p ${docbook_outdir}/html/images mkdir -p ${docbook_outdir}/html/manual @@ -546,6 +545,12 @@ doc-html-docbook: stamp-html-docbook-data +# Generate the HTML pages and copy them back to the source tree. +doc-html-docbook-regenerate: doc-html-docbook + $(INSTALL_DATA) ${docbook_outdir}/html/*.html ${top_srcdir}/doc/html + $(INSTALL_DATA) ${docbook_outdir}/html/images/* ${top_srcdir}/doc/html/images + $(INSTALL_DATA) ${docbook_outdir}/html/manual/*.html ${top_srcdir}/doc/html/manual + # HTML, all one page # NB: Have to generate customization XSL for UTF-8 output. manual_html = ${docbook_outdir}/html/libstdc++-manual-single.html Index: libstdc++-v3/include/std/numeric =================================================================== --- a/src/libstdc++-v3/include/std/numeric (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/include/std/numeric (.../branches/gcc-9-branch) @@ -220,6 +220,472 @@ #endif // C++20 #if __cplusplus > 201402L +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + /// @addtogroup numeric_ops + /// @{ + + /// @cond undocumented + template, + typename _Cat = typename _Traits::iterator_category> + using __is_random_access_iter + = is_base_of; + /// @endcond + + /** + * @brief Calculate reduction of values in a range. + * + * @param __first Start of range. + * @param __last End of range. + * @param __init Starting value to add other values to. + * @param __binary_op A binary function object. + * @return The final sum. + * + * Reduce the values in the range `[first,last)` using a binary operation. + * The initial value is `init`. The values are not necessarily processed + * in order. + * + * This algorithm is similar to `std::accumulate` but is not required to + * perform the operations in order from first to last. For operations + * that are commutative and associative the result will be the same as + * for `std::accumulate`, but for other operations (such as floating point + * arithmetic) the result can be different. + */ + template + _Tp + reduce(_InputIterator __first, _InputIterator __last, _Tp __init, + _BinaryOperation __binary_op) + { + using value_type = typename iterator_traits<_InputIterator>::value_type; + static_assert(is_invocable_r_v<_Tp, _BinaryOperation&, _Tp&, _Tp&>); + static_assert(is_convertible_v); + if constexpr (__is_random_access_iter<_InputIterator>::value) + { + while ((__last - __first) >= 4) + { + _Tp __v1 = __binary_op(__first[0], __first[1]); + _Tp __v2 = __binary_op(__first[2], __first[3]); + _Tp __v3 = __binary_op(__v1, __v2); + __init = __binary_op(__init, __v3); + __first += 4; + } + } + for (; __first != __last; ++__first) + __init = __binary_op(__init, *__first); + return __init; + } + + /** + * @brief Calculate reduction of values in a range. + * + * @param __first Start of range. + * @param __last End of range. + * @param __init Starting value to add other values to. + * @return The final sum. + * + * Reduce the values in the range `[first,last)` using addition. + * Equivalent to calling `std::reduce(first, last, init, std::plus<>())`. + */ + template + inline _Tp + reduce(_InputIterator __first, _InputIterator __last, _Tp __init) + { return std::reduce(__first, __last, std::move(__init), plus<>()); } + + /** + * @brief Calculate reduction of values in a range. + * + * @param __first Start of range. + * @param __last End of range. + * @return The final sum. + * + * Reduce the values in the range `[first,last)` using addition, with + * an initial value of `T{}`, where `T` is the iterator's value type. + * Equivalent to calling `std::reduce(first, last, T{}, std::plus<>())`. + */ + template + inline typename iterator_traits<_InputIterator>::value_type + reduce(_InputIterator __first, _InputIterator __last) + { + using value_type = typename iterator_traits<_InputIterator>::value_type; + return std::reduce(__first, __last, value_type{}, plus<>()); + } + + /** + * @brief Combine elements from two ranges and reduce + * + * @param __first1 Start of first range. + * @param __last1 End of first range. + * @param __first2 Start of second range. + * @param __init Starting value to add other values to. + * @param __binary_op1 The function used to perform reduction. + * @param __binary_op2 The function used to combine values from the ranges. + * @return The final sum. + * + * Call `binary_op2(first1[n],first2[n])` for each `n` in `[0,last1-first1)` + * and then use `binary_op1` to reduce the values returned by `binary_op2` + * to a single value of type `T`. + * + * The range beginning at `first2` must contain at least `last1-first1` + * elements. + */ + template + _Tp + transform_reduce(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _Tp __init, + _BinaryOperation1 __binary_op1, + _BinaryOperation2 __binary_op2) + { + if constexpr (__and_v<__is_random_access_iter<_InputIterator1>, + __is_random_access_iter<_InputIterator2>>) + { + while ((__last1 - __first1) >= 4) + { + _Tp __v1 = __binary_op1(__binary_op2(__first1[0], __first2[0]), + __binary_op2(__first1[1], __first2[1])); + _Tp __v2 = __binary_op1(__binary_op2(__first1[2], __first2[2]), + __binary_op2(__first1[3], __first2[3])); + _Tp __v3 = __binary_op1(__v1, __v2); + __init = __binary_op1(__init, __v3); + __first1 += 4; + __first2 += 4; + } + } + for (; __first1 != __last1; ++__first1, (void) ++__first2) + __init = __binary_op1(__init, __binary_op2(*__first1, *__first2)); + return __init; + } + + /** + * @brief Combine elements from two ranges and reduce + * + * @param __first1 Start of first range. + * @param __last1 End of first range. + * @param __first2 Start of second range. + * @param __init Starting value to add other values to. + * @return The final sum. + * + * Call `first1[n]*first2[n]` for each `n` in `[0,last1-first1)` and then + * use addition to sum those products to a single value of type `T`. + * + * The range beginning at `first2` must contain at least `last1-first1` + * elements. + */ + template + inline _Tp + transform_reduce(_InputIterator1 __first1, _InputIterator1 __last1, + _InputIterator2 __first2, _Tp __init) + { + return std::transform_reduce(__first1, __last1, __first2, + std::move(__init), + plus<>(), multiplies<>()); + } + + /** + * @brief Transform the elements of a range and reduce + * + * @param __first Start of range. + * @param __last End of range. + * @param __init Starting value to add other values to. + * @param __binary_op The function used to perform reduction. + * @param __unary_op The function used to transform values from the range. + * @return The final sum. + * + * Call `unary_op(first[n])` for each `n` in `[0,last-first)` and then + * use `binary_op` to reduce the values returned by `unary_op` + * to a single value of type `T`. + */ + template + _Tp + transform_reduce(_InputIterator __first, _InputIterator __last, _Tp __init, + _BinaryOperation __binary_op, _UnaryOperation __unary_op) + { + if constexpr (__is_random_access_iter<_InputIterator>::value) + { + while ((__last - __first) >= 4) + { + _Tp __v1 = __binary_op(__unary_op(__first[0]), + __unary_op(__first[1])); + _Tp __v2 = __binary_op(__unary_op(__first[2]), + __unary_op(__first[3])); + _Tp __v3 = __binary_op(__v1, __v2); + __init = __binary_op(__init, __v3); + __first += 4; + } + } + for (; __first != __last; ++__first) + __init = __binary_op(__init, __unary_op(*__first)); + return __init; + } + + /** @brief Output the cumulative sum of one range to a second range + * + * @param __first Start of input range. + * @param __last End of input range. + * @param __result Start of output range. + * @param __init Initial value. + * @param __binary_op Function to perform summation. + * @return The end of the output range. + * + * Write the cumulative sum (aka prefix sum, aka scan) of the input range + * to the output range. Each element of the output range contains the + * running total of all earlier elements (and the initial value), + * using `binary_op` for summation. + * + * This function generates an "exclusive" scan, meaning the Nth element + * of the output range is the sum of the first N-1 input elements, + * so the Nth input element is not included. + */ + template + _OutputIterator + exclusive_scan(_InputIterator __first, _InputIterator __last, + _OutputIterator __result, _Tp __init, + _BinaryOperation __binary_op) + { + while (__first != __last) + { + auto __v = __init; + __init = __binary_op(__init, *__first); + ++__first; + *__result++ = std::move(__v); + } + return __result; + } + + /** @brief Output the cumulative sum of one range to a second range + * + * @param __first Start of input range. + * @param __last End of input range. + * @param __result Start of output range. + * @param __init Initial value. + * @return The end of the output range. + * + * Write the cumulative sum (aka prefix sum, aka scan) of the input range + * to the output range. Each element of the output range contains the + * running total of all earlier elements (and the initial value), + * using `std::plus<>` for summation. + * + * This function generates an "exclusive" scan, meaning the Nth element + * of the output range is the sum of the first N-1 input elements, + * so the Nth input element is not included. + */ + template + inline _OutputIterator + exclusive_scan(_InputIterator __first, _InputIterator __last, + _OutputIterator __result, _Tp __init) + { + return std::exclusive_scan(__first, __last, __result, std::move(__init), + plus<>()); + } + + /** @brief Output the cumulative sum of one range to a second range + * + * @param __first Start of input range. + * @param __last End of input range. + * @param __result Start of output range. + * @param __binary_op Function to perform summation. + * @param __init Initial value. + * @return The end of the output range. + * + * Write the cumulative sum (aka prefix sum, aka scan) of the input range + * to the output range. Each element of the output range contains the + * running total of all earlier elements (and the initial value), + * using `binary_op` for summation. + * + * This function generates an "inclusive" scan, meaning the Nth element + * of the output range is the sum of the first N input elements, + * so the Nth input element is included. + */ + template + _OutputIterator + inclusive_scan(_InputIterator __first, _InputIterator __last, + _OutputIterator __result, _BinaryOperation __binary_op, + _Tp __init) + { + for (; __first != __last; ++__first) + *__result++ = __init = __binary_op(__init, *__first); + return __result; + } + + /** @brief Output the cumulative sum of one range to a second range + * + * @param __first Start of input range. + * @param __last End of input range. + * @param __result Start of output range. + * @param __binary_op Function to perform summation. + * @return The end of the output range. + * + * Write the cumulative sum (aka prefix sum, aka scan) of the input range + * to the output range. Each element of the output range contains the + * running total of all earlier elements, using `binary_op` for summation. + * + * This function generates an "inclusive" scan, meaning the Nth element + * of the output range is the sum of the first N input elements, + * so the Nth input element is included. + */ + template + _OutputIterator + inclusive_scan(_InputIterator __first, _InputIterator __last, + _OutputIterator __result, _BinaryOperation __binary_op) + { + if (__first != __last) + { + auto __init = *__first; + *__result++ = __init; + ++__first; + if (__first != __last) + __result = std::inclusive_scan(__first, __last, __result, + __binary_op, std::move(__init)); + } + return __result; + } + + /** @brief Output the cumulative sum of one range to a second range + * + * @param __first Start of input range. + * @param __last End of input range. + * @param __result Start of output range. + * @return The end of the output range. + * + * Write the cumulative sum (aka prefix sum, aka scan) of the input range + * to the output range. Each element of the output range contains the + * running total of all earlier elements, using `std::plus<>` for summation. + * + * This function generates an "inclusive" scan, meaning the Nth element + * of the output range is the sum of the first N input elements, + * so the Nth input element is included. + */ + template + inline _OutputIterator + inclusive_scan(_InputIterator __first, _InputIterator __last, + _OutputIterator __result) + { return std::inclusive_scan(__first, __last, __result, plus<>()); } + + /** @brief Output the cumulative sum of one range to a second range + * + * @param __first Start of input range. + * @param __last End of input range. + * @param __result Start of output range. + * @param __init Initial value. + * @param __binary_op Function to perform summation. + * @param __unary_op Function to transform elements of the input range. + * @return The end of the output range. + * + * Write the cumulative sum (aka prefix sum, aka scan) of the input range + * to the output range. Each element of the output range contains the + * running total of all earlier elements (and the initial value), + * using `__unary_op` to transform the input elements + * and using `__binary_op` for summation. + * + * This function generates an "exclusive" scan, meaning the Nth element + * of the output range is the sum of the first N-1 input elements, + * so the Nth input element is not included. + */ + template + _OutputIterator + transform_exclusive_scan(_InputIterator __first, _InputIterator __last, + _OutputIterator __result, _Tp __init, + _BinaryOperation __binary_op, + _UnaryOperation __unary_op) + { + while (__first != __last) + { + auto __v = __init; + __init = __binary_op(__init, __unary_op(*__first)); + ++__first; + *__result++ = std::move(__v); + } + return __result; + } + + /** @brief Output the cumulative sum of one range to a second range + * + * @param __first Start of input range. + * @param __last End of input range. + * @param __result Start of output range. + * @param __binary_op Function to perform summation. + * @param __unary_op Function to transform elements of the input range. + * @param __init Initial value. + * @return The end of the output range. + * + * Write the cumulative sum (aka prefix sum, aka scan) of the input range + * to the output range. Each element of the output range contains the + * running total of all earlier elements (and the initial value), + * using `__unary_op` to transform the input elements + * and using `__binary_op` for summation. + * + * This function generates an "inclusive" scan, meaning the Nth element + * of the output range is the sum of the first N input elements, + * so the Nth input element is included. + */ + template + _OutputIterator + transform_inclusive_scan(_InputIterator __first, _InputIterator __last, + _OutputIterator __result, + _BinaryOperation __binary_op, + _UnaryOperation __unary_op, + _Tp __init) + { + for (; __first != __last; ++__first) + *__result++ = __init = __binary_op(__init, __unary_op(*__first)); + return __result; + } + + /** @brief Output the cumulative sum of one range to a second range + * + * @param __first Start of input range. + * @param __last End of input range. + * @param __result Start of output range. + * @param __binary_op Function to perform summation. + * @param __unary_op Function to transform elements of the input range. + * @return The end of the output range. + * + * Write the cumulative sum (aka prefix sum, aka scan) of the input range + * to the output range. Each element of the output range contains the + * running total of all earlier elements, + * using `__unary_op` to transform the input elements + * and using `__binary_op` for summation. + * + * This function generates an "inclusive" scan, meaning the Nth element + * of the output range is the sum of the first N input elements, + * so the Nth input element is included. + */ + template + _OutputIterator + transform_inclusive_scan(_InputIterator __first, _InputIterator __last, + _OutputIterator __result, + _BinaryOperation __binary_op, + _UnaryOperation __unary_op) + { + if (__first != __last) + { + auto __init = __unary_op(*__first); + *__result++ = __init; + ++__first; + if (__first != __last) + __result = std::transform_inclusive_scan(__first, __last, __result, + __binary_op, __unary_op, + std::move(__init)); + } + return __result; + } + + // @} group numeric_ops + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace std + // Parallel STL algorithms # if __PSTL_EXECUTION_POLICIES_DEFINED // If has already been included, pull in implementations Index: libstdc++-v3/include/std/type_traits =================================================================== --- a/src/libstdc++-v3/include/std/type_traits (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/include/std/type_traits (.../branches/gcc-9-branch) @@ -2662,14 +2662,49 @@ // __is_invocable (std::is_invocable for C++11) - template + // The primary template is used for invalid INVOKE expressions. + template::value, typename = void> struct __is_invocable_impl : false_type { }; + // Used for valid INVOKE and INVOKE expressions. template - struct __is_invocable_impl<_Result, _Ret, __void_t> - : __or_, is_convertible>::type + struct __is_invocable_impl<_Result, _Ret, + /* is_void<_Ret> = */ true, + __void_t> + : true_type { }; +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wctor-dtor-privacy" + // Used for INVOKE expressions to check the implicit conversion to R. + template + struct __is_invocable_impl<_Result, _Ret, + /* is_void<_Ret> = */ false, + __void_t> + { + private: + // The type of the INVOKE expression. + // Unlike declval, this doesn't add_rvalue_reference. + static typename _Result::type _S_get(); + + template + static void _S_conv(_Tp); + + // This overload is viable if INVOKE(f, args...) can convert to _Tp. + template(_S_get()))> + static true_type + _S_test(int); + + template + static false_type + _S_test(...); + + public: + using type = decltype(_S_test<_Ret>(1)); + }; +#pragma GCC diagnostic pop + template struct __is_invocable : __is_invocable_impl<__invoke_result<_Fn, _ArgTypes...>, void>::type Index: libstdc++-v3/include/std/version =================================================================== --- a/src/libstdc++-v3/include/std/version (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/include/std/version (.../branches/gcc-9-branch) @@ -149,7 +149,7 @@ #if __cplusplus > 201703L // c++2a -#define __cpp_lib_bind_front 201902L +#define __cpp_lib_bind_front 201907L #define __cpp_lib_bounded_array_traits 201902L #if __cpp_impl_destroying_delete # define __cpp_lib_destroying_delete 201806L Index: libstdc++-v3/include/std/functional =================================================================== --- a/src/libstdc++-v3/include/std/functional (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/include/std/functional (.../branches/gcc-9-branch) @@ -837,7 +837,7 @@ } #if __cplusplus > 201703L -#define __cpp_lib_bind_front 201902L +#define __cpp_lib_bind_front 201907L template struct _Bind_front @@ -923,7 +923,7 @@ template using _Bind_front_t - = _Bind_front, unwrap_ref_decay_t<_Args>...>; + = _Bind_front, decay_t<_Args>...>; template _Bind_front_t<_Fn, _Args...> Index: libstdc++-v3/include/std/complex =================================================================== --- a/src/libstdc++-v3/include/std/complex (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/include/std/complex (.../branches/gcc-9-branch) @@ -1898,41 +1898,59 @@ template std::complex<_Tp> proj(const std::complex<_Tp>&); + // Generic implementation of std::proj, does not work for infinities. template - std::complex<_Tp> + inline std::complex<_Tp> __complex_proj(const std::complex<_Tp>& __z) - { - const _Tp __den = (__z.real() * __z.real() - + __z.imag() * __z.imag() + _Tp(1.0)); + { return __z; } - return std::complex<_Tp>((_Tp(2.0) * __z.real()) / __den, - (_Tp(2.0) * __z.imag()) / __den); - } - #if _GLIBCXX_USE_C99_COMPLEX - inline __complex__ float - __complex_proj(__complex__ float __z) - { return __builtin_cprojf(__z); } + inline complex + __complex_proj(const complex& __z) + { return __builtin_cprojf(__z.__rep()); } - inline __complex__ double - __complex_proj(__complex__ double __z) - { return __builtin_cproj(__z); } + inline complex + __complex_proj(const complex& __z) + { return __builtin_cproj(__z.__rep()); } - inline __complex__ long double - __complex_proj(const __complex__ long double& __z) - { return __builtin_cprojl(__z); } + inline complex + __complex_proj(const complex& __z) + { return __builtin_cprojl(__z.__rep()); } +#elif defined _GLIBCXX_USE_C99_MATH_TR1 + inline complex + __complex_proj(const complex& __z) + { + if (__builtin_isinf(__z.real()) || __builtin_isinf(__z.imag())) + return complex(__builtin_inff(), + __builtin_copysignf(0.0f, __z.imag())); + return __z; + } + inline complex + __complex_proj(const complex& __z) + { + if (__builtin_isinf(__z.real()) || __builtin_isinf(__z.imag())) + return complex(__builtin_inf(), + __builtin_copysign(0.0, __z.imag())); + return __z; + } + + inline complex + __complex_proj(const complex& __z) + { + if (__builtin_isinf(__z.real()) || __builtin_isinf(__z.imag())) + return complex(__builtin_infl(), + __builtin_copysignl(0.0l, __z.imag())); + return __z; + } +#endif + template inline std::complex<_Tp> proj(const std::complex<_Tp>& __z) - { return __complex_proj(__z.__rep()); } -#else - template - inline std::complex<_Tp> - proj(const std::complex<_Tp>& __z) { return __complex_proj(__z); } -#endif + // Overload for scalars template inline std::complex::__type> proj(_Tp __x) Index: libstdc++-v3/include/experimental/internet =================================================================== --- a/src/libstdc++-v3/include/experimental/internet (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/include/experimental/internet (.../branches/gcc-9-branch) @@ -50,6 +50,9 @@ #ifdef _GLIBCXX_HAVE_ARPA_INET_H # include // inet_ntop #endif +#ifdef _GLIBCXX_HAVE_NETINET_IN_H +# include // IPPROTO_IP +#endif #ifdef _GLIBCXX_HAVE_NETINET_TCP_H # include // TCP_NODELAY #endif @@ -539,7 +542,7 @@ const auto& __aa = __a._M_bytes; const auto& __bb = __b._M_bytes; int __i = 0; - for (; __aa[__i] == __bb[__i] && __i < 16; ++__i) + for (; __i < 16 && __aa[__i] == __bb[__i]; ++__i) ; return __i == 16 ? __a.scope_id() == __b.scope_id() : false; } @@ -554,7 +557,7 @@ const auto& __aa = __a._M_bytes; const auto& __bb = __b._M_bytes; int __i = 0; - for (; __aa[__i] == __bb[__i] && __i < 16; ++__i) + for (; __i < 16 && __aa[__i] == __bb[__i]; ++__i) ; return __i == 16 ? __a.scope_id() < __b.scope_id() : __aa[__i] < __bb[__i]; } Index: libstdc++-v3/include/bits/stl_algobase.h =================================================================== --- a/src/libstdc++-v3/include/bits/stl_algobase.h (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/include/bits/stl_algobase.h (.../branches/gcc-9-branch) @@ -301,7 +301,7 @@ // (2) If we're using random access iterators, then write the loop as // a for loop with an explicit count. - template + template struct __copy_move { template Index: libstdc++-v3/include/bits/stl_numeric.h =================================================================== --- a/src/libstdc++-v3/include/bits/stl_numeric.h (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/include/bits/stl_numeric.h (.../branches/gcc-9-branch) @@ -60,12 +60,16 @@ #include #include // For _GLIBCXX_MOVE -#if __cplusplus >= 201103L namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION + /** @defgroup numeric_ops Generalized Numeric operations + * @ingroup algorithms + */ + +#if __cplusplus >= 201103L /** * @brief Create a range of sequentially increasing values. * @@ -76,6 +80,7 @@ * @param __last End of range. * @param __value Starting value. * @return Nothing. + * @ingroup numeric_ops */ template void @@ -94,14 +99,10 @@ ++__value; } } +#endif _GLIBCXX_END_NAMESPACE_VERSION -} // namespace std -#endif - -namespace std _GLIBCXX_VISIBILITY(default) -{ _GLIBCXX_BEGIN_NAMESPACE_ALGO #if __cplusplus > 201703L @@ -112,6 +113,9 @@ # define _GLIBCXX_MOVE_IF_20(_E) _E #endif + /// @addtogroup numeric_ops + /// @{ + /** * @brief Accumulate values in a range. * @@ -139,8 +143,8 @@ /** * @brief Accumulate values in a range with operation. * - * Accumulates the values in the range [first,last) using the function - * object @p __binary_op. The initial value is @p __init. The values are + * Accumulates the values in the range `[first,last)` using the function + * object `__binary_op`. The initial value is `__init`. The values are * processed in order. * * @param __first Start of range. @@ -390,6 +394,8 @@ return ++__result; } + // @} group numeric_ops + #undef _GLIBCXX_MOVE_IF_20 _GLIBCXX_END_NAMESPACE_ALGO Index: libstdc++-v3/include/bits/stl_uninitialized.h =================================================================== --- a/src/libstdc++-v3/include/bits/stl_uninitialized.h (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/include/bits/stl_uninitialized.h (.../branches/gcc-9-branch) @@ -122,9 +122,15 @@ #if __cplusplus < 201103L const bool __assignable = true; #else - // trivial types can have deleted assignment + // Trivial types can have deleted copy constructor, but the std::copy + // optimization that uses memmove would happily "copy" them anyway. + static_assert(is_constructible<_ValueType2, decltype(*__first)>::value, + "result type must be constructible from value type of input range"); + typedef typename iterator_traits<_InputIterator>::reference _RefType1; typedef typename iterator_traits<_ForwardIterator>::reference _RefType2; + // Trivial types can have deleted assignment, so using std::copy + // would be ill-formed. Require assignability before using std::copy: const bool __assignable = is_assignable<_RefType2, _RefType1>::value; #endif @@ -186,7 +192,13 @@ #if __cplusplus < 201103L const bool __assignable = true; #else - // trivial types can have deleted assignment + // Trivial types can have deleted copy constructor, but the std::fill + // optimization that uses memmove would happily "copy" them anyway. + static_assert(is_constructible<_ValueType, const _Tp&>::value, + "result type must be constructible from input type"); + + // Trivial types can have deleted assignment, so using std::fill + // would be ill-formed. Require assignability before using std::fill: const bool __assignable = is_copy_assignable<_ValueType>::value; #endif @@ -248,7 +260,13 @@ #if __cplusplus < 201103L const bool __assignable = true; #else - // trivial types can have deleted assignment + // Trivial types can have deleted copy constructor, but the std::fill + // optimization that uses memmove would happily "copy" them anyway. + static_assert(is_constructible<_ValueType, const _Tp&>::value, + "result type must be constructible from input type"); + + // Trivial types can have deleted assignment, so using std::fill + // would be ill-formed. Require assignability before using std::fill: const bool __assignable = is_copy_assignable<_ValueType>::value; #endif return __uninitialized_fill_n<__is_trivial(_ValueType) && __assignable>:: Index: libstdc++-v3/include/bits/stl_algo.h =================================================================== --- a/src/libstdc++-v3/include/bits/stl_algo.h (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/include/bits/stl_algo.h (.../branches/gcc-9-branch) @@ -3877,7 +3877,44 @@ return __f; // N.B. [alg.foreach] says std::move(f) but it's redundant. } +#if __cplusplus >= 201703L /** + * @brief Apply a function to every element of a sequence. + * @ingroup non_mutating_algorithms + * @param __first An input iterator. + * @param __n A value convertible to an integer. + * @param __f A unary function object. + * @return `__first+__n` + * + * Applies the function object `__f` to each element in the range + * `[first, first+n)`. `__f` must not modify the order of the sequence. + * If `__f` has a return value it is ignored. + */ + template + _InputIterator + for_each_n(_InputIterator __first, _Size __n, _Function __f) + { + typename iterator_traits<_InputIterator>::difference_type __n2 = __n; + using _Cat = typename iterator_traits<_InputIterator>::iterator_category; + if constexpr (is_base_of_v) + { + auto __last = __first + __n2; + std::for_each(__first, __last, std::move(__f)); + return __last; + } + else + { + while (__n2-->0) + { + __f(*__first); + ++__first; + } + return __first; + } + } +#endif // C++17 + + /** * @brief Find the first occurrence of a value in a sequence. * @ingroup non_mutating_algorithms * @param __first An input iterator. Index: libstdc++-v3/include/bits/algorithmfwd.h =================================================================== --- a/src/libstdc++-v3/include/bits/algorithmfwd.h (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/include/bits/algorithmfwd.h (.../branches/gcc-9-branch) @@ -154,7 +154,7 @@ */ /** - * @defgroup set_algorithms Set Operation + * @defgroup set_algorithms Set Operations * @ingroup sorting_algorithms * * These algorithms are common set operations performed on sequences Index: libstdc++-v3/include/bits/std_function.h =================================================================== --- a/src/libstdc++-v3/include/bits/std_function.h (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/include/bits/std_function.h (.../branches/gcc-9-branch) @@ -359,10 +359,6 @@ } }; - template - using __check_func_return_type - = __or_, is_same<_From, _To>, is_convertible<_From, _To>>; - /** * @brief Primary class template for std::function. * @ingroup functors @@ -375,8 +371,10 @@ private _Function_base { template::type> - struct _Callable : __check_func_return_type<_Res2, _Res> { }; + typename _Res2 = __invoke_result<_Func&, _ArgTypes...>> + struct _Callable + : __is_invocable_impl<_Res2, _Res>::type + { }; // Used so the return type convertibility checks aren't done when // performing overload resolution for copy construction/assignment. Index: libstdc++-v3/include/bits/memoryfwd.h =================================================================== --- a/src/libstdc++-v3/include/bits/memoryfwd.h (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/include/bits/memoryfwd.h (.../branches/gcc-9-branch) @@ -66,9 +66,11 @@ template<> class allocator; +#if __cplusplus >= 201103L /// Declare uses_allocator so it can be specialized in \ etc. template struct uses_allocator; +#endif /// @} group memory Index: libstdc++-v3/include/tr2/dynamic_bitset.tcc =================================================================== --- a/src/libstdc++-v3/include/tr2/dynamic_bitset.tcc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/include/tr2/dynamic_bitset.tcc (.../branches/gcc-9-branch) @@ -174,7 +174,7 @@ // Definitions of non-inline member functions. template - template + template void dynamic_bitset<_WordT, _Alloc>:: _M_copy_from_ptr(const _CharT* __str, size_t __len, Index: libstdc++-v3/include/tr2/dynamic_bitset =================================================================== --- a/src/libstdc++-v3/include/tr2/dynamic_bitset (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/include/tr2/dynamic_bitset (.../branches/gcc-9-branch) @@ -34,10 +34,9 @@ #include #include #include -#include // For std::allocator -#include // For invalid_argument, out_of_range, - // overflow_error -#include +#include +#include +#include // For fill #include namespace std _GLIBCXX_VISIBILITY(default) @@ -76,41 +75,48 @@ std::vector _M_w; explicit - __dynamic_bitset_base(const allocator_type& __alloc = allocator_type()) + __dynamic_bitset_base(const allocator_type& __alloc) : _M_w(__alloc) { } - explicit - __dynamic_bitset_base(__dynamic_bitset_base&& __b) - { this->_M_w.swap(__b._M_w); } + __dynamic_bitset_base() = default; + __dynamic_bitset_base(const __dynamic_bitset_base&) = default; + __dynamic_bitset_base(__dynamic_bitset_base&& __b) = default; + __dynamic_bitset_base& operator=(const __dynamic_bitset_base&) = default; + __dynamic_bitset_base& operator=(__dynamic_bitset_base&&) = default; + ~__dynamic_bitset_base() = default; explicit __dynamic_bitset_base(size_type __nbits, unsigned long long __val = 0ULL, const allocator_type& __alloc = allocator_type()) - : _M_w(__nbits / _S_bits_per_block - + (__nbits % _S_bits_per_block > 0), - __val, __alloc) + : _M_w(__nbits / _S_bits_per_block + (__nbits % _S_bits_per_block > 0), + block_type(0), __alloc) { - unsigned long long __mask = ~static_cast(0); - size_t __n = std::min(this->_M_w.size(), - sizeof(unsigned long long) / sizeof(block_type)); - for (size_t __i = 0; __i < __n; ++__i) + if (__nbits < std::numeric_limits::digits) + __val &= ~(-1ULL << __nbits); + if (__val == 0) + return; + + if _GLIBCXX17_CONSTEXPR (sizeof(__val) == sizeof(block_type)) + _M_w[0] = __val; + else { - this->_M_w[__i] = (__val & __mask) >> (__i * _S_bits_per_block); - __mask <<= _S_bits_per_block; + const size_t __n + = std::min(_M_w.size(), sizeof(__val) / sizeof(block_type)); + for (size_t __i = 0; __val && __i < __n; ++__i) + { + _M_w[__i] = static_cast(__val); + __val >>= _S_bits_per_block; + } } } void - _M_assign(const __dynamic_bitset_base& __b) - { this->_M_w = __b._M_w; } - - void - _M_swap(__dynamic_bitset_base& __b) + _M_swap(__dynamic_bitset_base& __b) noexcept { this->_M_w.swap(__b._M_w); } void - _M_clear() + _M_clear() noexcept { this->_M_w.clear(); } void @@ -129,7 +135,7 @@ } allocator_type - _M_get_allocator() const + _M_get_allocator() const noexcept { return this->_M_w.get_allocator(); } static size_type @@ -149,23 +155,23 @@ { return (static_cast(1)) << _S_whichbit(__pos); } block_type& - _M_getword(size_type __pos) + _M_getword(size_type __pos) noexcept { return this->_M_w[_S_whichword(__pos)]; } block_type - _M_getword(size_type __pos) const + _M_getword(size_type __pos) const noexcept { return this->_M_w[_S_whichword(__pos)]; } block_type& - _M_hiword() + _M_hiword() noexcept { return this->_M_w[_M_w.size() - 1]; } block_type - _M_hiword() const + _M_hiword() const noexcept { return this->_M_w[_M_w.size() - 1]; } void - _M_do_and(const __dynamic_bitset_base& __x) + _M_do_and(const __dynamic_bitset_base& __x) noexcept { if (__x._M_w.size() == this->_M_w.size()) for (size_t __i = 0; __i < this->_M_w.size(); ++__i) @@ -175,7 +181,7 @@ } void - _M_do_or(const __dynamic_bitset_base& __x) + _M_do_or(const __dynamic_bitset_base& __x) noexcept { if (__x._M_w.size() == this->_M_w.size()) for (size_t __i = 0; __i < this->_M_w.size(); ++__i) @@ -185,7 +191,7 @@ } void - _M_do_xor(const __dynamic_bitset_base& __x) + _M_do_xor(const __dynamic_bitset_base& __x) noexcept { if (__x._M_w.size() == this->_M_w.size()) for (size_t __i = 0; __i < this->_M_w.size(); ++__i) @@ -195,7 +201,7 @@ } void - _M_do_dif(const __dynamic_bitset_base& __x) + _M_do_dif(const __dynamic_bitset_base& __x) noexcept { if (__x._M_w.size() == this->_M_w.size()) for (size_t __i = 0; __i < this->_M_w.size(); ++__i) @@ -211,7 +217,7 @@ _M_do_right_shift(size_t __shift); void - _M_do_flip() + _M_do_flip() noexcept { for (size_t __i = 0; __i < this->_M_w.size(); ++__i) this->_M_w[__i] = ~this->_M_w[__i]; @@ -218,21 +224,20 @@ } void - _M_do_set() + _M_do_set() noexcept { for (size_t __i = 0; __i < this->_M_w.size(); ++__i) - this->_M_w[__i] = ~static_cast(0); + this->_M_w[__i] = static_cast(-1); } void - _M_do_reset() + _M_do_reset() noexcept { - for (size_t __i = 0; __i < this->_M_w.size(); ++__i) - this->_M_w[__i] = static_cast(0); + std::fill(_M_w.begin(), _M_w.end(), static_cast(0)); } bool - _M_is_equal(const __dynamic_bitset_base& __x) const + _M_is_equal(const __dynamic_bitset_base& __x) const noexcept { if (__x._M_w.size() == this->_M_w.size()) { @@ -246,7 +251,7 @@ } bool - _M_is_less(const __dynamic_bitset_base& __x) const + _M_is_less(const __dynamic_bitset_base& __x) const noexcept { if (__x._M_w.size() == this->_M_w.size()) { @@ -264,10 +269,10 @@ } size_t - _M_are_all_aux() const + _M_are_all_aux() const noexcept { for (size_t __i = 0; __i < this->_M_w.size() - 1; ++__i) - if (_M_w[__i] != ~static_cast(0)) + if (_M_w[__i] != static_cast(-1)) return 0; return ((this->_M_w.size() - 1) * _S_bits_per_block + __builtin_popcountll(this->_M_hiword())); @@ -274,7 +279,7 @@ } bool - _M_is_any() const + _M_is_any() const noexcept { for (size_t __i = 0; __i < this->_M_w.size(); ++__i) if (this->_M_w[__i] != static_cast(0)) @@ -283,7 +288,7 @@ } bool - _M_is_subset_of(const __dynamic_bitset_base& __b) + _M_is_subset_of(const __dynamic_bitset_base& __b) noexcept { if (__b._M_w.size() == this->_M_w.size()) { @@ -297,7 +302,7 @@ } bool - _M_is_proper_subset_of(const __dynamic_bitset_base& __b) const + _M_is_proper_subset_of(const __dynamic_bitset_base& __b) const noexcept { if (this->is_subset_of(__b)) { @@ -311,7 +316,7 @@ } size_t - _M_do_count() const + _M_do_count() const noexcept { size_t __result = 0; for (size_t __i = 0; __i < this->_M_w.size(); ++__i) @@ -357,6 +362,7 @@ * * See N2050, * Proposal to Add a Dynamically Sizeable Bitset to the Standard Library. + * http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2050.pdf * * In the general unoptimized case, storage is allocated in * word-sized blocks. Let B be the number of bits in a word, then @@ -435,7 +441,7 @@ { size_type __shift = this->_M_Nb % bits_per_block; if (__shift > 0) - this->_M_hiword() &= ~((~static_cast(0)) << __shift); + this->_M_hiword() &= block_type(~(block_type(-1) << __shift)); } // Set the unused bits in the uppermost word. @@ -444,7 +450,7 @@ { size_type __shift = this->_M_Nb % bits_per_block; if (__shift > 0) - this->_M_hiword() |= ((~static_cast(0)) << __shift); + this->_M_hiword() |= block_type(block_type(-1) << __shift); } /** @@ -451,15 +457,15 @@ * These versions of single-bit set, reset, flip, and test * do no range checking. */ - dynamic_bitset<_WordT, _Alloc>& - _M_unchecked_set(size_type __pos) + dynamic_bitset& + _M_unchecked_set(size_type __pos) noexcept { this->_M_getword(__pos) |= _Base::_S_maskbit(__pos); return *this; } - dynamic_bitset<_WordT, _Alloc>& - _M_unchecked_set(size_type __pos, int __val) + dynamic_bitset& + _M_unchecked_set(size_type __pos, int __val) noexcept { if (__val) this->_M_getword(__pos) |= _Base::_S_maskbit(__pos); @@ -468,15 +474,15 @@ return *this; } - dynamic_bitset<_WordT, _Alloc>& - _M_unchecked_reset(size_type __pos) + dynamic_bitset& + _M_unchecked_reset(size_type __pos) noexcept { this->_M_getword(__pos) &= ~_Base::_S_maskbit(__pos); return *this; } - dynamic_bitset<_WordT, _Alloc>& - _M_unchecked_flip(size_type __pos) + dynamic_bitset& + _M_unchecked_flip(size_type __pos) noexcept { this->_M_getword(__pos) ^= _Base::_S_maskbit(__pos); return *this; @@ -483,11 +489,11 @@ } bool - _M_unchecked_test(size_type __pos) const + _M_unchecked_test(size_type __pos) const noexcept { return ((this->_M_getword(__pos) & _Base::_S_maskbit(__pos)) != static_cast<_WordT>(0)); } - size_type _M_Nb; + size_type _M_Nb = 0; public: /** @@ -511,22 +517,16 @@ block_type *_M_wp; size_type _M_bpos; - // left undefined - reference(); - public: - reference(dynamic_bitset& __b, size_type __pos) + reference(dynamic_bitset& __b, size_type __pos) noexcept { this->_M_wp = &__b._M_getword(__pos); this->_M_bpos = _Base::_S_whichbit(__pos); } - ~reference() - { } - // For b[i] = __x; reference& - operator=(bool __x) + operator=(bool __x) noexcept { if (__x) *this->_M_wp |= _Base::_S_maskbit(this->_M_bpos); @@ -537,7 +537,7 @@ // For b[i] = b[__j]; reference& - operator=(const reference& __j) + operator=(const reference& __j) noexcept { if ((*(__j._M_wp) & _Base::_S_maskbit(__j._M_bpos))) *this->_M_wp |= _Base::_S_maskbit(this->_M_bpos); @@ -548,16 +548,16 @@ // Flips the bit bool - operator~() const + operator~() const noexcept { return (*(_M_wp) & _Base::_S_maskbit(this->_M_bpos)) == 0; } // For __x = b[i]; - operator bool() const + operator bool() const noexcept { return (*(this->_M_wp) & _Base::_S_maskbit(this->_M_bpos)) != 0; } // For b[i].flip(); reference& - flip() + flip() noexcept { *this->_M_wp ^= _Base::_S_maskbit(this->_M_bpos); return *this; @@ -569,10 +569,14 @@ typedef bool const_reference; // 23.3.5.1 constructors: + /// All bits set to zero. + dynamic_bitset() = default; + + /// All bits set to zero. explicit - dynamic_bitset(const allocator_type& __alloc = allocator_type()) - : _Base(__alloc), _M_Nb(0) + dynamic_bitset(const allocator_type& __alloc) + : _Base(__alloc) { } /// Initial bits bitwise-copied from a single word (others set to zero). @@ -585,7 +589,7 @@ dynamic_bitset(initializer_list __il, const allocator_type& __alloc = allocator_type()) - : _Base(__alloc), _M_Nb(0) + : _Base(__alloc) { this->append(__il); } /** @@ -609,8 +613,7 @@ __n = std::basic_string<_CharT, _Traits, _Alloc1>::npos, _CharT __zero = _CharT('0'), _CharT __one = _CharT('1'), const allocator_type& __alloc = allocator_type()) - : _Base(__alloc), - _M_Nb(0) // Watch for npos. + : _Base(__alloc) { if (__pos > __str.size()) __throw_out_of_range(__N("dynamic_bitset::bitset initial position " @@ -619,8 +622,7 @@ // Watch for npos. this->_M_Nb = (__n > __str.size() ? __str.size() - __pos : __n); this->resize(this->_M_Nb); - this->_M_copy_from_string(__str, __pos, __n, - _CharT('0'), _CharT('1')); + this->_M_copy_from_string(__str, __pos, __n); } /** @@ -633,61 +635,42 @@ explicit dynamic_bitset(const char* __str, const allocator_type& __alloc = allocator_type()) - : _Base(__alloc) + : _Base(__builtin_strlen(__str), 0ULL, __alloc), + _M_Nb(__builtin_strlen(__str)) { - size_t __len = 0; - if (__str) - while (__str[__len] != '\0') - ++__len; - this->resize(__len); - this->_M_copy_from_ptr> - (__str, __len, 0, __len, '0', '1'); + this->_M_copy_from_ptr(__str, _M_Nb, 0, _M_Nb); } - /** - * @brief Copy constructor. - */ - dynamic_bitset(const dynamic_bitset& __b) - : _Base(__b), _M_Nb(__b.size()) - { } + /// Copy constructor. + dynamic_bitset(const dynamic_bitset&) = default; - /** - * @brief Move constructor. - */ - dynamic_bitset(dynamic_bitset&& __b) - : _Base(std::forward<_Base>(__b)), _M_Nb(__b.size()) - { } + /// Move constructor. + dynamic_bitset(dynamic_bitset&& __b) noexcept + : _Base(std::move(__b)), _M_Nb(__b._M_Nb) + { __b.clear(); } - /** - * @brief Swap with another bitset. - */ + /// Swap with another bitset. void - swap(dynamic_bitset& __b) + swap(dynamic_bitset& __b) noexcept { this->_M_swap(__b); std::swap(this->_M_Nb, __b._M_Nb); } - /** - * @brief Assignment. - */ - dynamic_bitset& - operator=(const dynamic_bitset& __b) - { - if (&__b != this) - { - this->_M_assign(__b); - this->_M_Nb = __b._M_Nb; - } - } + /// Copy assignment operator. + dynamic_bitset& operator=(const dynamic_bitset&) = default; - /** - * @brief Move assignment. - */ + /// Move assignment operator. dynamic_bitset& operator=(dynamic_bitset&& __b) + noexcept(std::is_nothrow_move_assignable<_Base>::value) { - this->swap(__b); + static_cast<_Base&>(*this) = static_cast<_Base&&>(__b); + _M_Nb = __b._M_Nb; + if _GLIBCXX17_CONSTEXPR (std::is_nothrow_move_assignable<_Base>::value) + __b._M_Nb = 0; + else if (get_allocator() == __b.get_allocator()) + __b._M_Nb = 0; return *this; } @@ -695,7 +678,7 @@ * @brief Return the allocator for the bitset. */ allocator_type - get_allocator() const + get_allocator() const noexcept { return this->_M_get_allocator(); } /** @@ -734,6 +717,8 @@ ++this->_M_Nb; } + // XXX why is there no pop_back() member in the proposal? + /** * @brief Append a block. */ @@ -770,36 +755,36 @@ * * These should be self-explanatory. */ - dynamic_bitset<_WordT, _Alloc>& - operator&=(const dynamic_bitset<_WordT, _Alloc>& __rhs) + dynamic_bitset& + operator&=(const dynamic_bitset& __rhs) { this->_M_do_and(__rhs); return *this; } - dynamic_bitset<_WordT, _Alloc>& - operator&=(dynamic_bitset<_WordT, _Alloc>&& __rhs) + dynamic_bitset& + operator&=(dynamic_bitset&& __rhs) { this->_M_do_and(std::move(__rhs)); return *this; } - dynamic_bitset<_WordT, _Alloc>& - operator|=(const dynamic_bitset<_WordT, _Alloc>& __rhs) + dynamic_bitset& + operator|=(const dynamic_bitset& __rhs) { this->_M_do_or(__rhs); return *this; } - dynamic_bitset<_WordT, _Alloc>& - operator^=(const dynamic_bitset<_WordT, _Alloc>& __rhs) + dynamic_bitset& + operator^=(const dynamic_bitset& __rhs) { this->_M_do_xor(__rhs); return *this; } - dynamic_bitset<_WordT, _Alloc>& - operator-=(const dynamic_bitset<_WordT, _Alloc>& __rhs) + dynamic_bitset& + operator-=(const dynamic_bitset& __rhs) { this->_M_do_dif(__rhs); return *this; @@ -813,7 +798,7 @@ * * These should be self-explanatory. */ - dynamic_bitset<_WordT, _Alloc>& + dynamic_bitset& operator<<=(size_type __pos) { if (__builtin_expect(__pos < this->_M_Nb, 1)) @@ -826,7 +811,7 @@ return *this; } - dynamic_bitset<_WordT, _Alloc>& + dynamic_bitset& operator>>=(size_type __pos) { if (__builtin_expect(__pos < this->_M_Nb, 1)) @@ -844,7 +829,7 @@ /** * @brief Sets every bit to true. */ - dynamic_bitset<_WordT, _Alloc>& + dynamic_bitset& set() { this->_M_do_set(); @@ -858,7 +843,7 @@ * @param __val Either true or false, defaults to true. * @throw std::out_of_range If @a __pos is bigger the size of the %set. */ - dynamic_bitset<_WordT, _Alloc>& + dynamic_bitset& set(size_type __pos, bool __val = true) { if (__pos >= _M_Nb) @@ -869,7 +854,7 @@ /** * @brief Sets every bit to false. */ - dynamic_bitset<_WordT, _Alloc>& + dynamic_bitset& reset() { this->_M_do_reset(); @@ -883,7 +868,7 @@ * * Same as writing @c set(__pos, false). */ - dynamic_bitset<_WordT, _Alloc>& + dynamic_bitset& reset(size_type __pos) { if (__pos >= _M_Nb) @@ -894,7 +879,7 @@ /** * @brief Toggles every bit to its opposite value. */ - dynamic_bitset<_WordT, _Alloc>& + dynamic_bitset& flip() { this->_M_do_flip(); @@ -907,7 +892,7 @@ * @param __pos The index of the bit. * @throw std::out_of_range If @a __pos is bigger the size of the %set. */ - dynamic_bitset<_WordT, _Alloc>& + dynamic_bitset& flip(size_type __pos) { if (__pos >= _M_Nb) @@ -916,7 +901,7 @@ } /// See the no-argument flip(). - dynamic_bitset<_WordT, _Alloc> + dynamic_bitset operator~() const { return dynamic_bitset<_WordT, _Alloc>(*this).flip(); } @@ -978,19 +963,23 @@ } // Helper functions for string operations. - template + template, + typename _CharT = typename _Traits::char_type> void _M_copy_from_ptr(const _CharT*, size_t, size_t, size_t, - _CharT, _CharT); + _CharT __zero = _CharT('0'), + _CharT __one = _CharT('1')); template void - _M_copy_from_string(const std::basic_string<_CharT, - _Traits, _Alloc1>& __str, size_t __pos, size_t __n, + _M_copy_from_string(const basic_string<_CharT, _Traits, _Alloc1>& __str, + size_t __pos, size_t __n, _CharT __zero = _CharT('0'), _CharT __one = _CharT('1')) - { _M_copy_from_ptr<_CharT, _Traits>(__str.data(), __str.size(), - __pos, __n, __zero, __one); } + { + _M_copy_from_ptr<_Traits>(__str.data(), __str.size(), __pos, __n, + __zero, __one); + } template void @@ -1065,13 +1054,13 @@ //@{ /// Self-explanatory. - dynamic_bitset<_WordT, _Alloc> + dynamic_bitset operator<<(size_type __pos) const - { return dynamic_bitset<_WordT, _Alloc>(*this) <<= __pos; } + { return dynamic_bitset(*this) <<= __pos; } - dynamic_bitset<_WordT, _Alloc> + dynamic_bitset operator>>(size_type __pos) const - { return dynamic_bitset<_WordT, _Alloc>(*this) >>= __pos; } + { return dynamic_bitset(*this) >>= __pos; } //@} /** @@ -1102,14 +1091,14 @@ { return this->_M_is_proper_subset_of(__b); } friend bool - operator==(const dynamic_bitset<_WordT, _Alloc>& __lhs, - const dynamic_bitset<_WordT, _Alloc>& __rhs) - { return __lhs._M_is_equal(__rhs); } + operator==(const dynamic_bitset& __lhs, + const dynamic_bitset& __rhs) noexcept + { return __lhs._M_Nb == __rhs._M_Nb && __lhs._M_is_equal(__rhs); } friend bool - operator<(const dynamic_bitset<_WordT, _Alloc>& __lhs, - const dynamic_bitset<_WordT, _Alloc>& __rhs) - { return __lhs._M_is_less(__rhs); } + operator<(const dynamic_bitset& __lhs, + const dynamic_bitset& __rhs) noexcept + { return __lhs._M_is_less(__rhs) || __lhs._M_Nb < __rhs._M_Nb; } }; template Index: libstdc++-v3/libsupc++/new_opa.cc =================================================================== --- a/src/libstdc++-v3/libsupc++/new_opa.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/libsupc++/new_opa.cc (.../branches/gcc-9-branch) @@ -114,9 +114,10 @@ sz = 1; #if _GLIBCXX_HAVE_ALIGNED_ALLOC -# ifdef _AIX +# if defined _AIX || defined __APPLE__ /* AIX 7.2.0.0 aligned_alloc incorrectly has posix_memalign's requirement - * that alignment is a multiple of sizeof(void*). */ + * that alignment is a multiple of sizeof(void*). + * OS X 10.15 has the same requirement. */ if (align < sizeof(void*)) align = sizeof(void*); # endif Index: libstdc++-v3/libsupc++/eh_term_handler.h =================================================================== --- a/src/libstdc++-v3/libsupc++/eh_term_handler.h (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/libsupc++/eh_term_handler.h (.../branches/gcc-9-branch) @@ -0,0 +1,39 @@ +// -*- C++ -*- default std::terminate handler +// Copyright (C) 2002-2019 Free Software Foundation, Inc. +// +// This file is part of GCC. +// +// GCC is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 3, or (at your option) +// any later version. +// +// GCC is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +#include + +/* We default to the talkative, informative handler in a normal hosted + library. This pulls in the demangler, the dyn-string utilities, and + elements of the I/O library. For a low-memory environment, you can return + to the earlier "silent death" handler by configuring GCC with + --disable-libstdcxx-verbose and rebuilding the library. + In a freestanding environment, we default to this latter approach. */ + +#if _GLIBCXX_HOSTED && _GLIBCXX_VERBOSE && __cpp_exceptions +# define _GLIBCXX_DEFAULT_TERM_HANDLER __gnu_cxx::__verbose_terminate_handler +#else +# include +# define _GLIBCXX_DEFAULT_TERM_HANDLER std::abort +#endif Index: libstdc++-v3/libsupc++/eh_terminate.cc =================================================================== --- a/src/libstdc++-v3/libsupc++/eh_terminate.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/libsupc++/eh_terminate.cc (.../branches/gcc-9-branch) @@ -26,6 +26,7 @@ #include "exception" #include #include "unwind-cxx.h" +#include "eh_term_handler.h" #include #include @@ -73,6 +74,9 @@ std::terminate_handler std::set_terminate (std::terminate_handler func) throw() { + if (!func) + func = _GLIBCXX_DEFAULT_TERM_HANDLER; + std::terminate_handler old; #if ATOMIC_POINTER_LOCK_FREE > 1 __atomic_exchange (&__terminate_handler, &func, &old, __ATOMIC_ACQ_REL); @@ -100,6 +104,9 @@ std::unexpected_handler std::set_unexpected (std::unexpected_handler func) throw() { + if (!func) + func = std::terminate; + std::unexpected_handler old; #if ATOMIC_POINTER_LOCK_FREE > 1 __atomic_exchange (&__unexpected_handler, &func, &old, __ATOMIC_ACQ_REL); Index: libstdc++-v3/libsupc++/eh_term_handler.cc =================================================================== --- a/src/libstdc++-v3/libsupc++/eh_term_handler.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/libsupc++/eh_term_handler.cc (.../branches/gcc-9-branch) @@ -24,21 +24,8 @@ #include #include "unwind-cxx.h" +#include "eh_term_handler.h" -/* We default to the talkative, informative handler in a normal hosted - library. This pulls in the demangler, the dyn-string utilities, and - elements of the I/O library. For a low-memory environment, you can return - to the earlier "silent death" handler by configuring GCC with - --disable-libstdcxx-verbose and rebuilding the library. - In a freestanding environment, we default to this latter approach. */ - -#if _GLIBCXX_HOSTED && _GLIBCXX_VERBOSE && __cpp_exceptions /* The current installed user handler. */ std::terminate_handler __cxxabiv1::__terminate_handler = - __gnu_cxx::__verbose_terminate_handler; -#else -# include -/* The current installed user handler. */ -std::terminate_handler __cxxabiv1::__terminate_handler = std::abort; -#endif - + _GLIBCXX_DEFAULT_TERM_HANDLER; Index: libstdc++-v3/ChangeLog =================================================================== --- a/src/libstdc++-v3/ChangeLog (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/ChangeLog (.../branches/gcc-9-branch) @@ -1,3 +1,332 @@ +2019-10-28 John David Anglin + + * config/abi/post/hppa-linux-gnu/baseline_symbols.txt: Update. + +2019-10-24 Jonathan Wakely + + Backport from mainline + 2019-05-31 Jonathan Wakely + + PR libstdc++/90682 + * libsupc++/eh_term_handler.cc: Include eh_term_handler.h to get + definition of _GLIBCXX_DEFAULT_TERM_HANDLER. + * libsupc++/eh_term_handler.h: New header defining + _GLIBCXX_DEFAULT_TERM_HANDLER. + * libsupc++/eh_terminate.cc: Include eh_term_handler.h. + (set_terminate): Restore default handler when argument is null. + (set_unexpected): Likewise. + * testsuite/18_support/set_terminate.cc: New test. + * testsuite/18_support/set_unexpected.cc: New test. + + Backport from mainline + 2019-05-01 Jonathan Wakely + + PR libstdc++/61761 + * include/std/complex (__complex_proj): Return parameter unchanged. + [_GLIBCXX_USE_C99_COMPLEX] (__complex_proj): Change overloads for + floating-point types to take std::complex arguments. + [_GLIBCXX_USE_C99_MATH_TR1] (__complex_proj): Add overloads for + floating-point types. + * testsuite/26_numerics/complex/proj.cc: New test. + + Backport from mainline + 2019-06-06 Jonathan Wakely + + * testsuite/23_containers/deque/requirements/dr438/assign_neg.cc: Add + dg-prune-output for different C++98 diagnostic. + * testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc: + Likewise. + * testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc: + Likewise. + * testsuite/23_containers/deque/requirements/dr438/insert_neg.cc: + Likewise. + * testsuite/23_containers/list/requirements/dr438/assign_neg.cc: + Likewise. + * testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc: + Likewise. + * testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc: + Likewise. + * testsuite/23_containers/list/requirements/dr438/insert_neg.cc: + Likewise. + * testsuite/23_containers/vector/requirements/dr438/assign_neg.cc: + Likewise. + * testsuite/23_containers/vector/requirements/dr438/ + constructor_1_neg.cc: Likewise. + * testsuite/23_containers/vector/requirements/dr438/ + constructor_2_neg.cc: Likewise. + * testsuite/23_containers/vector/requirements/dr438/insert_neg.cc: + Likewise. + * testsuite/libstdc++-prettyprinters/compat.cc: Do not run for C++98. + + Backport from mainline + 2019-06-06 Jonathan Wakely + + * testsuite/20_util/is_nothrow_invocable/value.cc: Test converting to + void. + * testsuite/experimental/names.cc: Do not run for C++98 mode. Do not + include Library Fundamentals or Networking headers in C++11 mode. + * testsuite/ext/char8_t/atomic-1.cc: Do not run for C++98 mode. + + Backport from mainline + 2019-05-14 Jonathan Wakely + + * testsuite/util/testsuite_allocator.h (memory_resource) + (default_resource_mgr): Fix indentation. + + Backport from mainline + 2019-08-30 Jonathan Wakely + + PR libstdc++/89164 + * include/bits/stl_algobase.h (__copy_move): Give descriptive names + to template parameters. + * include/bits/stl_uninitialized.h (uninitialized_copy) + (uninitialized_fill, uninitialized_fill_n): Add static assertions to + diagnose invalid uses. + * testsuite/20_util/specialized_algorithms/uninitialized_copy/1.cc: + Adjust expected error. + * testsuite/20_util/specialized_algorithms/uninitialized_copy/89164.cc: + New test. + * testsuite/20_util/specialized_algorithms/uninitialized_copy_n/ + 89164.cc: New test. + * testsuite/20_util/specialized_algorithms/uninitialized_fill/89164.cc: + New test. + * testsuite/20_util/specialized_algorithms/uninitialized_fill_n/ + 89164.cc: New test. + * testsuite/23_containers/vector/cons/89164.cc: New test. + * testsuite/23_containers/vector/cons/89164_c++17.cc: New test. + + Backport from mainline + 2019-10-22 Jonathan Wakely + + * include/bits/memoryfwd.h (uses_allocator): Do not declare for C++98. + * testsuite/17_intro/names.cc: Check uses_allocator in C++98. + + Backport from mainline + 2019-10-18 Jonathan Wakely + + PR libstdc++/92143 + * libsupc++/new_opa.cc (operator new) [__APPLE__]: Increase alignment + to at least sizeof(void*). + + Backport from mainline + 2019-06-06 Jonathan Wakely + + * testsuite/23_containers/unordered_map/requirements/debug_container.cc: + Do not test allocator rebinding extension for C++2a. + * testsuite/23_containers/unordered_set/allocator/ext_ptr.cc: Change + dg-do directive for C++17 and C++2a. + + Backport from mainline + 2019-05-23 Jonathan Wakely + + * testsuite/20_util/function_objects/invoke/1.cc: Add more tests. + Move C++17-specific tests to ... + * testsuite/20_util/function_objects/invoke/3.cc: New test. + * testsuite/23_containers/unordered_set/allocator/ext_ptr.cc: Change + "compile" test to "run". + + Backport from mainline + 2019-10-08 Jonathan Wakely + + * doc/Makefile.am (doc-html-docbook-regenerate): New target. + (${docbook_outdir}/html): Do not create unused 'html/ext' directory. + * doc/Makefile.in: Regenerate. + * doc/xml/manual/documentation_hacking.xml: Document new target. + * doc/html/*: Regenerate. + + * doc/xml/manual/allocator.xml: Use archived copy of CUJ article. + + Backport from mainline + 2019-05-31 Gerald Pfeifer + + * doc/xml/manual/allocator.xml: Move hoard.org back to http. + + Backport from mainline + 2019-08-15 Jonathan Wakely + + PR libstdc++/91456 + * include/bits/std_function.h (__check_func_return_type): Remove. + (function::_Callable): Use std::__is_invocable_impl instead of + __check_func_return_type. + * include/std/type_traits (__is_invocable_impl): Add another defaulted + template parameter. Define a separate partial specialization for + INVOKE and INVOKE. For INVOKE replace is_convertible check + with a check that models delayed temporary materialization. + * testsuite/20_util/function/91456.cc: New test. + * testsuite/20_util/is_invocable/91456.cc: New test. + + Backport from mainline + 2019-09-30 Andreas Tobler + + * include/experimental/internet: Include netinet/in.h if we have + _GLIBCXX_HAVE_NETINET_IN_H defined. + + Backport from mainline + 2019-09-26 Jonathan Wakely + + * include/experimental/internet (operator==, operator<): Fix loop + condition to avoid reading past the end of the array. + + Backport from mainline + 2019-08-06 Jonathan Wakely + + P1651R0 bind_front should not unwrap reference_wrapper + * include/std/functional (bind_front): Don't unwrap reference_wrapper. + * include/std/version (__cpp_lib_bind_front): Update value. + * testsuite/20_util/function_objects/bind_front/1.cc: Fix test for + feature test macro. + * testsuite/20_util/function_objects/bind_front/2.cc: New test. + + Backport from mainline + 2019-10-11 Jonathan Wakely + + PR libstdc++/92059 + * include/tr2/dynamic_bitset (__dynamic_bitset_base): Define all + special member functions as defaulted. Add noexcept to most members. + (__dynamic_bitset_base(size_t, unsigned long long, const _Alloc&)): + Mask off unwanted bits in the __val parameter. Avoid undefined left + shifts. + (__dynamic_bitset_base::_M_assign): Remove. + (__dynamic_bitset_base::_M_do_reset): Use std::fill. + (__dynamic_bitset_base::_M_are_all_aux): Avoid integer promotion when + block_type has lower rank than int. + (dynamic_bitset): Add noexcept to most members. Use injected-class-name + in return types and parameter types. + (dynamic_bitset::_M_Nb): Add default member initializer. + (dynamic_bitset(), dynamic_bitset(const dynamic_bitset&)): Define as + defaulted. + (dynamic_bitset(dynamic_bitset&&)): Clear source object after move. + (dynamic_bitset::operator=(const dynamic_bitset&)): Define as + defaulted. + (dynamic_bitset::operator=(dynamic_bitset&&)): Add noexcept-specifier. + Define without using swap, to propagate allocator correctly. + (dynamic_bitset(const char*, const _Alloc&)): Use strlen. + (dynamic_bitset::_M_do_sanitize, dynamic_bitset::_M_do_fill): Use + casts to avoid unwanted integer promotions. + (dynamic_bitset::_M_copy_from_ptr): Rearrange template parameters and + add default template arguments and default argument to simplify usage. + (dynamic_bitset::_M_copy_from_string): Adjust call to _M_copy_from_ptr. + (operator==(const dynamic_bitset&, const dynamic_bitset&)) + (operator<(const dynamic_bitset&, const dynamic_bitset&)): Use _M_Nb. + * include/tr2/dynamic_bitset.tcc (dynamic_bitset::_M_copy_from_ptr): + Adjust template parameters to match declaration. + * testsuite/tr2/dynamic_bitset/cmp.cc: New test. + * testsuite/tr2/dynamic_bitset/cons.cc: New test. + * testsuite/tr2/dynamic_bitset/copy.cc: New test. + * testsuite/tr2/dynamic_bitset/move.cc: New test. + * testsuite/tr2/dynamic_bitset/pr92059.cc: New test. + +2019-09-12 Jonathan Wakely + + PR libstdc++/91748 + * include/bits/stl_algo.h (for_each_n): Fix random access iterator + case. + * testsuite/25_algorithms/for_each/for_each_n.cc: Test with random + access iterators. + +2019-09-11 Jonathan Wakely + + * python/libstdcxx/v6/xmethods.py (SharedPtrUseCountWorker.__call__): + Fix syntax error. + +2019-09-09 Edward Smith-Rowland <3dw4rd@verizon.net> + + Update docs for p858 - Constexpr iterator changes available since 9.1. + * doc/xml/manual/status_cxx2020.xml: Update p0858r0 status. + +2019-09-02 Jonathan Wakely + + * doc/xml/manual/abi.xml: Document 9.x library versions. + * doc/html/*: Regenerate. + +2019-09-02 Rainer Orth + + * config/abi/post/i386-solaris2.10/baseline_symbols.txt: Regenerate. + * config/abi/post/i386-solaris2.10/amd64/baseline_symbols.txt: Likewise. + * config/abi/post/i386-solaris2.11/baseline_symbols.txt: Likewise. + * config/abi/post/i386-solaris2.11/amd64/baseline_symbols.txt: Likewise. + * config/abi/post/sparc-solaris2.10/baseline_symbols.txt: Likewise. + * config/abi/post/sparc-solaris2.10/sparcv9/baseline_symbols.txt: + Likewise. + * config/abi/post/sparc-solaris2.11/baseline_symbols.txt: Likewise. + * config/abi/post/sparc-solaris2.11/sparcv9/baseline_symbols.txt: + Likewise. + +2019-08-29 Jonathan Wakely + + PR libstdc++/91067 + * acinclude.m4 (libtool_VERSION): Bump to 6:28:0. + * configure: Regenerate. + * config/abi/pre/gnu.ver (GLIBCXX_3.4.28): Add new version. Export + missing symbols. + * testsuite/27_io/filesystem/iterators/91067.cc: Test move + constructors. + * testsuite/util/testsuite_abi.cc: Add new symbol version. + +2019-08-29 Jakub Jelinek + + * config/abi/post/i386-linux-gnu/baseline_symbols.txt: Update. + * config/abi/post/i486-linux-gnu/baseline_symbols.txt: Update. + * config/abi/post/powerpc-linux-gnu/baseline_symbols.txt: Update. + * config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt: Update. + * config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt: Update. + * config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt: Update. + * config/abi/post/x86_64-linux-gnu/baseline_symbols.txt: Update. + +2019-08-23 Joseph Myers + + * src/filesystem/ops-common.h [_GLIBCXX_FILESYSTEM_IS_WINDOWS] + (std::filesystem::__gnu_posix::lstat): Add return type. + +2019-08-20 Jonathan Wakely + + * include/std/numeric (reduce): Fix Doxygen markup. + + Backport from mainline + 2019-06-19 Jonathan Wakely + + * include/std/numeric (reduce(Iter, Iter, T, BinOp)): Fix value + category used in invocable check. + (reduce(Iter, Iter, T)): Pass initial value as rvalue. + * testsuite/26_numerics/reduce/2.cc: New test. + + Backport from mainline + 2019-06-18 Jonathan Wakely + + * include/bits/algorithmfwd.h: Change title of doc group. + * include/bits/stl_algo.h (for_each_n): Add new C++17 algorithm from + P0024R2. + * include/bits/stl_numeric.h: Define doc group and add algos to it. + * include/std/numeric (__is_random_access_iter): New internal trait. + (reduce, transform_reduce, exclusive_scan, inclusive_scan) + (transform_exclusive_scan, transform_inclusive_scan): Likewise. + * testsuite/25_algorithms/for_each/for_each_n.cc: New test. + * testsuite/26_numerics/exclusive_scan/1.cc: New test. + * testsuite/26_numerics/inclusive_scan/1.cc: New test. + * testsuite/26_numerics/reduce/1.cc: New test. + * testsuite/26_numerics/transform_exclusive_scan/1.cc: New test. + * testsuite/26_numerics/transform_inclusive_scan/1.cc: New test. + * testsuite/26_numerics/transform_reduce/1.cc: New test. + * testsuite/util/testsuite_iterators.h (test_container::size()): New + member function. + +2019-08-20 Uros Bizjak + + * config/abi/post/alpha-linux-gnu/baseline_symbols.txt: Update. + +2019-08-13 Jonathan Wakely + + Backport from mainline + 2019-08-12 Jonathan Wakely + + PR libstdc++/90361 + * src/c++17/string-inst.cc: Use _GLIBCXX_USE_CXX11_ABI=1 by default. + 2019-08-12 Release Manager * GCC 9.2.0 released. Index: libstdc++-v3/testsuite/25_algorithms/for_each/for_each_n.cc =================================================================== --- a/src/libstdc++-v3/testsuite/25_algorithms/for_each/for_each_n.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/25_algorithms/for_each/for_each_n.cc (.../branches/gcc-9-branch) @@ -0,0 +1,88 @@ +// { dg-options "-std=gnu++17" } +// { dg-do run { target c++17 } } + +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +#include +#include +#include + +void test01() +{ + using __gnu_test::test_container; + using __gnu_test::input_iterator_wrapper; + int array[5] = { 1, 2, 3, 4, 5 }; + test_container con(array); + + int sum = 0; + struct Func + { + Func(int& i) : i(i) { } + Func(Func&&) = default; + Func& operator=(Func&&) = delete; + void operator()(int n) const { i += n; } + int& i; + }; + + struct Size + { + Size(short v) : val(v) { } + operator short() const { return val; } + short val; + }; + auto res = std::for_each_n(con.begin(), Size(con.size()), Func(sum)); + + VERIFY( res == con.end() ); + VERIFY( sum == 15 ); +} + +void +test02() +{ + using __gnu_test::test_container; + using __gnu_test::random_access_iterator_wrapper; + int array[5] = { 2, 4, 6, 8, 10 }; + test_container con(array); + + int prod = 1; + struct Func + { + Func(int& i) : i(i) { } + Func(Func&&) = default; + Func& operator=(Func&&) = delete; + void operator()(int n) const { i *= n; } + int& i; + }; + + struct Size + { + Size(short v) : val(v) { } + operator short() const { return val; } + short val; + }; + auto res = std::for_each_n(con.begin(), Size(con.size()), Func(prod)); + + VERIFY( res == con.end() ); + VERIFY( prod == 3840 ); +} + +int main() +{ + test01(); + test02(); +} Index: libstdc++-v3/testsuite/18_support/set_terminate.cc =================================================================== --- a/src/libstdc++-v3/testsuite/18_support/set_terminate.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/18_support/set_terminate.cc (.../branches/gcc-9-branch) @@ -0,0 +1,57 @@ +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-options "-std=gnu++11" } +// { dg-do run } + +#include +#include + +void term_handler() { __builtin_abort(); } + +void +test01() +{ + const std::terminate_handler orig = std::get_terminate(); + VERIFY( orig != 0 ); // GNU-specific behaviour + + std::terminate_handler prev = std::set_terminate(term_handler); + VERIFY( std::get_terminate() == term_handler ); + VERIFY( prev == orig ); + + prev = std::set_terminate(orig); + VERIFY( std::get_terminate() == orig ); + VERIFY( prev == term_handler ); +} + +void +test02() +{ + // PR libstdc++/90682 + std::set_terminate(0); // Undefined in C++98, unspecified in C++11 and later + const std::terminate_handler dfault = std::get_terminate(); + VERIFY( dfault != 0 ); // GNU-specific behaviour + const std::terminate_handler prev = std::set_terminate(0); + VERIFY( prev == dfault ); +} + +int +main() +{ + test01(); + test02(); +} Index: libstdc++-v3/testsuite/18_support/set_unexpected.cc =================================================================== --- a/src/libstdc++-v3/testsuite/18_support/set_unexpected.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/18_support/set_unexpected.cc (.../branches/gcc-9-branch) @@ -0,0 +1,57 @@ +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-options "-std=gnu++11" } +// { dg-do run { target { c++11_only || c++14_only } } } + +#include +#include + +void unex_handler() { __builtin_abort(); } + +void +test01() +{ + const std::unexpected_handler orig = std::get_unexpected(); + VERIFY( orig == std::terminate ); // GNU-specific behaviour + + std::unexpected_handler prev = std::set_unexpected(unex_handler); + VERIFY( std::get_unexpected() == unex_handler ); + VERIFY( prev == orig ); + + prev = std::set_unexpected(orig); + VERIFY( std::get_unexpected() == orig ); + VERIFY( prev == unex_handler ); +} + +void +test02() +{ + // PR libstdc++/90682 + std::set_unexpected(0); // Undefined in C++98, unspecified in C++11 and C++14 + const std::unexpected_handler dfault = std::get_unexpected(); + VERIFY( dfault == std::terminate ); // GNU-specific behaviour + const std::unexpected_handler prev = std::set_unexpected(0); + VERIFY( prev == dfault ); +} + +int +main() +{ + test01(); + test02(); +} Index: libstdc++-v3/testsuite/libstdc++-prettyprinters/compat.cc =================================================================== --- a/src/libstdc++-v3/testsuite/libstdc++-prettyprinters/compat.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/libstdc++-prettyprinters/compat.cc (.../branches/gcc-9-branch) @@ -1,5 +1,5 @@ // { dg-options "-g -O0" } -// { dg-do run } +// { dg-do run { target c++11 } } // { dg-skip-if "" { *-*-* } { "-D_GLIBCXX_PROFILE" } } // Copyright (C) 2014-2019 Free Software Foundation, Inc. Index: libstdc++-v3/testsuite/ext/char8_t/atomic-1.cc =================================================================== --- a/src/libstdc++-v3/testsuite/ext/char8_t/atomic-1.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/ext/char8_t/atomic-1.cc (.../branches/gcc-9-branch) @@ -1,6 +1,6 @@ // Test that char8_t related atomic types and macros are not present when // -fchar8_t is not enabled. -// { dg-do compile } +// { dg-do compile { target c++11 } } // { dg-options "-fno-char8_t" } #include Index: libstdc++-v3/testsuite/tr2/dynamic_bitset/cmp.cc =================================================================== --- a/src/libstdc++-v3/testsuite/tr2/dynamic_bitset/cmp.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/tr2/dynamic_bitset/cmp.cc (.../branches/gcc-9-branch) @@ -0,0 +1,50 @@ +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do run { target c++11 } } + +#include +#include + +void +test01() +{ + std::tr2::dynamic_bitset<> a(100); + std::tr2::dynamic_bitset<> b = a; + VERIFY( a == b ); + b.resize(99); + VERIFY( a != b ); +} + +void +test02() +{ + std::tr2::dynamic_bitset<> a(100); + std::tr2::dynamic_bitset<> b = a; + VERIFY( !(a < b) ); + VERIFY( !(b < a) ); + b.resize(99); + VERIFY( !(a < b) ); + VERIFY( b < a ); +} + +int +main() +{ + test01(); + test02(); +} Index: libstdc++-v3/testsuite/tr2/dynamic_bitset/cons.cc =================================================================== --- a/src/libstdc++-v3/testsuite/tr2/dynamic_bitset/cons.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/tr2/dynamic_bitset/cons.cc (.../branches/gcc-9-branch) @@ -0,0 +1,105 @@ +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do run { target c++11 } } + +#include +#include + +void +test01() +{ + std::tr2::dynamic_bitset<> a; + VERIFY( a.size() == 0 ); + VERIFY( a.empty() ); + std::tr2::dynamic_bitset<> b(1); + VERIFY( b.size() == 1 ); + VERIFY( !b.empty() ); + VERIFY( a != b ); +} + +void +test02() +{ + std::tr2::dynamic_bitset<> a(1, 0); // { 0 } + std::tr2::dynamic_bitset<> b(2, 2); // { 0, 1 } + VERIFY( a != b ); +} + +void +test03() +{ + std::tr2::dynamic_bitset<> a; + a.resize(1); // { 0 } + std::tr2::dynamic_bitset<> b(2, 2); // { 0, 1 } + VERIFY( a != b ); +} + +void +test04() +{ + std::tr2::dynamic_bitset<> a(3, 2); // { 0, 1, 0 } + std::tr2::dynamic_bitset<> b(2, 2); // { 0, 1 } + VERIFY( a != b ); +} + +void +test05() +{ + std::tr2::dynamic_bitset a(1, 0); // { 0 } + std::tr2::dynamic_bitset b(2, 2); // { 0, 1 } + VERIFY( a != b ); +} + +void +test06() +{ + std::tr2::dynamic_bitset a; + a.resize(1); // { 0 } + std::tr2::dynamic_bitset b(2, 2); // { 0, 1 } + VERIFY( a != b ); +} + +void +test07() +{ + std::tr2::dynamic_bitset a(3, 2); // { 0, 1, 0 } + std::tr2::dynamic_bitset b(2, 2); // { 0, 1 } + VERIFY( a != b ); +} + +void +test08() +{ + std::tr2::dynamic_bitset<> a(65, -1ULL); + std::tr2::dynamic_bitset<> b(64, -1ULL); + b.push_back(0); + VERIFY( a == b ); +} + +int +main() +{ + test01(); + test02(); + test03(); + test04(); + test05(); + test06(); + test07(); + test08(); +} Index: libstdc++-v3/testsuite/tr2/dynamic_bitset/move.cc =================================================================== --- a/src/libstdc++-v3/testsuite/tr2/dynamic_bitset/move.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/tr2/dynamic_bitset/move.cc (.../branches/gcc-9-branch) @@ -0,0 +1,53 @@ +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do run { target c++11 } } + +#include +#include + +void +test01() +{ + std::tr2::dynamic_bitset<> a(100); + const auto n = a.num_blocks(); + std::tr2::dynamic_bitset<> b = std::move(a); + VERIFY(b.num_blocks() == n); + VERIFY(b.size() == 100); + VERIFY(a.num_blocks() == 0); + VERIFY(a.size() == 0); +} + +void +test02() +{ + std::tr2::dynamic_bitset<> a(100); + const auto n = a.num_blocks(); + std::tr2::dynamic_bitset<> b; + b = std::move(a); + VERIFY(b.num_blocks() == n); + VERIFY(b.size() == 100); + VERIFY(a.num_blocks() == 0); + VERIFY(a.size() == 0); +} + +int +main() +{ + test01(); + test02(); +} Index: libstdc++-v3/testsuite/tr2/dynamic_bitset/copy.cc =================================================================== --- a/src/libstdc++-v3/testsuite/tr2/dynamic_bitset/copy.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/tr2/dynamic_bitset/copy.cc (.../branches/gcc-9-branch) @@ -0,0 +1,55 @@ +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do run { target c++11 } } + +#include +#include + +void +test01() +{ + std::tr2::dynamic_bitset<> a(100); + const auto n = a.num_blocks(); + std::tr2::dynamic_bitset<> b = a; + VERIFY(b.num_blocks() == n); + VERIFY(b.size() == 100); + VERIFY(a.num_blocks() == n); + VERIFY(a.size() == 100); + VERIFY(b == a); +} + +void +test02() +{ + std::tr2::dynamic_bitset<> a(100); + const auto n = a.num_blocks(); + std::tr2::dynamic_bitset<> b; + b = a; + VERIFY(b.num_blocks() == n); + VERIFY(b.size() == 100); + VERIFY(a.num_blocks() == n); + VERIFY(a.size() == 100); + VERIFY(b == a); +} + +int +main() +{ + test01(); + test02(); +} Index: libstdc++-v3/testsuite/tr2/dynamic_bitset/pr92059.cc =================================================================== --- a/src/libstdc++-v3/testsuite/tr2/dynamic_bitset/pr92059.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/tr2/dynamic_bitset/pr92059.cc (.../branches/gcc-9-branch) @@ -0,0 +1,36 @@ +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do run { target c++11 } } + +#include +#include + +void +test01() +{ + // PR libstdc++/92059 + std::tr2::dynamic_bitset<> b1(10000), b2(10000); + b2 = b1; // crashed on missing return + VERIFY( b2 == b1); +} + +int +main() +{ + test01(); +} Index: libstdc++-v3/testsuite/23_containers/unordered_map/requirements/debug_container.cc =================================================================== --- a/src/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/debug_container.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/23_containers/unordered_map/requirements/debug_container.cc (.../branches/gcc-9-branch) @@ -30,7 +30,7 @@ template class __gnu_debug::unordered_map, equal_to, allocator>>; -#ifndef __STRICT_ANSI__ +#if !defined __STRICT_ANSI__ && __cplusplus <= 201703L template class __gnu_debug::unordered_map, equal_to, allocator>; Index: libstdc++-v3/testsuite/23_containers/vector/cons/89164.cc =================================================================== --- a/src/libstdc++-v3/testsuite/23_containers/vector/cons/89164.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/23_containers/vector/cons/89164.cc (.../branches/gcc-9-branch) @@ -0,0 +1,40 @@ +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do compile { target c++11 } } + +#include + +// PR libstdc++/89164 + +struct X +{ + X() = default; + X(const X&) = delete; +}; + +void test01() +{ + X x[1]; + // Should not be able to create vector using uninitialized_copy: + std::vector v1{x, x+1}; // { dg-error "here" } + + // Should not be able to create vector using uninitialized_fill_n: + std::vector v2{2u, X{}}; // { dg-error "here" } +} +// { dg-error "constructible from value" "" { target *-*-* } 0 } +// { dg-error "constructible from input" "" { target *-*-* } 0 } Index: libstdc++-v3/testsuite/23_containers/vector/cons/89164_c++17.cc =================================================================== --- a/src/libstdc++-v3/testsuite/23_containers/vector/cons/89164_c++17.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/23_containers/vector/cons/89164_c++17.cc (.../branches/gcc-9-branch) @@ -0,0 +1,50 @@ +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-options "-std=gnu++17" } +// { dg-do compile { target c++17 } } + +#include + +// PR libstdc++/89164 + +struct X +{ + X() = default; + X(const X&) = delete; +}; + +void test01() +{ + X x[1]; + // Should not be able to create vector using uninitialized_copy: + std::vector v1{x, x+1}; // { dg-error "here" } + + // Should not be able to create vector using uninitialized_fill_n: + std::vector v2{2u, X{}}; // { dg-error "here" } +} + +void test02() +{ +#if __cplusplus >= 201703L + // Can create initializer_list with C++17 guaranteed copy elision, + // but shouldn't be able to copy from it with uninitialized_copy: + std::vector v3{X{}, X{}, X{}}; // { dg-error "here" } +#endif +} +// { dg-error "constructible from value" "" { target *-*-* } 0 } +// { dg-error "constructible from input" "" { target *-*-* } 0 } Index: libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc =================================================================== --- a/src/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/assign_neg.cc (.../branches/gcc-9-branch) @@ -18,6 +18,7 @@ // . // { dg-do compile } +// { dg-prune-output "cannot convert" } // { dg-prune-output "no matching function .*_M_fill_assign" } #include Index: libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc =================================================================== --- a/src/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/insert_neg.cc (.../branches/gcc-9-branch) @@ -18,6 +18,7 @@ // . // { dg-do compile } +// { dg-prune-output "cannot convert" } // { dg-prune-output "no matching function .*_M_fill_insert" } #include Index: libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc =================================================================== --- a/src/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_1_neg.cc (.../branches/gcc-9-branch) @@ -18,6 +18,7 @@ // . // { dg-do compile } +// { dg-prune-output "cannot convert" } // { dg-prune-output "no matching function .*_M_fill_initialize" } #include Index: libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc =================================================================== --- a/src/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/23_containers/vector/requirements/dr438/constructor_2_neg.cc (.../branches/gcc-9-branch) @@ -18,6 +18,7 @@ // . // { dg-do compile } +// { dg-prune-output "cannot convert" } // { dg-prune-output "no matching function .*_M_fill_initialize" } #include Index: libstdc++-v3/testsuite/23_containers/unordered_set/allocator/ext_ptr.cc =================================================================== --- a/src/libstdc++-v3/testsuite/23_containers/unordered_set/allocator/ext_ptr.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/23_containers/unordered_set/allocator/ext_ptr.cc (.../branches/gcc-9-branch) @@ -15,7 +15,8 @@ // with this library; see the file COPYING3. If not see // . -// { dg-do compile { target c++11 } } +// { dg-do run { target { c++11_only || c++14_only } } } +// { dg-do compile { target c++17 } } #include #include Index: libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc =================================================================== --- a/src/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/assign_neg.cc (.../branches/gcc-9-branch) @@ -18,6 +18,7 @@ // . // { dg-do compile } +// { dg-prune-output "cannot convert" } // { dg-prune-output "no matching function .*_M_fill_assign" } #include Index: libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc =================================================================== --- a/src/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/insert_neg.cc (.../branches/gcc-9-branch) @@ -18,6 +18,7 @@ // . // { dg-do compile } +// { dg-prune-output "cannot convert" } // { dg-prune-output "no matching function .*_M_fill_insert" } #include Index: libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc =================================================================== --- a/src/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_1_neg.cc (.../branches/gcc-9-branch) @@ -18,6 +18,7 @@ // . // { dg-do compile } +// { dg-prune-output "cannot convert" } // { dg-prune-output "no matching function .*_M_fill_initialize" } #include Index: libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc =================================================================== --- a/src/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/23_containers/deque/requirements/dr438/constructor_2_neg.cc (.../branches/gcc-9-branch) @@ -18,6 +18,7 @@ // . // { dg-do compile } +// { dg-prune-output "cannot convert" } // { dg-prune-output "no matching function .*_M_fill_initialize" } #include Index: libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc =================================================================== --- a/src/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/assign_neg.cc (.../branches/gcc-9-branch) @@ -18,6 +18,7 @@ // . // { dg-do compile } +// { dg-prune-output "cannot convert" } // { dg-prune-output "no matching function .*_M_fill_assign" } #include Index: libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc =================================================================== --- a/src/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/insert_neg.cc (.../branches/gcc-9-branch) @@ -18,6 +18,7 @@ // . // { dg-do compile } +// { dg-prune-output "cannot convert" } // { dg-prune-output "no matching function .*_M_fill_initialize" } #include Index: libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc =================================================================== --- a/src/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_1_neg.cc (.../branches/gcc-9-branch) @@ -18,6 +18,7 @@ // . // { dg-do compile } +// { dg-prune-output "cannot convert" } // { dg-prune-output "no matching function .*_M_fill_initialize" } #include Index: libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc =================================================================== --- a/src/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/23_containers/list/requirements/dr438/constructor_2_neg.cc (.../branches/gcc-9-branch) @@ -18,6 +18,7 @@ // . // { dg-do compile } +// { dg-prune-output "cannot convert" } // { dg-prune-output "no matching function .*_M_fill_initialize" } #include Index: libstdc++-v3/testsuite/27_io/filesystem/iterators/91067.cc =================================================================== --- a/src/libstdc++-v3/testsuite/27_io/filesystem/iterators/91067.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/27_io/filesystem/iterators/91067.cc (.../branches/gcc-9-branch) @@ -37,9 +37,25 @@ d = std::move(d); } +void +test03() +{ + std::filesystem::directory_iterator d; + auto d2 = std::move(d); +} + +void +test04() +{ + std::filesystem::recursive_directory_iterator d; + auto d2 = std::move(d); +} + int main() { test01(); test02(); + test03(); + test04(); } Index: libstdc++-v3/testsuite/26_numerics/transform_inclusive_scan/1.cc =================================================================== --- a/src/libstdc++-v3/testsuite/26_numerics/transform_inclusive_scan/1.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/26_numerics/transform_inclusive_scan/1.cc (.../branches/gcc-9-branch) @@ -0,0 +1,94 @@ +// { dg-options "-std=gnu++17" } +// { dg-do run { target c++17 } } + +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// C++17 29.8.10 [transform.inclusive.scan] + +#include +#include +#include +#include + +int a[] = {1, 2, 3, 4, 5, 6, 7}; + +using __gnu_test::test_container; +using __gnu_test::input_iterator_wrapper; +using __gnu_test::output_iterator_wrapper; + +/* +template + OutputIterator + transform_inclusive_scan(InputIterator, InputIterator, OutputIterator, + BinaryOperation, UnaryOperation); +*/ +void +test01() +{ + int out[7]; + test_container co(out); + test_container ca(a); + auto end = std::transform_inclusive_scan(ca.begin(), ca.end(), co.begin(), + std::multiplies<>(), + [](int i) { return i+1; }); + static_assert(std::is_same_v); + VERIFY( end.ptr == out+7 ); + VERIFY( out[0] == 2 ); + VERIFY( out[1] == (2*3) ); + VERIFY( out[2] == (2*3*4) ); + VERIFY( out[3] == (2*3*4*5) ); + VERIFY( out[4] == (2*3*4*5*6) ); + VERIFY( out[5] == (2*3*4*5*6*7) ); + VERIFY( out[6] == (2*3*4*5*6*7*8) ); +} + +/* +template + OutputIterator + transform_inclusive_scan(InputIterator, InputIterator, OutputIterator, + BinaryOperation, UnaryOperation, T); +*/ +void +test02() +{ + int out[7]; + test_container co(out); + test_container ca(a); + auto end = std::transform_inclusive_scan(ca.begin(), ca.end(), co.begin(), + std::multiplies<>(), + [](int i) { return i+1; }, + 3); + static_assert(std::is_same_v); + VERIFY( end.ptr == out+7 ); + VERIFY( out[0] == 3*2 ); + VERIFY( out[1] == (3*2*3) ); + VERIFY( out[2] == (3*2*3*4) ); + VERIFY( out[3] == (3*2*3*4*5) ); + VERIFY( out[4] == (3*2*3*4*5*6) ); + VERIFY( out[5] == (3*2*3*4*5*6*7) ); + VERIFY( out[6] == (3*2*3*4*5*6*7*8) ); +} + +int +main() +{ + test01(); + test02(); +} Index: libstdc++-v3/testsuite/26_numerics/transform_reduce/1.cc =================================================================== --- a/src/libstdc++-v3/testsuite/26_numerics/transform_reduce/1.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/26_numerics/transform_reduce/1.cc (.../branches/gcc-9-branch) @@ -0,0 +1,109 @@ +// { dg-options "-std=gnu++17" } +// { dg-do run { target c++17 } } + +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// C++17 29.8.5 [transform.reduce] + +#include +#include +#include +#include + +int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; +double b[] = {0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5}; + +using __gnu_test::test_container; +using __gnu_test::input_iterator_wrapper; + +/* +template + T transform_reduce(InputIterator1, InputIterator1, InputIterator2, T); +*/ +void +test01() +{ + auto res = std::transform_reduce(std::begin(a), std::end(a), std::begin(b), + 1.0f); + static_assert(std::is_same_v); + VERIFY( res == (float)(1 + 0.5 + 1 + 1.5 + 2 + 2.5 + 3 + 3.5 + 4 + 4.5 + 5) ); + + test_container ca(a); + test_container cb(b); + + auto res2 = std::transform_reduce(ca.begin(), ca.end(), cb.begin(), + 1.0f); + static_assert(std::is_same_v); + VERIFY( res2 == res ); +} + +/* +template + T transform_reduce(InputIterator1, InputIterator1, InputIterator2, T, + BinaryOperation1, BinaryOperation2); +*/ +void +test02() +{ + auto res = std::transform_reduce(std::begin(a), std::end(a), std::begin(b), + 1L, std::multiplies<>(), std::plus()); + static_assert(std::is_same_v); + VERIFY( res == (1L * 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10) ); + + test_container ca(a); + test_container cb(b); + + auto res2 = std::transform_reduce(ca.begin(), ca.end(), cb.begin(), + 1L, std::multiplies<>(), std::plus()); + static_assert(std::is_same_v); + VERIFY( res2 == res ); +} + +/* +template + T transform_reduce(InputIterator, InputIterator, T, + BinaryOperation, UnaryOperation); +*/ +void +test03() +{ + auto res = std::transform_reduce(std::begin(a), std::end(a), 10.0, + std::plus<>(), + [](int i) { return i * i; }); + static_assert(std::is_same_v); + VERIFY( res == (10.0 + 1 + 4 + 9 + 16 + 25 + 36 + 49 + 64 + 81 + 100) ); + + test_container ca(a); + test_container cb(b); + + auto res2 = std::transform_reduce(ca.begin(), ca.end(), 10.0, + std::plus<>(), + [](int i) { return i * i; }); + static_assert(std::is_same_v); + VERIFY( res2 == (10.0 + 1 + 4 + 9 + 16 + 25 + 36 + 49 + 64 + 81 + 100) ); +} + +int +main() +{ + test01(); + test02(); + test03(); +} Index: libstdc++-v3/testsuite/26_numerics/inclusive_scan/1.cc =================================================================== --- a/src/libstdc++-v3/testsuite/26_numerics/inclusive_scan/1.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/26_numerics/inclusive_scan/1.cc (.../branches/gcc-9-branch) @@ -0,0 +1,123 @@ +// { dg-options "-std=gnu++17" } +// { dg-do run { target c++17 } } + +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// C++17 29.8.8 [inclusive.scan] + +#include +#include +#include +#include + +int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + +using __gnu_test::test_container; +using __gnu_test::input_iterator_wrapper; +using __gnu_test::output_iterator_wrapper; + +/* +template + OutputIterator + inclusive_scan(InputIterator, InputIterator, OutputIterator); +*/ +void +test01() +{ + int out[10]; + test_container co(out); + test_container ca(a); + auto end = std::inclusive_scan(ca.begin(), ca.end(), co.begin()); + static_assert(std::is_same_v); + VERIFY( end.ptr == out+10 ); + VERIFY( out[0] == 1 ); + VERIFY( out[1] == (1+2) ); + VERIFY( out[2] == (1+2+3) ); + VERIFY( out[3] == (1+2+3+4) ); + VERIFY( out[4] == (1+2+3+4+5) ); + VERIFY( out[5] == (1+2+3+4+5+6) ); + VERIFY( out[6] == (1+2+3+4+5+6+7) ); + VERIFY( out[7] == (1+2+3+4+5+6+7+8) ); + VERIFY( out[8] == (1+2+3+4+5+6+7+8+9) ); + VERIFY( out[9] == (1+2+3+4+5+6+7+8+9+10) ); +} + +/* +template + OutputIterator + inclusive_scan(InputIterator, InputIterator, OutputIterator, + BinaryOperation); +*/ +void +test02() +{ + int out[10]; + test_container co(out); + test_container ca(a); + auto end = std::inclusive_scan(ca.begin(), ca.end(), co.begin(), + [](int i, int j) { return 2*i + 2*j; }); + static_assert(std::is_same_v); + VERIFY( end.ptr == out+10 ); + VERIFY( out[0] == 1 ); + VERIFY( out[1] == (2*1+2*2) ); + VERIFY( out[2] == (2*6+2*3) ); + VERIFY( out[3] == (2*18+2*4) ); + VERIFY( out[4] == (2*44+2*5) ); + VERIFY( out[5] == (2*98+2*6)); + VERIFY( out[6] == (2*208+2*7) ); + VERIFY( out[7] == (2*430+2*8) ); + VERIFY( out[8] == (2*876+2*9) ); + VERIFY( out[9] == (2*1770+2*10) ); +} + +/* +template + OutputIterator + inclusive_scan(InputIterator, InputIterator, OutputIterator, + BinaryOperation, T); +*/ +void +test03() +{ + int out[10]; + test_container co(out); + test_container ca(a); + auto end = std::inclusive_scan(ca.begin(), ca.end(), co.begin(), + [](int i, int j) { return 2*i + 2*j; }, + 1); + static_assert(std::is_same_v); + VERIFY( end.ptr == out+10 ); + VERIFY( out[0] == 4 ); + VERIFY( out[1] == (2*4+2*2) ); + VERIFY( out[2] == (2*12+2*3) ); + VERIFY( out[3] == (2*30+2*4) ); + VERIFY( out[4] == (2*68+2*5) ); + VERIFY( out[5] == (2*146+2*6) ); + VERIFY( out[6] == (2*304+2*7)); + VERIFY( out[7] == (2*622+2*8) ); + VERIFY( out[8] == (2*1260+2*9) ); + VERIFY( out[9] == (2*2538+2*10) ); +} + +int +main() +{ + test01(); + test02(); + test03(); +} Index: libstdc++-v3/testsuite/26_numerics/transform_exclusive_scan/1.cc =================================================================== --- a/src/libstdc++-v3/testsuite/26_numerics/transform_exclusive_scan/1.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/26_numerics/transform_exclusive_scan/1.cc (.../branches/gcc-9-branch) @@ -0,0 +1,65 @@ +// { dg-options "-std=gnu++17" } +// { dg-do run { target c++17 } } + +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// C++17 29.8.9 [transform.exclusive.scan] + +#include +#include +#include +#include + +int a[] = {1, 2, 3, 4, 5, 6, 7}; + +using __gnu_test::test_container; +using __gnu_test::input_iterator_wrapper; +using __gnu_test::output_iterator_wrapper; + +/* +template + OutputIterator + transform_exclusive_scan(InputIterator, InputIterator, OutputIterator, T, + BinaryOperation, UnaryOperation); +*/ +void +test01() +{ + int out[7]; + test_container co(out); + test_container ca(a); + auto end = std::transform_exclusive_scan(ca.begin(), ca.end(), co.begin(), 5, + std::multiplies<>(), + std::negate<>()); + static_assert(std::is_same_v); + VERIFY( end.ptr == out+7 ); + VERIFY( out[0] == 5 ); + VERIFY( out[1] == -5 ); + VERIFY( out[2] == 10 ); + VERIFY( out[3] == -30 ); + VERIFY( out[4] == 120 ); + VERIFY( out[5] == -600 ); + VERIFY( out[6] == 3600 ); +} + +int +main() +{ + test01(); +} Index: libstdc++-v3/testsuite/26_numerics/complex/proj.cc =================================================================== --- a/src/libstdc++-v3/testsuite/26_numerics/complex/proj.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/26_numerics/complex/proj.cc (.../branches/gcc-9-branch) @@ -0,0 +1,403 @@ +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do run { target c++11 } } + +#include +#include +#include + +namespace test +{ +#ifdef _GLIBCXX_USE_C99_MATH_TR1 + using std::copysign; +#else + bool copysign(float x, float y) + { return __builtin_copysignf(x, y); } + + bool copysign(double x, double y) + { return __builtin_copysign(x, y); } + + bool copysign(long double x, long double y) + { return __builtin_copysignl(x, y); } +#endif +} + +template +bool eq(const std::complex& x, const std::complex& y) +{ + bool nan_reals = std::isnan(x.real()) && std::isnan(y.real()); + bool nan_imags = std::isnan(x.imag()) && std::isnan(y.imag()); + + bool sign_reals + = test::copysign(T(1), x.real()) == test::copysign(T(1), y.real()); + bool sign_imags + = test::copysign(T(1), x.imag()) == test::copysign(T(1), y.imag()); + + return ((x.real() == y.real() && sign_reals) || nan_reals) + && ((x.imag() == y.imag() && sign_imags) || nan_imags); +} + +void +test01() +{ + const double qnan = std::numeric_limits::quiet_NaN(); + const double pinf = std::numeric_limits::infinity(); + const double ninf = -pinf; + + std::complex c00(0, 0); + VERIFY( eq( std::proj(c00) , c00 ) ); + VERIFY( eq( std::proj(-c00) , -c00 ) ); + c00.real(-0.0); + VERIFY( eq( std::proj(c00) , c00 ) ); + VERIFY( eq( std::proj(-c00) , -c00 ) ); + + const std::complex c01(0, 1); + VERIFY( eq( std::proj(c01) , c01 ) ); + VERIFY( eq( std::proj(-c01) , -c01 ) ); + c00.real(-0.0); + VERIFY( eq( std::proj(c01) , c01 ) ); + VERIFY( eq( std::proj(-c01) , -c01 ) ); + + const std::complex c10(1, 0); + VERIFY( eq( std::proj(c10) , c10 ) ); + VERIFY( eq( std::proj(-c10) , -c10 ) ); + + const std::complex c12(1, 2); + VERIFY( eq( std::proj(c12) , c12 ) ); + VERIFY( eq( std::proj(-c12) , -c12 ) ); + + const std::complex c0q(0, qnan); + VERIFY( eq( std::proj(c0q) , c0q ) ); + VERIFY( eq( std::proj(-c0q) , -c0q ) ); + + const std::complex c1q(1, qnan); + VERIFY( eq( std::proj(c1q) , c1q ) ); + VERIFY( eq( std::proj(-c1q) , -c1q ) ); + + const std::complex cq0(qnan, 0); + VERIFY( eq( std::proj(cq0) , cq0 ) ); + VERIFY( eq( std::proj(-cq0) , -cq0 ) ); + + const std::complex cq1(qnan, 1); + VERIFY( eq( std::proj(cq1) , cq1 ) ); + VERIFY( eq( std::proj(-cq1) , -cq1 ) ); + + const std::complex cqq(qnan, qnan); + VERIFY( eq( std::proj(cqq) , cqq ) ); + VERIFY( eq( std::proj(-cqq) , -cqq ) ); + + const std::complex c0p(0, pinf); + VERIFY( eq( std::proj(c0p) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-c0p) , std::complex(pinf, -0.0) ) ); + + const std::complex c1p(1, pinf); + VERIFY( eq( std::proj(c1p) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-c1p) , std::complex(pinf, -0.0) ) ); + + const std::complex cqp(qnan, pinf); + VERIFY( eq( std::proj(cqp) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cqp) , std::complex(pinf, -0.0) ) ); + + const std::complex cpp(pinf, pinf); + VERIFY( eq( std::proj(cpp) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cpp) , std::complex(pinf, -0.0) ) ); + + const std::complex c0n(0, ninf); + VERIFY( eq( std::proj(c0n) , std::complex(pinf, -0.0) ) ); + VERIFY( eq( std::proj(-c0n) , std::complex(pinf, +0.0) ) ); + + const std::complex c1n(1, ninf); + VERIFY( eq( std::proj(c1n) , std::complex(pinf, -0.0) ) ); + VERIFY( eq( std::proj(-c1n) , std::complex(pinf, +0.0) ) ); + + const std::complex cqn(qnan, ninf); + VERIFY( eq( std::proj(cqn) , std::complex(pinf, -0.0) ) ); + VERIFY( eq( std::proj(-cqn) , std::complex(pinf, +0.0) ) ); + + const std::complex cpn(pinf, ninf); + VERIFY( eq( std::proj(cpn) , std::complex(pinf, -0.0) ) ); + VERIFY( eq( std::proj(-cpn) , std::complex(pinf, +0.0) ) ); + + const std::complex cnn(ninf, ninf); + VERIFY( eq( std::proj(cnn) , std::complex(pinf, -0.0) ) ); + VERIFY( eq( std::proj(-cnn) , std::complex(pinf, +0.0) ) ); + + const std::complex cp0(pinf, 0); + VERIFY( eq( std::proj(cp0) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cp0) , std::complex(pinf, -0.0) ) ); + + const std::complex cp1(pinf, 1); + VERIFY( eq( std::proj(cp1) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cp1) , std::complex(pinf, -0.0) ) ); + + const std::complex cpq(pinf, qnan); + VERIFY( eq( std::proj(cpq) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cpq) , std::complex(pinf, -0.0) ) ); + + const std::complex cn0(ninf, 0); + VERIFY( eq( std::proj(cn0) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cn0) , std::complex(pinf, -0.0) ) ); + + const std::complex cn1(ninf, 1); + VERIFY( eq( std::proj(cn1) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cn1) , std::complex(pinf, -0.0) ) ); + + const std::complex cnq(ninf, qnan); + VERIFY( eq( std::proj(cnq) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cnq) , std::complex(pinf, -0.0) ) ); + + const std::complex cnp(ninf, pinf); + VERIFY( eq( std::proj(cnp) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cnp) , std::complex(pinf, -0.0) ) ); +} + +void +test02() +{ + const float qnan = std::numeric_limits::quiet_NaN(); + const float pinf = std::numeric_limits::infinity(); + const float ninf = -pinf; + + std::complex c00(0, 0); + VERIFY( eq( std::proj(c00) , c00 ) ); + VERIFY( eq( std::proj(-c00) , -c00 ) ); + c00.real(-0.0); + VERIFY( eq( std::proj(c00) , c00 ) ); + VERIFY( eq( std::proj(-c00) , -c00 ) ); + + const std::complex c01(0, 1); + VERIFY( eq( std::proj(c01) , c01 ) ); + VERIFY( eq( std::proj(-c01) , -c01 ) ); + c00.real(-0.0); + VERIFY( eq( std::proj(c01) , c01 ) ); + VERIFY( eq( std::proj(-c01) , -c01 ) ); + + const std::complex c10(1, 0); + VERIFY( eq( std::proj(c10) , c10 ) ); + VERIFY( eq( std::proj(-c10) , -c10 ) ); + + const std::complex c12(1, 2); + VERIFY( eq( std::proj(c12) , c12 ) ); + VERIFY( eq( std::proj(-c12) , -c12 ) ); + + const std::complex c0q(0, qnan); + VERIFY( eq( std::proj(c0q) , c0q ) ); + VERIFY( eq( std::proj(-c0q) , -c0q ) ); + + const std::complex c1q(1, qnan); + VERIFY( eq( std::proj(c1q) , c1q ) ); + VERIFY( eq( std::proj(-c1q) , -c1q ) ); + + const std::complex cq0(qnan, 0); + VERIFY( eq( std::proj(cq0) , cq0 ) ); + VERIFY( eq( std::proj(-cq0) , -cq0 ) ); + + const std::complex cq1(qnan, 1); + VERIFY( eq( std::proj(cq1) , cq1 ) ); + VERIFY( eq( std::proj(-cq1) , -cq1 ) ); + + const std::complex cqq(qnan, qnan); + VERIFY( eq( std::proj(cqq) , cqq ) ); + VERIFY( eq( std::proj(-cqq) , -cqq ) ); + + const std::complex c0p(0, pinf); + VERIFY( eq( std::proj(c0p) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-c0p) , std::complex(pinf, -0.0) ) ); + + const std::complex c1p(1, pinf); + VERIFY( eq( std::proj(c1p) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-c1p) , std::complex(pinf, -0.0) ) ); + + const std::complex cqp(qnan, pinf); + VERIFY( eq( std::proj(cqp) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cqp) , std::complex(pinf, -0.0) ) ); + + const std::complex cpp(pinf, pinf); + VERIFY( eq( std::proj(cpp) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cpp) , std::complex(pinf, -0.0) ) ); + + const std::complex c0n(0, ninf); + VERIFY( eq( std::proj(c0n) , std::complex(pinf, -0.0) ) ); + VERIFY( eq( std::proj(-c0n) , std::complex(pinf, +0.0) ) ); + + const std::complex c1n(1, ninf); + VERIFY( eq( std::proj(c1n) , std::complex(pinf, -0.0) ) ); + VERIFY( eq( std::proj(-c1n) , std::complex(pinf, +0.0) ) ); + + const std::complex cqn(qnan, ninf); + VERIFY( eq( std::proj(cqn) , std::complex(pinf, -0.0) ) ); + VERIFY( eq( std::proj(-cqn) , std::complex(pinf, +0.0) ) ); + + const std::complex cpn(pinf, ninf); + VERIFY( eq( std::proj(cpn) , std::complex(pinf, -0.0) ) ); + VERIFY( eq( std::proj(-cpn) , std::complex(pinf, +0.0) ) ); + + const std::complex cnn(ninf, ninf); + VERIFY( eq( std::proj(cnn) , std::complex(pinf, -0.0) ) ); + VERIFY( eq( std::proj(-cnn) , std::complex(pinf, +0.0) ) ); + + const std::complex cp0(pinf, 0); + VERIFY( eq( std::proj(cp0) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cp0) , std::complex(pinf, -0.0) ) ); + + const std::complex cp1(pinf, 1); + VERIFY( eq( std::proj(cp1) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cp1) , std::complex(pinf, -0.0) ) ); + + const std::complex cpq(pinf, qnan); + VERIFY( eq( std::proj(cpq) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cpq) , std::complex(pinf, -0.0) ) ); + + const std::complex cn0(ninf, 0); + VERIFY( eq( std::proj(cn0) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cn0) , std::complex(pinf, -0.0) ) ); + + const std::complex cn1(ninf, 1); + VERIFY( eq( std::proj(cn1) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cn1) , std::complex(pinf, -0.0) ) ); + + const std::complex cnq(ninf, qnan); + VERIFY( eq( std::proj(cnq) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cnq) , std::complex(pinf, -0.0) ) ); + + const std::complex cnp(ninf, pinf); + VERIFY( eq( std::proj(cnp) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cnp) , std::complex(pinf, -0.0) ) ); +} + +void +test03() +{ + const long double qnan = std::numeric_limits::quiet_NaN(); + const long double pinf = std::numeric_limits::infinity(); + const long double ninf = -pinf; + + std::complex c00(0, 0); + VERIFY( eq( std::proj(c00) , c00 ) ); + VERIFY( eq( std::proj(-c00) , -c00 ) ); + c00.real(-0.0); + VERIFY( eq( std::proj(c00) , c00 ) ); + VERIFY( eq( std::proj(-c00) , -c00 ) ); + + const std::complex c01(0, 1); + VERIFY( eq( std::proj(c01) , c01 ) ); + VERIFY( eq( std::proj(-c01) , -c01 ) ); + c00.real(-0.0); + VERIFY( eq( std::proj(c01) , c01 ) ); + VERIFY( eq( std::proj(-c01) , -c01 ) ); + + const std::complex c10(1, 0); + VERIFY( eq( std::proj(c10) , c10 ) ); + VERIFY( eq( std::proj(-c10) , -c10 ) ); + + const std::complex c12(1, 2); + VERIFY( eq( std::proj(c12) , c12 ) ); + VERIFY( eq( std::proj(-c12) , -c12 ) ); + + const std::complex c0q(0, qnan); + VERIFY( eq( std::proj(c0q) , c0q ) ); + VERIFY( eq( std::proj(-c0q) , -c0q ) ); + + const std::complex c1q(1, qnan); + VERIFY( eq( std::proj(c1q) , c1q ) ); + VERIFY( eq( std::proj(-c1q) , -c1q ) ); + + const std::complex cq0(qnan, 0); + VERIFY( eq( std::proj(cq0) , cq0 ) ); + VERIFY( eq( std::proj(-cq0) , -cq0 ) ); + + const std::complex cq1(qnan, 1); + VERIFY( eq( std::proj(cq1) , cq1 ) ); + VERIFY( eq( std::proj(-cq1) , -cq1 ) ); + + const std::complex cqq(qnan, qnan); + VERIFY( eq( std::proj(cqq) , cqq ) ); + VERIFY( eq( std::proj(-cqq) , -cqq ) ); + + const std::complex c0p(0, pinf); + VERIFY( eq( std::proj(c0p) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-c0p) , std::complex(pinf, -0.0) ) ); + + const std::complex c1p(1, pinf); + VERIFY( eq( std::proj(c1p) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-c1p) , std::complex(pinf, -0.0) ) ); + + const std::complex cqp(qnan, pinf); + VERIFY( eq( std::proj(cqp) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cqp) , std::complex(pinf, -0.0) ) ); + + const std::complex cpp(pinf, pinf); + VERIFY( eq( std::proj(cpp) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cpp) , std::complex(pinf, -0.0) ) ); + + const std::complex c0n(0, ninf); + VERIFY( eq( std::proj(c0n) , std::complex(pinf, -0.0) ) ); + VERIFY( eq( std::proj(-c0n) , std::complex(pinf, +0.0) ) ); + + const std::complex c1n(1, ninf); + VERIFY( eq( std::proj(c1n) , std::complex(pinf, -0.0) ) ); + VERIFY( eq( std::proj(-c1n) , std::complex(pinf, +0.0) ) ); + + const std::complex cqn(qnan, ninf); + VERIFY( eq( std::proj(cqn) , std::complex(pinf, -0.0) ) ); + VERIFY( eq( std::proj(-cqn) , std::complex(pinf, +0.0) ) ); + + const std::complex cpn(pinf, ninf); + VERIFY( eq( std::proj(cpn) , std::complex(pinf, -0.0) ) ); + VERIFY( eq( std::proj(-cpn) , std::complex(pinf, +0.0) ) ); + + const std::complex cnn(ninf, ninf); + VERIFY( eq( std::proj(cnn) , std::complex(pinf, -0.0) ) ); + VERIFY( eq( std::proj(-cnn) , std::complex(pinf, +0.0) ) ); + + const std::complex cp0(pinf, 0); + VERIFY( eq( std::proj(cp0) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cp0) , std::complex(pinf, -0.0) ) ); + + const std::complex cp1(pinf, 1); + VERIFY( eq( std::proj(cp1) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cp1) , std::complex(pinf, -0.0) ) ); + + const std::complex cpq(pinf, qnan); + VERIFY( eq( std::proj(cpq) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cpq) , std::complex(pinf, -0.0) ) ); + + const std::complex cn0(ninf, 0); + VERIFY( eq( std::proj(cn0) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cn0) , std::complex(pinf, -0.0) ) ); + + const std::complex cn1(ninf, 1); + VERIFY( eq( std::proj(cn1) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cn1) , std::complex(pinf, -0.0) ) ); + + const std::complex cnq(ninf, qnan); + VERIFY( eq( std::proj(cnq) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cnq) , std::complex(pinf, -0.0) ) ); + + const std::complex cnp(ninf, pinf); + VERIFY( eq( std::proj(cnp) , std::complex(pinf, +0.0) ) ); + VERIFY( eq( std::proj(-cnp) , std::complex(pinf, -0.0) ) ); +} + +int +main() +{ + test01(); + test02(); + test03(); +} Index: libstdc++-v3/testsuite/26_numerics/reduce/1.cc =================================================================== --- a/src/libstdc++-v3/testsuite/26_numerics/reduce/1.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/26_numerics/reduce/1.cc (.../branches/gcc-9-branch) @@ -0,0 +1,82 @@ +// { dg-options "-std=gnu++17" } +// { dg-do run { target c++17 } } + +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// C++17 29.8.3 [reduce] + +#include +#include +#include +#include + +/* +template + iterator_traits::value_type + reduce(InputIterator, InputIterator); +*/ +void +test01() +{ + using __gnu_test::test_container; + using __gnu_test::input_iterator_wrapper; + int array[5] = { 1, 2, 3, 4, 5 }; + test_container con(array); + int res = std::reduce(con.begin(), con.end()); + VERIFY( res == 15 ); +} + +/* +template + T reduce(InputIterator, InputIterator, T); +*/ +void +test02() +{ + bool b[] = {true, false, true, true, false, true, false, true, true, false}; + int res = std::reduce(std::begin(b), std::end(b), 100); + VERIFY( res == 106 ); +} + +/* +template + T reduce(InputIterator, InputIterator, T); +template + T reduce(InputIterator, InputIterator, T, BinaryOperation); +*/ +void +test03() +{ + int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + + auto res = std::reduce(std::begin(a), std::end(a), (short)11); + static_assert(std::is_same_v); + VERIFY( res == 66 ); + + auto res2 = std::reduce(std::begin(a), std::end(a), -1l, std::multiplies<>()); + static_assert(std::is_same_v); + VERIFY( res2 == -3628800 ); +} + +int +main() +{ + test01(); + test02(); + test03(); +} Index: libstdc++-v3/testsuite/26_numerics/reduce/2.cc =================================================================== --- a/src/libstdc++-v3/testsuite/26_numerics/reduce/2.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/26_numerics/reduce/2.cc (.../branches/gcc-9-branch) @@ -0,0 +1,70 @@ +// { dg-options "-std=gnu++17" } +// { dg-do compile { target c++17 } } + +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// C++17 29.8.3 [reduce] + +#include +#include +#include +#include + +struct T +{ + T(int); + T(T&&); // MoveConstructible + T& operator=(T&&); // not required by the standard, but it needs to be + T operator+(const T&) const; +}; + +void +test01() +{ + T t[1]{1}; + std::reduce(t, t+1, T(0)); + + using __gnu_test::test_container; + using __gnu_test::input_iterator_wrapper; + test_container con(t); + std::reduce(con.begin(), con.end(), T(0)); +} + +struct Op +{ + T operator()(T&, T&) const&; + + // The standard does *not* require invoking as an rvalue to be supported. + T operator()(T&, T&) && = delete; + + // The standard does *not* require rvalue arguments to be supported + // (this is almost certainly a defect and should be allowed). + T operator()(T&&, T&&) const = delete; +}; + +void +test02() +{ + T t[1]{1}; + std::reduce(t, t+1, T(0), Op()); + + using __gnu_test::test_container; + using __gnu_test::input_iterator_wrapper; + test_container con(t); + std::reduce(con.begin(), con.end(), T(0), Op()); +} Index: libstdc++-v3/testsuite/26_numerics/exclusive_scan/1.cc =================================================================== --- a/src/libstdc++-v3/testsuite/26_numerics/exclusive_scan/1.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/26_numerics/exclusive_scan/1.cc (.../branches/gcc-9-branch) @@ -0,0 +1,94 @@ +// { dg-options "-std=gnu++17" } +// { dg-do run { target c++17 } } + +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// C++17 29.8.7 [exclusive.scan] + +#include +#include +#include +#include + +int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; + +using __gnu_test::test_container; +using __gnu_test::input_iterator_wrapper; +using __gnu_test::output_iterator_wrapper; + +/* +template + OutputIterator + exclusive_scan(InputIterator, InputIterator, OutputIterator, T); +*/ +void +test01() +{ + int out[10]; + test_container co(out); + test_container ca(a); + auto end = std::exclusive_scan(ca.begin(), ca.end(), co.begin(), 5); + static_assert(std::is_same_v); + VERIFY( end.ptr == out+10 ); + VERIFY( out[0] == 5 ); + VERIFY( out[1] == 6 ); + VERIFY( out[2] == 8 ); + VERIFY( out[3] == 11 ); + VERIFY( out[4] == 15 ); + VERIFY( out[5] == 20 ); + VERIFY( out[6] == 26 ); + VERIFY( out[7] == 33 ); + VERIFY( out[8] == 41 ); + VERIFY( out[9] == 50 ); +} + +/* +template + OutputIterator + exclusive_scan(InputIterator, InputIterator, OutputIterator, T, + BinaryOperation); +*/ +void +test02() +{ + int out[10]; + test_container co(out); + test_container ca(a); + auto end = std::exclusive_scan(ca.begin(), ca.end(), co.begin(), 2, + [](int i, int j) { return 2*i + 2*j; }); + static_assert(std::is_same_v); + VERIFY( end.ptr == out+10 ); + VERIFY( out[0] == 2 ); + VERIFY( out[1] == 6 ); + VERIFY( out[2] == 16 ); + VERIFY( out[3] == 38 ); + VERIFY( out[4] == 84 ); + VERIFY( out[5] == 178 ); + VERIFY( out[6] == 368 ); + VERIFY( out[7] == 750 ); + VERIFY( out[8] == 1516 ); + VERIFY( out[9] == 3050 ); +} + +int +main() +{ + test01(); + test02(); +} Index: libstdc++-v3/testsuite/experimental/names.cc =================================================================== --- a/src/libstdc++-v3/testsuite/experimental/names.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/experimental/names.cc (.../branches/gcc-9-branch) @@ -15,7 +15,7 @@ // with this library; see the file COPYING3. If not see // . -// { dg-do compile } +// { dg-do compile { target c++11 } } // Define macros for some common variables names that we must not use for // naming variables, parameters etc. in the library. @@ -25,6 +25,9 @@ #if __has_include() # include #endif + +#if __cplusplus >= 201402L + // Library Fundamentals #include #include @@ -66,3 +69,5 @@ # include # include #endif + +#endif // C++14 Index: libstdc++-v3/testsuite/17_intro/names.cc =================================================================== --- a/src/libstdc++-v3/testsuite/17_intro/names.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/17_intro/names.cc (.../branches/gcc-9-branch) @@ -100,6 +100,10 @@ #define tmp ( +#if __cplusplus < 201103L +#define uses_allocator ( +#endif + #if __cplusplus < 201703L // defines to_chars_result::ptr and to_chars_result::ec #define ec ( Index: libstdc++-v3/testsuite/util/testsuite_abi.cc =================================================================== --- a/src/libstdc++-v3/testsuite/util/testsuite_abi.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/util/testsuite_abi.cc (.../branches/gcc-9-branch) @@ -208,6 +208,7 @@ known_versions.push_back("GLIBCXX_3.4.25"); known_versions.push_back("GLIBCXX_3.4.26"); known_versions.push_back("GLIBCXX_3.4.27"); + known_versions.push_back("GLIBCXX_3.4.28"); known_versions.push_back("CXXABI_1.3"); known_versions.push_back("CXXABI_LDBL_1.3"); known_versions.push_back("CXXABI_1.3.1"); @@ -239,7 +240,7 @@ test.version_status = symbol::incompatible; // Check that added symbols are added in the latest pre-release version. - bool latestp = (test.version_name == "GLIBCXX_3.4.27" + bool latestp = (test.version_name == "GLIBCXX_3.4.28" || test.version_name == "CXXABI_1.3.12" || test.version_name == "CXXABI_FLOAT128" || test.version_name == "CXXABI_TM_1"); Index: libstdc++-v3/testsuite/util/testsuite_iterators.h =================================================================== --- a/src/libstdc++-v3/testsuite/util/testsuite_iterators.h (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/util/testsuite_iterators.h (.../branches/gcc-9-branch) @@ -589,6 +589,10 @@ ItType end() { return it(bounds.last); } + + std::size_t + size() const + { return bounds.last - bounds.first; } }; } #endif Index: libstdc++-v3/testsuite/util/testsuite_allocator.h =================================================================== --- a/src/libstdc++-v3/testsuite/util/testsuite_allocator.h (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/util/testsuite_allocator.h (.../branches/gcc-9-branch) @@ -699,162 +699,162 @@ #if __cplusplus >= 201703L #if __cpp_aligned_new && __cpp_rtti - // A concrete memory_resource, with error checking. - class memory_resource : public std::pmr::memory_resource - { - public: - memory_resource() - : lists(new allocation_lists) - { } + // A concrete memory_resource, with error checking. + class memory_resource : public std::pmr::memory_resource + { + public: + memory_resource() + : lists(new allocation_lists) + { } - memory_resource(const memory_resource& r) noexcept - : lists(r.lists) - { lists->refcount++; } + memory_resource(const memory_resource& r) noexcept + : lists(r.lists) + { lists->refcount++; } - memory_resource& operator=(const memory_resource&) = delete; + memory_resource& operator=(const memory_resource&) = delete; - ~memory_resource() - { - if (lists->refcount-- == 1) - delete lists; // last one out turns out the lights - } + ~memory_resource() + { + if (lists->refcount-- == 1) + delete lists; // last one out turns out the lights + } - struct bad_size { }; - struct bad_alignment { }; - struct bad_address { }; + struct bad_size { }; + struct bad_alignment { }; + struct bad_address { }; - // Deallocate everything (moving the tracking info to the freed list) - void - deallocate_everything() - { - while (lists->active) - { - auto a = lists->active; - // Intentionally virtual dispatch, to inform derived classes: - this->do_deallocate(a->p, a->bytes, a->alignment); - } - } + // Deallocate everything (moving the tracking info to the freed list) + void + deallocate_everything() + { + while (lists->active) + { + auto a = lists->active; + // Intentionally virtual dispatch, to inform derived classes: + this->do_deallocate(a->p, a->bytes, a->alignment); + } + } - // Clear the freed list - void - forget_freed_allocations() - { lists->forget_allocations(lists->freed); } + // Clear the freed list + void + forget_freed_allocations() + { lists->forget_allocations(lists->freed); } - // Count how many allocations have been done and not freed. - std::size_t - number_of_active_allocations() const noexcept - { - std::size_t n = 0; - for (auto a = lists->active; a != nullptr; a = a->next) - ++n; - return n; - } + // Count how many allocations have been done and not freed. + std::size_t + number_of_active_allocations() const noexcept + { + std::size_t n = 0; + for (auto a = lists->active; a != nullptr; a = a->next) + ++n; + return n; + } - protected: - void* - do_allocate(std::size_t bytes, std::size_t alignment) override - { - // TODO perform a single allocation and put the allocation struct - // in the buffer using placement new? It means deallocation won't - // actually return memory to the OS, as it will stay in lists->freed. - // - // TODO adjust the returned pointer to be minimally aligned? - // e.g. if alignment==1 don't return something aligned to 2 bytes. - // Maybe not worth it, at least monotonic_buffer_resource will - // never ask upstream for anything with small alignment. - void* p = ::operator new(bytes, std::align_val_t(alignment)); - lists->active = new allocation{p, bytes, alignment, lists->active}; - return p; - } + protected: + void* + do_allocate(std::size_t bytes, std::size_t alignment) override + { + // TODO perform a single allocation and put the allocation struct + // in the buffer using placement new? It means deallocation won't + // actually return memory to the OS, as it will stay in lists->freed. + // + // TODO adjust the returned pointer to be minimally aligned? + // e.g. if alignment==1 don't return something aligned to 2 bytes. + // Maybe not worth it, at least monotonic_buffer_resource will + // never ask upstream for anything with small alignment. + void* p = ::operator new(bytes, std::align_val_t(alignment)); + lists->active = new allocation{p, bytes, alignment, lists->active}; + return p; + } - void - do_deallocate(void* p, std::size_t bytes, std::size_t alignment) override - { - allocation** aptr = &lists->active; - while (*aptr) - { - allocation* a = *aptr; - if (p == a->p) - { - if (bytes != a->bytes) - throw bad_size(); - if (alignment != a->alignment) - throw bad_alignment(); + void + do_deallocate(void* p, std::size_t bytes, std::size_t alignment) override + { + allocation** aptr = &lists->active; + while (*aptr) + { + allocation* a = *aptr; + if (p == a->p) + { + if (bytes != a->bytes) + throw bad_size(); + if (alignment != a->alignment) + throw bad_alignment(); #if __cpp_sized_deallocation - ::operator delete(p, bytes, std::align_val_t(alignment)); + ::operator delete(p, bytes, std::align_val_t(alignment)); #else - ::operator delete(p, std::align_val_t(alignment)); + ::operator delete(p, std::align_val_t(alignment)); #endif - *aptr = a->next; - a->next = lists->freed; - lists->freed = a; - return; - } - aptr = &a->next; - } - throw bad_address(); - } - - bool - do_is_equal(const std::pmr::memory_resource& r) const noexcept override - { - // Equality is determined by sharing the same allocation_lists object. - if (auto p = dynamic_cast(&r)) - return p->lists == lists; - return false; - } - - private: - struct allocation - { - void* p; - std::size_t bytes; - std::size_t alignment; - allocation* next; - }; - - // Maintain list of allocated blocks and list of freed blocks. - // Copies of this memory_resource share the same ref-counted lists. - struct allocation_lists - { - unsigned refcount = 1; - allocation* active = nullptr; - allocation* freed = nullptr; - - void forget_allocations(allocation*& list) - { - while (list) - { - auto p = list; - list = list->next; - delete p; + *aptr = a->next; + a->next = lists->freed; + lists->freed = a; + return; } + aptr = &a->next; } + throw bad_address(); + } - ~allocation_lists() - { - forget_allocations(active); // Anything in this list is a leak! - forget_allocations(freed); - } - }; + bool + do_is_equal(const std::pmr::memory_resource& r) const noexcept override + { + // Equality is determined by sharing the same allocation_lists object. + if (auto p = dynamic_cast(&r)) + return p->lists == lists; + return false; + } - allocation_lists* lists; + private: + struct allocation + { + void* p; + std::size_t bytes; + std::size_t alignment; + allocation* next; }; -#endif // aligned-new && rtti - // Set the default resource, and restore the previous one on destruction. - struct default_resource_mgr + // Maintain list of allocated blocks and list of freed blocks. + // Copies of this memory_resource share the same ref-counted lists. + struct allocation_lists { - explicit default_resource_mgr(std::pmr::memory_resource* r) - : prev(std::pmr::set_default_resource(r)) - { } + unsigned refcount = 1; + allocation* active = nullptr; + allocation* freed = nullptr; - ~default_resource_mgr() - { std::pmr::set_default_resource(prev); } + void forget_allocations(allocation*& list) + { + while (list) + { + auto p = list; + list = list->next; + delete p; + } + } - std::pmr::memory_resource* prev; + ~allocation_lists() + { + forget_allocations(active); // Anything in this list is a leak! + forget_allocations(freed); + } }; + allocation_lists* lists; + }; +#endif // aligned-new && rtti + + // Set the default resource, and restore the previous one on destruction. + struct default_resource_mgr + { + explicit default_resource_mgr(std::pmr::memory_resource* r) + : prev(std::pmr::set_default_resource(r)) + { } + + ~default_resource_mgr() + { std::pmr::set_default_resource(prev); } + + std::pmr::memory_resource* prev; + }; + #endif // C++17 } // namespace __gnu_test Index: libstdc++-v3/testsuite/20_util/function/91456.cc =================================================================== --- a/src/libstdc++-v3/testsuite/20_util/function/91456.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/20_util/function/91456.cc (.../branches/gcc-9-branch) @@ -0,0 +1,37 @@ +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-options "-std=gnu++17" } +// { dg-do compile { target c++17 } } + +#include + +struct Immovable { + Immovable() = default; + Immovable(const Immovable&) = delete; + Immovable& operator=(const Immovable&) = delete; +}; + +Immovable get() { return {}; } +const Immovable i = get(); // OK +std::function f{&get}; // fails +const Immovable i2 = f(); + +const Immovable cget() { return {}; } +Immovable ci = cget(); // OK +std::function cf{&cget}; // fails +Immovable ci2 = cf(); Index: libstdc++-v3/testsuite/20_util/function_objects/bind_front/1.cc =================================================================== --- a/src/libstdc++-v3/testsuite/20_util/function_objects/bind_front/1.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/20_util/function_objects/bind_front/1.cc (.../branches/gcc-9-branch) @@ -23,7 +23,7 @@ #ifndef __cpp_lib_bind_front # error "Feature test macro for bind_front is missing" -#elif __cpp_lib_bind_front < 201811L +#elif __cpp_lib_bind_front < 201902L # error "Feature test macro for bind_front has wrong value" #endif Index: libstdc++-v3/testsuite/20_util/function_objects/bind_front/2.cc =================================================================== --- a/src/libstdc++-v3/testsuite/20_util/function_objects/bind_front/2.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/20_util/function_objects/bind_front/2.cc (.../branches/gcc-9-branch) @@ -0,0 +1,91 @@ +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-options "-std=gnu++2a" } +// { dg-do run { target c++2a } } + +#include +#include +#include +#include + +// P1651R0 bind_front should not unwrap reference_wrapper + +#ifndef __cpp_lib_bind_front +# error "Feature test macro for bind_front is missing" +#elif __cpp_lib_bind_front < 201907L +# error "Feature test macro for bind_front has wrong value" +#endif + +void functionAcceptingStringView(std::string_view) { } + +void +test01() +{ + std::string s; + auto fs = std::bind_front(&functionAcceptingStringView, std::string_view(s)); + fs(); +} + +template +struct PartialApply { + PartialApply(F f) : f(f) {} + F f; + + template decltype(auto) operator()(A const&... a) const { + if constexpr (std::is_invocable::value) { + return f(a...); + } else { + return bind_front(*this, a...); + } + } +}; + +void +test02() +{ + struct Thingy { }; + std::unique_ptr thingy; + auto func = [](const std::unique_ptr&, int) {}; + PartialApply{func}(std::ref(thingy))(10); +} + +void +test03() +{ + std::string str; + auto func = [](const std::string& s, int) -> const std::string& { return s; }; + + // sref refers to copy of str stored in bind_front result: + const std::string& sref = PartialApply{func}(std::ref(str))(10); + + // pre-P1651R0 this is a use of a dangling reference: + const char& c = sref[0]; + + // post-P1651R0 the bind_front result stores a reference_wrapper by value, + // and so sref is bound to str instead of dangling: + VERIFY( &c == str.data() ); + VERIFY( &sref == &str ); +} + +int +main() +{ + test01(); + test02(); + test03(); +} Index: libstdc++-v3/testsuite/20_util/function_objects/invoke/1.cc =================================================================== --- a/src/libstdc++-v3/testsuite/20_util/function_objects/invoke/1.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/20_util/function_objects/invoke/1.cc (.../branches/gcc-9-branch) @@ -24,7 +24,18 @@ void operator()() noexcept; }; -static_assert( noexcept(std::__invoke(std::declval())), "" ); -#if __cpp_lib_invoke -static_assert( noexcept(std::invoke(std::declval())), "" ); -#endif +static_assert( noexcept(std::__invoke(std::declval())), + "It should be possible to use abstract types with INVOKE" ); + +struct F { + void operator()() &; + void operator()() && noexcept; + int operator()(int); + double* operator()(int, int) noexcept; +}; +struct D { D(void*); }; + +static_assert( !noexcept(std::__invoke(std::declval())), "" ); +static_assert( noexcept(std::__invoke(std::declval())), "" ); +static_assert( !noexcept(std::__invoke(std::declval(), 1)), "" ); +static_assert( noexcept(std::__invoke(std::declval(), 1, 2)), "" ); Index: libstdc++-v3/testsuite/20_util/function_objects/invoke/3.cc =================================================================== --- a/src/libstdc++-v3/testsuite/20_util/function_objects/invoke/3.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/20_util/function_objects/invoke/3.cc (.../branches/gcc-9-branch) @@ -0,0 +1,49 @@ +// Copyright (C) 2016-2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-options "-std=gnu++17" } +// { dg-do compile { target c++17 } } + +#include + +struct abstract { + virtual ~abstract() = 0; + void operator()() noexcept; +}; + +static_assert( noexcept(std::__invoke(std::declval())), + "It should be possible to use abstract types with INVOKE" ); +static_assert( noexcept(std::invoke(std::declval())), + "It should be possible to use abstract types with INVOKE" ); + +struct F { + void operator()() &; + void operator()() && noexcept; + int operator()(int); + double* operator()(int, int) noexcept; +}; +struct D { D(void*); }; + +static_assert( !noexcept(std::__invoke(std::declval())), "" ); +static_assert( noexcept(std::__invoke(std::declval())), "" ); +static_assert( !noexcept(std::__invoke(std::declval(), 1)), "" ); +static_assert( noexcept(std::__invoke(std::declval(), 1, 2)), "" ); + +static_assert( !noexcept(std::invoke(std::declval())), "" ); +static_assert( noexcept(std::invoke(std::declval())), "" ); +static_assert( !noexcept(std::invoke(std::declval(), 1)), "" ); +static_assert( noexcept(std::invoke(std::declval(), 1, 2)), "" ); Index: libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/89164.cc =================================================================== --- a/src/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/89164.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy_n/89164.cc (.../branches/gcc-9-branch) @@ -0,0 +1,35 @@ +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do compile { target c++11 } } + +#include + +struct X { + X() = default; + X(const X&) = delete; +}; + +void test01() +{ + X x[1]; + alignas(X) unsigned char buf[sizeof(X)]; + X* p = (X*)buf; + + std::uninitialized_copy_n(x, 1, p); // { dg-error "here" } +} +// { dg-error "must be constructible" "" { target *-*-* } 0 } Index: libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/89164.cc =================================================================== --- a/src/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/89164.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/89164.cc (.../branches/gcc-9-branch) @@ -0,0 +1,38 @@ +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do compile { target c++11 } } + +#include + +// PR libstdc++/89164 + +struct X +{ + X() = default; + X(const X&) = delete; +}; + +void test01() +{ + X x[1]; + alignas(X) unsigned char buf[sizeof(X)]; + X* p = (X*)buf; + + std::uninitialized_copy(x, x+1, p); // { dg-error "here" } +} +// { dg-error "must be constructible" "" { target *-*-* } 0 } Index: libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/1.cc =================================================================== --- a/src/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/1.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_copy/1.cc (.../branches/gcc-9-branch) @@ -34,4 +34,4 @@ T t[1]; std::uninitialized_copy(t, t+1, result); // { dg-error "here" } } -// { dg-prune-output "use of deleted function" } +// { dg-error "constructible from value" "" { target *-*-* } 0 } Index: libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/89164.cc =================================================================== --- a/src/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/89164.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill_n/89164.cc (.../branches/gcc-9-branch) @@ -0,0 +1,35 @@ +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do compile { target c++11 } } + +#include + +struct X { + X() = default; + X(const X&) = delete; +}; + +void test01() +{ + X x; + alignas(X) unsigned char buf[sizeof(X)]; + X* p = (X*)buf; + + std::uninitialized_fill_n(p, 1, x); // { dg-error "here" } +} +// { dg-error "must be constructible" "" { target *-*-* } 0 } Index: libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/89164.cc =================================================================== --- a/src/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/89164.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/20_util/specialized_algorithms/uninitialized_fill/89164.cc (.../branches/gcc-9-branch) @@ -0,0 +1,35 @@ +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-do compile { target c++11 } } + +#include + +struct X { + X() = default; + X(const X&) = delete; +}; + +void f() +{ + X x; + alignas(X) unsigned char buf[sizeof(X)]; + X* p = (X*)buf; + + std::uninitialized_fill(p, p+1, x); // { dg-error "here" } +} +// { dg-error "must be constructible" "" { target *-*-* } 0 } Index: libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value.cc =================================================================== --- a/src/libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/20_util/is_nothrow_invocable/value.cc (.../branches/gcc-9-branch) @@ -119,9 +119,11 @@ static_assert( ! is_nt_invocable_r< T, F >(), "call throws"); static_assert( ! is_nt_invocable_r< NT, F >(), "call throws"); static_assert( ! is_nt_invocable_r< Ex, F >(), "call throws"); + static_assert( ! is_nt_invocable_r< void, F >(), "call throws"); static_assert( ! is_nt_invocable_r< T, CF >(), "conversion throws"); static_assert( is_nt_invocable_r< NT, CF >(), "" ); static_assert( ! is_nt_invocable_r< Ex, CF >(), "conversion fails"); + static_assert( is_nt_invocable_r< void, CF >(), ""); static_assert( ! is_nt_invocable< F, int >(), "call throws"); static_assert( is_nt_invocable< F&, int >(), ""); @@ -140,6 +142,7 @@ static_assert( is_nt_invocable_r< char&, CF, int >(), ""); static_assert( is_nt_invocable_r< char&, CF&, int >(), ""); + static_assert( is_nt_invocable_r< void, CF&, int >(), ""); static_assert( ! is_nt_invocable_r< T, CF&, int >(), "conversion throws"); @@ -146,6 +149,7 @@ static_assert( is_nt_invocable_r< NT, CF&, int >(), ""); static_assert( ! is_nt_invocable_r< Ex, CF&, int >(), "conversion fails, would use explicit constructor"); + static_assert( is_nt_invocable_r< void, CF&, int >(), ""); static_assert( ! is_nt_invocable< F, int, int >(), "would call private member"); Index: libstdc++-v3/testsuite/20_util/is_invocable/91456.cc =================================================================== --- a/src/libstdc++-v3/testsuite/20_util/is_invocable/91456.cc (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/testsuite/20_util/is_invocable/91456.cc (.../branches/gcc-9-branch) @@ -0,0 +1,34 @@ +// Copyright (C) 2019 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-options "-std=gnu++17" } +// { dg-do compile { target c++17 } } + +#include + +#include + +struct Immovable { + Immovable() = default; + Immovable(const Immovable&) = delete; + Immovable& operator=(const Immovable&) = delete; +}; + +Immovable get() { return {}; } +const Immovable i = get(); // OK +std::function f{&get}; // fails +const Immovable i2 = f(); Index: libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt =================================================================== --- a/src/libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/config/abi/post/x86_64-linux-gnu/32/baseline_symbols.txt (.../branches/gcc-9-branch) @@ -1829,6 +1829,7 @@ FUNC:_ZNSt10filesystem28recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSEOS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSERKS0_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem28recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsE@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 @@ -1885,6 +1886,7 @@ FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSEOS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSERKS1_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_M_split_cmptsEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_S_convert_locEPKcS3_RKSt6locale@@GLIBCXX_3.4.26 @@ -2060,13 +2062,17 @@ FUNC:_ZNSt12__basic_fileIcED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS6_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 @@ -4402,6 +4408,7 @@ OBJECT:0:GLIBCXX_3.4.24 OBJECT:0:GLIBCXX_3.4.25 OBJECT:0:GLIBCXX_3.4.26 +OBJECT:0:GLIBCXX_3.4.27 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 Index: libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt =================================================================== --- a/src/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/config/abi/post/x86_64-linux-gnu/baseline_symbols.txt (.../branches/gcc-9-branch) @@ -1829,6 +1829,7 @@ FUNC:_ZNSt10filesystem28recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSEOS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSERKS0_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem28recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsE@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 @@ -1885,6 +1886,7 @@ FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSEOS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSERKS1_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_M_split_cmptsEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_S_convert_locEPKcS3_RKSt6locale@@GLIBCXX_3.4.26 @@ -2060,13 +2062,17 @@ FUNC:_ZNSt12__basic_fileIcED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS6_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 @@ -4402,6 +4408,7 @@ OBJECT:0:GLIBCXX_3.4.24 OBJECT:0:GLIBCXX_3.4.25 OBJECT:0:GLIBCXX_3.4.26 +OBJECT:0:GLIBCXX_3.4.27 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 Index: libstdc++-v3/config/abi/post/sparc-solaris2.10/sparcv9/baseline_symbols.txt =================================================================== --- a/src/libstdc++-v3/config/abi/post/sparc-solaris2.10/sparcv9/baseline_symbols.txt (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/config/abi/post/sparc-solaris2.10/sparcv9/baseline_symbols.txt (.../branches/gcc-9-branch) @@ -1804,6 +1804,7 @@ FUNC:_ZNSt10filesystem28recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSEOS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSERKS0_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem28recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsE@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 @@ -1860,6 +1861,7 @@ FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSEOS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSERKS1_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_M_split_cmptsEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_S_convert_locEPKcS3_RKSt6locale@@GLIBCXX_3.4.26 @@ -2031,13 +2033,21 @@ FUNC:_ZNSt12__basic_fileIcED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS4_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS6_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2EOS6_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 @@ -4360,6 +4370,8 @@ OBJECT:0:GLIBCXX_3.4.24 OBJECT:0:GLIBCXX_3.4.25 OBJECT:0:GLIBCXX_3.4.26 +OBJECT:0:GLIBCXX_3.4.27 +OBJECT:0:GLIBCXX_3.4.28 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 Index: libstdc++-v3/config/abi/post/sparc-solaris2.10/baseline_symbols.txt =================================================================== --- a/src/libstdc++-v3/config/abi/post/sparc-solaris2.10/baseline_symbols.txt (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/config/abi/post/sparc-solaris2.10/baseline_symbols.txt (.../branches/gcc-9-branch) @@ -1804,6 +1804,7 @@ FUNC:_ZNSt10filesystem28recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSEOS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSERKS0_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem28recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsE@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 @@ -1860,6 +1861,7 @@ FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSEOS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSERKS1_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_M_split_cmptsEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_S_convert_locEPKcS3_RKSt6locale@@GLIBCXX_3.4.26 @@ -2031,13 +2033,21 @@ FUNC:_ZNSt12__basic_fileIcED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS4_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS6_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2EOS6_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 @@ -4360,6 +4370,8 @@ OBJECT:0:GLIBCXX_3.4.24 OBJECT:0:GLIBCXX_3.4.25 OBJECT:0:GLIBCXX_3.4.26 +OBJECT:0:GLIBCXX_3.4.27 +OBJECT:0:GLIBCXX_3.4.28 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 Index: libstdc++-v3/config/abi/post/sparc-solaris2.11/sparcv9/baseline_symbols.txt =================================================================== --- a/src/libstdc++-v3/config/abi/post/sparc-solaris2.11/sparcv9/baseline_symbols.txt (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/config/abi/post/sparc-solaris2.11/sparcv9/baseline_symbols.txt (.../branches/gcc-9-branch) @@ -1804,6 +1804,7 @@ FUNC:_ZNSt10filesystem28recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSEOS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSERKS0_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem28recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsE@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 @@ -1860,6 +1861,7 @@ FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSEOS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSERKS1_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_M_split_cmptsEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_S_convert_locEPKcS3_RKSt6locale@@GLIBCXX_3.4.26 @@ -2031,13 +2033,21 @@ FUNC:_ZNSt12__basic_fileIcED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS4_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS6_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2EOS6_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 @@ -4362,6 +4372,8 @@ OBJECT:0:GLIBCXX_3.4.24 OBJECT:0:GLIBCXX_3.4.25 OBJECT:0:GLIBCXX_3.4.26 +OBJECT:0:GLIBCXX_3.4.27 +OBJECT:0:GLIBCXX_3.4.28 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 Index: libstdc++-v3/config/abi/post/sparc-solaris2.11/baseline_symbols.txt =================================================================== --- a/src/libstdc++-v3/config/abi/post/sparc-solaris2.11/baseline_symbols.txt (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/config/abi/post/sparc-solaris2.11/baseline_symbols.txt (.../branches/gcc-9-branch) @@ -1804,6 +1804,7 @@ FUNC:_ZNSt10filesystem28recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSEOS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSERKS0_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem28recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsE@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 @@ -1860,6 +1861,7 @@ FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSEOS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSERKS1_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_M_split_cmptsEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_S_convert_locEPKcS3_RKSt6locale@@GLIBCXX_3.4.26 @@ -2031,13 +2033,21 @@ FUNC:_ZNSt12__basic_fileIcED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS4_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS6_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2EOS6_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 @@ -4362,6 +4372,8 @@ OBJECT:0:GLIBCXX_3.4.24 OBJECT:0:GLIBCXX_3.4.25 OBJECT:0:GLIBCXX_3.4.26 +OBJECT:0:GLIBCXX_3.4.27 +OBJECT:0:GLIBCXX_3.4.28 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 Index: libstdc++-v3/config/abi/post/powerpc-linux-gnu/baseline_symbols.txt =================================================================== --- a/src/libstdc++-v3/config/abi/post/powerpc-linux-gnu/baseline_symbols.txt (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/config/abi/post/powerpc-linux-gnu/baseline_symbols.txt (.../branches/gcc-9-branch) @@ -1975,6 +1975,7 @@ FUNC:_ZNSt10filesystem28recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSEOS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSERKS0_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem28recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsE@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 @@ -2031,6 +2032,7 @@ FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSEOS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSERKS1_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_M_split_cmptsEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_S_convert_locEPKcS3_RKSt6locale@@GLIBCXX_3.4.26 @@ -2206,13 +2208,17 @@ FUNC:_ZNSt12__basic_fileIcED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS6_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 @@ -4635,6 +4641,7 @@ OBJECT:0:GLIBCXX_3.4.24 OBJECT:0:GLIBCXX_3.4.25 OBJECT:0:GLIBCXX_3.4.26 +OBJECT:0:GLIBCXX_3.4.27 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 Index: libstdc++-v3/config/abi/post/i386-solaris2.10/baseline_symbols.txt =================================================================== --- a/src/libstdc++-v3/config/abi/post/i386-solaris2.10/baseline_symbols.txt (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/config/abi/post/i386-solaris2.10/baseline_symbols.txt (.../branches/gcc-9-branch) @@ -1804,6 +1804,7 @@ FUNC:_ZNSt10filesystem28recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSEOS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSERKS0_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem28recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsE@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 @@ -1860,6 +1861,7 @@ FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSEOS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSERKS1_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_M_split_cmptsEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_S_convert_locEPKcS3_RKSt6locale@@GLIBCXX_3.4.26 @@ -2031,13 +2033,21 @@ FUNC:_ZNSt12__basic_fileIcED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS4_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS6_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2EOS6_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 @@ -4361,6 +4371,8 @@ OBJECT:0:GLIBCXX_3.4.24 OBJECT:0:GLIBCXX_3.4.25 OBJECT:0:GLIBCXX_3.4.26 +OBJECT:0:GLIBCXX_3.4.27 +OBJECT:0:GLIBCXX_3.4.28 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 Index: libstdc++-v3/config/abi/post/i386-solaris2.10/amd64/baseline_symbols.txt =================================================================== --- a/src/libstdc++-v3/config/abi/post/i386-solaris2.10/amd64/baseline_symbols.txt (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/config/abi/post/i386-solaris2.10/amd64/baseline_symbols.txt (.../branches/gcc-9-branch) @@ -1804,6 +1804,7 @@ FUNC:_ZNSt10filesystem28recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSEOS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSERKS0_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem28recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsE@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 @@ -1860,6 +1861,7 @@ FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSEOS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSERKS1_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_M_split_cmptsEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_S_convert_locEPKcS3_RKSt6locale@@GLIBCXX_3.4.26 @@ -2031,13 +2033,21 @@ FUNC:_ZNSt12__basic_fileIcED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS4_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS6_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2EOS6_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 @@ -4361,6 +4371,8 @@ OBJECT:0:GLIBCXX_3.4.24 OBJECT:0:GLIBCXX_3.4.25 OBJECT:0:GLIBCXX_3.4.26 +OBJECT:0:GLIBCXX_3.4.27 +OBJECT:0:GLIBCXX_3.4.28 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 Index: libstdc++-v3/config/abi/post/i386-solaris2.11/baseline_symbols.txt =================================================================== --- a/src/libstdc++-v3/config/abi/post/i386-solaris2.11/baseline_symbols.txt (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/config/abi/post/i386-solaris2.11/baseline_symbols.txt (.../branches/gcc-9-branch) @@ -1804,6 +1804,7 @@ FUNC:_ZNSt10filesystem28recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSEOS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSERKS0_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem28recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsE@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 @@ -1860,6 +1861,7 @@ FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSEOS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSERKS1_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_M_split_cmptsEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_S_convert_locEPKcS3_RKSt6locale@@GLIBCXX_3.4.26 @@ -2031,13 +2033,21 @@ FUNC:_ZNSt12__basic_fileIcED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS4_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS6_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2EOS6_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 @@ -4363,6 +4373,8 @@ OBJECT:0:GLIBCXX_3.4.24 OBJECT:0:GLIBCXX_3.4.25 OBJECT:0:GLIBCXX_3.4.26 +OBJECT:0:GLIBCXX_3.4.27 +OBJECT:0:GLIBCXX_3.4.28 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 Index: libstdc++-v3/config/abi/post/i386-solaris2.11/amd64/baseline_symbols.txt =================================================================== --- a/src/libstdc++-v3/config/abi/post/i386-solaris2.11/amd64/baseline_symbols.txt (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/config/abi/post/i386-solaris2.11/amd64/baseline_symbols.txt (.../branches/gcc-9-branch) @@ -1804,6 +1804,7 @@ FUNC:_ZNSt10filesystem28recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSEOS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSERKS0_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem28recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsE@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 @@ -1860,6 +1861,7 @@ FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSEOS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSERKS1_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_M_split_cmptsEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_S_convert_locEPKcS3_RKSt6locale@@GLIBCXX_3.4.26 @@ -2031,13 +2033,21 @@ FUNC:_ZNSt12__basic_fileIcED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS4_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS6_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2EOS6_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 @@ -4363,6 +4373,8 @@ OBJECT:0:GLIBCXX_3.4.24 OBJECT:0:GLIBCXX_3.4.25 OBJECT:0:GLIBCXX_3.4.26 +OBJECT:0:GLIBCXX_3.4.27 +OBJECT:0:GLIBCXX_3.4.28 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 Index: libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt =================================================================== --- a/src/libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/config/abi/post/alpha-linux-gnu/baseline_symbols.txt (.../branches/gcc-9-branch) @@ -112,6 +112,7 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4 FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4 FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4 +FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base16_M_attach_singleEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.26 FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17 FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17 FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17 @@ -261,6 +262,7 @@ FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE8capacityEv@@GLIBCXX_3.4 FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE8max_sizeEv@@GLIBCXX_3.4 FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE9_M_ibeginEv@@GLIBCXX_3.4 +FUNC:_ZNKSbIwSt11char_traitsIwESaIwEEcvSt17basic_string_viewIwS0_EEv@@GLIBCXX_3.4.26 FUNC:_ZNKSbIwSt11char_traitsIwESaIwEEixEm@@GLIBCXX_3.4 FUNC:_ZNKSi6gcountEv@@GLIBCXX_3.4 FUNC:_ZNKSi6sentrycvbEv@@GLIBCXX_3.4 @@ -328,9 +330,66 @@ FUNC:_ZNKSs8capacityEv@@GLIBCXX_3.4 FUNC:_ZNKSs8max_sizeEv@@GLIBCXX_3.4 FUNC:_ZNKSs9_M_ibeginEv@@GLIBCXX_3.4 +FUNC:_ZNKSscvSt17basic_string_viewIcSt11char_traitsIcEEEv@@GLIBCXX_3.4.26 FUNC:_ZNKSsixEm@@GLIBCXX_3.4 FUNC:_ZNKSt10bad_typeid4whatEv@@GLIBCXX_3.4.9 FUNC:_ZNKSt10error_code23default_error_conditionEv@@GLIBCXX_3.4.11 +FUNC:_ZNKSt10filesystem16filesystem_error4whatEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem16filesystem_error5path1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem16filesystem_error5path2Ev@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem18directory_iteratordeEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem28recursive_directory_iterator17recursion_pendingEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem28recursive_directory_iterator5depthEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem28recursive_directory_iterator7optionsEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem28recursive_directory_iteratordeEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path11parent_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path12has_filenameEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path13has_root_nameEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path13has_root_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path13relative_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path14root_directoryEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path15has_parent_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path16lexically_normalEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path17_M_find_extensionEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path17has_relative_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path18has_root_directoryEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path18lexically_relativeERKS0_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path19lexically_proximateERKS0_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path5_List13_Impl_deleterclEPNS1_5_ImplE@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path5_List3endEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path5_List5beginEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path7compareERKS0_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path7compareESt17basic_string_viewIcSt11char_traitsIcEE@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path9root_nameEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path9root_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx1116filesystem_error4whatEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx1116filesystem_error5path1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx1116filesystem_error5path2Ev@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx1118directory_iteratordeEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx1128recursive_directory_iterator17recursion_pendingEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx1128recursive_directory_iterator5depthEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx1128recursive_directory_iterator7optionsEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx1128recursive_directory_iteratordeEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path11parent_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path12has_filenameEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path13has_root_nameEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path13has_root_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path13relative_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path14root_directoryEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path15has_parent_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path16lexically_normalEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path17_M_find_extensionEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path17has_relative_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path18has_root_directoryEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path18lexically_relativeERKS1_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path19lexically_proximateERKS1_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path5_List13_Impl_deleterclEPNS2_5_ImplE@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path5_List3endEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path5_List5beginEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path7compareERKS1_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path7compareESt17basic_string_viewIcSt11char_traitsIcEE@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path9root_nameEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path9root_pathEv@@GLIBCXX_3.4.26 FUNC:_ZNKSt10istrstream5rdbufEv@@GLIBCXX_3.4 FUNC:_ZNKSt10lock_error4whatEv@@GLIBCXX_3.4.11 FUNC:_ZNKSt10moneypunctIcLb0EE10neg_formatEv@@GLIBCXX_3.4 @@ -876,6 +935,7 @@ FUNC:_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE8_M_limitEmm@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE8capacityEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE8max_sizeEv@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEcvSt17basic_string_viewIcS2_EEv@@GLIBCXX_3.4.26 FUNC:_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEm@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_M_is_localEv@@GLIBCXX_3.4.21 @@ -936,6 +996,7 @@ FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE8_M_limitEmm@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE8capacityEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE8max_sizeEv@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEcvSt17basic_string_viewIwS2_EEv@@GLIBCXX_3.4.26 FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEixEm@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.21 @@ -1067,6 +1128,13 @@ FUNC:_ZNKSt7__cxx119money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_bRSt8ios_basewg@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx119money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb0EEES4_S4_RSt8ios_basewRKNS_12basic_stringIwS3_SaIwEEE@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx119money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb1EEES4_S4_RSt8ios_basewRKNS_12basic_stringIwS3_SaIwEEE@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7codecvtIDiDu11__mbstate_tE10do_unshiftERS0_PDuS3_RS3_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDiDu11__mbstate_tE11do_encodingEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDiDu11__mbstate_tE13do_max_lengthEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDiDu11__mbstate_tE16do_always_noconvEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDiDu11__mbstate_tE5do_inERS0_PKDuS4_RS4_PDiS6_RS6_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDiDu11__mbstate_tE6do_outERS0_PKDiS4_RS4_PDuS6_RS6_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDiDu11__mbstate_tE9do_lengthERS0_PKDuS4_m@@GLIBCXX_3.4.26 FUNC:_ZNKSt7codecvtIDic11__mbstate_tE10do_unshiftERS0_PcS3_RS3_@@GLIBCXX_3.4.21 FUNC:_ZNKSt7codecvtIDic11__mbstate_tE11do_encodingEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7codecvtIDic11__mbstate_tE13do_max_lengthEv@@GLIBCXX_3.4.21 @@ -1074,6 +1142,13 @@ FUNC:_ZNKSt7codecvtIDic11__mbstate_tE5do_inERS0_PKcS4_RS4_PDiS6_RS6_@@GLIBCXX_3.4.21 FUNC:_ZNKSt7codecvtIDic11__mbstate_tE6do_outERS0_PKDiS4_RS4_PcS6_RS6_@@GLIBCXX_3.4.21 FUNC:_ZNKSt7codecvtIDic11__mbstate_tE9do_lengthERS0_PKcS4_m@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7codecvtIDsDu11__mbstate_tE10do_unshiftERS0_PDuS3_RS3_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDsDu11__mbstate_tE11do_encodingEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDsDu11__mbstate_tE13do_max_lengthEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDsDu11__mbstate_tE16do_always_noconvEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDsDu11__mbstate_tE5do_inERS0_PKDuS4_RS4_PDsS6_RS6_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDsDu11__mbstate_tE6do_outERS0_PKDsS4_RS4_PDuS6_RS6_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDsDu11__mbstate_tE9do_lengthERS0_PKDuS4_m@@GLIBCXX_3.4.26 FUNC:_ZNKSt7codecvtIDsc11__mbstate_tE10do_unshiftERS0_PcS3_RS3_@@GLIBCXX_3.4.21 FUNC:_ZNKSt7codecvtIDsc11__mbstate_tE11do_encodingEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7codecvtIDsc11__mbstate_tE13do_max_lengthEv@@GLIBCXX_3.4.21 @@ -1276,6 +1351,7 @@ FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE21_M_extract_via_formatES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKc@@GLIBCXX_3.4 FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE24_M_extract_wday_or_monthES3_S3_RiPPKcmRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4.14 FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKcSC_@@GLIBCXX_3.4.21 +FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmcc@@GLIBCXX_3.4.26 FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmcc@@GLIBCXX_3.4.21 FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8get_dateES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4 FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8get_timeES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4 @@ -1294,6 +1370,7 @@ FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE21_M_extract_via_formatES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKw@@GLIBCXX_3.4 FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE24_M_extract_wday_or_monthES3_S3_RiPPKwmRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4.14 FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKwSC_@@GLIBCXX_3.4.21 +FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmcc@@GLIBCXX_3.4.26 FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmcc@@GLIBCXX_3.4.21 FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8get_dateES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4 FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8get_timeES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4 @@ -1386,6 +1463,8 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_S_constructIPKwEEPwT_S7_RKS1_St20forward_iterator_tag@@GLIBCXX_3.4.14 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_S_constructIPwEES4_T_S5_RKS1_St20forward_iterator_tag@@GLIBCXX_3.4.14 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_S_empty_repEv@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12__sv_wrapperC1ESt17basic_string_viewIwS0_E@@GLIBCXX_3.4.26 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12__sv_wrapperC2ESt17basic_string_viewIwS0_E@@GLIBCXX_3.4.26 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIPKwS2_EES8_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIS3_S2_EES6_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwPKwS5_@@GLIBCXX_3.4 @@ -1393,6 +1472,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE13shrink_to_fitEv@@GLIBCXX_3.4.14 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE14_M_replace_auxEmmmw@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE15_M_replace_safeEmmPKwm@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEE17_S_to_string_viewESt17basic_string_viewIwS0_E@@GLIBCXX_3.4.26 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE18_S_construct_aux_2EmwRKS1_@@GLIBCXX_3.4.14 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE2atEm@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE3endEv@@GLIBCXX_3.4 @@ -1409,6 +1489,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep8_M_cloneERKS1_m@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep9_S_createEmmRKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4backEv@@GLIBCXX_3.4.15 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4dataEv@@GLIBCXX_3.4.26 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4rendEv@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4swapERS2_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE5beginEv@@GLIBCXX_3.4 @@ -1467,11 +1548,14 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwmw@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEmmm@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9push_backEw@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ENS2_12__sv_wrapperERKS1_@@GLIBCXX_3.4.26 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1EOS2_@@GLIBCXX_3.4.14 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1EOS2_RKS1_@@GLIBCXX_3.4.26 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1EPKwRKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1EPKwmRKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_RKS1_@@GLIBCXX_3.4.26 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_mRKS1_@@GLIBCXX_3.4.23 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_mm@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_mmRKS1_@@GLIBCXX_3.4 @@ -1481,11 +1565,14 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1IN9__gnu_cxx17__normal_iteratorIPwS2_EEEET_S8_RKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1IPKwEET_S6_RKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1IPwEET_S5_RKS1_@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ENS2_12__sv_wrapperERKS1_@@GLIBCXX_3.4.26 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2EOS2_@@GLIBCXX_3.4.15 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2EOS2_RKS1_@@GLIBCXX_3.4.26 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2EPKwRKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2EPKwmRKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_RKS1_@@GLIBCXX_3.4.26 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_mRKS1_@@GLIBCXX_3.4.23 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_mm@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_mmRKS1_@@GLIBCXX_3.4 @@ -1616,6 +1703,7 @@ FUNC:_ZNSoD1Ev@@GLIBCXX_3.4 FUNC:_ZNSoD2Ev@@GLIBCXX_3.4 FUNC:_ZNSoaSEOSo@@GLIBCXX_3.4.21 +FUNC:_ZNSolsEDn@@GLIBCXX_3.4.26 FUNC:_ZNSolsEPFRSoS_E@@GLIBCXX_3.4 FUNC:_ZNSolsEPFRSt8ios_baseS0_E@@GLIBCXX_3.4 FUNC:_ZNSolsEPFRSt9basic_iosIcSt11char_traitsIcEES3_E@@GLIBCXX_3.4 @@ -1643,6 +1731,8 @@ FUNC:_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag@@GLIBCXX_3.4.14 FUNC:_ZNSs12_S_constructIPcEES0_T_S1_RKSaIcESt20forward_iterator_tag@@GLIBCXX_3.4.14 FUNC:_ZNSs12_S_empty_repEv@@GLIBCXX_3.4 +FUNC:_ZNSs12__sv_wrapperC1ESt17basic_string_viewIcSt11char_traitsIcEE@@GLIBCXX_3.4.26 +FUNC:_ZNSs12__sv_wrapperC2ESt17basic_string_viewIcSt11char_traitsIcEE@@GLIBCXX_3.4.26 FUNC:_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIPKcSsEES4_@@GLIBCXX_3.4 FUNC:_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIS_SsEES2_@@GLIBCXX_3.4 FUNC:_ZNSs13_S_copy_charsEPcPKcS1_@@GLIBCXX_3.4 @@ -1650,6 +1740,7 @@ FUNC:_ZNSs13shrink_to_fitEv@@GLIBCXX_3.4.14 FUNC:_ZNSs14_M_replace_auxEmmmc@@GLIBCXX_3.4 FUNC:_ZNSs15_M_replace_safeEmmPKcm@@GLIBCXX_3.4 +FUNC:_ZNSs17_S_to_string_viewESt17basic_string_viewIcSt11char_traitsIcEE@@GLIBCXX_3.4.26 FUNC:_ZNSs18_S_construct_aux_2EmcRKSaIcE@@GLIBCXX_3.4.14 FUNC:_ZNSs2atEm@@GLIBCXX_3.4 FUNC:_ZNSs3endEv@@GLIBCXX_3.4 @@ -1666,6 +1757,7 @@ FUNC:_ZNSs4_Rep8_M_cloneERKSaIcEm@@GLIBCXX_3.4 FUNC:_ZNSs4_Rep9_S_createEmmRKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSs4backEv@@GLIBCXX_3.4.15 +FUNC:_ZNSs4dataEv@@GLIBCXX_3.4.26 FUNC:_ZNSs4rendEv@@GLIBCXX_3.4 FUNC:_ZNSs4swapERSs@@GLIBCXX_3.4 FUNC:_ZNSs5beginEv@@GLIBCXX_3.4 @@ -1724,11 +1816,14 @@ FUNC:_ZNSs9_M_assignEPcmc@GLIBCXX_3.4 FUNC:_ZNSs9_M_mutateEmmm@@GLIBCXX_3.4 FUNC:_ZNSs9push_backEc@@GLIBCXX_3.4 +FUNC:_ZNSsC1ENSs12__sv_wrapperERKSaIcE@@GLIBCXX_3.4.26 FUNC:_ZNSsC1EOSs@@GLIBCXX_3.4.14 +FUNC:_ZNSsC1EOSsRKSaIcE@@GLIBCXX_3.4.26 FUNC:_ZNSsC1EPKcRKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSsC1EPKcmRKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSsC1ERKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSsC1ERKSs@@GLIBCXX_3.4 +FUNC:_ZNSsC1ERKSsRKSaIcE@@GLIBCXX_3.4.26 FUNC:_ZNSsC1ERKSsmRKSaIcE@@GLIBCXX_3.4.23 FUNC:_ZNSsC1ERKSsmm@@GLIBCXX_3.4 FUNC:_ZNSsC1ERKSsmmRKSaIcE@@GLIBCXX_3.4 @@ -1738,11 +1833,14 @@ FUNC:_ZNSsC1IN9__gnu_cxx17__normal_iteratorIPcSsEEEET_S4_RKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSsC1IPKcEET_S2_RKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSsC1IPcEET_S1_RKSaIcE@@GLIBCXX_3.4 +FUNC:_ZNSsC2ENSs12__sv_wrapperERKSaIcE@@GLIBCXX_3.4.26 FUNC:_ZNSsC2EOSs@@GLIBCXX_3.4.15 +FUNC:_ZNSsC2EOSsRKSaIcE@@GLIBCXX_3.4.26 FUNC:_ZNSsC2EPKcRKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSsC2EPKcmRKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSsC2ERKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSsC2ERKSs@@GLIBCXX_3.4 +FUNC:_ZNSsC2ERKSsRKSaIcE@@GLIBCXX_3.4.26 FUNC:_ZNSsC2ERKSsmRKSaIcE@@GLIBCXX_3.4.23 FUNC:_ZNSsC2ERKSsmm@@GLIBCXX_3.4 FUNC:_ZNSsC2ERKSsmmRKSaIcE@@GLIBCXX_3.4 @@ -1774,6 +1872,208 @@ FUNC:_ZNSt10bad_typeidD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt10bad_typeidD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt10bad_typeidD2Ev@@GLIBCXX_3.4 +FUNC:_ZNSt10filesystem10equivalentERKNS_4pathES2_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem10equivalentERKNS_4pathES2_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem10equivalentERKNS_7__cxx114pathES3_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem10equivalentERKNS_7__cxx114pathES3_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem10hash_valueERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem10remove_allERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem10remove_allERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem10remove_allERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem10remove_allERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem11permissionsERKNS_4pathENS_5permsENS_12perm_optionsE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem11permissionsERKNS_4pathENS_5permsENS_12perm_optionsERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem11permissionsERKNS_7__cxx114pathENS_5permsENS_12perm_optionsE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem11permissionsERKNS_7__cxx114pathENS_5permsENS_12perm_optionsERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem11resize_fileERKNS_4pathEm@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem11resize_fileERKNS_4pathEmRSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem11resize_fileERKNS_7__cxx114pathEm@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem11resize_fileERKNS_7__cxx114pathEmRSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12copy_symlinkERKNS_4pathES2_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12copy_symlinkERKNS_4pathES2_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12copy_symlinkERKNS_7__cxx114pathES3_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12copy_symlinkERKNS_7__cxx114pathES3_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12current_pathB5cxx11ERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12current_pathB5cxx11Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12current_pathERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12current_pathERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12current_pathERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12current_pathERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12current_pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12current_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12read_symlinkERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12read_symlinkERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12read_symlinkERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12read_symlinkERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem14create_symlinkERKNS_4pathES2_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem14create_symlinkERKNS_4pathES2_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem14create_symlinkERKNS_7__cxx114pathES3_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem14create_symlinkERKNS_7__cxx114pathES3_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem14symlink_statusERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem14symlink_statusERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem14symlink_statusERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem14symlink_statusERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15hard_link_countERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15hard_link_countERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15hard_link_countERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15hard_link_countERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15last_write_timeERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15last_write_timeERKNS_4pathENSt6chrono10time_pointINS_12__file_clockENS3_8durationIlSt5ratioILl1ELl1000000000EEEEEE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15last_write_timeERKNS_4pathENSt6chrono10time_pointINS_12__file_clockENS3_8durationIlSt5ratioILl1ELl1000000000EEEEEERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15last_write_timeERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15last_write_timeERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15last_write_timeERKNS_7__cxx114pathENSt6chrono10time_pointINS_12__file_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15last_write_timeERKNS_7__cxx114pathENSt6chrono10time_pointINS_12__file_clockENS4_8durationIlSt5ratioILl1ELl1000000000EEEEEERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15last_write_timeERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_directoryERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_directoryERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_directoryERKNS_4pathES2_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_directoryERKNS_4pathES2_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_directoryERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_directoryERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_directoryERKNS_7__cxx114pathES3_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_directoryERKNS_7__cxx114pathES3_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_hard_linkERKNS_4pathES2_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_hard_linkERKNS_4pathES2_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_hard_linkERKNS_7__cxx114pathES3_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_hard_linkERKNS_7__cxx114pathES3_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16filesystem_errorC1ERKSsRKNS_4pathES5_St10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16filesystem_errorC1ERKSsRKNS_4pathESt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16filesystem_errorC1ERKSsSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16filesystem_errorC2ERKSsRKNS_4pathES5_St10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16filesystem_errorC2ERKSsRKNS_4pathESt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16filesystem_errorC2ERKSsSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16filesystem_errorD0Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16filesystem_errorD1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16filesystem_errorD2Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16weakly_canonicalERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16weakly_canonicalERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16weakly_canonicalERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16weakly_canonicalERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem18create_directoriesERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem18create_directoriesERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem18create_directoriesERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem18create_directoriesERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem18directory_iterator9incrementERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem18directory_iteratorC1ERKNS_4pathENS_17directory_optionsEPSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem18directory_iteratorC2ERKNS_4pathENS_17directory_optionsEPSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem18directory_iteratorppEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem19temp_directory_pathB5cxx11ERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem19temp_directory_pathB5cxx11Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem19temp_directory_pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem19temp_directory_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem24create_directory_symlinkERKNS_4pathES2_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem24create_directory_symlinkERKNS_4pathES2_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem24create_directory_symlinkERKNS_7__cxx114pathES3_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem24create_directory_symlinkERKNS_7__cxx114pathES3_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iterator25disable_recursion_pendingEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iterator3popERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iterator3popEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iterator9incrementERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratorC1ERKNS_4pathENS_17directory_optionsEPSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratorC2ERKNS_4pathENS_17directory_optionsEPSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSEOS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSERKS0_@@GLIBCXX_3.4.27 +FUNC:_ZNSt10filesystem28recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4copyERKNS_7__cxx114pathES3_NS_12copy_optionsE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4copyERKNS_7__cxx114pathES3_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4path14_M_split_cmptsEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4path14_S_convert_locEPKcS2_RKSt6locale@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4path15remove_filenameEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4path16replace_filenameERKS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4path17replace_extensionERKS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4path5_ListC1ERKS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4path5_ListC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4path9_M_appendESt17basic_string_viewIcSt11char_traitsIcEE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4path9_M_concatESt17basic_string_viewIcSt11char_traitsIcEE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4pathaSERKS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4pathdVERKS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4pathpLERKS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem5spaceERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem5spaceERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem5spaceERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem5spaceERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6removeERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6removeERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6removeERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6removeERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6renameERKNS_4pathES2_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6renameERKNS_4pathES2_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6renameERKNS_7__cxx114pathES3_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6renameERKNS_7__cxx114pathES3_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6statusERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6statusERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6statusERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6statusERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1110hash_valueERKNS0_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1116filesystem_errorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS0_4pathESC_St10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1116filesystem_errorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS0_4pathESt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1116filesystem_errorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1116filesystem_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS0_4pathESC_St10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1116filesystem_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS0_4pathESt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1116filesystem_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1116filesystem_errorD0Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1116filesystem_errorD1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1116filesystem_errorD2Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1118directory_iterator9incrementERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1118directory_iteratorC1ERKNS0_4pathENS_17directory_optionsEPSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1118directory_iteratorC2ERKNS0_4pathENS_17directory_optionsEPSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1118directory_iteratorppEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iterator25disable_recursion_pendingEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iterator3popERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iterator3popEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iterator9incrementERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorC1ERKNS0_4pathENS_17directory_optionsEPSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorC2ERKNS0_4pathENS_17directory_optionsEPSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSEOS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSERKS1_@@GLIBCXX_3.4.27 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114path14_M_split_cmptsEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114path14_S_convert_locEPKcS3_RKSt6locale@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114path15remove_filenameEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114path16replace_filenameERKS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114path17replace_extensionERKS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114path5_ListC1ERKS2_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114path5_ListC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114path9_M_appendESt17basic_string_viewIcSt11char_traitsIcEE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114path9_M_concatESt17basic_string_viewIcSt11char_traitsIcEE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114pathaSERKS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114pathdVERKS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114pathpLERKS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8absoluteERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8absoluteERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8absoluteERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8absoluteERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8is_emptyERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8is_emptyERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8is_emptyERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8is_emptyERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8relativeERKNS_4pathES2_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8relativeERKNS_4pathES2_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8relativeERKNS_7__cxx114pathES3_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8relativeERKNS_7__cxx114pathES3_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9canonicalERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9canonicalERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9canonicalERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9canonicalERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9copy_fileERKNS_4pathES2_NS_12copy_optionsE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9copy_fileERKNS_4pathES2_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9copy_fileERKNS_7__cxx114pathES3_NS_12copy_optionsE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9copy_fileERKNS_7__cxx114pathES3_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9file_sizeERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9file_sizeERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9file_sizeERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9file_sizeERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9proximateERKNS_4pathES2_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9proximateERKNS_4pathES2_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9proximateERKNS_7__cxx114pathES3_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9proximateERKNS_7__cxx114pathES3_RSt10error_code@@GLIBCXX_3.4.26 FUNC:_ZNSt10istrstream3strEv@@GLIBCXX_3.4 FUNC:_ZNSt10istrstreamC1EPKc@@GLIBCXX_3.4 FUNC:_ZNSt10istrstreamC1EPKcl@@GLIBCXX_3.4 @@ -1860,10 +2160,12 @@ FUNC:_ZNSt11char_traitsIcE2eqERKcS2_@GLIBCXX_3.4 FUNC:_ZNSt11char_traitsIwE2eqERKwS2_@@GLIBCXX_3.4.5 FUNC:_ZNSt11char_traitsIwE2eqERKwS2_@GLIBCXX_3.4 +FUNC:_ZNSt11logic_errorC1EOS_@@GLIBCXX_3.4.26 FUNC:_ZNSt11logic_errorC1EPKc@@GLIBCXX_3.4.21 FUNC:_ZNSt11logic_errorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE@@GLIBCXX_3.4.21 FUNC:_ZNSt11logic_errorC1ERKS_@@GLIBCXX_3.4.21 FUNC:_ZNSt11logic_errorC1ERKSs@@GLIBCXX_3.4 +FUNC:_ZNSt11logic_errorC2EOS_@@GLIBCXX_3.4.26 FUNC:_ZNSt11logic_errorC2EPKc@@GLIBCXX_3.4.21 FUNC:_ZNSt11logic_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE@@GLIBCXX_3.4.21 FUNC:_ZNSt11logic_errorC2ERKS_@@GLIBCXX_3.4.21 @@ -1871,6 +2173,7 @@ FUNC:_ZNSt11logic_errorD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt11logic_errorD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt11logic_errorD2Ev@@GLIBCXX_3.4 +FUNC:_ZNSt11logic_erroraSEOS_@@GLIBCXX_3.4.26 FUNC:_ZNSt11logic_erroraSERKS_@@GLIBCXX_3.4.21 FUNC:_ZNSt11range_errorC1EPKc@@GLIBCXX_3.4.21 FUNC:_ZNSt11range_errorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE@@GLIBCXX_3.4.21 @@ -1903,6 +2206,20 @@ FUNC:_ZNSt12__basic_fileIcEC2EP15pthread_mutex_t@@GLIBCXX_3.4 FUNC:_ZNSt12__basic_fileIcED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt12__basic_fileIcED2Ev@@GLIBCXX_3.4 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS4_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS4_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS6_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD2Ev@@GLIBCXX_3.4.15 @@ -2206,6 +2523,7 @@ FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEEaSEOS2_@@GLIBCXX_3.4.21 +FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEDn@@GLIBCXX_3.4.26 FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEPFRS2_S3_E@@GLIBCXX_3.4 FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEPFRSt8ios_baseS4_E@@GLIBCXX_3.4 FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEPFRSt9basic_iosIwS1_ES5_E@@GLIBCXX_3.4 @@ -2231,10 +2549,12 @@ FUNC:_ZNSt13random_device7_M_initERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE@@GLIBCXX_3.4.21 FUNC:_ZNSt13random_device7_M_initERKSs@@GLIBCXX_3.4.18 FUNC:_ZNSt13random_device9_M_getvalEv@@GLIBCXX_3.4.18 +FUNC:_ZNSt13runtime_errorC1EOS_@@GLIBCXX_3.4.26 FUNC:_ZNSt13runtime_errorC1EPKc@@GLIBCXX_3.4.21 FUNC:_ZNSt13runtime_errorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE@@GLIBCXX_3.4.21 FUNC:_ZNSt13runtime_errorC1ERKS_@@GLIBCXX_3.4.21 FUNC:_ZNSt13runtime_errorC1ERKSs@@GLIBCXX_3.4 +FUNC:_ZNSt13runtime_errorC2EOS_@@GLIBCXX_3.4.26 FUNC:_ZNSt13runtime_errorC2EPKc@@GLIBCXX_3.4.21 FUNC:_ZNSt13runtime_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE@@GLIBCXX_3.4.21 FUNC:_ZNSt13runtime_errorC2ERKS_@@GLIBCXX_3.4.21 @@ -2242,6 +2562,7 @@ FUNC:_ZNSt13runtime_errorD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt13runtime_errorD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt13runtime_errorD2Ev@@GLIBCXX_3.4 +FUNC:_ZNSt13runtime_erroraSEOS_@@GLIBCXX_3.4.26 FUNC:_ZNSt13runtime_erroraSERKS_@@GLIBCXX_3.4.21 FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openERKNSt7__cxx1112basic_stringIcS1_SaIcEEESt13_Ios_Openmode@@GLIBCXX_3.4.21 @@ -2353,12 +2674,16 @@ FUNC:_ZNSt14codecvt_bynameIwc11__mbstate_tED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt14codecvt_bynameIwc11__mbstate_tED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt14collate_bynameIcEC1EPKcm@@GLIBCXX_3.4 +FUNC:_ZNSt14collate_bynameIcEC1ERKSsm@@GLIBCXX_3.4.26 FUNC:_ZNSt14collate_bynameIcEC2EPKcm@@GLIBCXX_3.4 +FUNC:_ZNSt14collate_bynameIcEC2ERKSsm@@GLIBCXX_3.4.26 FUNC:_ZNSt14collate_bynameIcED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt14collate_bynameIcED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt14collate_bynameIcED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt14collate_bynameIwEC1EPKcm@@GLIBCXX_3.4 +FUNC:_ZNSt14collate_bynameIwEC1ERKSsm@@GLIBCXX_3.4.26 FUNC:_ZNSt14collate_bynameIwEC2EPKcm@@GLIBCXX_3.4 +FUNC:_ZNSt14collate_bynameIwEC2ERKSsm@@GLIBCXX_3.4.26 FUNC:_ZNSt14collate_bynameIwED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt14collate_bynameIwED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt14collate_bynameIwED2Ev@@GLIBCXX_3.4 @@ -2498,9 +2823,11 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC1EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC2EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEaSEOS3_@@GLIBCXX_3.4.21 @@ -2520,9 +2847,11 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC1EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC1ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC2EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC2ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEaSEOS3_@@GLIBCXX_3.4.21 @@ -2730,9 +3059,11 @@ FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC2EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4 @@ -2742,9 +3073,11 @@ FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC1EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC1ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC2EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC2ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4 @@ -2756,6 +3089,7 @@ FUNC:_ZNSt18condition_variableC2Ev@@GLIBCXX_3.4.11 FUNC:_ZNSt18condition_variableD1Ev@@GLIBCXX_3.4.11 FUNC:_ZNSt18condition_variableD2Ev@@GLIBCXX_3.4.11 +FUNC:_ZNSt19_Sp_make_shared_tag5_S_eqERKSt9type_info@@GLIBCXX_3.4.26 FUNC:_ZNSt19__codecvt_utf8_baseIDiED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt19__codecvt_utf8_baseIDiED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt19__codecvt_utf8_baseIDiED2Ev@@GLIBCXX_3.4.21 @@ -2770,9 +3104,11 @@ FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC1EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC2EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4 @@ -2782,9 +3118,11 @@ FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC1EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC1ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC2EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC2ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4 @@ -2794,9 +3132,11 @@ FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC2EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4 @@ -2806,9 +3146,11 @@ FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC1EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC2EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4 @@ -2849,6 +3191,26 @@ FUNC:_ZNSt3_V214error_categoryD2Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt3_V215system_categoryEv@@GLIBCXX_3.4.21 FUNC:_ZNSt3_V216generic_categoryEv@@GLIBCXX_3.4.21 +FUNC:_ZNSt3pmr19new_delete_resourceEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr20get_default_resourceEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr20null_memory_resourceEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr20set_default_resourceEPNS_15memory_resourceE@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr25monotonic_buffer_resource13_M_new_bufferEmm@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr25monotonic_buffer_resource18_M_release_buffersEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr26synchronized_pool_resource11do_allocateEmm@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr26synchronized_pool_resource13do_deallocateEPvmm@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr26synchronized_pool_resource7releaseEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr26synchronized_pool_resourceC1ERKNS_12pool_optionsEPNS_15memory_resourceE@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr26synchronized_pool_resourceC2ERKNS_12pool_optionsEPNS_15memory_resourceE@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr26synchronized_pool_resourceD1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr26synchronized_pool_resourceD2Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr28unsynchronized_pool_resource11do_allocateEmm@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr28unsynchronized_pool_resource13do_deallocateEPvmm@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr28unsynchronized_pool_resource7releaseEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr28unsynchronized_pool_resourceC1ERKNS_12pool_optionsEPNS_15memory_resourceE@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr28unsynchronized_pool_resourceC2ERKNS_12pool_optionsEPNS_15memory_resourceE@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr28unsynchronized_pool_resourceD1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr28unsynchronized_pool_resourceD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt5ctypeIcE13classic_tableEv@@GLIBCXX_3.4 FUNC:_ZNSt5ctypeIcEC1EP15__locale_structPKtbm@@GLIBCXX_3.4 FUNC:_ZNSt5ctypeIcEC1EPKtbm@@GLIBCXX_3.4 @@ -2982,6 +3344,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPcEEvT_S7_St20forward_iterator_tag@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12__sv_wrapperC1ESt17basic_string_viewIcS2_E@@GLIBCXX_3.4.26 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12__sv_wrapperC2ESt17basic_string_viewIcS2_E@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13_M_local_dataEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13_M_set_lengthEm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIPKcS4_EESA_@@GLIBCXX_3.4.21 @@ -2991,10 +3355,12 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13shrink_to_fitEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE14_M_replace_auxEmmmc@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE16_M_get_allocatorEv@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE17_S_to_string_viewESt17basic_string_viewIcS2_E@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE18_M_construct_aux_2Emc@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE2atEm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE3endEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4backEv@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4dataEv@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4rendEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4swapERS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5beginEv@@GLIBCXX_3.4.21 @@ -3018,6 +3384,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6assignERKS4_mm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6assignESt16initializer_listIcE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6assignEmc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEN9__gnu_cxx17__normal_iteratorIPKcS4_EESt16initializer_listIcE@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEN9__gnu_cxx17__normal_iteratorIPKcS4_EEc@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEN9__gnu_cxx17__normal_iteratorIPKcS4_EEmc@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEN9__gnu_cxx17__normal_iteratorIPcS4_EESt16initializer_listIcE@@GLIBCXX_3.4.21 @@ -3067,6 +3434,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_mutateEmmPKcm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_S_assignEPcmc@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9push_backEc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1ENS4_12__sv_wrapperERKS3_@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EOS4_RKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EPKcRKS3_@@GLIBCXX_3.4.21 @@ -3083,6 +3451,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1IN9__gnu_cxx17__normal_iteratorIPcS4_EEvEET_SA_RKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1IPKcvEET_S8_RKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1IPcvEET_S7_RKS3_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ENS4_12__sv_wrapperERKS3_@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EOS4_RKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EPKcRKS3_@@GLIBCXX_3.4.21 @@ -3125,6 +3494,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPwS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIPKwEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIPwEEvT_S7_St20forward_iterator_tag@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12__sv_wrapperC1ESt17basic_string_viewIwS2_E@@GLIBCXX_3.4.26 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12__sv_wrapperC2ESt17basic_string_viewIwS2_E@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE13_M_local_dataEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE13_M_set_lengthEm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIPKwS4_EESA_@@GLIBCXX_3.4.21 @@ -3134,10 +3505,12 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE13shrink_to_fitEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE14_M_replace_auxEmmmw@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE16_M_get_allocatorEv@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE17_S_to_string_viewESt17basic_string_viewIwS2_E@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE18_M_construct_aux_2Emw@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE2atEm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE3endEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE4backEv@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE4dataEv@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE4rendEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE4swapERS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE5beginEv@@GLIBCXX_3.4.21 @@ -3161,6 +3534,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6assignERKS4_mm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6assignESt16initializer_listIwE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6assignEmw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPKwS4_EESt16initializer_listIwE@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPKwS4_EEmw@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPKwS4_EEw@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS4_EESt16initializer_listIwE@@GLIBCXX_3.4.21 @@ -3210,6 +3584,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE9_M_mutateEmmPKwm@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE9_S_assignEPwmw@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE9push_backEw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC1ENS4_12__sv_wrapperERKS3_@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC1EOS4_RKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC1EPKwRKS3_@@GLIBCXX_3.4.21 @@ -3226,6 +3601,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC1IN9__gnu_cxx17__normal_iteratorIPwS4_EEvEET_SA_RKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC1IPKwvEET_S8_RKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC1IPwvEET_S7_RKS3_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC2ENS4_12__sv_wrapperERKS3_@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC2EOS4_RKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC2EPKwRKS3_@@GLIBCXX_3.4.21 @@ -3289,10 +3665,12 @@ FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1EOS4_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2EOS4_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4.21 @@ -3318,10 +3696,12 @@ FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1EOS4_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2EOS4_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4.21 @@ -3401,9 +3781,11 @@ FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4.21 @@ -3413,9 +3795,11 @@ FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4.21 @@ -3425,9 +3809,11 @@ FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4.21 @@ -3437,9 +3823,11 @@ FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4.21 @@ -3449,9 +3837,11 @@ FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4.21 @@ -3461,9 +3851,11 @@ FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4.21 @@ -3546,9 +3938,15 @@ FUNC:_ZNSt7__cxx119money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx119money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx119money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@@GLIBCXX_3.4.21 +FUNC:_ZNSt7codecvtIDiDu11__mbstate_tED0Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7codecvtIDiDu11__mbstate_tED1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7codecvtIDiDu11__mbstate_tED2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7codecvtIDic11__mbstate_tED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7codecvtIDic11__mbstate_tED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7codecvtIDic11__mbstate_tED2Ev@@GLIBCXX_3.4.21 +FUNC:_ZNSt7codecvtIDsDu11__mbstate_tED0Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7codecvtIDsDu11__mbstate_tED1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7codecvtIDsDu11__mbstate_tED2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7codecvtIDsc11__mbstate_tED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7codecvtIDsc11__mbstate_tED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7codecvtIDsc11__mbstate_tED2Ev@@GLIBCXX_3.4.21 @@ -3831,6 +4229,7 @@ FUNC:_ZSt18__throw_bad_typeidv@@GLIBCXX_3.4 FUNC:_ZSt18uncaught_exceptionv@@GLIBCXX_3.4 FUNC:_ZSt19__throw_ios_failurePKc@@GLIBCXX_3.4 +FUNC:_ZSt19__throw_ios_failurePKci@@GLIBCXX_3.4.26 FUNC:_ZSt19__throw_logic_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt19__throw_range_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt19__throw_regex_errorNSt15regex_constants10error_typeE@@GLIBCXX_3.4.15 @@ -4211,6 +4610,7 @@ OBJECT:0:CXXABI_1.3.1 OBJECT:0:CXXABI_1.3.10 OBJECT:0:CXXABI_1.3.11 +OBJECT:0:CXXABI_1.3.12 OBJECT:0:CXXABI_1.3.2 OBJECT:0:CXXABI_1.3.3 OBJECT:0:CXXABI_1.3.4 @@ -4240,6 +4640,8 @@ OBJECT:0:GLIBCXX_3.4.23 OBJECT:0:GLIBCXX_3.4.24 OBJECT:0:GLIBCXX_3.4.25 +OBJECT:0:GLIBCXX_3.4.26 +OBJECT:0:GLIBCXX_3.4.27 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 @@ -4326,6 +4728,7 @@ OBJECT:16:_ZTIDi@@CXXABI_1.3.3 OBJECT:16:_ZTIDn@@CXXABI_1.3.5 OBJECT:16:_ZTIDs@@CXXABI_1.3.3 +OBJECT:16:_ZTIDu@@CXXABI_1.3.12 OBJECT:16:_ZTIN10__cxxabiv115__forced_unwindE@@CXXABI_1.3.2 OBJECT:16:_ZTIN10__cxxabiv119__foreign_exceptionE@@CXXABI_1.3.2 OBJECT:16:_ZTINSt13__future_base11_State_baseE@@GLIBCXX_3.4.15 @@ -4447,6 +4850,19 @@ OBJECT:1:_ZNSt14numeric_limitsIDsE9is_iec559E@@GLIBCXX_3.4.11 OBJECT:1:_ZNSt14numeric_limitsIDsE9is_moduloE@@GLIBCXX_3.4.11 OBJECT:1:_ZNSt14numeric_limitsIDsE9is_signedE@@GLIBCXX_3.4.11 +OBJECT:1:_ZNSt14numeric_limitsIDuE10is_boundedE@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE10is_integerE@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE12has_infinityE@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE13has_quiet_NaNE@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE14is_specializedE@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE15has_denorm_lossE@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE15tinyness_beforeE@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE17has_signaling_NaNE@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE5trapsE@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE8is_exactE@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE9is_iec559E@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE9is_moduloE@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE9is_signedE@@GLIBCXX_3.4.26 OBJECT:1:_ZNSt14numeric_limitsIaE10is_boundedE@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsIaE10is_integerE@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsIaE12has_infinityE@@GLIBCXX_3.4 @@ -4758,6 +5174,8 @@ OBJECT:24:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:24:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:24:_ZTINSt10filesystem16filesystem_errorE@@GLIBCXX_3.4.26 +OBJECT:24:_ZTINSt10filesystem7__cxx1116filesystem_errorE@@GLIBCXX_3.4.26 OBJECT:24:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 OBJECT:24:_ZTINSt17__gnu_cxx_ldbl1287num_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4 OBJECT:24:_ZTINSt17__gnu_cxx_ldbl1287num_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@@GLIBCXX_LDBL_3.4 @@ -4767,6 +5185,8 @@ OBJECT:24:_ZTINSt17__gnu_cxx_ldbl1289money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEEE@@GLIBCXX_LDBL_3.4 OBJECT:24:_ZTINSt17__gnu_cxx_ldbl1289money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEEE@@GLIBCXX_LDBL_3.4 OBJECT:24:_ZTINSt17__gnu_cxx_ldbl1289money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEEE@@GLIBCXX_LDBL_3.4 +OBJECT:24:_ZTINSt3pmr26synchronized_pool_resourceE@@GLIBCXX_3.4.26 +OBJECT:24:_ZTINSt3pmr28unsynchronized_pool_resourceE@@GLIBCXX_3.4.26 OBJECT:24:_ZTINSt7__cxx1114collate_bynameIcEE@@GLIBCXX_3.4.21 OBJECT:24:_ZTINSt7__cxx1114collate_bynameIwEE@@GLIBCXX_3.4.21 OBJECT:24:_ZTINSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEE@@GLIBCXX_3.4.21 @@ -4865,7 +5285,9 @@ OBJECT:24:_ZTISt25__codecvt_utf8_utf16_baseIDsE@@GLIBCXX_3.4.21 OBJECT:24:_ZTISt25__codecvt_utf8_utf16_baseIwE@@GLIBCXX_3.4.21 OBJECT:24:_ZTISt5ctypeIwE@@GLIBCXX_3.4 +OBJECT:24:_ZTISt7codecvtIDiDu11__mbstate_tE@@GLIBCXX_3.4.26 OBJECT:24:_ZTISt7codecvtIDic11__mbstate_tE@@GLIBCXX_3.4.21 +OBJECT:24:_ZTISt7codecvtIDsDu11__mbstate_tE@@GLIBCXX_3.4.26 OBJECT:24:_ZTISt7codecvtIDsc11__mbstate_tE@@GLIBCXX_3.4.21 OBJECT:24:_ZTISt7codecvtIcc11__mbstate_tE@@GLIBCXX_3.4 OBJECT:24:_ZTISt7codecvtIwc11__mbstate_tE@@GLIBCXX_3.4 @@ -4952,6 +5374,8 @@ OBJECT:2:_ZTSw@@CXXABI_1.3 OBJECT:2:_ZTSx@@CXXABI_1.3 OBJECT:2:_ZTSy@@CXXABI_1.3 +OBJECT:30:_ZTSSt7codecvtIDiDu11__mbstate_tE@@GLIBCXX_3.4.26 +OBJECT:30:_ZTSSt7codecvtIDsDu11__mbstate_tE@@GLIBCXX_3.4.26 OBJECT:32:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4 OBJECT:32:_ZNSs4_Rep20_S_empty_rep_storageE@@GLIBCXX_3.4 OBJECT:32:_ZTIPDd@@CXXABI_1.3.4 @@ -4960,6 +5384,7 @@ OBJECT:32:_ZTIPDi@@CXXABI_1.3.3 OBJECT:32:_ZTIPDn@@CXXABI_1.3.5 OBJECT:32:_ZTIPDs@@CXXABI_1.3.3 +OBJECT:32:_ZTIPDu@@CXXABI_1.3.12 OBJECT:32:_ZTIPKDd@@CXXABI_1.3.4 OBJECT:32:_ZTIPKDe@@CXXABI_1.3.4 OBJECT:32:_ZTIPKDf@@CXXABI_1.3.4 @@ -4966,6 +5391,7 @@ OBJECT:32:_ZTIPKDi@@CXXABI_1.3.3 OBJECT:32:_ZTIPKDn@@CXXABI_1.3.5 OBJECT:32:_ZTIPKDs@@CXXABI_1.3.3 +OBJECT:32:_ZTIPKDu@@CXXABI_1.3.12 OBJECT:32:_ZTIPKa@@CXXABI_1.3 OBJECT:32:_ZTIPKb@@CXXABI_1.3 OBJECT:32:_ZTIPKc@@CXXABI_1.3 @@ -5095,6 +5521,8 @@ OBJECT:40:_ZTSSt14basic_iostreamIwSt11char_traitsIwEE@@GLIBCXX_3.4 OBJECT:40:_ZTSSt14basic_ofstreamIcSt11char_traitsIcEE@@GLIBCXX_3.4 OBJECT:40:_ZTSSt14basic_ofstreamIwSt11char_traitsIwEE@@GLIBCXX_3.4 +OBJECT:40:_ZTVNSt10filesystem16filesystem_errorE@@GLIBCXX_3.4.26 +OBJECT:40:_ZTVNSt10filesystem7__cxx1116filesystem_errorE@@GLIBCXX_3.4.26 OBJECT:40:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15 OBJECT:40:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15 OBJECT:40:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 @@ -5169,6 +5597,15 @@ OBJECT:4:_ZNSt14numeric_limitsIDsE5radixE@@GLIBCXX_3.4.11 OBJECT:4:_ZNSt14numeric_limitsIDsE6digitsE@@GLIBCXX_3.4.11 OBJECT:4:_ZNSt14numeric_limitsIDsE8digits10E@@GLIBCXX_3.4.11 +OBJECT:4:_ZNSt14numeric_limitsIDuE10has_denormE@@GLIBCXX_3.4.26 +OBJECT:4:_ZNSt14numeric_limitsIDuE11round_styleE@@GLIBCXX_3.4.26 +OBJECT:4:_ZNSt14numeric_limitsIDuE12max_exponentE@@GLIBCXX_3.4.26 +OBJECT:4:_ZNSt14numeric_limitsIDuE12min_exponentE@@GLIBCXX_3.4.26 +OBJECT:4:_ZNSt14numeric_limitsIDuE14max_exponent10E@@GLIBCXX_3.4.26 +OBJECT:4:_ZNSt14numeric_limitsIDuE14min_exponent10E@@GLIBCXX_3.4.26 +OBJECT:4:_ZNSt14numeric_limitsIDuE5radixE@@GLIBCXX_3.4.26 +OBJECT:4:_ZNSt14numeric_limitsIDuE6digitsE@@GLIBCXX_3.4.26 +OBJECT:4:_ZNSt14numeric_limitsIDuE8digits10E@@GLIBCXX_3.4.26 OBJECT:4:_ZNSt14numeric_limitsIaE10has_denormE@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsIaE11round_styleE@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsIaE12max_digits10E@@GLIBCXX_3.4.14 @@ -5585,7 +6022,9 @@ OBJECT:88:_ZTVSt25__codecvt_utf8_utf16_baseIDiE@@GLIBCXX_3.4.21 OBJECT:88:_ZTVSt25__codecvt_utf8_utf16_baseIDsE@@GLIBCXX_3.4.21 OBJECT:88:_ZTVSt25__codecvt_utf8_utf16_baseIwE@@GLIBCXX_3.4.21 +OBJECT:88:_ZTVSt7codecvtIDiDu11__mbstate_tE@@GLIBCXX_3.4.26 OBJECT:88:_ZTVSt7codecvtIDic11__mbstate_tE@@GLIBCXX_3.4.21 +OBJECT:88:_ZTVSt7codecvtIDsDu11__mbstate_tE@@GLIBCXX_3.4.26 OBJECT:88:_ZTVSt7codecvtIDsc11__mbstate_tE@@GLIBCXX_3.4.21 OBJECT:88:_ZTVSt7codecvtIcc11__mbstate_tE@@GLIBCXX_3.4 OBJECT:88:_ZTVSt7codecvtIwc11__mbstate_tE@@GLIBCXX_3.4 @@ -5679,7 +6118,9 @@ OBJECT:8:_ZNSt7__cxx119money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@@GLIBCXX_3.4.21 OBJECT:8:_ZNSt7__cxx119money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCXX_3.4.21 OBJECT:8:_ZNSt7__cxx119money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@@GLIBCXX_3.4.21 +OBJECT:8:_ZNSt7codecvtIDiDu11__mbstate_tE2idE@@GLIBCXX_3.4.26 OBJECT:8:_ZNSt7codecvtIDic11__mbstate_tE2idE@@GLIBCXX_3.4.21 +OBJECT:8:_ZNSt7codecvtIDsDu11__mbstate_tE2idE@@GLIBCXX_3.4.26 OBJECT:8:_ZNSt7codecvtIDsc11__mbstate_tE2idE@@GLIBCXX_3.4.21 OBJECT:8:_ZNSt7codecvtIcc11__mbstate_tE2idE@@GLIBCXX_3.4 OBJECT:8:_ZNSt7codecvtIwc11__mbstate_tE2idE@@GLIBCXX_3.4 Index: libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt =================================================================== --- a/src/libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/config/abi/post/s390x-linux-gnu/baseline_symbols.txt (.../branches/gcc-9-branch) @@ -1975,6 +1975,7 @@ FUNC:_ZNSt10filesystem28recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSEOS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSERKS0_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem28recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsE@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 @@ -2031,6 +2032,7 @@ FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSEOS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSERKS1_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_M_split_cmptsEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_S_convert_locEPKcS3_RKSt6locale@@GLIBCXX_3.4.26 @@ -2206,13 +2208,17 @@ FUNC:_ZNSt12__basic_fileIcED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS6_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 @@ -4635,6 +4641,7 @@ OBJECT:0:GLIBCXX_3.4.24 OBJECT:0:GLIBCXX_3.4.25 OBJECT:0:GLIBCXX_3.4.26 +OBJECT:0:GLIBCXX_3.4.27 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 Index: libstdc++-v3/config/abi/post/hppa-linux-gnu/baseline_symbols.txt =================================================================== --- a/src/libstdc++-v3/config/abi/post/hppa-linux-gnu/baseline_symbols.txt (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/config/abi/post/hppa-linux-gnu/baseline_symbols.txt (.../branches/gcc-9-branch) @@ -112,6 +112,7 @@ FUNC:_ZN11__gnu_debug19_Safe_sequence_base18_M_detach_singularEv@@GLIBCXX_3.4 FUNC:_ZN11__gnu_debug19_Safe_sequence_base22_M_revalidate_singularEv@@GLIBCXX_3.4 FUNC:_ZN11__gnu_debug19_Safe_sequence_base7_M_swapERS0_@@GLIBCXX_3.4 +FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base16_M_attach_singleEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.26 FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_attachEPNS_19_Safe_sequence_baseEb@@GLIBCXX_3.4.17 FUNC:_ZN11__gnu_debug25_Safe_local_iterator_base9_M_detachEv@@GLIBCXX_3.4.17 FUNC:_ZN11__gnu_debug30_Safe_unordered_container_base13_M_detach_allEv@@GLIBCXX_3.4.17 @@ -261,6 +262,7 @@ FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE8capacityEv@@GLIBCXX_3.4 FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE8max_sizeEv@@GLIBCXX_3.4 FUNC:_ZNKSbIwSt11char_traitsIwESaIwEE9_M_ibeginEv@@GLIBCXX_3.4 +FUNC:_ZNKSbIwSt11char_traitsIwESaIwEEcvSt17basic_string_viewIwS0_EEv@@GLIBCXX_3.4.26 FUNC:_ZNKSbIwSt11char_traitsIwESaIwEEixEj@@GLIBCXX_3.4 FUNC:_ZNKSi6gcountEv@@GLIBCXX_3.4 FUNC:_ZNKSi6sentrycvbEv@@GLIBCXX_3.4 @@ -328,9 +330,66 @@ FUNC:_ZNKSs8capacityEv@@GLIBCXX_3.4 FUNC:_ZNKSs8max_sizeEv@@GLIBCXX_3.4 FUNC:_ZNKSs9_M_ibeginEv@@GLIBCXX_3.4 +FUNC:_ZNKSscvSt17basic_string_viewIcSt11char_traitsIcEEEv@@GLIBCXX_3.4.26 FUNC:_ZNKSsixEj@@GLIBCXX_3.4 FUNC:_ZNKSt10bad_typeid4whatEv@@GLIBCXX_3.4.9 FUNC:_ZNKSt10error_code23default_error_conditionEv@@GLIBCXX_3.4.11 +FUNC:_ZNKSt10filesystem16filesystem_error4whatEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem16filesystem_error5path1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem16filesystem_error5path2Ev@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem18directory_iteratordeEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem28recursive_directory_iterator17recursion_pendingEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem28recursive_directory_iterator5depthEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem28recursive_directory_iterator7optionsEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem28recursive_directory_iteratordeEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path11parent_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path12has_filenameEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path13has_root_nameEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path13has_root_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path13relative_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path14root_directoryEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path15has_parent_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path16lexically_normalEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path17_M_find_extensionEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path17has_relative_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path18has_root_directoryEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path18lexically_relativeERKS0_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path19lexically_proximateERKS0_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path5_List13_Impl_deleterclEPNS1_5_ImplE@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path5_List3endEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path5_List5beginEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path7compareERKS0_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path7compareESt17basic_string_viewIcSt11char_traitsIcEE@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path9root_nameEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem4path9root_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx1116filesystem_error4whatEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx1116filesystem_error5path1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx1116filesystem_error5path2Ev@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx1118directory_iteratordeEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx1128recursive_directory_iterator17recursion_pendingEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx1128recursive_directory_iterator5depthEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx1128recursive_directory_iterator7optionsEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx1128recursive_directory_iteratordeEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path11parent_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path12has_filenameEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path13has_root_nameEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path13has_root_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path13relative_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path14root_directoryEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path15has_parent_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path16lexically_normalEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path17_M_find_extensionEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path17has_relative_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path18has_root_directoryEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path18lexically_relativeERKS1_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path19lexically_proximateERKS1_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path5_List13_Impl_deleterclEPNS2_5_ImplE@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path5_List3endEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path5_List5beginEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path7compareERKS1_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path7compareESt17basic_string_viewIcSt11char_traitsIcEE@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path9root_nameEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt10filesystem7__cxx114path9root_pathEv@@GLIBCXX_3.4.26 FUNC:_ZNKSt10istrstream5rdbufEv@@GLIBCXX_3.4 FUNC:_ZNKSt10lock_error4whatEv@@GLIBCXX_3.4.11 FUNC:_ZNKSt10moneypunctIcLb0EE10neg_formatEv@@GLIBCXX_3.4 @@ -734,6 +793,7 @@ FUNC:_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE8_M_limitEjj@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE8capacityEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE8max_sizeEv@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEcvSt17basic_string_viewIcS2_EEv@@GLIBCXX_3.4.26 FUNC:_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEixEj@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_M_disjunctEPKw@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE11_M_is_localEv@@GLIBCXX_3.4.21 @@ -794,6 +854,7 @@ FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE8_M_limitEjj@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE8capacityEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE8max_sizeEv@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEcvSt17basic_string_viewIwS2_EEv@@GLIBCXX_3.4.26 FUNC:_ZNKSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEixEj@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEE3strEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEE3strEv@@GLIBCXX_3.4.21 @@ -925,6 +986,13 @@ FUNC:_ZNKSt7__cxx119money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE6do_putES4_bRSt8ios_basewe@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx119money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb0EEES4_S4_RSt8ios_basewRKNS_12basic_stringIwS3_SaIwEEE@@GLIBCXX_3.4.21 FUNC:_ZNKSt7__cxx119money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE9_M_insertILb1EEES4_S4_RSt8ios_basewRKNS_12basic_stringIwS3_SaIwEEE@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7codecvtIDiDu11__mbstate_tE10do_unshiftERS0_PDuS3_RS3_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDiDu11__mbstate_tE11do_encodingEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDiDu11__mbstate_tE13do_max_lengthEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDiDu11__mbstate_tE16do_always_noconvEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDiDu11__mbstate_tE5do_inERS0_PKDuS4_RS4_PDiS6_RS6_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDiDu11__mbstate_tE6do_outERS0_PKDiS4_RS4_PDuS6_RS6_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDiDu11__mbstate_tE9do_lengthERS0_PKDuS4_j@@GLIBCXX_3.4.26 FUNC:_ZNKSt7codecvtIDic11__mbstate_tE10do_unshiftERS0_PcS3_RS3_@@GLIBCXX_3.4.21 FUNC:_ZNKSt7codecvtIDic11__mbstate_tE11do_encodingEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7codecvtIDic11__mbstate_tE13do_max_lengthEv@@GLIBCXX_3.4.21 @@ -932,6 +1000,13 @@ FUNC:_ZNKSt7codecvtIDic11__mbstate_tE5do_inERS0_PKcS4_RS4_PDiS6_RS6_@@GLIBCXX_3.4.21 FUNC:_ZNKSt7codecvtIDic11__mbstate_tE6do_outERS0_PKDiS4_RS4_PcS6_RS6_@@GLIBCXX_3.4.21 FUNC:_ZNKSt7codecvtIDic11__mbstate_tE9do_lengthERS0_PKcS4_j@@GLIBCXX_3.4.21 +FUNC:_ZNKSt7codecvtIDsDu11__mbstate_tE10do_unshiftERS0_PDuS3_RS3_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDsDu11__mbstate_tE11do_encodingEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDsDu11__mbstate_tE13do_max_lengthEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDsDu11__mbstate_tE16do_always_noconvEv@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDsDu11__mbstate_tE5do_inERS0_PKDuS4_RS4_PDsS6_RS6_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDsDu11__mbstate_tE6do_outERS0_PKDsS4_RS4_PDuS6_RS6_@@GLIBCXX_3.4.26 +FUNC:_ZNKSt7codecvtIDsDu11__mbstate_tE9do_lengthERS0_PKDuS4_j@@GLIBCXX_3.4.26 FUNC:_ZNKSt7codecvtIDsc11__mbstate_tE10do_unshiftERS0_PcS3_RS3_@@GLIBCXX_3.4.21 FUNC:_ZNKSt7codecvtIDsc11__mbstate_tE11do_encodingEv@@GLIBCXX_3.4.21 FUNC:_ZNKSt7codecvtIDsc11__mbstate_tE13do_max_lengthEv@@GLIBCXX_3.4.21 @@ -1134,6 +1209,7 @@ FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE21_M_extract_via_formatES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKc@@GLIBCXX_3.4 FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE24_M_extract_wday_or_monthES3_S3_RiPPKcjRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4.14 FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKcSC_@@GLIBCXX_3.4.21 +FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmcc@@GLIBCXX_3.4.26 FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmcc@@GLIBCXX_3.4.21 FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8get_dateES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4 FUNC:_ZNKSt8time_getIcSt19istreambuf_iteratorIcSt11char_traitsIcEEE8get_timeES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4 @@ -1152,6 +1228,7 @@ FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE21_M_extract_via_formatES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKw@@GLIBCXX_3.4 FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE24_M_extract_wday_or_monthES3_S3_RiPPKwjRSt8ios_baseRSt12_Ios_Iostate@@GLIBCXX_3.4.14 FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmPKwSC_@@GLIBCXX_3.4.21 +FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE3getES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmcc@@GLIBCXX_3.4.26 FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE6do_getES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tmcc@@GLIBCXX_3.4.21 FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8get_dateES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4 FUNC:_ZNKSt8time_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE8get_timeES3_S3_RSt8ios_baseRSt12_Ios_IostateP2tm@@GLIBCXX_3.4 @@ -1244,6 +1321,8 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_S_constructIPKwEEPwT_S7_RKS1_St20forward_iterator_tag@@GLIBCXX_3.4.14 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_S_constructIPwEES4_T_S5_RKS1_St20forward_iterator_tag@@GLIBCXX_3.4.14 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12_S_empty_repEv@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12__sv_wrapperC1ESt17basic_string_viewIwS0_E@@GLIBCXX_3.4.26 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEE12__sv_wrapperC2ESt17basic_string_viewIwS0_E@@GLIBCXX_3.4.26 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIPKwS2_EES8_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIS3_S2_EES6_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwPKwS5_@@GLIBCXX_3.4 @@ -1251,6 +1330,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE13shrink_to_fitEv@@GLIBCXX_3.4.14 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE14_M_replace_auxEjjjw@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE15_M_replace_safeEjjPKwj@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEE17_S_to_string_viewESt17basic_string_viewIwS0_E@@GLIBCXX_3.4.26 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE18_S_construct_aux_2EjwRKS1_@@GLIBCXX_3.4.14 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE2atEj@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE3endEv@@GLIBCXX_3.4 @@ -1267,6 +1347,7 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep8_M_cloneERKS1_j@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4_Rep9_S_createEjjRKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4backEv@@GLIBCXX_3.4.15 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4dataEv@@GLIBCXX_3.4.26 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4rendEv@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE4swapERS2_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE5beginEv@@GLIBCXX_3.4 @@ -1325,11 +1406,14 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_assignEPwjw@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9_M_mutateEjjj@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEE9push_backEw@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ENS2_12__sv_wrapperERKS1_@@GLIBCXX_3.4.26 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1EOS2_@@GLIBCXX_3.4.14 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1EOS2_RKS1_@@GLIBCXX_3.4.26 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1EPKwRKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1EPKwjRKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_RKS1_@@GLIBCXX_3.4.26 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jRKS1_@@GLIBCXX_3.4.24 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jj@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1ERKS2_jjRKS1_@@GLIBCXX_3.4 @@ -1339,11 +1423,14 @@ FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1IN9__gnu_cxx17__normal_iteratorIPwS2_EEEET_S8_RKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1IPKwEET_S6_RKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC1IPwEET_S5_RKS1_@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ENS2_12__sv_wrapperERKS1_@@GLIBCXX_3.4.26 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2EOS2_@@GLIBCXX_3.4.15 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2EOS2_RKS1_@@GLIBCXX_3.4.26 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2EPKwRKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2EPKwjRKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS1_@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_@@GLIBCXX_3.4 +FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_RKS1_@@GLIBCXX_3.4.26 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jRKS1_@@GLIBCXX_3.4.24 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jj@@GLIBCXX_3.4 FUNC:_ZNSbIwSt11char_traitsIwESaIwEEC2ERKS2_jjRKS1_@@GLIBCXX_3.4 @@ -1471,6 +1558,7 @@ FUNC:_ZNSoD1Ev@@GLIBCXX_3.4 FUNC:_ZNSoD2Ev@@GLIBCXX_3.4 FUNC:_ZNSoaSEOSo@@GLIBCXX_3.4.21 +FUNC:_ZNSolsEDn@@GLIBCXX_3.4.26 FUNC:_ZNSolsEPFRSoS_E@@GLIBCXX_3.4 FUNC:_ZNSolsEPFRSt8ios_baseS0_E@@GLIBCXX_3.4 FUNC:_ZNSolsEPFRSt9basic_iosIcSt11char_traitsIcEES3_E@@GLIBCXX_3.4 @@ -1497,6 +1585,8 @@ FUNC:_ZNSs12_S_constructIPKcEEPcT_S3_RKSaIcESt20forward_iterator_tag@@GLIBCXX_3.4.14 FUNC:_ZNSs12_S_constructIPcEES0_T_S1_RKSaIcESt20forward_iterator_tag@@GLIBCXX_3.4.14 FUNC:_ZNSs12_S_empty_repEv@@GLIBCXX_3.4 +FUNC:_ZNSs12__sv_wrapperC1ESt17basic_string_viewIcSt11char_traitsIcEE@@GLIBCXX_3.4.26 +FUNC:_ZNSs12__sv_wrapperC2ESt17basic_string_viewIcSt11char_traitsIcEE@@GLIBCXX_3.4.26 FUNC:_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIPKcSsEES4_@@GLIBCXX_3.4 FUNC:_ZNSs13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIS_SsEES2_@@GLIBCXX_3.4 FUNC:_ZNSs13_S_copy_charsEPcPKcS1_@@GLIBCXX_3.4 @@ -1504,6 +1594,7 @@ FUNC:_ZNSs13shrink_to_fitEv@@GLIBCXX_3.4.14 FUNC:_ZNSs14_M_replace_auxEjjjc@@GLIBCXX_3.4 FUNC:_ZNSs15_M_replace_safeEjjPKcj@@GLIBCXX_3.4 +FUNC:_ZNSs17_S_to_string_viewESt17basic_string_viewIcSt11char_traitsIcEE@@GLIBCXX_3.4.26 FUNC:_ZNSs18_S_construct_aux_2EjcRKSaIcE@@GLIBCXX_3.4.14 FUNC:_ZNSs2atEj@@GLIBCXX_3.4 FUNC:_ZNSs3endEv@@GLIBCXX_3.4 @@ -1520,6 +1611,7 @@ FUNC:_ZNSs4_Rep8_M_cloneERKSaIcEj@@GLIBCXX_3.4 FUNC:_ZNSs4_Rep9_S_createEjjRKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSs4backEv@@GLIBCXX_3.4.15 +FUNC:_ZNSs4dataEv@@GLIBCXX_3.4.26 FUNC:_ZNSs4rendEv@@GLIBCXX_3.4 FUNC:_ZNSs4swapERSs@@GLIBCXX_3.4 FUNC:_ZNSs5beginEv@@GLIBCXX_3.4 @@ -1578,11 +1670,14 @@ FUNC:_ZNSs9_M_assignEPcjc@GLIBCXX_3.4 FUNC:_ZNSs9_M_mutateEjjj@@GLIBCXX_3.4 FUNC:_ZNSs9push_backEc@@GLIBCXX_3.4 +FUNC:_ZNSsC1ENSs12__sv_wrapperERKSaIcE@@GLIBCXX_3.4.26 FUNC:_ZNSsC1EOSs@@GLIBCXX_3.4.14 +FUNC:_ZNSsC1EOSsRKSaIcE@@GLIBCXX_3.4.26 FUNC:_ZNSsC1EPKcRKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSsC1EPKcjRKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSsC1ERKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSsC1ERKSs@@GLIBCXX_3.4 +FUNC:_ZNSsC1ERKSsRKSaIcE@@GLIBCXX_3.4.26 FUNC:_ZNSsC1ERKSsjRKSaIcE@@GLIBCXX_3.4.23 FUNC:_ZNSsC1ERKSsjj@@GLIBCXX_3.4 FUNC:_ZNSsC1ERKSsjjRKSaIcE@@GLIBCXX_3.4 @@ -1592,11 +1687,14 @@ FUNC:_ZNSsC1IN9__gnu_cxx17__normal_iteratorIPcSsEEEET_S4_RKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSsC1IPKcEET_S2_RKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSsC1IPcEET_S1_RKSaIcE@@GLIBCXX_3.4 +FUNC:_ZNSsC2ENSs12__sv_wrapperERKSaIcE@@GLIBCXX_3.4.26 FUNC:_ZNSsC2EOSs@@GLIBCXX_3.4.15 +FUNC:_ZNSsC2EOSsRKSaIcE@@GLIBCXX_3.4.26 FUNC:_ZNSsC2EPKcRKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSsC2EPKcjRKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSsC2ERKSaIcE@@GLIBCXX_3.4 FUNC:_ZNSsC2ERKSs@@GLIBCXX_3.4 +FUNC:_ZNSsC2ERKSsRKSaIcE@@GLIBCXX_3.4.26 FUNC:_ZNSsC2ERKSsjRKSaIcE@@GLIBCXX_3.4.23 FUNC:_ZNSsC2ERKSsjj@@GLIBCXX_3.4 FUNC:_ZNSsC2ERKSsjjRKSaIcE@@GLIBCXX_3.4 @@ -1628,6 +1726,208 @@ FUNC:_ZNSt10bad_typeidD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt10bad_typeidD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt10bad_typeidD2Ev@@GLIBCXX_3.4 +FUNC:_ZNSt10filesystem10equivalentERKNS_4pathES2_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem10equivalentERKNS_4pathES2_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem10equivalentERKNS_7__cxx114pathES3_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem10equivalentERKNS_7__cxx114pathES3_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem10hash_valueERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem10remove_allERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem10remove_allERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem10remove_allERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem10remove_allERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem11permissionsERKNS_4pathENS_5permsENS_12perm_optionsE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem11permissionsERKNS_4pathENS_5permsENS_12perm_optionsERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem11permissionsERKNS_7__cxx114pathENS_5permsENS_12perm_optionsE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem11permissionsERKNS_7__cxx114pathENS_5permsENS_12perm_optionsERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem11resize_fileERKNS_4pathEy@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem11resize_fileERKNS_4pathEyRSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem11resize_fileERKNS_7__cxx114pathEy@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem11resize_fileERKNS_7__cxx114pathEyRSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12copy_symlinkERKNS_4pathES2_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12copy_symlinkERKNS_4pathES2_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12copy_symlinkERKNS_7__cxx114pathES3_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12copy_symlinkERKNS_7__cxx114pathES3_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12current_pathB5cxx11ERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12current_pathB5cxx11Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12current_pathERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12current_pathERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12current_pathERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12current_pathERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12current_pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12current_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12read_symlinkERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12read_symlinkERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12read_symlinkERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem12read_symlinkERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem14create_symlinkERKNS_4pathES2_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem14create_symlinkERKNS_4pathES2_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem14create_symlinkERKNS_7__cxx114pathES3_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem14create_symlinkERKNS_7__cxx114pathES3_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem14symlink_statusERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem14symlink_statusERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem14symlink_statusERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem14symlink_statusERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15hard_link_countERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15hard_link_countERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15hard_link_countERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15hard_link_countERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15last_write_timeERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15last_write_timeERKNS_4pathENSt6chrono10time_pointINS_12__file_clockENS3_8durationIxSt5ratioILx1ELx1000000000EEEEEE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15last_write_timeERKNS_4pathENSt6chrono10time_pointINS_12__file_clockENS3_8durationIxSt5ratioILx1ELx1000000000EEEEEERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15last_write_timeERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15last_write_timeERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15last_write_timeERKNS_7__cxx114pathENSt6chrono10time_pointINS_12__file_clockENS4_8durationIxSt5ratioILx1ELx1000000000EEEEEE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15last_write_timeERKNS_7__cxx114pathENSt6chrono10time_pointINS_12__file_clockENS4_8durationIxSt5ratioILx1ELx1000000000EEEEEERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem15last_write_timeERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_directoryERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_directoryERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_directoryERKNS_4pathES2_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_directoryERKNS_4pathES2_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_directoryERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_directoryERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_directoryERKNS_7__cxx114pathES3_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_directoryERKNS_7__cxx114pathES3_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_hard_linkERKNS_4pathES2_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_hard_linkERKNS_4pathES2_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_hard_linkERKNS_7__cxx114pathES3_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16create_hard_linkERKNS_7__cxx114pathES3_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16filesystem_errorC1ERKSsRKNS_4pathES5_St10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16filesystem_errorC1ERKSsRKNS_4pathESt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16filesystem_errorC1ERKSsSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16filesystem_errorC2ERKSsRKNS_4pathES5_St10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16filesystem_errorC2ERKSsRKNS_4pathESt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16filesystem_errorC2ERKSsSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16filesystem_errorD0Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16filesystem_errorD1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16filesystem_errorD2Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16weakly_canonicalERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16weakly_canonicalERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16weakly_canonicalERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem16weakly_canonicalERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem18create_directoriesERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem18create_directoriesERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem18create_directoriesERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem18create_directoriesERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem18directory_iterator9incrementERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem18directory_iteratorC1ERKNS_4pathENS_17directory_optionsEPSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem18directory_iteratorC2ERKNS_4pathENS_17directory_optionsEPSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem18directory_iteratorppEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem19temp_directory_pathB5cxx11ERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem19temp_directory_pathB5cxx11Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem19temp_directory_pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem19temp_directory_pathEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem24create_directory_symlinkERKNS_4pathES2_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem24create_directory_symlinkERKNS_4pathES2_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem24create_directory_symlinkERKNS_7__cxx114pathES3_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem24create_directory_symlinkERKNS_7__cxx114pathES3_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iterator25disable_recursion_pendingEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iterator3popERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iterator3popEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iterator9incrementERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratorC1ERKNS_4pathENS_17directory_optionsEPSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratorC2ERKNS_4pathENS_17directory_optionsEPSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSEOS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSERKS0_@@GLIBCXX_3.4.27 +FUNC:_ZNSt10filesystem28recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4copyERKNS_7__cxx114pathES3_NS_12copy_optionsE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4copyERKNS_7__cxx114pathES3_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4path14_M_split_cmptsEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4path14_S_convert_locEPKcS2_RKSt6locale@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4path15remove_filenameEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4path16replace_filenameERKS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4path17replace_extensionERKS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4path5_ListC1ERKS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4path5_ListC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4path9_M_appendESt17basic_string_viewIcSt11char_traitsIcEE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4path9_M_concatESt17basic_string_viewIcSt11char_traitsIcEE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4pathaSERKS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4pathdVERKS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem4pathpLERKS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem5spaceERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem5spaceERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem5spaceERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem5spaceERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6removeERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6removeERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6removeERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6removeERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6renameERKNS_4pathES2_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6renameERKNS_4pathES2_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6renameERKNS_7__cxx114pathES3_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6renameERKNS_7__cxx114pathES3_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6statusERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6statusERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6statusERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem6statusERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1110hash_valueERKNS0_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1116filesystem_errorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS0_4pathESC_St10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1116filesystem_errorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS0_4pathESt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1116filesystem_errorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1116filesystem_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS0_4pathESC_St10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1116filesystem_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS0_4pathESt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1116filesystem_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1116filesystem_errorD0Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1116filesystem_errorD1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1116filesystem_errorD2Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1118directory_iterator9incrementERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1118directory_iteratorC1ERKNS0_4pathENS_17directory_optionsEPSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1118directory_iteratorC2ERKNS0_4pathENS_17directory_optionsEPSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1118directory_iteratorppEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iterator25disable_recursion_pendingEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iterator3popERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iterator3popEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iterator9incrementERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorC1ERKNS0_4pathENS_17directory_optionsEPSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorC2ERKNS0_4pathENS_17directory_optionsEPSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSEOS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSERKS1_@@GLIBCXX_3.4.27 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114path14_M_split_cmptsEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114path14_S_convert_locEPKcS3_RKSt6locale@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114path15remove_filenameEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114path16replace_filenameERKS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114path17replace_extensionERKS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114path5_ListC1ERKS2_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114path5_ListC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114path9_M_appendESt17basic_string_viewIcSt11char_traitsIcEE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114path9_M_concatESt17basic_string_viewIcSt11char_traitsIcEE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114pathaSERKS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114pathdVERKS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx114pathpLERKS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8absoluteERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8absoluteERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8absoluteERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8absoluteERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8is_emptyERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8is_emptyERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8is_emptyERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8is_emptyERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8relativeERKNS_4pathES2_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8relativeERKNS_4pathES2_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8relativeERKNS_7__cxx114pathES3_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem8relativeERKNS_7__cxx114pathES3_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9canonicalERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9canonicalERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9canonicalERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9canonicalERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9copy_fileERKNS_4pathES2_NS_12copy_optionsE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9copy_fileERKNS_4pathES2_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9copy_fileERKNS_7__cxx114pathES3_NS_12copy_optionsE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9copy_fileERKNS_7__cxx114pathES3_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9file_sizeERKNS_4pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9file_sizeERKNS_4pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9file_sizeERKNS_7__cxx114pathE@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9file_sizeERKNS_7__cxx114pathERSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9proximateERKNS_4pathES2_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9proximateERKNS_4pathES2_RSt10error_code@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9proximateERKNS_7__cxx114pathES3_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem9proximateERKNS_7__cxx114pathES3_RSt10error_code@@GLIBCXX_3.4.26 FUNC:_ZNSt10istrstream3strEv@@GLIBCXX_3.4 FUNC:_ZNSt10istrstreamC1EPKc@@GLIBCXX_3.4 FUNC:_ZNSt10istrstreamC1EPKci@@GLIBCXX_3.4 @@ -1714,10 +2014,12 @@ FUNC:_ZNSt11char_traitsIcE2eqERKcS2_@GLIBCXX_3.4 FUNC:_ZNSt11char_traitsIwE2eqERKwS2_@@GLIBCXX_3.4.5 FUNC:_ZNSt11char_traitsIwE2eqERKwS2_@GLIBCXX_3.4 +FUNC:_ZNSt11logic_errorC1EOS_@@GLIBCXX_3.4.26 FUNC:_ZNSt11logic_errorC1EPKc@@GLIBCXX_3.4.21 FUNC:_ZNSt11logic_errorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE@@GLIBCXX_3.4.21 FUNC:_ZNSt11logic_errorC1ERKS_@@GLIBCXX_3.4.21 FUNC:_ZNSt11logic_errorC1ERKSs@@GLIBCXX_3.4 +FUNC:_ZNSt11logic_errorC2EOS_@@GLIBCXX_3.4.26 FUNC:_ZNSt11logic_errorC2EPKc@@GLIBCXX_3.4.21 FUNC:_ZNSt11logic_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE@@GLIBCXX_3.4.21 FUNC:_ZNSt11logic_errorC2ERKS_@@GLIBCXX_3.4.21 @@ -1725,6 +2027,7 @@ FUNC:_ZNSt11logic_errorD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt11logic_errorD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt11logic_errorD2Ev@@GLIBCXX_3.4 +FUNC:_ZNSt11logic_erroraSEOS_@@GLIBCXX_3.4.26 FUNC:_ZNSt11logic_erroraSERKS_@@GLIBCXX_3.4.21 FUNC:_ZNSt11range_errorC1EPKc@@GLIBCXX_3.4.21 FUNC:_ZNSt11range_errorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE@@GLIBCXX_3.4.21 @@ -1757,6 +2060,24 @@ FUNC:_ZNSt12__basic_fileIcEC2EP15pthread_mutex_t@@GLIBCXX_3.4 FUNC:_ZNSt12__basic_fileIcED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt12__basic_fileIcED2Ev@@GLIBCXX_3.4 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS4_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS4_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS4_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS6_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2EOS6_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2EOS5_@@GLIBCXX_3.4.28 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD2Ev@@GLIBCXX_3.4.15 @@ -2057,6 +2378,7 @@ FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEEaSEOS2_@@GLIBCXX_3.4.21 +FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEDn@@GLIBCXX_3.4.26 FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEPFRS2_S3_E@@GLIBCXX_3.4 FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEPFRSt8ios_baseS4_E@@GLIBCXX_3.4 FUNC:_ZNSt13basic_ostreamIwSt11char_traitsIwEElsEPFRSt9basic_iosIwS1_ES5_E@@GLIBCXX_3.4 @@ -2081,10 +2403,12 @@ FUNC:_ZNSt13random_device7_M_initERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE@@GLIBCXX_3.4.21 FUNC:_ZNSt13random_device7_M_initERKSs@@GLIBCXX_3.4.18 FUNC:_ZNSt13random_device9_M_getvalEv@@GLIBCXX_3.4.18 +FUNC:_ZNSt13runtime_errorC1EOS_@@GLIBCXX_3.4.26 FUNC:_ZNSt13runtime_errorC1EPKc@@GLIBCXX_3.4.21 FUNC:_ZNSt13runtime_errorC1ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE@@GLIBCXX_3.4.21 FUNC:_ZNSt13runtime_errorC1ERKS_@@GLIBCXX_3.4.21 FUNC:_ZNSt13runtime_errorC1ERKSs@@GLIBCXX_3.4 +FUNC:_ZNSt13runtime_errorC2EOS_@@GLIBCXX_3.4.26 FUNC:_ZNSt13runtime_errorC2EPKc@@GLIBCXX_3.4.21 FUNC:_ZNSt13runtime_errorC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE@@GLIBCXX_3.4.21 FUNC:_ZNSt13runtime_errorC2ERKS_@@GLIBCXX_3.4.21 @@ -2092,6 +2416,7 @@ FUNC:_ZNSt13runtime_errorD0Ev@@GLIBCXX_3.4 FUNC:_ZNSt13runtime_errorD1Ev@@GLIBCXX_3.4 FUNC:_ZNSt13runtime_errorD2Ev@@GLIBCXX_3.4 +FUNC:_ZNSt13runtime_erroraSEOS_@@GLIBCXX_3.4.26 FUNC:_ZNSt13runtime_erroraSERKS_@@GLIBCXX_3.4.21 FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openEPKcSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt14basic_ifstreamIcSt11char_traitsIcEE4openERKNSt7__cxx1112basic_stringIcS1_SaIcEEESt13_Ios_Openmode@@GLIBCXX_3.4.21 @@ -2203,12 +2528,16 @@ FUNC:_ZNSt14codecvt_bynameIwc11__mbstate_tED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt14codecvt_bynameIwc11__mbstate_tED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt14collate_bynameIcEC1EPKcj@@GLIBCXX_3.4 +FUNC:_ZNSt14collate_bynameIcEC1ERKSsj@@GLIBCXX_3.4.26 FUNC:_ZNSt14collate_bynameIcEC2EPKcj@@GLIBCXX_3.4 +FUNC:_ZNSt14collate_bynameIcEC2ERKSsj@@GLIBCXX_3.4.26 FUNC:_ZNSt14collate_bynameIcED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt14collate_bynameIcED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt14collate_bynameIcED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt14collate_bynameIwEC1EPKcj@@GLIBCXX_3.4 +FUNC:_ZNSt14collate_bynameIwEC1ERKSsj@@GLIBCXX_3.4.26 FUNC:_ZNSt14collate_bynameIwEC2EPKcj@@GLIBCXX_3.4 +FUNC:_ZNSt14collate_bynameIwEC2ERKSsj@@GLIBCXX_3.4.26 FUNC:_ZNSt14collate_bynameIwED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt14collate_bynameIwED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt14collate_bynameIwED2Ev@@GLIBCXX_3.4 @@ -2348,9 +2677,11 @@ FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC1EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC2EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIcSt11char_traitsIcESaIcEEaSEOS3_@@GLIBCXX_3.4.21 @@ -2370,9 +2701,11 @@ FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC1EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC1ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC2EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC2ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt15basic_stringbufIwSt11char_traitsIwESaIwEEaSEOS3_@@GLIBCXX_3.4.21 @@ -2540,9 +2873,11 @@ FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC2EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt18basic_stringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4 @@ -2552,9 +2887,11 @@ FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC1EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC1ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC2EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC2ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt18basic_stringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4 @@ -2566,6 +2903,7 @@ FUNC:_ZNSt18condition_variableC2Ev@@GLIBCXX_3.4.11 FUNC:_ZNSt18condition_variableD1Ev@@GLIBCXX_3.4.11 FUNC:_ZNSt18condition_variableD2Ev@@GLIBCXX_3.4.11 +FUNC:_ZNSt19_Sp_make_shared_tag5_S_eqERKSt9type_info@@GLIBCXX_3.4.26 FUNC:_ZNSt19__codecvt_utf8_baseIDiED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt19__codecvt_utf8_baseIDiED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt19__codecvt_utf8_baseIDiED2Ev@@GLIBCXX_3.4.21 @@ -2580,9 +2918,11 @@ FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC1EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC2EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_istringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4 @@ -2592,9 +2932,11 @@ FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC1EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC1ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC2EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC2ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_istringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4 @@ -2604,9 +2946,11 @@ FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC2EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ERKSsSt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4 @@ -2616,9 +2960,11 @@ FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC1EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC2EOS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ERKSbIwS1_S2_ESt13_Ios_Openmode@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4 +FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4 FUNC:_ZNSt19basic_ostringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4 @@ -2659,6 +3005,26 @@ FUNC:_ZNSt3_V214error_categoryD2Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt3_V215system_categoryEv@@GLIBCXX_3.4.21 FUNC:_ZNSt3_V216generic_categoryEv@@GLIBCXX_3.4.21 +FUNC:_ZNSt3pmr19new_delete_resourceEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr20get_default_resourceEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr20null_memory_resourceEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr20set_default_resourceEPNS_15memory_resourceE@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr25monotonic_buffer_resource13_M_new_bufferEjj@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr25monotonic_buffer_resource18_M_release_buffersEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr26synchronized_pool_resource11do_allocateEjj@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr26synchronized_pool_resource13do_deallocateEPvjj@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr26synchronized_pool_resource7releaseEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr26synchronized_pool_resourceC1ERKNS_12pool_optionsEPNS_15memory_resourceE@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr26synchronized_pool_resourceC2ERKNS_12pool_optionsEPNS_15memory_resourceE@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr26synchronized_pool_resourceD1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr26synchronized_pool_resourceD2Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr28unsynchronized_pool_resource11do_allocateEjj@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr28unsynchronized_pool_resource13do_deallocateEPvjj@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr28unsynchronized_pool_resource7releaseEv@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr28unsynchronized_pool_resourceC1ERKNS_12pool_optionsEPNS_15memory_resourceE@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr28unsynchronized_pool_resourceC2ERKNS_12pool_optionsEPNS_15memory_resourceE@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr28unsynchronized_pool_resourceD1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt3pmr28unsynchronized_pool_resourceD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt5ctypeIcE13classic_tableEv@@GLIBCXX_3.4 FUNC:_ZNSt5ctypeIcEC1EP15__locale_structPKtbj@@GLIBCXX_3.4 FUNC:_ZNSt5ctypeIcEC1EPKtbj@@GLIBCXX_3.4 @@ -2792,6 +3158,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPcS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPKcEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_M_constructIPcEEvT_S7_St20forward_iterator_tag@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12__sv_wrapperC1ESt17basic_string_viewIcS2_E@@GLIBCXX_3.4.26 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12__sv_wrapperC2ESt17basic_string_viewIcS2_E@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13_M_local_dataEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13_M_set_lengthEj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13_S_copy_charsEPcN9__gnu_cxx17__normal_iteratorIPKcS4_EESA_@@GLIBCXX_3.4.21 @@ -2801,10 +3169,12 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE13shrink_to_fitEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE14_M_replace_auxEjjjc@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE16_M_get_allocatorEv@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE17_S_to_string_viewESt17basic_string_viewIcS2_E@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE18_M_construct_aux_2Ejc@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE2atEj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE3endEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4backEv@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4dataEv@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4rendEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE4swapERS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5beginEv@@GLIBCXX_3.4.21 @@ -2828,6 +3198,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6assignERKS4_jj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6assignESt16initializer_listIcE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6assignEjc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEN9__gnu_cxx17__normal_iteratorIPKcS4_EESt16initializer_listIcE@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEN9__gnu_cxx17__normal_iteratorIPKcS4_EEc@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEN9__gnu_cxx17__normal_iteratorIPKcS4_EEjc@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE6insertEN9__gnu_cxx17__normal_iteratorIPcS4_EESt16initializer_listIcE@@GLIBCXX_3.4.21 @@ -2877,6 +3248,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_M_mutateEjjPKcj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9_S_assignEPcjc@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE9push_backEc@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1ENS4_12__sv_wrapperERKS3_@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EOS4_RKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1EPKcRKS3_@@GLIBCXX_3.4.21 @@ -2893,6 +3265,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1IN9__gnu_cxx17__normal_iteratorIPcS4_EEvEET_SA_RKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1IPKcvEET_S8_RKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC1IPcvEET_S7_RKS3_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2ENS4_12__sv_wrapperERKS3_@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EOS4_RKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEC2EPKcRKS3_@@GLIBCXX_3.4.21 @@ -2935,6 +3308,8 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIN9__gnu_cxx17__normal_iteratorIPwS4_EEEEvT_SA_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIPKwEEvT_S8_St20forward_iterator_tag@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12_M_constructIPwEEvT_S7_St20forward_iterator_tag@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12__sv_wrapperC1ESt17basic_string_viewIwS2_E@@GLIBCXX_3.4.26 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE12__sv_wrapperC2ESt17basic_string_viewIwS2_E@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE13_M_local_dataEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE13_M_set_lengthEj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE13_S_copy_charsEPwN9__gnu_cxx17__normal_iteratorIPKwS4_EESA_@@GLIBCXX_3.4.21 @@ -2944,10 +3319,12 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE13shrink_to_fitEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE14_M_replace_auxEjjjw@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE16_M_get_allocatorEv@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE17_S_to_string_viewESt17basic_string_viewIwS2_E@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE18_M_construct_aux_2Ejw@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE2atEj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE3endEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE4backEv@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE4dataEv@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE4rendEv@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE4swapERS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE5beginEv@@GLIBCXX_3.4.21 @@ -2971,6 +3348,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6assignERKS4_jj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6assignESt16initializer_listIwE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6assignEjw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPKwS4_EESt16initializer_listIwE@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPKwS4_EEjw@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPKwS4_EEw@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE6insertEN9__gnu_cxx17__normal_iteratorIPwS4_EESt16initializer_listIwE@@GLIBCXX_3.4.21 @@ -3020,6 +3398,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE9_M_mutateEjjPKwj@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE9_S_assignEPwjw@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEE9push_backEw@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC1ENS4_12__sv_wrapperERKS3_@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC1EOS4_RKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC1EPKwRKS3_@@GLIBCXX_3.4.21 @@ -3036,6 +3415,7 @@ FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC1IN9__gnu_cxx17__normal_iteratorIPwS4_EEvEET_SA_RKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC1IPKwvEET_S8_RKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC1IPwvEET_S7_RKS3_@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC2ENS4_12__sv_wrapperERKS3_@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC2EOS4_RKS3_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1112basic_stringIwSt11char_traitsIwESaIwEEC2EPKwRKS3_@@GLIBCXX_3.4.21 @@ -3099,10 +3479,12 @@ FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1EOS4_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2EOS4_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4.21 @@ -3128,10 +3510,12 @@ FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1EOS4_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2EOS4_ONS4_14__xfer_bufptrsE@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1115basic_stringbufIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4.21 @@ -3211,9 +3595,11 @@ FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4.21 @@ -3223,9 +3609,11 @@ FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1118basic_stringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4.21 @@ -3235,9 +3623,11 @@ FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4.21 @@ -3247,9 +3637,11 @@ FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_istringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4.21 @@ -3259,9 +3651,11 @@ FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ERKNS_12basic_stringIcS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIcSt11char_traitsIcESaIcEED2Ev@@GLIBCXX_3.4.21 @@ -3271,9 +3665,11 @@ FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2EOS4_@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ERKNS_12basic_stringIwS2_S3_EESt13_Ios_Openmode@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2ESt13_Ios_Openmode@@GLIBCXX_3.4.21 +FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEEC2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx1119basic_ostringstreamIwSt11char_traitsIwESaIwEED2Ev@@GLIBCXX_3.4.21 @@ -3356,9 +3752,15 @@ FUNC:_ZNSt7__cxx119money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx119money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7__cxx119money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEED2Ev@@GLIBCXX_3.4.21 +FUNC:_ZNSt7codecvtIDiDu11__mbstate_tED0Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7codecvtIDiDu11__mbstate_tED1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7codecvtIDiDu11__mbstate_tED2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7codecvtIDic11__mbstate_tED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7codecvtIDic11__mbstate_tED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7codecvtIDic11__mbstate_tED2Ev@@GLIBCXX_3.4.21 +FUNC:_ZNSt7codecvtIDsDu11__mbstate_tED0Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7codecvtIDsDu11__mbstate_tED1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt7codecvtIDsDu11__mbstate_tED2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt7codecvtIDsc11__mbstate_tED0Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7codecvtIDsc11__mbstate_tED1Ev@@GLIBCXX_3.4.21 FUNC:_ZNSt7codecvtIDsc11__mbstate_tED2Ev@@GLIBCXX_3.4.21 @@ -3640,6 +4042,7 @@ FUNC:_ZSt18__throw_bad_typeidv@@GLIBCXX_3.4 FUNC:_ZSt18uncaught_exceptionv@@GLIBCXX_3.4 FUNC:_ZSt19__throw_ios_failurePKc@@GLIBCXX_3.4 +FUNC:_ZSt19__throw_ios_failurePKci@@GLIBCXX_3.4.26 FUNC:_ZSt19__throw_logic_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt19__throw_range_errorPKc@@GLIBCXX_3.4 FUNC:_ZSt19__throw_regex_errorNSt15regex_constants10error_typeE@@GLIBCXX_3.4.15 @@ -4000,6 +4403,7 @@ OBJECT:0:CXXABI_1.3.1 OBJECT:0:CXXABI_1.3.10 OBJECT:0:CXXABI_1.3.11 +OBJECT:0:CXXABI_1.3.12 OBJECT:0:CXXABI_1.3.2 OBJECT:0:CXXABI_1.3.3 OBJECT:0:CXXABI_1.3.4 @@ -4028,6 +4432,9 @@ OBJECT:0:GLIBCXX_3.4.23 OBJECT:0:GLIBCXX_3.4.24 OBJECT:0:GLIBCXX_3.4.25 +OBJECT:0:GLIBCXX_3.4.26 +OBJECT:0:GLIBCXX_3.4.27 +OBJECT:0:GLIBCXX_3.4.28 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 @@ -4051,7 +4458,11 @@ OBJECT:12:_ZTIN9__gnu_cxx13stdio_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIcSt11char_traitsIcEEE@@GLIBCXX_3.4 OBJECT:12:_ZTIN9__gnu_cxx18stdio_sync_filebufIwSt11char_traitsIwEEE@@GLIBCXX_3.4 +OBJECT:12:_ZTINSt10filesystem16filesystem_errorE@@GLIBCXX_3.4.26 +OBJECT:12:_ZTINSt10filesystem7__cxx1116filesystem_errorE@@GLIBCXX_3.4.26 OBJECT:12:_ZTINSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 +OBJECT:12:_ZTINSt3pmr26synchronized_pool_resourceE@@GLIBCXX_3.4.26 +OBJECT:12:_ZTINSt3pmr28unsynchronized_pool_resourceE@@GLIBCXX_3.4.26 OBJECT:12:_ZTINSt7__cxx1114collate_bynameIcEE@@GLIBCXX_3.4.21 OBJECT:12:_ZTINSt7__cxx1114collate_bynameIwEE@@GLIBCXX_3.4.21 OBJECT:12:_ZTINSt7__cxx1115basic_stringbufIcSt11char_traitsIcESaIcEEE@@GLIBCXX_3.4.21 @@ -4150,7 +4561,9 @@ OBJECT:12:_ZTISt25__codecvt_utf8_utf16_baseIDsE@@GLIBCXX_3.4.21 OBJECT:12:_ZTISt25__codecvt_utf8_utf16_baseIwE@@GLIBCXX_3.4.21 OBJECT:12:_ZTISt5ctypeIwE@@GLIBCXX_3.4 +OBJECT:12:_ZTISt7codecvtIDiDu11__mbstate_tE@@GLIBCXX_3.4.26 OBJECT:12:_ZTISt7codecvtIDic11__mbstate_tE@@GLIBCXX_3.4.21 +OBJECT:12:_ZTISt7codecvtIDsDu11__mbstate_tE@@GLIBCXX_3.4.26 OBJECT:12:_ZTISt7codecvtIDsc11__mbstate_tE@@GLIBCXX_3.4.21 OBJECT:12:_ZTISt7codecvtIcc11__mbstate_tE@@GLIBCXX_3.4 OBJECT:12:_ZTISt7codecvtIwc11__mbstate_tE@@GLIBCXX_3.4 @@ -4210,6 +4623,7 @@ OBJECT:16:_ZTIPDi@@CXXABI_1.3.3 OBJECT:16:_ZTIPDn@@CXXABI_1.3.5 OBJECT:16:_ZTIPDs@@CXXABI_1.3.3 +OBJECT:16:_ZTIPDu@@CXXABI_1.3.12 OBJECT:16:_ZTIPKDd@@CXXABI_1.3.4 OBJECT:16:_ZTIPKDe@@CXXABI_1.3.4 OBJECT:16:_ZTIPKDf@@CXXABI_1.3.4 @@ -4216,6 +4630,7 @@ OBJECT:16:_ZTIPKDi@@CXXABI_1.3.3 OBJECT:16:_ZTIPKDn@@CXXABI_1.3.5 OBJECT:16:_ZTIPKDs@@CXXABI_1.3.3 +OBJECT:16:_ZTIPKDu@@CXXABI_1.3.12 OBJECT:16:_ZTIPKa@@CXXABI_1.3 OBJECT:16:_ZTIPKb@@CXXABI_1.3 OBJECT:16:_ZTIPKc@@CXXABI_1.3 @@ -4349,6 +4764,19 @@ OBJECT:1:_ZNSt14numeric_limitsIDsE9is_iec559E@@GLIBCXX_3.4.11 OBJECT:1:_ZNSt14numeric_limitsIDsE9is_moduloE@@GLIBCXX_3.4.11 OBJECT:1:_ZNSt14numeric_limitsIDsE9is_signedE@@GLIBCXX_3.4.11 +OBJECT:1:_ZNSt14numeric_limitsIDuE10is_boundedE@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE10is_integerE@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE12has_infinityE@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE13has_quiet_NaNE@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE14is_specializedE@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE15has_denorm_lossE@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE15tinyness_beforeE@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE17has_signaling_NaNE@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE5trapsE@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE8is_exactE@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE9is_iec559E@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE9is_moduloE@@GLIBCXX_3.4.26 +OBJECT:1:_ZNSt14numeric_limitsIDuE9is_signedE@@GLIBCXX_3.4.26 OBJECT:1:_ZNSt14numeric_limitsIaE10is_boundedE@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsIaE10is_integerE@@GLIBCXX_3.4 OBJECT:1:_ZNSt14numeric_limitsIaE12has_infinityE@@GLIBCXX_3.4 @@ -4592,6 +5020,8 @@ OBJECT:20:_ZTSSt12ctype_bynameIcE@@GLIBCXX_3.4 OBJECT:20:_ZTSSt12ctype_bynameIwE@@GLIBCXX_3.4 OBJECT:20:_ZTSSt15underflow_error@@GLIBCXX_3.4 +OBJECT:20:_ZTVNSt10filesystem16filesystem_errorE@@GLIBCXX_3.4.26 +OBJECT:20:_ZTVNSt10filesystem7__cxx1116filesystem_errorE@@GLIBCXX_3.4.26 OBJECT:20:_ZTVNSt13__future_base11_State_baseE@@GLIBCXX_3.4.15 OBJECT:20:_ZTVNSt13__future_base12_Result_baseE@@GLIBCXX_3.4.15 OBJECT:20:_ZTVNSt13__future_base19_Async_state_commonE@@GLIBCXX_3.4.17 @@ -4720,6 +5150,8 @@ OBJECT:2:_ZTSw@@CXXABI_1.3 OBJECT:2:_ZTSx@@CXXABI_1.3 OBJECT:2:_ZTSy@@CXXABI_1.3 +OBJECT:30:_ZTSSt7codecvtIDiDu11__mbstate_tE@@GLIBCXX_3.4.26 +OBJECT:30:_ZTSSt7codecvtIDsDu11__mbstate_tE@@GLIBCXX_3.4.26 OBJECT:32:_ZTINSt7__cxx1110moneypunctIcLb0EEE@@GLIBCXX_3.4.21 OBJECT:32:_ZTINSt7__cxx1110moneypunctIcLb1EEE@@GLIBCXX_3.4.21 OBJECT:32:_ZTINSt7__cxx1110moneypunctIwLb0EEE@@GLIBCXX_3.4.21 @@ -4874,7 +5306,9 @@ OBJECT:44:_ZTVSt25__codecvt_utf8_utf16_baseIDiE@@GLIBCXX_3.4.21 OBJECT:44:_ZTVSt25__codecvt_utf8_utf16_baseIDsE@@GLIBCXX_3.4.21 OBJECT:44:_ZTVSt25__codecvt_utf8_utf16_baseIwE@@GLIBCXX_3.4.21 +OBJECT:44:_ZTVSt7codecvtIDiDu11__mbstate_tE@@GLIBCXX_3.4.26 OBJECT:44:_ZTVSt7codecvtIDic11__mbstate_tE@@GLIBCXX_3.4.21 +OBJECT:44:_ZTVSt7codecvtIDsDu11__mbstate_tE@@GLIBCXX_3.4.26 OBJECT:44:_ZTVSt7codecvtIDsc11__mbstate_tE@@GLIBCXX_3.4.21 OBJECT:44:_ZTVSt7codecvtIcc11__mbstate_tE@@GLIBCXX_3.4 OBJECT:44:_ZTVSt7codecvtIwc11__mbstate_tE@@GLIBCXX_3.4 @@ -4926,6 +5360,15 @@ OBJECT:4:_ZNSt14numeric_limitsIDsE5radixE@@GLIBCXX_3.4.11 OBJECT:4:_ZNSt14numeric_limitsIDsE6digitsE@@GLIBCXX_3.4.11 OBJECT:4:_ZNSt14numeric_limitsIDsE8digits10E@@GLIBCXX_3.4.11 +OBJECT:4:_ZNSt14numeric_limitsIDuE10has_denormE@@GLIBCXX_3.4.26 +OBJECT:4:_ZNSt14numeric_limitsIDuE11round_styleE@@GLIBCXX_3.4.26 +OBJECT:4:_ZNSt14numeric_limitsIDuE12max_exponentE@@GLIBCXX_3.4.26 +OBJECT:4:_ZNSt14numeric_limitsIDuE12min_exponentE@@GLIBCXX_3.4.26 +OBJECT:4:_ZNSt14numeric_limitsIDuE14max_exponent10E@@GLIBCXX_3.4.26 +OBJECT:4:_ZNSt14numeric_limitsIDuE14min_exponent10E@@GLIBCXX_3.4.26 +OBJECT:4:_ZNSt14numeric_limitsIDuE5radixE@@GLIBCXX_3.4.26 +OBJECT:4:_ZNSt14numeric_limitsIDuE6digitsE@@GLIBCXX_3.4.26 +OBJECT:4:_ZNSt14numeric_limitsIDuE8digits10E@@GLIBCXX_3.4.26 OBJECT:4:_ZNSt14numeric_limitsIaE10has_denormE@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsIaE11round_styleE@@GLIBCXX_3.4 OBJECT:4:_ZNSt14numeric_limitsIaE12max_digits10E@@GLIBCXX_3.4.14 @@ -5125,7 +5568,9 @@ OBJECT:4:_ZNSt7__cxx119money_getIwSt19istreambuf_iteratorIwSt11char_traitsIwEEE2idE@@GLIBCXX_3.4.21 OBJECT:4:_ZNSt7__cxx119money_putIcSt19ostreambuf_iteratorIcSt11char_traitsIcEEE2idE@@GLIBCXX_3.4.21 OBJECT:4:_ZNSt7__cxx119money_putIwSt19ostreambuf_iteratorIwSt11char_traitsIwEEE2idE@@GLIBCXX_3.4.21 +OBJECT:4:_ZNSt7codecvtIDiDu11__mbstate_tE2idE@@GLIBCXX_3.4.26 OBJECT:4:_ZNSt7codecvtIDic11__mbstate_tE2idE@@GLIBCXX_3.4.21 +OBJECT:4:_ZNSt7codecvtIDsDu11__mbstate_tE2idE@@GLIBCXX_3.4.26 OBJECT:4:_ZNSt7codecvtIDsc11__mbstate_tE2idE@@GLIBCXX_3.4.21 OBJECT:4:_ZNSt7codecvtIcc11__mbstate_tE2idE@@GLIBCXX_3.4 OBJECT:4:_ZNSt7codecvtIwc11__mbstate_tE2idE@@GLIBCXX_3.4 @@ -5324,6 +5769,7 @@ OBJECT:8:_ZTIDi@@CXXABI_1.3.3 OBJECT:8:_ZTIDn@@CXXABI_1.3.5 OBJECT:8:_ZTIDs@@CXXABI_1.3.3 +OBJECT:8:_ZTIDu@@CXXABI_1.3.12 OBJECT:8:_ZTIN10__cxxabiv115__forced_unwindE@@CXXABI_1.3.2 OBJECT:8:_ZTIN10__cxxabiv119__foreign_exceptionE@@CXXABI_1.3.2 OBJECT:8:_ZTINSt13__future_base11_State_baseE@@GLIBCXX_3.4.15 Index: libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt =================================================================== --- a/src/libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/config/abi/post/aarch64-linux-gnu/baseline_symbols.txt (.../branches/gcc-9-branch) @@ -1829,6 +1829,7 @@ FUNC:_ZNSt10filesystem28recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSEOS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSERKS0_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem28recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsE@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 @@ -1885,6 +1886,7 @@ FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSEOS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSERKS1_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_M_split_cmptsEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_S_convert_locEPKcS3_RKSt6locale@@GLIBCXX_3.4.26 @@ -2060,13 +2062,17 @@ FUNC:_ZNSt12__basic_fileIcED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS6_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 @@ -4401,6 +4407,7 @@ OBJECT:0:GLIBCXX_3.4.24 OBJECT:0:GLIBCXX_3.4.25 OBJECT:0:GLIBCXX_3.4.26 +OBJECT:0:GLIBCXX_3.4.27 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 Index: libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt =================================================================== --- a/src/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/32/baseline_symbols.txt (.../branches/gcc-9-branch) @@ -1975,6 +1975,7 @@ FUNC:_ZNSt10filesystem28recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSEOS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSERKS0_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem28recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsE@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 @@ -2031,6 +2032,7 @@ FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSEOS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSERKS1_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_M_split_cmptsEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_S_convert_locEPKcS3_RKSt6locale@@GLIBCXX_3.4.26 @@ -2206,13 +2208,17 @@ FUNC:_ZNSt12__basic_fileIcED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS6_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 @@ -4635,6 +4641,7 @@ OBJECT:0:GLIBCXX_3.4.24 OBJECT:0:GLIBCXX_3.4.25 OBJECT:0:GLIBCXX_3.4.26 +OBJECT:0:GLIBCXX_3.4.27 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 Index: libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt =================================================================== --- a/src/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/config/abi/post/powerpc64-linux-gnu/baseline_symbols.txt (.../branches/gcc-9-branch) @@ -1975,6 +1975,7 @@ FUNC:_ZNSt10filesystem28recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSEOS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSERKS0_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem28recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsE@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 @@ -2031,6 +2032,7 @@ FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSEOS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSERKS1_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_M_split_cmptsEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_S_convert_locEPKcS3_RKSt6locale@@GLIBCXX_3.4.26 @@ -2206,13 +2208,17 @@ FUNC:_ZNSt12__basic_fileIcED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS6_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 @@ -4635,6 +4641,7 @@ OBJECT:0:GLIBCXX_3.4.24 OBJECT:0:GLIBCXX_3.4.25 OBJECT:0:GLIBCXX_3.4.26 +OBJECT:0:GLIBCXX_3.4.27 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 Index: libstdc++-v3/config/abi/post/i386-linux-gnu/baseline_symbols.txt =================================================================== --- a/src/libstdc++-v3/config/abi/post/i386-linux-gnu/baseline_symbols.txt (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/config/abi/post/i386-linux-gnu/baseline_symbols.txt (.../branches/gcc-9-branch) @@ -1829,6 +1829,7 @@ FUNC:_ZNSt10filesystem28recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSEOS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSERKS0_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem28recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsE@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 @@ -1885,6 +1886,7 @@ FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSEOS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSERKS1_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_M_split_cmptsEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_S_convert_locEPKcS3_RKSt6locale@@GLIBCXX_3.4.26 @@ -2060,13 +2062,17 @@ FUNC:_ZNSt12__basic_fileIcED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS6_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 @@ -4402,6 +4408,7 @@ OBJECT:0:GLIBCXX_3.4.24 OBJECT:0:GLIBCXX_3.4.25 OBJECT:0:GLIBCXX_3.4.26 +OBJECT:0:GLIBCXX_3.4.27 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 Index: libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt =================================================================== --- a/src/libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/config/abi/post/i486-linux-gnu/baseline_symbols.txt (.../branches/gcc-9-branch) @@ -1829,6 +1829,7 @@ FUNC:_ZNSt10filesystem28recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSEOS0_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem28recursive_directory_iteratoraSERKS0_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem28recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsE@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem4copyERKNS_4pathES2_NS_12copy_optionsERSt10error_code@@GLIBCXX_3.4.26 @@ -1885,6 +1886,7 @@ FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD1Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorD2Ev@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSEOS1_@@GLIBCXX_3.4.26 +FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratoraSERKS1_@@GLIBCXX_3.4.27 FUNC:_ZNSt10filesystem7__cxx1128recursive_directory_iteratorppEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_M_split_cmptsEv@@GLIBCXX_3.4.26 FUNC:_ZNSt10filesystem7__cxx114path14_S_convert_locEPKcS3_RKSt6locale@@GLIBCXX_3.4.26 @@ -2060,13 +2062,17 @@ FUNC:_ZNSt12__basic_fileIcED2Ev@@GLIBCXX_3.4 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS4_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1EOS6_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1EOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC1Ev@@GLIBCXX_3.4.26 +FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEC2Ev@@GLIBCXX_3.4.27 FUNC:_ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE2EEaSEOS5_@@GLIBCXX_3.4.26 FUNC:_ZNSt12bad_weak_ptrD0Ev@@GLIBCXX_3.4.15 FUNC:_ZNSt12bad_weak_ptrD1Ev@@GLIBCXX_3.4.15 @@ -4402,6 +4408,7 @@ OBJECT:0:GLIBCXX_3.4.24 OBJECT:0:GLIBCXX_3.4.25 OBJECT:0:GLIBCXX_3.4.26 +OBJECT:0:GLIBCXX_3.4.27 OBJECT:0:GLIBCXX_3.4.3 OBJECT:0:GLIBCXX_3.4.4 OBJECT:0:GLIBCXX_3.4.5 Index: libstdc++-v3/config/abi/pre/gnu.ver =================================================================== --- a/src/libstdc++-v3/config/abi/pre/gnu.ver (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/config/abi/pre/gnu.ver (.../branches/gcc-9-branch) @@ -2268,11 +2268,11 @@ GLIBCXX_3.4.27 { - # __shared_ptr<_Dir>::__shared_ptr() + # __shared_ptr<_Dir>::__shared_ptr() (base object ctor) _ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE[012]EEC2Ev; _ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE[012]EEC2Ev; - # __shared_ptr::__shared_ptr() + # __shared_ptr::__shared_ptr() (base object ctor) _ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE[012]EEC2Ev; _ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE[012]EEC2Ev; @@ -2282,6 +2282,18 @@ } GLIBCXX_3.4.26; +GLIBCXX_3.4.28 { + + # __shared_ptr<_Dir>::__shared_ptr(__shared_ptr&&) (base object ctor) + _ZNSt12__shared_ptrINSt10filesystem4_DirELN9__gnu_cxx12_Lock_policyE[012]EEC2EOS4_; + _ZNSt12__shared_ptrINSt10filesystem7__cxx114_DirELN9__gnu_cxx12_Lock_policyE[012]EEC2EOS5_; + + # __shared_ptr::__shared_ptr(__shared_ptr&&) (base object ctor) + _ZNSt12__shared_ptrINSt10filesystem28recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE[012]EEC2EOS5_; + _ZNSt12__shared_ptrINSt10filesystem7__cxx1128recursive_directory_iterator10_Dir_stackELN9__gnu_cxx12_Lock_policyE[012]EEC2EOS6_; + +} GLIBCXX_3.4.27; + # Symbols in the support library (libsupc++) have their own tag. CXXABI_1.3 { Index: libstdc++-v3/acinclude.m4 =================================================================== --- a/src/libstdc++-v3/acinclude.m4 (.../tags/gcc_9_2_0_release) +++ b/src/libstdc++-v3/acinclude.m4 (.../branches/gcc-9-branch) @@ -3820,7 +3820,7 @@ fi # For libtool versioning info, format is CURRENT:REVISION:AGE -libtool_VERSION=6:27:0 +libtool_VERSION=6:28:0 # Everything parsed; figure out what files and settings to use. case $enable_symvers in Index: libphobos/ChangeLog =================================================================== --- a/src/libphobos/ChangeLog (.../tags/gcc_9_2_0_release) +++ b/src/libphobos/ChangeLog (.../branches/gcc-9-branch) @@ -1,3 +1,12 @@ +2019-10-30 Thomas Schwinge + + Backport from trunk: + + 2019-09-03 Bernd Edlinger + + * testsuite/lib/libphobos.exp (libphobos_init): Add multi-lib libgcc + dirs to the ld_library_path var. + 2019-08-12 Release Manager * GCC 9.2.0 released. Index: libphobos/testsuite/lib/libphobos.exp =================================================================== --- a/src/libphobos/testsuite/lib/libphobos.exp (.../tags/gcc_9_2_0_release) +++ b/src/libphobos/testsuite/lib/libphobos.exp (.../branches/gcc-9-branch) @@ -170,6 +170,25 @@ append ld_library_path ":${blddir}/src/.libs" } + # Compute what needs to be added to the existing LD_LIBRARY_PATH. + if {$gccdir != ""} { + set compiler ${gccdir}/gdc + + if { [is_remote host] == 0 && [which $compiler] != 0 } { + foreach i "[exec $compiler --print-multi-lib]" { + set mldir "" + regexp -- "\[a-z0-9=_/\.-\]*;" $i mldir + set mldir [string trimright $mldir "\;@"] + if { "$mldir" == "." } { + continue + } + if { [llength [glob -nocomplain ${gccdir}/${mldir}/libgcc_s*.so.*]] >= 1 } { + append ld_library_path ":${gccdir}/${mldir}" + } + } + } + } + set_ld_library_path_env_vars libphobos_maybe_build_wrapper "${objdir}/testglue.o" Index: contrib/ChangeLog =================================================================== --- a/src/contrib/ChangeLog (.../tags/gcc_9_2_0_release) +++ b/src/contrib/ChangeLog (.../branches/gcc-9-branch) @@ -1,3 +1,7 @@ +2019-08-16 Uros Bizjak + + * test_summary: Do not escape "=". + 2019-08-12 Release Manager * GCC 9.2.0 released. Index: contrib/test_summary =================================================================== --- a/src/contrib/test_summary (.../tags/gcc_9_2_0_release) +++ b/src/contrib/test_summary (.../branches/gcc-9-branch) @@ -127,7 +127,7 @@ if (lang == "") lang = " "$2" "; else lang = " "; } $2 == "version" { save = $0; $1 = ""; $2 = ""; version = $0; gsub(/^ */, "", version); gsub(/\r$/, "", version); $0 = save; } -/\===.*Summary/ { print ""; print; blanks=1; } +/===.*Summary/ { print ""; print; blanks=1; } /tests ===/ || /^(Target|Host|Native)/ || $2 == "version" { print; blanks=1; } /^(XPASS|FAIL|UNRESOLVED|WARNING|ERROR|# of )/ { sub ("\r", ""); print; } /^using:/ { print ""; print; print ""; } Index: libgcc/config.host =================================================================== --- a/src/libgcc/config.host (.../tags/gcc_9_2_0_release) +++ b/src/libgcc/config.host (.../branches/gcc-9-branch) @@ -1072,12 +1072,12 @@ md_unwind_header=rs6000/darwin-unwind.h ;; esac - tmake_file="$tmake_file rs6000/t-ibm-ldouble" - extra_parts="$extra_parts crt2.o" + tmake_file="$tmake_file rs6000/t-ppc64-fp rs6000/t-ibm-ldouble" + extra_parts="$extra_parts crt2.o crt3_2.o libef_ppc.a dw_ppc.o" ;; powerpc64-*-darwin*) tmake_file="$tmake_file rs6000/t-darwin64 rs6000/t-ibm-ldouble" - extra_parts="$extra_parts crt2.o" + extra_parts="$extra_parts crt2.o crt3_2.o libef_ppc.a dw_ppc.o" ;; powerpc*-*-freebsd*) tmake_file="${tmake_file} rs6000/t-ppccomm rs6000/t-savresfgpr rs6000/t-crtstuff rs6000/t-freebsd t-softfp-sfdf t-softfp-excl t-softfp" Index: libgcc/ChangeLog =================================================================== --- a/src/libgcc/ChangeLog (.../tags/gcc_9_2_0_release) +++ b/src/libgcc/ChangeLog (.../branches/gcc-9-branch) @@ -1,3 +1,45 @@ +2019-10-30 Iain Sandoe + + Backport from mainline. + 2019-07-03 Iain Sandoe + + * config.host (powerpc-*-darwin*,powerpc64-*-darwin*): Revise crt + list. + * config/rs6000/t-darwin: Build crt3_2 for older systems. Revise + mmacosx-version-min for crts to run across all system versions. + * config/rs6000/t-darwin64 (LIB2ADD): Remove. + * config/t-darwin: Revise mmacosx-version-min for crts to run across + system versions >= 10.4. + +2019-10-30 Iain Sandoe + + Backport from mainline. + 2019-06-25 Iain Sandoe + + * config.host: Add libef_ppc.a to the extra files for powerpc-darwin. + * config/rs6000/t-darwin: (PPC_ENDFILE_SRC, PPC_ENDFILE_OBJS): New. + Build objects for the out of line save/restore register functions + so that they can be used for any supported Darwin version. + * config/t-darwin: Default the build Darwin version to Darwin8 + (MacOS 10.4). + +2019-10-15 John David Anglin + + * config/pa/fptr.c (_dl_read_access_allowed): Change argument to + unsigned int. Adjust callers. + (__canonicalize_funcptr_for_compare): Change plabel type to volatile + unsigned int *. Load relocation offset before function pointer. + Add barrier to ensure ordering. + +2019-10-12 John David Anglin + + * config/pa/lib2funcs.S (__gcc_plt_call): Load branch target to %r21. + Load PIC register after branch target. Fix white space. + * config/pa/milli64.S ($$dyncall): Separate LINUX and non LINUX + implementations. Load PIC register after branch target. Don't + clobber function pointer when it points to function descriptor. + Use nullification instead of branch in LINUX implementation. + 2019-08-12 Release Manager * GCC 9.2.0 released. Index: libgcc/config/t-darwin =================================================================== --- a/src/libgcc/config/t-darwin (.../tags/gcc_9_2_0_release) +++ b/src/libgcc/config/t-darwin (.../branches/gcc-9-branch) @@ -1,22 +1,16 @@ # Set this as a minimum (unless overriden by arch t-files) since it's a # reasonable lowest common denominator that works for all our archs. -HOST_LIBGCC2_CFLAGS += -mmacosx-version-min=10.5 +HOST_LIBGCC2_CFLAGS += -mmacosx-version-min=10.4 crt3.o: $(srcdir)/config/darwin-crt3.c - $(crt_compile) $(DARWIN_EXTRA_CRT_BUILD_CFLAGS) -c $< + $(crt_compile) -mmacosx-version-min=10.4 -c $< crttms.o: $(srcdir)/config/darwin-crt-tm.c - $(crt_compile) $(DARWIN_EXTRA_CRT_BUILD_CFLAGS) -DSTART -c $< + $(crt_compile) -mmacosx-version-min=10.4 -DSTART -c $< crttme.o: $(srcdir)/config/darwin-crt-tm.c - $(crt_compile) $(DARWIN_EXTRA_CRT_BUILD_CFLAGS) -DEND -c $< + $(crt_compile) -mmacosx-version-min=10.4 -DEND -c $< -# -pipe because there's an assembler bug, 4077127, which causes -# it to not properly process the first # directive, causing temporary -# file names to appear in stabs, causing the bootstrap to fail. Using -pipe -# works around this by not having any temporary file names. -HOST_LIBGCC2_CFLAGS += -pipe - # Use unwind-dw2-fde-darwin LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/config/unwind-dw2-fde-darwin.c \ $(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c @@ -23,4 +17,4 @@ # Patch to __Unwind_Find_Enclosing_Function for Darwin10. d10-uwfef.o: $(srcdir)/config/darwin10-unwind-find-enc-func.c - $(crt_compile) $(DARWIN_EXTRA_CRT_BUILD_CFLAGS) -mmacosx-version-min=10.6 -c $< + $(crt_compile) -mmacosx-version-min=10.6 -c $< Index: libgcc/config/rs6000/t-darwin =================================================================== --- a/src/libgcc/config/rs6000/t-darwin (.../tags/gcc_9_2_0_release) +++ b/src/libgcc/config/rs6000/t-darwin (.../branches/gcc-9-branch) @@ -1,25 +1,57 @@ -DARWIN_EXTRA_CRT_BUILD_CFLAGS = -mlongcall -mmacosx-version-min=10.4 crt2.o: $(srcdir)/config/rs6000/darwin-crt2.c - $(crt_compile) $(DARWIN_EXTRA_CRT_BUILD_CFLAGS) -c $< + $(crt_compile) -mmacosx-version-min=10.1 -c $< +# The sources for this indicate that there are some parts that +# don't apply >= 10.4 +crt3_2.o: $(srcdir)/config/darwin-crt3.c + $(crt_compile) -mmacosx-version-min=10.1 -c $< + +# The outlined register save/restore functions need to run anywhere, and +# they must be leaf functions suitable for use in an endfile. + +PPC_ENDFILE_SRC = \ + $(srcdir)/config/rs6000/darwin-gpsave.S \ + $(srcdir)/config/rs6000/darwin-fpsave.S \ + $(srcdir)/config/rs6000/darwin-vecsave.S + +PPC_ENDFILE_OBJS = \ + darwin-gpsave.o \ + darwin-fpsave.o \ + darwin-vecsave.o + +darwin-gpsave.o: $(srcdir)/config/rs6000/darwin-gpsave.S + $(crt_compile) -mmacosx-version-min=10.1 -c $< + +darwin-fpsave.o: $(srcdir)/config/rs6000/darwin-fpsave.S + $(crt_compile) -mmacosx-version-min=10.1 -c $< + +darwin-vecsave.o: $(srcdir)/config/rs6000/darwin-vecsave.S + $(crt_compile) -mmacosx-version-min=10.1 -c $< + +# We build these into a library, so that they are only linked as needed and not +# forced into every object. + +libef_ppc.a: $(PPC_ENDFILE_OBJS) + $(AR_CREATE_FOR_TARGET) $@ $(PPC_ENDFILE_OBJS) + $(RANLIB_FOR_TARGET) $@ + +dw_ppc.o: $(srcdir)/config/rs6000/darwin-world.S + $(crt_compile) -mmacosx-version-min=10.1 -c $< + LIB2ADD = $(srcdir)/config/rs6000/darwin-tramp.S \ $(srcdir)/config/darwin-64.c \ - $(srcdir)/config/rs6000/darwin-fpsave.S \ - $(srcdir)/config/rs6000/darwin-gpsave.S \ - $(srcdir)/config/rs6000/darwin-world.S \ - $(srcdir)/config/rs6000/ppc64-fp.c + $(srcdir)/config/rs6000/darwin-world.S -LIB2ADD_ST = \ - $(srcdir)/config/rs6000/darwin-vecsave.S - # The .S files above are designed to run on all processors, even though # they use AltiVec instructions. # -Wa is used because -force_cpusubtype_ALL doesn't work with -dynamiclib. -# -mmacosx-version-min=10.4 is used to provide compatibility for code from -# earlier OSX versions. -HOST_LIBGCC2_CFLAGS += -Wa,-force_cpusubtype_ALL -mmacosx-version-min=10.4 +HOST_LIBGCC2_CFLAGS += -Wa,-force_cpusubtype_ALL + +# Although the default for 10.4 is G3, we need the unwinder to be built +# with vector support so that the "save/rest_world" outlined functions are +# correctly invoked. unwind-dw2_s.o: HOST_LIBGCC2_CFLAGS += -maltivec unwind-dw2.o: HOST_LIBGCC2_CFLAGS += -maltivec Index: libgcc/config/rs6000/t-darwin64 =================================================================== --- a/src/libgcc/config/rs6000/t-darwin64 (.../tags/gcc_9_2_0_release) +++ b/src/libgcc/config/rs6000/t-darwin64 (.../branches/gcc-9-branch) @@ -1,7 +1 @@ LIB2_SIDITI_CONV_FUNCS = yes - -LIB2ADD = $(srcdir)/config/rs6000/darwin-tramp.S \ - $(srcdir)/config/darwin-64.c \ - $(srcdir)/config/rs6000/darwin-fpsave.S \ - $(srcdir)/config/rs6000/darwin-gpsave.S \ - $(srcdir)/config/rs6000/darwin-world.S Index: libgcc/config/pa/milli64.S =================================================================== --- a/src/libgcc/config/pa/milli64.S (.../tags/gcc_9_2_0_release) +++ b/src/libgcc/config/pa/milli64.S (.../branches/gcc-9-branch) @@ -222,19 +222,26 @@ .proc .callinfo millicode .entry +#ifdef LINUX + extru,<> %r22,30,1,%r0 ; nullify if plabel bit set + bv,n %r0(%r22) ; branch to target + ldw -2(%r22),%r21 ; load address of target + bv %r0(%r21) ; branch to the real target + ldw 2(%r22),%r19 ; load new LTP value +#else bb,>=,n %r22,30,LREF(1) ; branch if not plabel address - depi 0,31,2,%r22 ; clear the two least significant bits - ldw 4(%r22),%r19 ; load new LTP value - ldw 0(%r22),%r22 ; load address of target + ldw -2(%r22),%r21 ; load address of target to r21 + ldsid (%sr0,%r21),%r1 ; get the "space ident" selected by r21 + ldw 2(%r22),%r19 ; load new LTP value + mtsp %r1,%sr0 ; move that space identifier into sr0 + be 0(%sr0,%r21) ; branch to the real target + stw %r2,-24(%r30) ; save return address into frame marker LSYM(1) -#ifdef LINUX - bv %r0(%r22) ; branch to the real target -#else ldsid (%sr0,%r22),%r1 ; get the "space ident" selected by r22 mtsp %r1,%sr0 ; move that space identifier into sr0 - be 0(%sr0,%r22) ; branch to the real target + be 0(%sr0,%r22) ; branch to the target + stw %r2,-24(%r30) ; save return address into frame marker #endif - stw %r2,-24(%r30) ; save return address into frame marker .exit .procend #endif Index: libgcc/config/pa/lib2funcs.S =================================================================== --- a/src/libgcc/config/pa/lib2funcs.S (.../tags/gcc_9_2_0_release) +++ b/src/libgcc/config/pa/lib2funcs.S (.../branches/gcc-9-branch) @@ -55,13 +55,13 @@ ; An inline version of dyncall so we don't have to worry ; about long calls to millicode, PIC and other complexities. bb,>=,n %r22,30,L$foo - depi 0,31,2,%r22 - ldw 4(%r22),%r19 - ldw 0(%r22),%r22 + depi 0,31,2,%r22 + ldw 0(%r22),%r21 + ldw 4(%r22),%r19 L$foo - ldsid (%r22),%r1 - mtsp %r1,%sr0 - ble 0(%sr0,%r22) + ldsid (%r21),%r1 + mtsp %r1,%sr0 + ble 0(%sr0,%r21) copy %r31,%r2 ldw -8(%r30),%r2 Index: libgcc/config/pa/fptr.c =================================================================== --- a/src/libgcc/config/pa/fptr.c (.../tags/gcc_9_2_0_release) +++ b/src/libgcc/config/pa/fptr.c (.../branches/gcc-9-branch) @@ -53,7 +53,7 @@ extern unsigned int _GLOBAL_OFFSET_TABLE_; static inline int -_dl_read_access_allowed (unsigned int *addr) +_dl_read_access_allowed (unsigned int addr) { int result; @@ -76,7 +76,8 @@ { static unsigned int fixup_plabel[2] __attribute__((used)); fixup_t fixup; - unsigned int *got, *iptr, *plabel; + volatile unsigned int *plabel; + unsigned int *got, *iptr, reloc_offset; int i; /* -1 and page 0 are special. -1 is used in crtend to mark the end of @@ -91,8 +92,8 @@ to the entry of the PLT stub just before the global offset table. The second word in the plabel contains the relocation offset for the function. */ - plabel = (unsigned int *) ((unsigned int) fptr & ~3); - if (!_dl_read_access_allowed (plabel)) + plabel = (volatile unsigned int *) ((unsigned int) fptr & ~3); + if (!_dl_read_access_allowed ((unsigned int)plabel)) return (unsigned int) fptr; /* Load first word of candidate descriptor. It should be a pointer @@ -99,9 +100,12 @@ with word alignment and point to memory that can be read. */ got = (unsigned int *) plabel[0]; if (((unsigned int) got & 3) != 0 - || !_dl_read_access_allowed (got)) + || !_dl_read_access_allowed ((unsigned int)got)) return (unsigned int) fptr; + /* We need to load the relocation offset before the function address. */ + reloc_offset = plabel[1]; + __sync_synchronize(); got = (unsigned int *) (plabel[0] + GOT_FROM_PLT_STUB); /* Return the address of the function if the plabel has been resolved. */ @@ -137,7 +141,7 @@ /* Call fixup to resolve the function address. got[1] contains the link_map pointer and plabel[1] the relocation offset. */ - fixup ((struct link_map *) got[1], plabel[1]); + fixup ((struct link_map *) got[1], reloc_offset); return plabel[0]; } Index: gcc/tree-vrp.c =================================================================== --- a/src/gcc/tree-vrp.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-vrp.c (.../branches/gcc-9-branch) @@ -1702,9 +1702,7 @@ { /* For pointer types, we are really only interested in asserting whether the expression evaluates to non-NULL. */ - if (!range_includes_zero_p (&vr0) && !range_includes_zero_p (&vr1)) - vr->set_nonnull (expr_type); - else if (range_is_null (&vr0) || range_is_null (&vr1)) + if (range_is_null (&vr0) || range_is_null (&vr1)) vr->set_null (expr_type); else vr->set_varying (); @@ -1772,10 +1770,13 @@ combine_bound (code, wmin, min_ovf, expr_type, min_op0, min_op1); combine_bound (code, wmax, max_ovf, expr_type, max_op0, max_op1); - /* If we have overflow for the constant part and the resulting - range will be symbolic, drop to VR_VARYING. */ - if (((bool)min_ovf && sym_min_op0 != sym_min_op1) - || ((bool)max_ovf && sym_max_op0 != sym_max_op1)) + /* If the resulting range will be symbolic, we need to eliminate any + explicit or implicit overflow introduced in the above computation + because compare_values could make an incorrect use of it. That's + why we require one of the ranges to be a singleton. */ + if ((sym_min_op0 != sym_min_op1 || sym_max_op0 != sym_max_op1) + && ((bool)min_ovf || (bool)max_ovf + || (min_op0 != max_op0 && min_op1 != max_op1))) { vr->set_varying (); return; @@ -1782,8 +1783,6 @@ } /* Adjust the range for possible overflow. */ - min = NULL_TREE; - max = NULL_TREE; set_value_range_with_overflow (type, min, max, expr_type, wmin, wmax, min_ovf, max_ovf); if (type == VR_VARYING) Index: gcc/c-family/c-warn.c =================================================================== --- a/src/gcc/c-family/c-warn.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/c-family/c-warn.c (.../branches/gcc-9-branch) @@ -2784,6 +2784,8 @@ /* Check alignment of the data member. */ if (TREE_CODE (field) == FIELD_DECL && (DECL_PACKED (field) || TYPE_PACKED (TREE_TYPE (field))) + /* Ignore FIELDs not laid out yet. */ + && DECL_FIELD_OFFSET (field) && (!rvalue || TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE)) { /* Check the expected alignment against the field alignment. */ Index: gcc/c-family/ChangeLog =================================================================== --- a/src/gcc/c-family/ChangeLog (.../tags/gcc_9_2_0_release) +++ b/src/gcc/c-family/ChangeLog (.../branches/gcc-9-branch) @@ -1,3 +1,38 @@ +2019-10-21 Jakub Jelinek + + Backported from mainline + 2019-10-01 Jakub Jelinek + + PR c++/91925 + * c-warn.c (check_alignment_of_packed_member): Ignore FIELD_DECLs + with NULL DECL_FIELD_OFFSET. + + 2019-09-27 Jakub Jelinek + + PR c++/88203 + * c-common.h (c_omp_predefined_variable): Declare. + * c-omp.c (c_omp_predefined_variable): New function. + (c_omp_predetermined_sharing): Return OMP_CLAUSE_DEFAULT_SHARED + for predefined variables. + +2019-09-02 Martin Liska + + Backport from mainline + 2019-09-02 Martin Liska + + PR c++/91155 + * c-common.c (fname_as_string): Use cxx_printable_name for + __PRETTY_FUNCTION__ same as was used before r265711. + +2019-08-31 Iain Sandoe + + Backport from mainline + 2019-08-23 Iain Sandoe + + PR pch/61250 + * c-lex.c (c_lex_with_flags): Don't call + c_common_no_more_pch () from here. + 2019-08-12 Release Manager * GCC 9.2.0 released. Index: gcc/c-family/c-lex.c =================================================================== --- a/src/gcc/c-family/c-lex.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/c-family/c-lex.c (.../branches/gcc-9-branch) @@ -394,7 +394,6 @@ c_lex_with_flags (tree *value, location_t *loc, unsigned char *cpp_flags, int lex_flags) { - static bool no_more_pch; const cpp_token *tok; enum cpp_ttype type; unsigned char add_flags = 0; @@ -628,12 +627,6 @@ if (cpp_flags) *cpp_flags = tok->flags | add_flags; - if (!no_more_pch) - { - no_more_pch = true; - c_common_no_more_pch (); - } - timevar_pop (TV_CPP); return type; Index: gcc/c-family/c-omp.c =================================================================== --- a/src/gcc/c-family/c-omp.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/c-family/c-omp.c (.../branches/gcc-9-branch) @@ -2023,6 +2023,25 @@ } } +/* Return true for __func__ and similar function-local predefined + variables (which are in OpenMP predetermined shared, allowed in + shared/firstprivate clauses). */ + +bool +c_omp_predefined_variable (tree decl) +{ + if (VAR_P (decl) + && DECL_ARTIFICIAL (decl) + && TREE_READONLY (decl) + && TREE_STATIC (decl) + && DECL_NAME (decl) + && (DECL_NAME (decl) == ridpointers[RID_C99_FUNCTION_NAME] + || DECL_NAME (decl) == ridpointers[RID_FUNCTION_NAME] + || DECL_NAME (decl) == ridpointers[RID_PRETTY_FUNCTION_NAME])) + return true; + return false; +} + /* True if OpenMP sharing attribute of DECL is predetermined. */ enum omp_clause_default_kind @@ -2036,5 +2055,8 @@ && INTEGRAL_TYPE_P (TREE_TYPE (decl))) return OMP_CLAUSE_DEFAULT_SHARED; + if (c_omp_predefined_variable (decl)) + return OMP_CLAUSE_DEFAULT_SHARED; + return OMP_CLAUSE_DEFAULT_UNSPECIFIED; } Index: gcc/c-family/c-common.h =================================================================== --- a/src/gcc/c-family/c-common.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/c-family/c-common.h (.../branches/gcc-9-branch) @@ -1184,6 +1184,7 @@ tree, tree *); extern tree c_omp_declare_simd_clauses_to_numbers (tree, tree); extern void c_omp_declare_simd_clauses_to_decls (tree, tree); +extern bool c_omp_predefined_variable (tree); extern enum omp_clause_default_kind c_omp_predetermined_sharing (tree); /* Return next tree in the chain for chain_next walking of tree nodes. */ Index: gcc/c/ChangeLog =================================================================== --- a/src/gcc/c/ChangeLog (.../tags/gcc_9_2_0_release) +++ b/src/gcc/c/ChangeLog (.../branches/gcc-9-branch) @@ -1,3 +1,33 @@ +2019-10-21 Jakub Jelinek + + Backported from mainline + 2019-09-27 Jakub Jelinek + + PR c++/88203 + * c-parser.c (c_parser_predefined_identifier): New function. + (c_parser_postfix_expression): Use it. + (c_parser_omp_variable_list): Parse predefined identifiers. + * c-typeck.c (c_finish_omp_clauses): Allow predefined variables + in shared and firstprivate clauses, even when they are predetermined + shared. + + 2019-08-09 Jakub Jelinek + + PR c/91401 + * c-parser.c (c_parser_omp_clause_dist_schedule): Fix up typos in the + check_no_duplicate_clause call. Comment it out, instead emit a + warning for duplicate dist_schedule clauses. + +2019-08-31 Iain Sandoe + + Backport from mainline. + 2019-08-23 Iain Sandoe + + PR pch/61250 + * c-parser.c (c_parse_file): Call c_common_no_more_pch () + after determining that the first token is not + PRAGMA_GCC_PCH_PREPROCESS. + 2019-08-12 Release Manager * GCC 9.2.0 released. Index: gcc/c/c-parser.c =================================================================== --- a/src/gcc/c/c-parser.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/c/c-parser.c (.../branches/gcc-9-branch) @@ -8012,6 +8012,41 @@ tgmath_fixed, tgmath_real, tgmath_complex }; +/* Helper function for c_parser_postfix_expression. Parse predefined + identifiers. */ + +static struct c_expr +c_parser_predefined_identifier (c_parser *parser) +{ + location_t loc = c_parser_peek_token (parser)->location; + switch (c_parser_peek_token (parser)->keyword) + { + case RID_FUNCTION_NAME: + pedwarn (loc, OPT_Wpedantic, "ISO C does not support %qs predefined " + "identifier", "__FUNCTION__"); + break; + case RID_PRETTY_FUNCTION_NAME: + pedwarn (loc, OPT_Wpedantic, "ISO C does not support %qs predefined " + "identifier", "__PRETTY_FUNCTION__"); + break; + case RID_C99_FUNCTION_NAME: + pedwarn_c90 (loc, OPT_Wpedantic, "ISO C90 does not support " + "%<__func__%> predefined identifier"); + break; + default: + gcc_unreachable (); + } + + struct c_expr expr; + expr.original_code = ERROR_MARK; + expr.original_type = NULL; + expr.value = fname_decl (loc, c_parser_peek_token (parser)->keyword, + c_parser_peek_token (parser)->value); + set_c_expr_source_range (&expr, loc, loc); + c_parser_consume_token (parser); + return expr; +} + /* Parse a postfix expression (C90 6.3.1-6.3.2, C99 6.5.1-6.5.2, C11 6.5.1-6.5.2). Compound literals aren't handled here; callers have to call c_parser_postfix_expression_after_paren_type on encountering them. @@ -8232,31 +8267,9 @@ switch (c_parser_peek_token (parser)->keyword) { case RID_FUNCTION_NAME: - pedwarn (loc, OPT_Wpedantic, "ISO C does not support " - "%<__FUNCTION__%> predefined identifier"); - expr.value = fname_decl (loc, - c_parser_peek_token (parser)->keyword, - c_parser_peek_token (parser)->value); - set_c_expr_source_range (&expr, loc, loc); - c_parser_consume_token (parser); - break; case RID_PRETTY_FUNCTION_NAME: - pedwarn (loc, OPT_Wpedantic, "ISO C does not support " - "%<__PRETTY_FUNCTION__%> predefined identifier"); - expr.value = fname_decl (loc, - c_parser_peek_token (parser)->keyword, - c_parser_peek_token (parser)->value); - set_c_expr_source_range (&expr, loc, loc); - c_parser_consume_token (parser); - break; case RID_C99_FUNCTION_NAME: - pedwarn_c90 (loc, OPT_Wpedantic, "ISO C90 does not support " - "%<__func__%> predefined identifier"); - expr.value = fname_decl (loc, - c_parser_peek_token (parser)->keyword, - c_parser_peek_token (parser)->value); - set_c_expr_source_range (&expr, loc, loc); - c_parser_consume_token (parser); + expr = c_parser_predefined_identifier (parser); break; case RID_VA_ARG: { @@ -11950,15 +11963,9 @@ { auto_vec tokens; unsigned int tokens_avail = 0; + bool first = true; - if (kind != OMP_CLAUSE_DEPEND - && (c_parser_next_token_is_not (parser, CPP_NAME) - || c_parser_peek_token (parser)->id_kind != C_ID_ID)) - c_parser_error (parser, "expected identifier"); - - while (kind == OMP_CLAUSE_DEPEND - || (c_parser_next_token_is (parser, CPP_NAME) - && c_parser_peek_token (parser)->id_kind == C_ID_ID)) + while (1) { bool array_section_p = false; if (kind == OMP_CLAUSE_DEPEND) @@ -11979,6 +11986,7 @@ break; c_parser_consume_token (parser); + first = false; continue; } @@ -12029,17 +12037,36 @@ parser->tokens_avail = tokens.length (); } - tree t = lookup_name (c_parser_peek_token (parser)->value); + tree t = NULL_TREE; - if (t == NULL_TREE) + if (c_parser_next_token_is (parser, CPP_NAME) + && c_parser_peek_token (parser)->id_kind == C_ID_ID) { - undeclared_variable (c_parser_peek_token (parser)->location, - c_parser_peek_token (parser)->value); - t = error_mark_node; + t = lookup_name (c_parser_peek_token (parser)->value); + + if (t == NULL_TREE) + { + undeclared_variable (c_parser_peek_token (parser)->location, + c_parser_peek_token (parser)->value); + t = error_mark_node; + } + + c_parser_consume_token (parser); } + else if (c_parser_next_token_is (parser, CPP_KEYWORD) + && (c_parser_peek_token (parser)->keyword == RID_FUNCTION_NAME + || (c_parser_peek_token (parser)->keyword + == RID_PRETTY_FUNCTION_NAME) + || (c_parser_peek_token (parser)->keyword + == RID_C99_FUNCTION_NAME))) + t = c_parser_predefined_identifier (parser).value; + else + { + if (first) + c_parser_error (parser, "expected identifier"); + break; + } - c_parser_consume_token (parser); - if (t == error_mark_node) ; else if (kind != 0) @@ -12176,6 +12203,7 @@ break; c_parser_consume_token (parser); + first = false; } return list; @@ -14707,7 +14735,10 @@ c_parser_skip_until_found (parser, CPP_CLOSE_PAREN, "expected %<,%> or %<)%>"); - check_no_duplicate_clause (list, OMP_CLAUSE_SCHEDULE, "schedule"); + /* check_no_duplicate_clause (list, OMP_CLAUSE_DIST_SCHEDULE, + "dist_schedule"); */ + if (omp_find_clause (list, OMP_CLAUSE_DIST_SCHEDULE)) + warning_at (loc, 0, "too many %qs clauses", "dist_schedule"); if (t == error_mark_node) return list; @@ -19859,6 +19890,8 @@ if (c_parser_peek_token (&tparser)->pragma_kind == PRAGMA_GCC_PCH_PREPROCESS) c_parser_pragma_pch_preprocess (&tparser); + else + c_common_no_more_pch (); the_parser = ggc_alloc (); *the_parser = tparser; Index: gcc/c/c-typeck.c =================================================================== --- a/src/gcc/c/c-typeck.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/c/c-typeck.c (.../branches/gcc-9-branch) @@ -14713,6 +14713,13 @@ case OMP_CLAUSE_DEFAULT_UNSPECIFIED: break; case OMP_CLAUSE_DEFAULT_SHARED: + if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_SHARED + || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE) + && c_omp_predefined_variable (t)) + /* The __func__ variable and similar function-local + predefined variables may be listed in a shared or + firstprivate clause. */ + break; share_name = "shared"; break; case OMP_CLAUSE_DEFAULT_PRIVATE: Index: gcc/cgraph.c =================================================================== --- a/src/gcc/cgraph.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/cgraph.c (.../branches/gcc-9-branch) @@ -1779,8 +1779,6 @@ void cgraph_node::remove (void) { - cgraph_node *n; - if (symtab->ipa_clones_dump_file && symtab->cloned_nodes.contains (this)) fprintf (symtab->ipa_clones_dump_file, "Callgraph removal;%s;%d;%s;%d;%d\n", asm_name (), order, @@ -1797,8 +1795,13 @@ */ force_output = false; forced_by_abi = false; - for (n = nested; n; n = n->next_nested) + cgraph_node *next = nested; + for (cgraph_node *n = nested; n; n = next) + { + next = n->next_nested; n->origin = NULL; + n->next_nested = NULL; + } nested = NULL; if (origin) { @@ -1852,7 +1855,7 @@ */ if (symtab->state != LTO_STREAMING) { - n = cgraph_node::get (decl); + cgraph_node *n = cgraph_node::get (decl); if (!n || (!n->clones && !n->clone_of && !n->global.inlined_to && ((symtab->global_info_ready || in_lto_p) @@ -3449,6 +3452,30 @@ e->aux = 0; } } + + if (nested != NULL) + { + for (cgraph_node *n = nested; n != NULL; n = n->next_nested) + { + if (n->origin == NULL) + { + error ("missing origin for a node in a nested list"); + error_found = true; + } + else if (n->origin != this) + { + error ("origin points to a different parent"); + error_found = true; + break; + } + } + } + if (next_nested != NULL && origin == NULL) + { + error ("missing origin for a node in a nested list"); + error_found = true; + } + if (error_found) { dump (stderr); Index: gcc/lra-int.h =================================================================== --- a/src/gcc/lra-int.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/lra-int.h (.../branches/gcc-9-branch) @@ -401,6 +401,7 @@ /* lra-spills.c: */ +extern bool lra_need_for_scratch_reg_p (void); extern bool lra_need_for_spills_p (void); extern void lra_spill (void); extern void lra_final_code_change (void); Index: gcc/optabs.c =================================================================== --- a/src/gcc/optabs.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/optabs.c (.../branches/gcc-9-branch) @@ -5819,6 +5819,25 @@ icode = get_vcond_icode (mode, cmp_op_mode, unsignedp); if (icode == CODE_FOR_nothing) { + if (tcode == LT_EXPR + && op0a == op0 + && TREE_CODE (op0) == VECTOR_CST) + { + /* A VEC_COND_EXPR condition could be folded from EQ_EXPR/NE_EXPR + into a constant when only get_vcond_eq_icode is supported. + Verify < 0 and != 0 behave the same and change it to NE_EXPR. */ + unsigned HOST_WIDE_INT nelts; + if (!VECTOR_CST_NELTS (op0).is_constant (&nelts)) + { + if (VECTOR_CST_STEPPED_P (op0)) + return 0; + nelts = vector_cst_encoded_nelts (op0); + } + for (unsigned int i = 0; i < nelts; ++i) + if (tree_int_cst_sgn (vector_cst_elt (op0, i)) == 1) + return 0; + tcode = NE_EXPR; + } if (tcode == EQ_EXPR || tcode == NE_EXPR) icode = get_vcond_eq_icode (mode, cmp_op_mode); if (icode == CODE_FOR_nothing) Index: gcc/DATESTAMP =================================================================== --- a/src/gcc/DATESTAMP (.../tags/gcc_9_2_0_release) +++ b/src/gcc/DATESTAMP (.../branches/gcc-9-branch) @@ -1 +1 @@ -20190812 +20191109 Index: gcc/gimple-streamer-out.c =================================================================== --- a/src/gcc/gimple-streamer-out.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/gimple-streamer-out.c (.../branches/gcc-9-branch) @@ -57,7 +57,7 @@ /* Emit statement STMT on the main stream of output block OB. */ static void -output_gimple_stmt (struct output_block *ob, gimple *stmt) +output_gimple_stmt (struct output_block *ob, struct function *fn, gimple *stmt) { unsigned i; enum gimple_code code; @@ -80,7 +80,7 @@ as_a (stmt)), 1); bp_pack_value (&bp, gimple_has_volatile_ops (stmt), 1); - hist = gimple_histogram_value (cfun, stmt); + hist = gimple_histogram_value (fn, stmt); bp_pack_value (&bp, hist != NULL, 1); bp_pack_var_len_unsigned (&bp, stmt->subcode); @@ -139,7 +139,7 @@ so that we do not have to deal with type mismatches on merged symbols during IL read in. The first operand of GIMPLE_DEBUG must be a decl, not MEM_REF, though. */ - if (op && (i || !is_gimple_debug (stmt))) + if (!flag_wpa && op && (i || !is_gimple_debug (stmt))) { basep = &op; if (TREE_CODE (*basep) == ADDR_EXPR) @@ -147,7 +147,7 @@ while (handled_component_p (*basep)) basep = &TREE_OPERAND (*basep, 0); if (VAR_P (*basep) - && !auto_var_in_fn_p (*basep, current_function_decl) + && !auto_var_in_fn_p (*basep, fn->decl) && !DECL_REGISTER (*basep)) { bool volatilep = TREE_THIS_VOLATILE (*basep); @@ -228,7 +228,7 @@ print_gimple_stmt (streamer_dump_file, stmt, 0, TDF_SLIM); } - output_gimple_stmt (ob, stmt); + output_gimple_stmt (ob, fn, stmt); /* Emit the EH region holding STMT. */ region = lookup_stmt_eh_lp_fn (fn, stmt); Index: gcc/lra.c =================================================================== --- a/src/gcc/lra.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/lra.c (.../branches/gcc-9-branch) @@ -2587,7 +2587,11 @@ lra_create_live_ranges (lra_reg_spill_p, true); live_p = true; if (! lra_need_for_spills_p ()) - break; + { + if (lra_need_for_scratch_reg_p ()) + continue; + break; + } } lra_spill (); /* Assignment of stack slots changes elimination offsets for Index: gcc/tree.c =================================================================== --- a/src/gcc/tree.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree.c (.../branches/gcc-9-branch) @@ -5514,8 +5514,7 @@ free_lang_data_in_binfo (TYPE_BINFO (type)); /* We need to preserve link to bases and virtual table for all polymorphic types to make devirtualization machinery working. */ - if (!BINFO_VTABLE (TYPE_BINFO (type)) - || !flag_devirtualize) + if (!BINFO_VTABLE (TYPE_BINFO (type))) TYPE_BINFO (type) = NULL; } } @@ -5778,7 +5777,8 @@ while (*nextp) { tree var = *nextp; - if (fndecl_built_in_p (var)) + if (TREE_CODE (var) == FUNCTION_DECL + && fndecl_built_in_p (var)) *nextp = TREE_CHAIN (var); else nextp = &TREE_CHAIN (var); @@ -5937,8 +5937,9 @@ { for (tree *tem = &BLOCK_VARS (t); *tem; ) { - if (TREE_CODE (*tem) != VAR_DECL - || !auto_var_in_fn_p (*tem, DECL_CONTEXT (*tem))) + if (TREE_CODE (*tem) != LABEL_DECL + && (TREE_CODE (*tem) != VAR_DECL + || !auto_var_in_fn_p (*tem, DECL_CONTEXT (*tem)))) { gcc_assert (TREE_CODE (*tem) != RESULT_DECL && TREE_CODE (*tem) != PARM_DECL); @@ -6107,6 +6108,13 @@ { tree arg = gimple_op (stmt, i); find_decls_types (arg, fld); + /* find_decls_types doesn't walk TREE_PURPOSE of TREE_LISTs, + which we need for asm stmts. */ + if (arg + && TREE_CODE (arg) == TREE_LIST + && TREE_PURPOSE (arg) + && gimple_code (stmt) == GIMPLE_ASM) + find_decls_types (TREE_PURPOSE (arg), fld); } } } Index: gcc/tree.h =================================================================== --- a/src/gcc/tree.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree.h (.../branches/gcc-9-branch) @@ -5946,12 +5946,12 @@ Note that it is different from the DECL_IS_BUILTIN accessor. For instance, user declared prototypes of C library functions are not - DECL_IS_BUILTIN but may be DECL_BUILT_IN. */ + DECL_IS_BUILTIN but may be fndecl_built_in_p. */ inline bool fndecl_built_in_p (const_tree node) { - return (DECL_BUILT_IN_CLASS (node) != NOT_BUILT_IN); + return DECL_BUILT_IN_CLASS (node) != NOT_BUILT_IN; } /* Return true if a FUNCTION_DECL NODE is a GCC built-in function @@ -5960,7 +5960,7 @@ inline bool fndecl_built_in_p (const_tree node, built_in_class klass) { - return (fndecl_built_in_p (node) && DECL_BUILT_IN_CLASS (node) == klass); + return fndecl_built_in_p (node) && DECL_BUILT_IN_CLASS (node) == klass; } /* Return true if a FUNCTION_DECL NODE is a GCC built-in function Index: gcc/tree-pass.h =================================================================== --- a/src/gcc/tree-pass.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-pass.h (.../branches/gcc-9-branch) @@ -562,6 +562,7 @@ extern rtl_opt_pass *make_pass_initialize_regs (gcc::context *ctxt); extern rtl_opt_pass *make_pass_combine (gcc::context *ctxt); extern rtl_opt_pass *make_pass_if_after_combine (gcc::context *ctxt); +extern rtl_opt_pass *make_pass_jump_after_combine (gcc::context *ctxt); extern rtl_opt_pass *make_pass_ree (gcc::context *ctxt); extern rtl_opt_pass *make_pass_partition_blocks (gcc::context *ctxt); extern rtl_opt_pass *make_pass_match_asm_constraints (gcc::context *ctxt); @@ -579,7 +580,6 @@ extern rtl_opt_pass *make_pass_branch_prob (gcc::context *ctxt); extern rtl_opt_pass *make_pass_value_profile_transformations (gcc::context *ctxt); -extern rtl_opt_pass *make_pass_postreload_jump (gcc::context *ctxt); extern rtl_opt_pass *make_pass_postreload_cse (gcc::context *ctxt); extern rtl_opt_pass *make_pass_gcse2 (gcc::context *ctxt); extern rtl_opt_pass *make_pass_split_after_reload (gcc::context *ctxt); Index: gcc/ipa-cp.c =================================================================== --- a/src/gcc/ipa-cp.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/ipa-cp.c (.../branches/gcc-9-branch) @@ -5190,4 +5190,5 @@ max_count = profile_count::uninitialized (); overall_size = 0; max_new_size = 0; + ipcp_free_transformation_sum (); } Index: gcc/rtlanal.c =================================================================== --- a/src/gcc/rtlanal.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/rtlanal.c (.../branches/gcc-9-branch) @@ -4793,7 +4793,7 @@ || ((extend_op = load_extend_op (inner_mode)) == SIGN_EXTEND ? val_signbit_known_set_p (inner_mode, nonzero) : extend_op != ZERO_EXTEND) - || (!MEM_P (SUBREG_REG (x)) && !REG_P (SUBREG_REG (x)))) + || !MEM_P (SUBREG_REG (x))) && xmode_width > inner_width) nonzero |= (GET_MODE_MASK (GET_MODE (x)) & ~GET_MODE_MASK (inner_mode)); Index: gcc/builtins.c =================================================================== --- a/src/gcc/builtins.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/builtins.c (.../branches/gcc-9-branch) @@ -11236,3 +11236,90 @@ *p = (char)tree_to_uhwi (t); return true; } + +/* Return true if the builtin DECL is implemented in a standard library. + Otherwise returns false which doesn't guarantee it is not (thus the list of + handled builtins below may be incomplete). */ + +bool +builtin_with_linkage_p (tree decl) +{ + if (DECL_BUILT_IN_CLASS (decl) == BUILT_IN_NORMAL) + switch (DECL_FUNCTION_CODE (decl)) + { + CASE_FLT_FN (BUILT_IN_ACOS): + CASE_FLT_FN (BUILT_IN_ACOSH): + CASE_FLT_FN (BUILT_IN_ASIN): + CASE_FLT_FN (BUILT_IN_ASINH): + CASE_FLT_FN (BUILT_IN_ATAN): + CASE_FLT_FN (BUILT_IN_ATANH): + CASE_FLT_FN (BUILT_IN_ATAN2): + CASE_FLT_FN (BUILT_IN_CBRT): + CASE_FLT_FN (BUILT_IN_CEIL): + CASE_FLT_FN_FLOATN_NX (BUILT_IN_CEIL): + CASE_FLT_FN (BUILT_IN_COPYSIGN): + CASE_FLT_FN_FLOATN_NX (BUILT_IN_COPYSIGN): + CASE_FLT_FN (BUILT_IN_COS): + CASE_FLT_FN (BUILT_IN_COSH): + CASE_FLT_FN (BUILT_IN_ERF): + CASE_FLT_FN (BUILT_IN_ERFC): + CASE_FLT_FN (BUILT_IN_EXP): + CASE_FLT_FN (BUILT_IN_EXP2): + CASE_FLT_FN (BUILT_IN_EXPM1): + CASE_FLT_FN (BUILT_IN_FABS): + CASE_FLT_FN_FLOATN_NX (BUILT_IN_FABS): + CASE_FLT_FN (BUILT_IN_FDIM): + CASE_FLT_FN (BUILT_IN_FLOOR): + CASE_FLT_FN_FLOATN_NX (BUILT_IN_FLOOR): + CASE_FLT_FN (BUILT_IN_FMA): + CASE_FLT_FN_FLOATN_NX (BUILT_IN_FMA): + CASE_FLT_FN (BUILT_IN_FMAX): + CASE_FLT_FN_FLOATN_NX (BUILT_IN_FMAX): + CASE_FLT_FN (BUILT_IN_FMIN): + CASE_FLT_FN_FLOATN_NX (BUILT_IN_FMIN): + CASE_FLT_FN (BUILT_IN_FMOD): + CASE_FLT_FN (BUILT_IN_FREXP): + CASE_FLT_FN (BUILT_IN_HYPOT): + CASE_FLT_FN (BUILT_IN_ILOGB): + CASE_FLT_FN (BUILT_IN_LDEXP): + CASE_FLT_FN (BUILT_IN_LGAMMA): + CASE_FLT_FN (BUILT_IN_LLRINT): + CASE_FLT_FN (BUILT_IN_LLROUND): + CASE_FLT_FN (BUILT_IN_LOG): + CASE_FLT_FN (BUILT_IN_LOG10): + CASE_FLT_FN (BUILT_IN_LOG1P): + CASE_FLT_FN (BUILT_IN_LOG2): + CASE_FLT_FN (BUILT_IN_LOGB): + CASE_FLT_FN (BUILT_IN_LRINT): + CASE_FLT_FN (BUILT_IN_LROUND): + CASE_FLT_FN (BUILT_IN_MODF): + CASE_FLT_FN (BUILT_IN_NAN): + CASE_FLT_FN (BUILT_IN_NEARBYINT): + CASE_FLT_FN_FLOATN_NX (BUILT_IN_NEARBYINT): + CASE_FLT_FN (BUILT_IN_NEXTAFTER): + CASE_FLT_FN (BUILT_IN_NEXTTOWARD): + CASE_FLT_FN (BUILT_IN_POW): + CASE_FLT_FN (BUILT_IN_REMAINDER): + CASE_FLT_FN (BUILT_IN_REMQUO): + CASE_FLT_FN (BUILT_IN_RINT): + CASE_FLT_FN_FLOATN_NX (BUILT_IN_RINT): + CASE_FLT_FN (BUILT_IN_ROUND): + CASE_FLT_FN_FLOATN_NX (BUILT_IN_ROUND): + CASE_FLT_FN (BUILT_IN_SCALBLN): + CASE_FLT_FN (BUILT_IN_SCALBN): + CASE_FLT_FN (BUILT_IN_SIN): + CASE_FLT_FN (BUILT_IN_SINH): + CASE_FLT_FN (BUILT_IN_SINCOS): + CASE_FLT_FN (BUILT_IN_SQRT): + CASE_FLT_FN_FLOATN_NX (BUILT_IN_SQRT): + CASE_FLT_FN (BUILT_IN_TAN): + CASE_FLT_FN (BUILT_IN_TANH): + CASE_FLT_FN (BUILT_IN_TGAMMA): + CASE_FLT_FN (BUILT_IN_TRUNC): + CASE_FLT_FN_FLOATN_NX (BUILT_IN_TRUNC): + return true; + default: + break; + } + return false; +} Index: gcc/builtins.h =================================================================== --- a/src/gcc/builtins.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/builtins.h (.../branches/gcc-9-branch) @@ -150,5 +150,6 @@ extern void warn_string_no_nul (location_t, const char *, tree, tree); extern tree unterminated_array (tree, tree * = NULL, bool * = NULL); +extern bool builtin_with_linkage_p (tree); #endif /* GCC_BUILTINS_H */ Index: gcc/generic-match-head.c =================================================================== --- a/src/gcc/generic-match-head.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/generic-match-head.c (.../branches/gcc-9-branch) @@ -28,6 +28,7 @@ #include "ssa.h" #include "cgraph.h" #include "fold-const.h" +#include "fold-const-call.h" #include "stor-layout.h" #include "tree-dfa.h" #include "builtins.h" Index: gcc/fold-const.c =================================================================== --- a/src/gcc/fold-const.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fold-const.c (.../branches/gcc-9-branch) @@ -4935,10 +4935,9 @@ /* First make sure that arithmetics in this type is valid, then make sure that it wraps around. */ if (TREE_CODE (etype) == ENUMERAL_TYPE || TREE_CODE (etype) == BOOLEAN_TYPE) - etype = lang_hooks.types.type_for_size (TYPE_PRECISION (etype), - TYPE_UNSIGNED (etype)); + etype = lang_hooks.types.type_for_size (TYPE_PRECISION (etype), 1); - if (TREE_CODE (etype) == INTEGER_TYPE && !TYPE_OVERFLOW_WRAPS (etype)) + if (TREE_CODE (etype) == INTEGER_TYPE && !TYPE_UNSIGNED (etype)) { tree utype, minv, maxv; @@ -4956,6 +4955,8 @@ else return NULL_TREE; } + else if (POINTER_TYPE_P (etype)) + etype = unsigned_type_for (etype); return etype; } @@ -5046,9 +5047,6 @@ if (etype == NULL_TREE) return NULL_TREE; - if (POINTER_TYPE_P (etype)) - etype = unsigned_type_for (etype); - high = fold_convert_loc (loc, etype, high); low = fold_convert_loc (loc, etype, low); exp = fold_convert_loc (loc, etype, exp); Index: gcc/lra-spills.c =================================================================== --- a/src/gcc/lra-spills.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/lra-spills.c (.../branches/gcc-9-branch) @@ -548,6 +548,19 @@ } } +/* Return true if we need scratch reg assignments. */ +bool +lra_need_for_scratch_reg_p (void) +{ + int i; max_regno = max_reg_num (); + + for (i = FIRST_PSEUDO_REGISTER; i < max_regno; i++) + if (lra_reg_info[i].nrefs != 0 && lra_get_regno_hard_regno (i) < 0 + && lra_former_scratch_p (i)) + return true; + return false; +} + /* Return true if we need to change some pseudos into memory. */ bool lra_need_for_spills_p (void) Index: gcc/tree-ssa-dse.c =================================================================== --- a/src/gcc/tree-ssa-dse.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-ssa-dse.c (.../branches/gcc-9-branch) @@ -984,7 +984,7 @@ { need_eh_cleanup = BITMAP_ALLOC (NULL); - renumber_gimple_stmt_uids (); + renumber_gimple_stmt_uids (cfun); /* We might consider making this a property of each pass so that it can be [re]computed on an as-needed basis. Particularly since Index: gcc/gcov.c =================================================================== --- a/src/gcc/gcov.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/gcov.c (.../branches/gcc-9-branch) @@ -725,10 +725,10 @@ /* Return true when PATH contains a zero cycle arc count. */ static bool -path_contains_zero_cycle_arc (arc_vector_t &path) +path_contains_zero_or_negative_cycle_arc (arc_vector_t &path) { for (unsigned i = 0; i < path.size (); i++) - if (path[i]->cs_count == 0) + if (path[i]->cs_count <= 0) return true; return false; } @@ -754,7 +754,7 @@ { block_info *w = arc->dst; if (w < start - || arc->cs_count == 0 + || arc->cs_count <= 0 || !linfo.has_block (w)) continue; @@ -765,7 +765,7 @@ handle_cycle (path, count); loop_found = true; } - else if (!path_contains_zero_cycle_arc (path) + else if (!path_contains_zero_or_negative_cycle_arc (path) && find (blocked.begin (), blocked.end (), w) == blocked.end ()) loop_found |= circuit (w, path, start, blocked, block_lists, linfo, count); @@ -780,7 +780,7 @@ { block_info *w = arc->dst; if (w < start - || arc->cs_count == 0 + || arc->cs_count <= 0 || !linfo.has_block (w)) continue; Index: gcc/tree-ssa-sccvn.c =================================================================== --- a/src/gcc/tree-ssa-sccvn.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-ssa-sccvn.c (.../branches/gcc-9-branch) @@ -132,8 +132,6 @@ /* There's no BB_EXECUTABLE but we can use BB_VISITED. */ #define BB_EXECUTABLE BB_VISITED -static tree *last_vuse_ptr; -static vn_lookup_kind vn_walk_kind; static vn_lookup_kind default_vn_walk_kind; /* vn_nary_op hashtable helpers. */ @@ -1678,18 +1676,33 @@ return NULL_TREE; } +struct vn_walk_cb_data +{ + vn_walk_cb_data (vn_reference_t vr_, tree *last_vuse_ptr_, + vn_lookup_kind vn_walk_kind_, bool tbaa_p_) + : vr (vr_), last_vuse_ptr (last_vuse_ptr_), vn_walk_kind (vn_walk_kind_), + tbaa_p (tbaa_p_) + {} + + vn_reference_t vr; + tree *last_vuse_ptr; + vn_lookup_kind vn_walk_kind; + bool tbaa_p; +}; + /* Callback for walk_non_aliased_vuses. Adjusts the vn_reference_t VR_ with the current VUSE and performs the expression lookup. */ static void * -vn_reference_lookup_2 (ao_ref *op ATTRIBUTE_UNUSED, tree vuse, void *vr_) +vn_reference_lookup_2 (ao_ref *op ATTRIBUTE_UNUSED, tree vuse, void *data_) { - vn_reference_t vr = (vn_reference_t)vr_; + vn_walk_cb_data *data = (vn_walk_cb_data *)data_; + vn_reference_t vr = data->vr; vn_reference_s **slot; hashval_t hash; - if (last_vuse_ptr) - *last_vuse_ptr = vuse; + if (data->last_vuse_ptr) + *data->last_vuse_ptr = vuse; /* Fixup vuse and hash. */ if (vr->vuse) @@ -1959,10 +1972,11 @@ *DISAMBIGUATE_ONLY is set to true. */ static void * -vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *vr_, +vn_reference_lookup_3 (ao_ref *ref, tree vuse, void *data_, bool *disambiguate_only) { - vn_reference_t vr = (vn_reference_t)vr_; + vn_walk_cb_data *data = (vn_walk_cb_data *)data_; + vn_reference_t vr = data->vr; gimple *def_stmt = SSA_NAME_DEF_STMT (vuse); tree base = ao_ref_base (ref); HOST_WIDE_INT offseti, maxsizei; @@ -1989,7 +2003,7 @@ get_alias_set (lhs), TREE_TYPE (lhs), lhs_ops); if (lhs_ref_ok - && !refs_may_alias_p_1 (ref, &lhs_ref, true)) + && !refs_may_alias_p_1 (ref, &lhs_ref, data->tbaa_p)) { *disambiguate_only = true; return NULL; @@ -2005,21 +2019,21 @@ we find a VN result with exactly the same value as the possible clobber. In this case we can ignore the clobber and return the found value. */ - if (vn_walk_kind == VN_WALKREWRITE + if (data->vn_walk_kind == VN_WALKREWRITE && is_gimple_reg_type (TREE_TYPE (lhs)) && types_compatible_p (TREE_TYPE (lhs), vr->type) && ref->ref) { - tree *saved_last_vuse_ptr = last_vuse_ptr; + tree *saved_last_vuse_ptr = data->last_vuse_ptr; /* Do not update last_vuse_ptr in vn_reference_lookup_2. */ - last_vuse_ptr = NULL; + data->last_vuse_ptr = NULL; tree saved_vuse = vr->vuse; hashval_t saved_hashcode = vr->hashcode; - void *res = vn_reference_lookup_2 (ref, gimple_vuse (def_stmt), vr); + void *res = vn_reference_lookup_2 (ref, gimple_vuse (def_stmt), data); /* Need to restore vr->vuse and vr->hashcode. */ vr->vuse = saved_vuse; vr->hashcode = saved_hashcode; - last_vuse_ptr = saved_last_vuse_ptr; + data->last_vuse_ptr = saved_last_vuse_ptr; if (res && res != (void *)-1) { vn_reference_t vnresult = (vn_reference_t) res; @@ -2072,7 +2086,9 @@ } } - if (*disambiguate_only) + /* If we are looking for redundant stores do not create new hashtable + entries from aliasing defs with made up alias-sets. */ + if (*disambiguate_only || !data->tbaa_p) return (void *)-1; /* If we cannot constrain the size of the reference we cannot @@ -2342,7 +2358,7 @@ /* 5) For aggregate copies translate the reference through them if the copy kills ref. */ - else if (vn_walk_kind == VN_WALKREWRITE + else if (data->vn_walk_kind == VN_WALKREWRITE && gimple_assign_single_p (def_stmt) && (DECL_P (gimple_assign_rhs1 (def_stmt)) || TREE_CODE (gimple_assign_rhs1 (def_stmt)) == MEM_REF @@ -2462,7 +2478,7 @@ *ref = r; /* Do not update last seen VUSE after translating. */ - last_vuse_ptr = NULL; + data->last_vuse_ptr = NULL; /* Keep looking for the adjusted *REF / VR pair. */ return NULL; @@ -2470,7 +2486,7 @@ /* 6) For memcpy copies translate the reference through them if the copy kills ref. */ - else if (vn_walk_kind == VN_WALKREWRITE + else if (data->vn_walk_kind == VN_WALKREWRITE && is_gimple_reg_type (vr->type) /* ??? Handle BCOPY as well. */ && (gimple_call_builtin_p (def_stmt, BUILT_IN_MEMCPY) @@ -2620,7 +2636,7 @@ *ref = r; /* Do not update last seen VUSE after translating. */ - last_vuse_ptr = NULL; + data->last_vuse_ptr = NULL; /* Keep looking for the adjusted *REF / VR pair. */ return NULL; @@ -2681,13 +2697,13 @@ { ao_ref r; unsigned limit = PARAM_VALUE (PARAM_SCCVN_MAX_ALIAS_QUERIES_PER_ACCESS); - vn_walk_kind = kind; + vn_walk_cb_data data (&vr1, NULL, kind, true); if (ao_ref_init_from_vn_reference (&r, set, type, vr1.operands)) *vnresult = - (vn_reference_t)walk_non_aliased_vuses (&r, vr1.vuse, + (vn_reference_t)walk_non_aliased_vuses (&r, vr1.vuse, true, vn_reference_lookup_2, vn_reference_lookup_3, - vuse_valueize, limit, &vr1); + vuse_valueize, limit, &data); gcc_checking_assert (vr1.operands == shared_lookup_references); } @@ -2702,11 +2718,12 @@ not exist in the hash table or if the result field of the structure was NULL.. VNRESULT will be filled in with the vn_reference_t stored in the hashtable if one exists. When TBAA_P is false assume - we are looking up a store and treat it as having alias-set zero. */ + we are looking up a store and treat it as having alias-set zero. + *LAST_VUSE_PTR will be updated with the VUSE the value lookup succeeded. */ tree vn_reference_lookup (tree op, tree vuse, vn_lookup_kind kind, - vn_reference_t *vnresult, bool tbaa_p) + vn_reference_t *vnresult, bool tbaa_p, tree *last_vuse_ptr) { vec operands; struct vn_reference_s vr1; @@ -2720,7 +2737,7 @@ vr1.operands = operands = valueize_shared_reference_ops_from_ref (op, &valuezied_anything); vr1.type = TREE_TYPE (op); - vr1.set = tbaa_p ? get_alias_set (op) : 0; + vr1.set = get_alias_set (op); vr1.hashcode = vn_reference_compute_hash (&vr1); if ((cst = fully_constant_vn_reference_p (&vr1))) return cst; @@ -2737,14 +2754,12 @@ || !ao_ref_init_from_vn_reference (&r, vr1.set, vr1.type, vr1.operands)) ao_ref_init (&r, op); - if (! tbaa_p) - r.ref_alias_set = r.base_alias_set = 0; - vn_walk_kind = kind; + vn_walk_cb_data data (&vr1, last_vuse_ptr, kind, tbaa_p); wvnresult = - (vn_reference_t)walk_non_aliased_vuses (&r, vr1.vuse, + (vn_reference_t)walk_non_aliased_vuses (&r, vr1.vuse, tbaa_p, vn_reference_lookup_2, vn_reference_lookup_3, - vuse_valueize, limit, &vr1); + vuse_valueize, limit, &data); gcc_checking_assert (vr1.operands == shared_lookup_references); if (wvnresult) { @@ -4099,10 +4114,8 @@ tree result; last_vuse = gimple_vuse (stmt); - last_vuse_ptr = &last_vuse; result = vn_reference_lookup (op, gimple_vuse (stmt), - default_vn_walk_kind, NULL, true); - last_vuse_ptr = NULL; + default_vn_walk_kind, NULL, true, &last_vuse); /* We handle type-punning through unions by value-numbering based on offset and size of the access. Be prepared to handle a Index: gcc/tree-ssa-sccvn.h =================================================================== --- a/src/gcc/tree-ssa-sccvn.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-ssa-sccvn.h (.../branches/gcc-9-branch) @@ -234,7 +234,8 @@ tree vn_reference_lookup_pieces (tree, alias_set_type, tree, vec , vn_reference_t *, vn_lookup_kind); -tree vn_reference_lookup (tree, tree, vn_lookup_kind, vn_reference_t *, bool); +tree vn_reference_lookup (tree, tree, vn_lookup_kind, vn_reference_t *, bool, + tree * = NULL); void vn_reference_lookup_call (gcall *, vn_reference_t *, vn_reference_t); vn_reference_t vn_reference_insert_pieces (tree, alias_set_type, tree, vec , Index: gcc/ChangeLog =================================================================== --- a/src/gcc/ChangeLog (.../tags/gcc_9_2_0_release) +++ b/src/gcc/ChangeLog (.../branches/gcc-9-branch) @@ -1,3 +1,1246 @@ +2019-11-09 John David Anglin + + Backport from mainline + 2019-11-07 John David Anglin + + * config/pa/pa.md (memory_barrier): Revise to use ldcw barriers. + Enhance comment. + (memory_barrier_coherent, memory_barrier_64, memory_barrier_32): New + insn patterns using ldcw instruction. + (memory_barrier): Remove insn pattern using sync instruction. + * config/pa/pa.opt (coherent-ldcw): New option. + (ordered): New option. + +2019-11-08 Jakub Jelinek + + PR c++/92384 + * function.c (assign_parm_setup_block, assign_parm_setup_stack): Don't + copy TYPE_EMPTY_P arguments from data->entry_parm to data->stack_parm + slot. + (assign_parms): For TREE_ADDRESSABLE parms with TYPE_EMPTY_P type + force creation of a unique data.stack_parm slot. + + Backported from mainline + 2019-10-31 Jakub Jelinek + + PR middle-end/92231 + * tree.h (fndecl_built_in_p): Use fndecl_built_in_p instead of + DECL_BUILT_IN in comment. Remove redundant ()s around return + argument. + * tree.c (free_lang_data_in_decl): Check if var is FUNCTION_DECL + before calling fndecl_built_in_p. + * gimple-fold.c (gimple_fold_stmt_to_constant_1): Check if + TREE_OPERAND (fn, 0) is a FUNCTION_DECL before calling + fndecl_built_in_p on it. + + PR c++/90947 + * tree.h (type_initializer_zero_p): Remove. + * tree.c (type_initializer_zero_p): Remove. + + 2019-10-29 Jakub Jelinek + + * doc/install.texi (--enable-offload-targets): Fix up a typo in the + example, use actual names of supported offload targets. + +2019-11-08 Eric Botcazou + + PR target/92095 + * config/sparc/sparc-protos.h (output_load_pcrel_sym): Declare. + * config/sparc/sparc.c (sparc_cannot_force_const_mem): Revert latest + change. + (got_helper_needed): New static variable. + (output_load_pcrel_sym): New function. + (get_pc_thunk_name): Remove after inlining... + (load_got_register): ...here. Rework the initialization of the GOT + register and of the GOT helper. + (save_local_or_in_reg_p): Test the REGNO of the GOT register. + (sparc_file_end): Test got_helper_needed to decide whether the GOT + helper must be emitted. Use output_asm_insn instead of fprintf. + (sparc_init_pic_reg): In PIC mode, always initialize the PIC register + if optimization is enabled. + * config/sparc/sparc.md (load_pcrel_sym): Emit the assembly + by calling output_load_pcrel_sym. + +2019-11-06 Ilya Leoshkevich + + Backport from mainline + * config/s390/s390.c (s390_canonicalize_comparison): Use XEXP + (*op0, 1) instead of XEXP (*op1, 0). + +2019-11-05 Segher Boessenkool + + Backport from trunk + 2019-10-24 Segher Boessenkool + + * config/rs6000/altivec.md (altivec_vavgu): Rename to... + (uavg3_ceil): ... This. + (altivec_vavgs): Rename to... + (avg3_ceil): ... This. + * config/rs6000/rs6000-builtin.def (VAVGUB, VAVGSB, VAVGUH, VAVGSH, + VAVGUW, VAVGSW): Adjust. + +2019-11-05 Segher Boessenkool + + Backport from trunk + 2019-10-26 Segher Boessenkool + + PR target/91289 + * config/rs6000/rs6000.c (rs6000_emit_allocate_stack): Don't add an + immediate to r0; use r11 instead. Save and restore r11 to r0 around + this. + +2019-11-05 Andreas Krebbel + + Backport from mainline + 2019-11-05 Andreas Krebbel + + * config/s390/s390.c (s390_vector_alignment): Check if the value + fits into uhwi before using it. + +2019-11-01 John David Anglin + + Backport from mainline + 2019-10-03 John David Anglin + + * config/pa/pa.c (pa_output_call): Remove 64-bit sibcall sequence. + (pa_attr_length_call): Adjust length for 64-bit plabel sequence. + +2019-11-01 John David Anglin + + Backport from mainline + 2019-10-03 John David Anglin + + * config/pa/pa.h (MAX_PCREL17F_OFFSET): Adjust. + +2019-10-30 Iain Sandoe + + Backport from mainline + 2019-10-13 Iain Sandoe + + * config/darwin.c (machopic_indirection_name): Rework the + function to emit linker-visible symbols only for indirections + in the data section. Clean up the code and update comments. + +2019-10-30 Iain Sandoe + + Backport from mainline + 2019-10-09 Iain Sandoe + + * config/darwin.c (darwin_override_options): Make the check for + Objective-C ABI version more specific for 64bit code. + + Backport from mainline + 2019-10-06 Iain Sandoe + + * config/darwin.c (darwin_override_options): Adjust objective-c + ABI version error messages to avoid punctuation and contracted + negations. + +2019-10-30 Iain Sandoe + + Backport from mainline + 2019-07-03 Iain Sandoe + + * config/darwin.h (REAL_LIBGCC_SPEC): Adjust for earlier Darwin. + (STARTFILE_SPEC): Split crt3 into a separate spec. + (DARWIN_EXTRA_SPECS): Add crt2 and crt3 spec. + (DARWIN_CRT2_SPEC): New. + (DARWIN_CRT3_SPEC): New. + (MIN_LD64_OMIT_STUBS): Revise to 62.1. + * config/rs6000/darwin.h (DARWIN_CRT2_SPEC): Revise conditions. + (DARWIN_CRT3_SPEC): New. + +2019-10-30 Iain Sandoe + + Backport from mainline + 2019-06-27 Iain Sandoe + + * config/rs6000/darwin.h (ENDFILE_SPEC): Correct whitespace in the + spec. + + Backport from mainline + 2019-06-25 Iain Sandoe + + * config/rs6000/darwin.h (ENDFILE_SPEC): New. + +2019-10-30 Iain Sandoe + + Backport from mainline + 2019-06-18 Iain Sandoe + + * config/darwin.c (darwin_emit_unwind_label): New. + (darwin_override_options): Set darwin_emit_unwind_label as needed. + +2019-10-30 Iain Sandoe + + Backport from mainline + 2019-08-13 Iain Sandoe + + * config/darwin.c (machopic_indirect_call_target): Rename symbol stub + flag. + (darwin_override_options): Likewise. + * config/darwin.h: Likewise. + * config/darwin.opt: Likewise. + * config/i386/i386.c (output_pic_addr_const): Likewise. + * config/rs6000/darwin.h: Likewise. + * config/rs6000/rs6000.c (rs6000_call_darwin_1): Likewise. + * config/i386/darwin.h (TARGET_MACHO_PICSYM_STUBS): Rename to ... + ... this TARGET_MACHO_SYMBOL_STUBS. + (FUNCTION_PROFILER):Likewise. + * config/i386/i386.h: Likewise. + + Backport from mainline + 2019-06-16 Iain Sandoe + + * config/darwin.c (machopic_indirect_call_target): Use renamed + darwin_picsymbol_stubs to decide on output. + (darwin_override_options): Handle darwin_picsymbol_stubs. + * config/darwin.h (MIN_LD64_OMIT_STUBS): New. + (LD64_VERSION): Revise default. + * config/darwin.opt: (mpic-symbol-stubs): New option. + (darwin_picsymbol_stubs): New variable. + * config/i386/darwin.h (TARGET_MACHO_BRANCH_ISLANDS): + rename to TARGET_MACHO_PICSYM_STUBS. + * config/i386/i386.c (output_pic_addr_const): Likewise. + * config/i386/i386.h Likewise. + * config/rs6000/darwin.h: Likewise. + * config/rs6000/rs6000.c (rs6000_call_darwin_1): Use renamed + darwin_picsymbol_stubs. + +2019-10-30 Dragan Mladjenovic + + Backport from mainline + 2019-07-09 Dragan Mladjenovic + + * cfgcleanup.c (old_insns_match_p): Check if used hard regs set is equal + for both call instructions. + +2019-10-30 Thomas Schwinge + + Backport from trunk: + + 2019-05-06 Richard Biener + + * dwarf2out.c (mem_loc_descriptor): Initialize int_mode. + +2019-10-28 Uroš Bizjak + + PR target/92225 + * config/i386/sse.md (REDUC_SSE_SMINMAX_MODE): Use TARGET_SSE4_2 + condition for V2DImode. + +2019-10-28 Ilya Leoshkevich + + Backport from mainline + PR rtl-optimization/92007 + * cfgcleanup.c (thread_jump): Add an assertion that we don't + call it after reload if hot/cold partitioning has been done. + (class pass_postreload_jump): Rename to + pass_jump_after_combine. + (make_pass_postreload_jump): Rename to + make_pass_jump_after_combine. + * passes.def(pass_postreload_jump): Move before reload, rename + to pass_jump_after_combine. + * tree-pass.h (make_pass_postreload_jump): Rename to + make_pass_jump_after_combine. + +2019-10-28 Peter Bergner + Jiufu Guo + + PR target/70010 + * config/rs6000/rs6000.c (rs6000_can_inline_p): Prohibit inlining if + the callee explicitly disables some isa_flags the caller is using. + +2019-10-27 Iain Sandoe + + Backport from mainline + 2019-10-17 Iain Sandoe + + PR target/65342 + * config/rs6000/darwin.md (movdi_low, movsi_low_st): Delete. + (movdi_low_st): Delete. + * config/rs6000/rs6000.c + (darwin_rs6000_legitimate_lo_sum_const_p): New. + (mem_operand_gpr): Validate Mach-O LO_SUM cases separately. + * config/rs6000/rs6000.md (movsi_low): Delete. + +2019-10-27 Iain Sandoe + + Backport from mainline + 2019-10-12 Iain Sandoe + + PR target/67183 + * config/darwin.c (machopic_indirection): New field to flag + non-lazy-symbol-pointers in the data section. + (machopic_indirection_name): Compute if an indirection should + appear in the data section. + (machopic_output_data_section_indirection): New callback split + from machopic_output_indirection. + (machopic_output_stub_indirection): Likewise. + (machopic_output_indirection): Retain the code for non-lazy + symbol pointers in their regular section. + (machopic_finish): Use the new callbacks to order the indirection + output. + +2019-10-27 Iain Sandoe + + Backport from mainline + 2019-10-12 Iain Sandoe + + * config/darwin-protos.h (machopic_finish): Delete. + * config/darwin.c (machopic_finish): Make static. + + Backport from mainline + 2019-10-09 Iain Sandoe + + * config/darwin.c (machopic_indirect_data_reference): Set flag to + indicate that the new symbol is an indirection. + (machopic_indirect_call_target): Likewise. + * config/darwin.h (MACHO_SYMBOL_FLAG_INDIRECTION): New. + (MACHO_SYMBOL_INDIRECTION_P): New. + (MACHO_SYMBOL_FLAG_STATIC): Adjust bit number. + + Backport from mainline + 2019-10-08 Iain Sandoe + + * config/darwin.c (machopic_indirect_data_reference): Check for + required indirections before making direct access to defined + values. + (machopic_output_indirection): Place the indirected pointes for + required indirections into the non-lazy symbol pointers section. + (darwin_encode_section_info): + * config/darwin.h (MACHO_SYMBOL_FLAG_MUST_INDIRECT): New. + (MACHO_SYMBOL_MUST_INDIRECT_P): New. + + Backport from mainline + 2019-10-07 Iain Sandoe + + * config/darwin.c (machopic_output_indirection): Don't put + hidden symbol indirections into the .data section, use the + non-lazy symbol pointers section as normal. + (darwin_encode_section_info): Record if a symbol is hidden. + * config/darwin.h (MACHO_SYMBOL_FLAG_HIDDEN_VIS): New. + (MACHO_SYMBOL_HIDDEN_VIS_P): New. + + Backport from mainline + 2019-10-07 Iain Sandoe + + * config/darwin.c (machopic_symbol_defined_p): Use symbol flag + predicates instead of accessing bits directly. + (machopic_indirect_call_target): Likewise. + (machopic_output_indirection): Likewise. + (darwin_encode_section_info): Improve description. Use renamed + symbol flags. Use predicate macros for variables and functions. + * config/darwin.h: + Rename MACHO_SYMBOL_VARIABLE to MACHO_SYMBOL_FLAG_VARIABLE. + Rename MACHO_SYMBOL_DEFINED to MACHO_SYMBOL_FLAG_DEFINED. + Rename MACHO_SYMBOL_STATIC to MACHO_SYMBOL_FLAG_STATIC. + (MACHO_SYMBOL_VARIABLE_P): New. + (MACHO_SYMBOL_DEFINED_P):New. + (MACHO_SYMBOL_STATIC_P): New. + * config/i386/darwin.h (MACHO_SYMBOL_FLAG_VARIABLE): Delete. + (SYMBOL_FLAG_SUBT_DEP): New. + * config/rs6000/darwin.h (SYMBOL_FLAG_SUBT_DEP): New. + +2019-10-25 Jan Hubicka + + Backport from mainline + 2019-10-11 Jan Hubicka + * gimple-streamer-out.c (output_gimple_stmt): Add explicit function + parameter. + * lto-streamer-out.c: Include tree-dfa.h. + (output_cfg): Do not use cfun. + (lto_prepare_function_for_streaming): New. + (output_function): Do not push cfun; do not initialize loop optimizer. + * lto-streamer.h (lto_prepare_function_for_streaming): Declare. + * passes.c (ipa_write_summaries): Use it. + (ipa_write_optimization_summaries): Do not modify bodies. + * tree-dfa.c (renumber_gimple_stmt_uids): Add function parameter. + * tree.dfa.h (renumber_gimple_stmt_uids): Update prototype. + * tree-ssa-dse.c (pass_dse::execute): Update use of + renumber_gimple_stmt_uids. + * tree-ssa-math-opts.c (pass_optimize_widening_mul::execute): Likewise. + + 2019-10-12 Jan Hubicka + * lto-streamer-out.c (collect_block_tree_leafs): Renumber statements + so non-virutal are before virutals. + (output_function): Avoid body modifications. + +2019-10-25 Richard Earnshaw + + Backport from mainline + 2019-05-08 Mihail Ionescu + Richard Earnshaw + PR target/88167 + * config/arm/arm.c (thumb1_prologue_unused_call_clobbered_lo_regs): New + function. + (thumb1_epilogue_unused_call_clobbered_lo_regs): New function. + (thumb1_compute_save_core_reg_mask): Don't force a spare work + register if both the epilogue and prologue can use call-clobbered + regs. + (thumb1_unexpanded_epilogue): Use + thumb1_epilogue_unused_call_clobbered_lo_regs. Reverse the logic for + picking temporaries for restoring high regs to match that of the + prologue where possible. + (thumb1_expand_prologue): Add any usable call-clobbered low registers to + the list of work registers. Detect if the return address is still live + at the end of the prologue and avoid using it for a work register if so. + If the return address is not live, add LR to the list of pushable regs + after the first pass. + +2019-10-25 Jan Hubicka + + Backport from mainline + 2019-10-24 Jan Hubicka + * symbols-summary.h (fast_function_summary::release, + fast_call_summary::release): Free m_vector. + +2019-10-25 Jan Hubicka + + Backport from mainline + + 2019-10-18 Jakub Jelinek + PR middle-end/92153 + * ggc-page.c (release_pages): Read g->alloc_size before free rather + than after it. + + 2019-10-11 Jan Hubicka + * ggc-page.c (release_pages): Output statistics when !quiet_flag. + (ggc_collect): Dump later to not interfere with release_page dump. + (ggc_trim): New function. + * ggc-none.c (ggc_trim): New. + * ggc.h (ggc_trim): Declare. + +2019-10-24 Mihail Ionescu + + Backport from mainline + 2019-10-18 Andre Vieira + + * config/arm/t-multilib: Add new multilib variants and new + mappings. + +2019-10-24 Iain Sandoe + + Backport from mainline + 2019-10-23 Iain Sandoe + * config/rs6000/darwin.h (ASM_OUTPUT_MAX_SKIP_ALIGN): Guard + against out of range max skip or log values. + +2019-10-23 Peter Bergner + + Backport from mainline + 2019-10-08 Tulio Magno Quites Machado Filho + + * config.gcc: Move -L usage from LINK_OS_EXTRA_SPEC32 and + LINK_OS_EXTRA_SPEC64 to MD_STARTFILE_PREFIX and + MD_STARTFILE_PREFIX_1 when using --with-advance-toolchain. + +2019-10-23 Martin Liska + + Backport from mainline + 2019-09-26 Martin Liska + + PR tree-optimization/91885 + * tree-vectorizer.c (try_vectorize_loop_1): + Add TODO_update_ssa_only_virtuals similarly to what slp + pass does. + +2019-10-23 Eric Botcazou + + PR tree-optimization/92131 + * tree-vrp.c (extract_range_from_plus_minus_expr): If the resulting + range would be symbolic, drop to varying for any explicit overflow + in the constant part or if neither range is a singleton. + +2019-10-23 Richard Biener + + Backport from mainline + 2019-10-17 Richard Biener + + PR debug/91887 + * dwarf2out.c (gen_formal_parameter_die): Also try to match + context_die against a DW_TAG_GNU_formal_parameter_pack parent. + +2019-10-21 Jakub Jelinek + + Backported from mainline + 2019-10-17 Jakub Jelinek + + PR tree-optimization/92056 + * tree-object-size.c (cond_expr_object_size): Return early if then_ + processing resulted in unknown size. + + 2019-10-05 Jakub Jelinek + + PR tree-optimization/91734 + * generic-match-head.c: Include fold-const-call.h. + * match.pd (sqrt(x) cmp c): Check the boundary value and + in case inexact computation of c*c affects comparison of the boundary, + turn LT_EXPR into LE_EXPR, GE_EXPR into GT_EXPR, LE_EXPR into LT_EXPR + or GT_EXPR into GE_EXPR. Punt for sqrt comparisons against NaN and + for -frounding-math. For c2, try the next smaller or larger floating + point constant depending on comparison code and if it has the same + sqrt as c2, use it instead of c2. + + 2019-09-29 Jakub Jelinek + + PR bootstrap/90543 + * optc-save-gen.awk: Fix up printing string option differences. + + 2019-09-27 Jakub Jelinek + + PR middle-end/91920 + * gimplify.c (omp_default_clause): Predetermine DECL_IN_CONSTANT_POOL + variables as shared. + + 2019-09-11 Jakub Jelinek + + PR tree-optimization/91723 + * tree-vect-stmts.c (vectorizable_call): Use types_compatible_p check + instead of pointer equality when checking if argument vectypes are + the same. + + 2019-09-07 Jakub Jelinek + + PR tree-optimization/91665 + * tree-vect-loop.c (vectorizable_reduction): Punt if base has type + incompatible with the type of PHI result. + + 2019-09-06 Jakub Jelinek + + * function.c (assign_parm_find_data_types): Use RECORD_OR_UNION_TYPE_P + before testing TYPE_TRANSPARENT_AGGR. + * calls.c (initialize_argument_information, load_register_parameters): + Likewise. + + 2019-09-05 Jakub Jelinek + + PR middle-end/91001 + PR middle-end/91105 + PR middle-end/91106 + * calls.c (load_register_parameters): For TYPE_TRANSPARENT_AGGR + types, use type of their first field instead of type of + args[i].tree_value. + + 2019-09-02 Jakub Jelinek + + PR go/91617 + * fold-const.c (range_check_type): For enumeral and boolean + type, pass 1 to type_for_size langhook instead of + TYPE_UNSIGNED (etype). Return unsigned_type_for result whenever + etype isn't TYPE_UNSIGNED INTEGER_TYPE. + (build_range_check): Don't call unsigned_type_for for pointer types. + * match.pd (X / C1 op C2): Don't call unsigned_type_for on + range_check_type result. + + 2019-09-01 Jakub Jelinek + + PR middle-end/91623 + * optabs.c (expand_vec_cond_expr): If op0 is a VECTOR_CST and only + EQ_EXPR/NE_EXPR is supported, verify that op0 only contains + zeros or negative elements and use NE_EXPR instead of LT_EXPR against + zero vector. + + PR lto/91572 + * tree.c (find_decls_types_in_node): Also walk TREE_PURPOSE of + GIMPLE_ASM TREE_LIST operands. + + 2019-08-29 Jakub Jelinek + + PR tree-optimization/91351 + * tree-cfg.c (generate_range_test): Use range_check_type instead of + unsigned_type_for. + * tree-cfgcleanup.c (convert_single_case_switch): Punt if + range_check_type returns NULL. + * tree-switch-conversion.c (switch_conversion::build_one_array): + Use range_check_type instead of unsigned_type_for, don't perform + linear opt if it returns NULL. + (bit_test_cluster::find_bit_tests): Formatting fix. + (bit_test_cluster::emit): Use range_check_type instead of + unsigned_type_for. + (switch_decision_tree::try_switch_expansion): Punt if range_check_type + returns NULL. + +2019-10-18 Georg-Johann Lay + + Backport from 2019-10-18 trunk r277143. + + PR target/86040 + * config/avr/avr.c (avr_out_lpm): Do not shortcut-return. + +2019-10-18 Iain Sandoe + + Backport from mainline + 2019-10-05 Iain Sandoe + + PR target/59888 + * config/darwin.c (darwin_rodata_section): Add relocation flag, + choose const_data section for constants with relocations. + (machopic_select_section): Pass relocation flag to + darwin_rodata_section (). + +2019-10-18 Iain Sandoe + + Backport from mainline + 2019-09-21 Iain Sandoe + + * config/darwin.c (machopic_legitimize_pic_address): Check + for lra, rather than reload. + +2019-10-17 John David Anglin + + * config/pa/pa.c (pa_output_indirect_call): Fix typos in last change. + +2019-10-17 Richard Earnshaw + + Backport from mainline + 2019-05-03 Richard Earnshaw + + PR target/89400 + * config/arm/arm.md (unaligned_loadsi): Add variant for thumb1. + Restrict 'all' variant to 32-bit configurations. + (unaligned_loadhiu): Likewise. + (unaligned_storehi): Likewise. + (unaligned_storesi): Likewise. + (unaligned_loadhis): Disable when compiling for thumb1. + +2019-10-16 Iain Sandoe + + Backport from mainline + 2019-10-03 Iain Sandoe + + PR target/87243 + * config/darwin-driver.c (maybe_get_sysroot_from_sdkroot): New. + (darwin_driver_init): Use the sysroot provided by SDKROOT when that + is available and the user has not set one on the command line. + +2019-10-16 Iain Sandoe + + Backport from mainline + 2019-07-03 Iain Sandoe + + * config/darwin.h (DRIVER_SELF_SPECS): Remove the linker cases. + (RDYNAMIC): Rename to, DARWIN_RDYNAMIC. + (DARWIN_PIE_SPEC, DARWIN_NOPIE_SPEC): Adjust to remove the Xlinker + clauses. + (LINK_COMMAND_SPEC_A): Add DARWIN_RDYNAMIC, DARWIN_PIE_SPEC and + DARWIN_NOPIE_SPEC. + + Backport from mainline + 2019-06-19 Iain Sandoe + + * config/darwin.h (DRIVER_SELF_SPECS): Add RDYNAMIC, DARWIN_PIE_SPEC + and DARWIN_NOPIE_SPEC. + (RDYNAMIC): New, modified from DARWIN_EXPORT_DYNAMIC. + (DARWIN_PIE_SPEC): Collate from darwin.h and darwin9.h. + (DARWIN_NOPIE_SPEC): Collate from darwin10.h. + (DARWIN_NOCOMPACT_UNWIND): New from darwin10.h + (DARWIN_EXPORT_DYNAMIC): Delete. + * config/darwin10.h (LINK_GCC_C_SEQUENCE_SPEC): Move no_compact_unwind + and pie options processing to darwin.h. + * config/darwin9.h (DARWIN_PIE_SPEC): Move pie processing to darwin.h + +2019-10-16 Richard Biener + + Backport from mainline + 2019-10-04 Richard Biener + + PR lto/91968 + * tree.c (find_decls_types_r): Do not remove LABEL_DECLs from + BLOCK_VARS. + + 2019-09-19 Richard Biener + + PR tree-optimization/91812 + * tree-ssa-phiprop.c (propagate_with_phi): Do not replace + volatile loads. + + 2019-09-17 Richard Biener + + PR debug/91772 + * dwarf2out.c (dwarf2out_late_global_decl): If early dwarf + was missing generate locations only once. + + 2019-09-17 Richard Biener + + PR tree-optimization/91790 + * tree-vect-stmts.c (vectorizable_load): For BB vectorization + use the correct DR for setting up realignment. + +2019-10-14 Will Schmidt + + Backport from trunk + 2019-09-26 Will Schmidt + + * config/rs6000/rs6000-builtin.def: (LVSL, LVSR, LVEBX, LVEHX, + LVEWX, LVXL, LVXL_V2DF, LVXL_V2DI, LVXL_V4SF, LVXL_V4SI, LVXL_V8HI, + LVXL_V16QI, LVX, LVX_V1TI, LVX_V2DF, LVX_V2DI, LVX_V4SF, LVX_V4SI, + LVX_V8HI, LVX_V16QI, LVLX, LVLXL, LVRX, LVRXL, LXSDX, LXVD2X_V1TI, + LXVD2X_V2DF, LXVD2X_V2DI, LXVDSX, LXVW4X_V4SF, LXVW4X_V4SI, + LXVW4X_V8HI, LXVW4X_V16QI, LD_ELEMREV_V1TI, LD_ELEMREV_V2DF, + LD_ELEMREV_V2DI, LD_ELEMREV_V4SF, LD_ELEMREV_V4SI, LD_ELEMREV_V8HI, + LD_ELEMREV_V16QI): Use the PURE attribute. + +2019-10-10 Uroš Bizjak + + PR target/92022 + * config/alpha/alpha.c (alpha_handle_trap_shadows): Skip DEBUG_INSN. + +2019-10-10 Oleg Endo + + Backport from mainline + 2019-10-10 Oleg Endo + + PR target/88630 + * config/sh/sh.h (TARGET_FPU_SH4_300): New macro. + * config/sh/sh.c (sh_option_override): Enable fsca and fsrra insns + also for TARGET_FPU_SH4_300. + (sh_emit_mode_set): Check for TARGET_FPU_SH4_300 instead of + TARGET_SH4_300. + * config/sh/sh.md (toggle_pr): Add TARGET_FPU_SH4_300 condition. + (negsf2): Expand to either negsf2_fpscr or negsf2_no_fpscr. + (*negsf2_i): Split into ... + (negsf2_fpscr, negsf2_no_fpscr): ... these new patterns. + (abssf2): Expand to either abssf2_fpsc or abssf2_no_fpsc. + (**abssf2_i): Split into ... + (abssf2_fpscr, abssf2_no_fpscr): ... these new patterns. + (negdf2): Expand to either negdf2_fpscr or negdf2_no_fpscr. + (*negdf2_i): Split into ... + (negdf2_fpscr, negdf2_no_fpscr): ... these new patterns. + (absdf2): Expand to either absdf2_fpscr or absdf2_no_fpsc. + (**abssf2_i): Split into ... + (absdf2_fpscr, absdf2_no_fpscr): ... these new patterns. + +2019-10-10 Andreas Krebbel + + Backport from mainline + 2019-10-10 Andreas Krebbel + + * common/config/s390/s390-common.c (PF_ARCH13): Rename to... + (PF_Z15): ... this. + * config.gcc: Add z15 as option for --with-arch and --with-tune + configure switches. + * config/s390/s390-c.c (s390_resolve_overloaded_builtin): Add + error reporting for unsupported builtins. + * config/s390/s390-opts.h (enum processor_type): Rename + PROCESSOR_8561_ARCH13 to PROCESSOR_8561_Z15. + * config/s390/8561.md: Rename arch13 to z15 throughout the file. + * config/s390/driver-native.c (s390_host_detect_local_cpu): + Likewise. + * config/s390/s390-builtins.def: Likewise. + * config/s390/s390.c (processor_table): Add z15 as option and keep arch13 as alternative. + (s390_expand_builtin): Add missing check for unsupported builtins. + (s390_canonicalize_comparison): Rename TARGET_ARCH13 to TARGET_Z15. + (s390_rtx_costs): Likewise. + (s390_get_sched_attrmask): Rename arch13 to z15. + (s390_get_unit_mask): Likewise. + (s390_is_fpd): Likewise. + (s390_is_fxd): Likewise. + * config/s390/s390.h (enum processor_flags): Likewise. + * config/s390/s390.md: Likewise. + * config/s390/vector.md: Likewise. + * config/s390/vx-builtins.md: Likewise. + * config/s390/s390.opt: Add z15 to processor_type value. + +2019-10-07 Bill Schmidt + + Backport from mainline + 2019-10-01 Bill Schmidt + + PR target/91275 + * config/rs6000/rs6000-p8swap.c (rtx_is_swappable_p): Don't swap + vpmsumd. + +2019-10-05 Andrea Corallo + + Backport from mainline + 2019-10-03 Andrea Corallo + * gcc/ipa-cp.c (ipa_cp_c_finalize): Release ipcp_transformation_sum + when finished. + * ipa-prop.c (ipcp_free_transformation_sum): New function. + * ipa-prop.h (ipcp_free_transformation_sum): Add declaration. + +2019-10-04 Dragan Mladjenovic + + Backport from mainline + 2019-10-03 Dragan Mladjenovic + + PR target/91769 + * config/mips/mips.c (mips_split_move): Use reg_overlap_mentioned_p + instead of REGNO equality check on addr.reg. + +2019-10-04 Dragan Mladjenovic + + Backport from mainline + 2019-07-07 Richard Sandiford + + * config/mips/mips.c (mips_split_move): Zero-initialize addr + and check whether addr.reg is nonnull before using it. + +2019-10-02 Bernd Edlinger + + Backport from mainline + + 2019-09-13 Bernd Edlinger + + PR fortran/91716 + * trans-array.c (gfc_conv_array_initializer): Always assign the + array type of the field to the string constant. + +2019-10-01 Oleg Endo + + Backport from mainline + + 2019-10-01 Oleg Endo + + PR target/88562 + * config/sh/sh.c (sh_extending_set_of_reg::use_as_extended_reg): Use + sh_check_add_incdec_notes to preserve REG_INC notes when replacing + a memory access insn. + + +2019-10-01 Kyrylo Tkachov + + Backport from mainline + 2019-09-24 Kyrylo Tkachov + + * config/aarch64/aarch64.md (mov): Don't call + aarch64_split_dimode_const_store on volatile MEM. + +2019-10-01 Kyrylo Tkachov + + Backport from mainline + 2019-09-26 Matt Turner + + PR driver/69471 + * config/aarch64/aarch64.opt (march=): Add Negative(march=). + (mtune=): Add Negative(mtune=). + (mcpu=): Add Negative(mcpu=). + * config/arm/arm.opt: Likewise. + +2019-09-28 Oleg Endo + + Backport from mainline + 2019-09-28 Oleg Endo + + PR target/86805 + * config/sh/sh.c (TARGET_HAVE_SPECULATION_SAFE_VALUE): Define. + +2019-09-28 Oleg Endo + + Backport from mainline + 2019-09-28 Oleg Endo + + PR target/80672 + * config/sh/sh.c (parse_validate_atomic_model_option): Use + std::string::compare instead of std::string::find. + +2019-09-25 Kyrylo Tkachov + + Backport from mainline + 2019-08-22 Kyrylo Tkachov + + * config/arm/arm_acle.h: Use arch=armv8-a+crc+simd pragma for CRC32 + intrinsics if __ARM_FP. + Use __ARM_FEATURE_CRC32 ifdef guard. + +2019-09-23 Max Filippov + + Backport from mainline + 2019-06-18 Max Filippov + + * config/xtensa/xtensa.c (xtensa_expand_prologue): Add stack + pointer adjustment for the case of no callee-saved registers and + stack frame bigger than 128 bytes. + +2019-09-22 Iain Sandoe + + Backport from mainline + 2019-06-16 Iain Sandoe + + * config/darwin.opt (prebind, noprebind, seglinkedit, + noseglinkedit): Add RejectNegative. + + Backport from mainline + 2019-06-14 Iain Sandoe + + * config/darwin.opt: Add RejectNegative where needed, reorder + and add minimal functional descriptions. + +2019-09-20 John David Anglin + + * config/pa/pa.c (pa_trampoline_init): Remove spurious extended + character. + +2019-09-20 Andreas Krebbel + + Backport from mainline + 2019-06-06 Andreas Krebbel + + PR rtl-optimization/88751 + * ira.c (ira): Use the number of the actually referenced registers + when calculating the threshold. + +2019-09-20 Kito Cheng + + Backport from mainline + 2019-09-18 Jim Wilson + + PR target/91683 + * config/riscv/riscv-protos.h (riscv_split_symbol): New bool parameter. + (riscv_move_integer): Likewise. + * config/riscv/riscv.c (riscv_split_integer): Pass FALSE for new + riscv_move_integer arg. + (riscv_legitimize_move): Likewise. + (riscv_force_temporary): New parameter in_splitter. Don't call + force_reg if true. + (riscv_unspec_offset_high): Pass FALSE for new riscv_force_temporary + arg. + (riscv_add_offset): Likewise. + (riscv_split_symbol): New parameter in_splitter. Pass to + riscv_force_temporary. + (riscv_legitimize_address): Pass FALSE for new riscv_split_symbol + arg. + (riscv_move_integer): New parameter in_splitter. New local + can_create_psuedo. Don't call riscv_split_integer or force_reg when + in_splitter TRUE. + (riscv_legitimize_const_move): Pass FALSE for new riscv_move_integer, + riscv_split_symbol, and riscv_force_temporary args. + * config/riscv/riscv.md (low+1): Pass TRUE for new + riscv_move_integer arg. + (low+2): Pass TRUE for new riscv_split_symbol arg. + +2019-09-20 Eric Botcazou + + PR target/91269 + * config/sparc/sparc.h (HARD_REGNO_CALLER_SAVE_MODE): Define. + +2019-09-19 Kito Cheng + + Backport from mainline + 2019-09-05 Jakub Jelinek + Jim Wilson + + PR target/91635 + * config/riscv/riscv.md (zero_extendsidi2, zero_extendhi2, + extend2): Don't split if + paradoxical_subreg_p (operands[0]). + (*lshrsi3_zero_extend_3+1, *lshrsi3_zero_extend_3+2): Add clobber and + use as intermediate value. + +2019-09-11 Eric Botcazou + + PR rtl-optimization/89795 + * rtlanal.c (nonzero_bits1) : Do not propagate results from + inner REGs to paradoxical SUBREGs if WORD_REGISTER_OPERATIONS is set. + +2019-09-09 Jakub Jelinek + + PR target/87853 + * config/i386/emmintrin.h (_mm_cmpeq_epi8): Use casts to __v16qi + instead of __v16qs. + + PR target/91704 + * config/i386/avxintrin.h (__v32qs): New typedef. + * config/i386/avx2intrin.h (_mm256_cmpgt_epi8): Use casts to __v32qs + instead of __v32qi. + +2019-09-04 Wilco Dijkstra + + Backport from mainline + 2019-08-13 Wilco Dijkstra + + PR target/81800 + * gcc/config/aarch64/aarch64.md (lrint): Disable lrint pattern if GPF + operand is larger than a long int. + +2019-09-03 Jakub Jelinek + + PR tree-optimization/91597 + * tree-vrp.c (extract_range_from_binary_expr): Remove unsafe + BIT_AND_EXPR optimization for pointers, even if both operand + ranges don't include NULL, the result can be NULL. + +2019-09-02 Martin Liska + + Backport from mainline + 2019-09-02 Martin Liska + + PR gcov-profile/91601 + * gcov.c (path_contains_zero_cycle_arc): Rename to ... + (path_contains_zero_or_negative_cycle_arc): ... this and handle + also negative edges. + (circuit): Handle also negative edges as they can happen + in some situations. + +2019-09-01 Eric Botcazou + + PR target/91472 + * config/sparc/sparc.c (sparc_cannot_force_const_mem): Return true + during LRA/reload in PIC mode if the PIC register hasn't been used yet. + (sparc_pic_register_p): Test reload_in_progress for consistency's sake. + +2019-08-31 Iain Sandoe + + Backport from mainline + 2019-08-23 Iain Sandoe + + PR pch/61250 + * ggc-page.c (ggc_pch_read): Read the ggc_pch_ondisk structure + and issue any diagnostics needed before collecting the pre-PCH + state. + +2019-08-30 Segher Boessenkool + + Backport from trunk + 2019-08-22 Segher Boessenkool + + PR target/91481 + * config/rs6000/rs6000.md (unspec): Delete UNSPEC_DARN, UNSPEC_DARN_32, + and UNSPEC_DARN_RAW. + (unspecv): New enumerator values UNSPECV_DARN, UNSPECV_DARN_32, and + UNSPECV_DARN_RAW. + (darn_32): Use an unspec_volatile, and UNSPECV_DARN_32. + (darn_raw): Use an unspec_volatile, and UNSPECV_DARN_RAW. + (darn): Use an unspec_volatile, and UNSPECV_DARN. + +2019-08-30 Segher Boessenkool + + Backport from trunk + 2019-08-22 Segher Boessenkool + + * config/rs6000/altivec.md (unspec): Delete UNSPEC_DARN, UNSPEC_DARN_32, + UNSPEC_DARN_RAW, UNSPEC_CMPRB, UNSPEC_CMPRB2, UNSPEC_CMPEQB; move to... + * config/rs6000/rs6000.md (unspec): ... here. + * config/rs6000/altivec.md (darn_32, darn_raw, darn, cmprb, + *cmprb_internal, setb_signed, setb_unsigned, cmprb2, *cmprb2_internal, + cmpeqb, *cmpeqb_internal): Delete, move to... + * config/rs6000/rs6000.md (darn_32, darn_raw, darn, cmprb, + *cmprb_internal, setb_signed, setb_unsigned, cmprb2, *cmprb2_internal, + cmpeqb, *cmpeqb_internal): ... here. + +2019-08-30 Richard Biener + + Backport from mainline + 2019-04-29 Richard Biener + + PR tree-optimization/90278 + * tree-ssa-forwprop.c (pass_forwprop::execute): Transfer/clean + EH on comparison simplification. + +2019-08-29 Richard Biener + + PR tree-optimization/91568 + * tree-vectorizer.h (_slp_tree::max_nunits): Add. + (vect_update_max_nunits): Add overload for poly_uint64. + * tree-vect-slp.c (vect_create_new_slp_node): Initialize it. + (vect_build_slp_tree): Record max_nunits into the subtree + and merge it upwards. + (vect_print_slp_tree): Print max_nunits. + +2019-08-28 Richard Biener + + Backport from mainline + 2019-05-27 Richard Biener + + PR tree-optimization/90637 + * tree-ssa-sink.c (statement_sink_location): Honor the + computed sink location for single-uses. + +2019-08-26 Xiong Hu Luo + + Backport r274411 from trunk to gcc-9-branch. + 2019-08-14 Xiong Hu Luo + + PR lto/91287 + * builtins.c (builtin_with_linkage_p): New function. + * builtins.h (builtin_with_linkage_p): New function. + * symtab.c (write_symbol): Remove redundant assert. + * lto-streamer-out.c (symtab_node::output_to_lto_symbol_table_p): + Remove FIXME and use builtin_with_linkage_p. + +2019-08-25 Uroš Bizjak + + PR target/91533 + Backport from mainline + 2019-06-30 Uroš Bizjak + + * config/i386/sse.md (ssse3_abs2): Rename from abs2. + * config/i386/i386-builtin.def (__builtin_ia32_pabsb): + Use CODE_FOR_ssse3_absv8qi2. + (__builtin_ia32_pabsw): Use CODE_FOR_ssse3_absv4hi2. + (__builtin_ia32_pabsd): Use CODE_FOR_ssse3_absv2si2. + +2019-08-23 Mihailo Stojanovic + + Backport from mainline + 2019-08-23 Mihailo Stojanovic + + * config/mips/mips.md (mips_get_fcsr, *mips_get_fcsr): Use SI + machine mode for unspec_volatile operand. + +2019-08-23 Martin Liska + + PR ipa/91508 + Backport from mainline + 2019-08-15 Martin Liska + + PR ipa/91438 + * cgraph.c (cgraph_node::remove): When setting + n->origin = NULL for all nested functions, reset + also next_nested. + +2019-08-23 Martin Liska + + Backport from mainline + 2019-08-15 Martin Liska + + * cgraph.c (cgraph_node::verify_node): Verify origin, nested + and next_nested. + +2019-08-23 Martin Liska + + Backport from mainline + 2019-08-15 Martin Liska + + PR ipa/91404 + * passes.c (order): Remove. + (uid_hash_t): Likewise). + (remove_cgraph_node_from_order): Remove from set + of pointers (cgraph_node *). + (insert_cgraph_node_to_order): New. + (duplicate_cgraph_node_to_order): New. + (do_per_function_toporder): Register all 3 cgraph hooks. + Skip removed_nodes now as we know about all of them. + +2019-08-21 Iain Sandoe + + Backport from mainline + 2019-08-18 Iain Sandoe + + * config/rs6000/darwin.h (TARGET_OS_CPP_BUILTINS): Add asserts + for cpu and machine. Factor 64/32b builtins. + +2019-08-20 Eric Botcazou + + PR rtl-optimization/91347 + * dse.c (scan_insn): Call add_wild_read for non-const/memset tail calls + before reload if HARD_FRAME_POINTER_IS_ARG_POINTER. + +2019-08-19 Richard Earnshaw + + Backport from mainline + 2019-09-09 Richard Earnshaw + + PR target/91386 + * config/aarch64/aarch64.c (aarch64_gen_adjusted_ldpstp): Use copy_rtx + to preserve the contents of the original insns. + +2019-08-16 Bernd Edlinger + + Backport from mainline + 2019-08-16 Bernd Edlinger + + PR tree-optimization/91109 + * lra-int.h (lra_need_for_scratch_reg_p): Declare. + * lra.c (lra): Use lra_need_for_scratch_reg_p. + * lra-spills.c (lra_need_for_scratch_reg_p): New function. + + 2019-08-07 Bernd Edlinger + + PR tree-optimization/91109 + * lra-remat.c (update_scratch_ops): Remove assignment of the + hard register. + +2019-08-15 Steve Ellcey + + Backport from mainline + 2019-08-02 Steve Ellcey + + * omp-simd-clone.c (simd_clone_adjust_return_type): Remove call to + build_distinct_type_copy. + (simd_clone_adjust_argument_types): Ditto. + (simd_clone_adjust): Call build_distinct_type_copy here. + (expand_simd_clones): Ditto. + +2019-08-15 Richard Biener + + PR tree-optimization/91445 + Backport from mainline + 2019-07-05 Richard Biener + + PR tree-optimization/91091 + * tree-ssa-alias.h (get_continuation_for_phi): Add tbaa_p parameter. + (walk_non_aliased_vuses): Likewise. + * tree-ssa-alias.c (maybe_skip_until): Pass down tbaa_p. + (get_continuation_for_phi): New tbaa_p parameter and pass + it down. + (walk_non_aliased_vuses): Likewise. + * tree-ssa-pre.c (translate_vuse_through_block): Likewise. + * tree-ssa-scopedtables.c (avail_exprs_stack::lookup_avail_expr): + Likewise. + * tree-ssa-sccvn.c (struct vn_walk_cb_data): Add tbaa_p flag. + (vn_reference_lookup_3): Handle and pass down tbaa_p flag. + (vn_reference_lookup_pieces): Adjust. + (vn_reference_lookup): Remove alias-set altering, instead pass + down false as tbaa_p. + + 2019-07-04 Richard Biener + + * tree-ssa-sccvn.h (vn_reference_lookup): Add last_vuse_ptr + argument. + * tree-ssa-sccvn.c (last_vuse_ptr, vn_walk_kind): Move + globals into... + (struct vn_walk_cb_data): New callback data struct. + (vn_reference_lookup_2): Adjust. + (vn_reference_lookup_3): Likewise. + (vn_reference_lookup_pieces): Likewise. + (vn_reference_lookup): Likewise, get last_vuse_ptr argument. + (visit_reference_op_load): Adjust. + +2019-08-14 Martin Sebor + + Backport from mainline + + 2019-08-01 Martin Sebor + + PR c++/90947 + * tree.c (type_initializer_zero_p): Define. + * tree.h (type_initializer_zero_p): New function. + + 2019-08-05 Martin Sebor + + * doc/extend.texi (Common Variable Attributes): Document alias + attribute. + +2019-08-12 Richard Biener + + Backport from mainline + 2019-08-12 Richard Biener + + PR lto/91375 + * tree.c (free_lang_data_in_type): Do not free TYPE_BINFO dependent on + flag_devirtualize. + + 2019-08-12 Richard Biener + + PR driver/91130 + * lto-wrapper.c (get_options_from_collect_gcc_options): Remove + lang_mask option, always use CL_DRIVER. + (find_and_merge_options): Adjust. + (run_gcc): Likewise. + + 2019-08-07 Richard Earnshaw + + PR driver/91130 + * lto-wrapper.c (find_and_merge_options): Use CL_DRIVER when + processing COLLECT_GCC_OPTIONS. + (run_gcc): Likewise. + +2019-08-12 Jakub Jelinek + + * BASE-VER: Set to 9.2.1. + 2019-08-12 Release Manager * GCC 9.2.0 released. @@ -513,7 +1756,7 @@ 2019-07-11 Uroš Bizjak - Backported from mainline + Backport from mainline 2019-07-06 Richard Sandiford * config/i386/sse.md (*andnot3_bcst): Fix VI/VI48_AVX512VL typo. Index: gcc/testsuite/gcc.target/powerpc/darn-3.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/darn-3.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/darn-3.c (.../branches/gcc-9-branch) @@ -0,0 +1,16 @@ +/* { dg-do compile { target { powerpc*-*-* } } } */ +/* { dg-skip-if "" { powerpc*-*-aix* } } */ +/* { dg-options "-O2 -mdejagnu-cpu=power9" } */ + +static int darn32(void) { return __builtin_darn_32(); } + +int four(void) +{ + int sum = 0; + int i; + for (i = 0; i < 4; i++) + sum += darn32(); + return sum; +} + +/* { dg-final { scan-assembler-times {(?n)\mdarn .*,0\M} 4 } } */ Index: gcc/testsuite/gcc.target/powerpc/pure-builtin-redundant-load.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/pure-builtin-redundant-load.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/pure-builtin-redundant-load.c (.../branches/gcc-9-branch) @@ -0,0 +1,47 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target powerpc_vsx_ok } */ +/* { dg-options "-O2 -fdump-tree-fre-all -mvsx" } */ + +/* Verify we remove a redundant load that occurs both before and after +we call a vector load builtin. +This testcase is introduced as we updated a number of our vector load +built-ins with the attribute of PURE instead of MEM, to indicate that +those builtins only read from memory, versus reading from and writing +to the same. +This means we can identify the redundant load instructions in an earlier +pass, and optimize them away. */ + +#include + +vector signed short load_data; + +vector signed short foo() +{ + vector signed short r11,r12,r13; + r11 = load_data; + r12 = vec_xl (0, &load_data[0]); + r13 = load_data; + return (r11 + r12 + r13); +} + +vector signed short biz() +{ + vector signed short r21,r22,r23; + r21 = load_data; + r22 = vec_lvehx (0, &load_data[0]); + r23 = load_data; + return (r21 + r22 + r23); +} + +vector signed short bar() +{ + vector signed short r31,r32,r33; + r31 = load_data; + r32 = vec_lvx (0, &load_data[0]); + r33 = load_data; + return (r31 + r32 + r33); +} + +/* { dg-final { scan-tree-dump-times "Removing dead stmt r13_. = load_data;" 1 "fre1" } } */ +/* { dg-final { scan-tree-dump-times "Removing dead stmt r23_. = load_data;" 1 "fre1" } } */ +/* { dg-final { scan-tree-dump-times "Removing dead stmt r33_. = load_data;" 1 "fre1" } } */ Index: gcc/testsuite/gcc.target/powerpc/pr70010.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/pr70010.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/pr70010.c (.../branches/gcc-9-branch) @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -finline-functions -Wno-psabi -mvsx" } */ +/* { dg-final { scan-assembler {\mbl \.?vadd_no_vsx\M} } } */ + +typedef int vec_t __attribute__((vector_size(16))); + +static vec_t +__attribute__((__target__("no-vsx"))) +vadd_no_vsx (vec_t a, vec_t b) +{ + return a + b; +} + +vec_t +__attribute__((__target__("vsx"))) +call_vadd_no_vsx (vec_t x, vec_t y, vec_t z) +{ + return vadd_no_vsx (x, y) - z; +} Index: gcc/testsuite/gcc.target/powerpc/pr70010-2.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/pr70010-2.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/pr70010-2.c (.../branches/gcc-9-branch) @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -flto -mno-vsx" } */ +/* { dg-require-effective-target lto } */ + +vector int c, a, b; + +static inline void __attribute__ ((__always_inline__, target ("no-vsx"))) +foo () +{ + c = a + b; +} + +int +main () +{ + foo (); + c = a + b; +} Index: gcc/testsuite/gcc.target/powerpc/pr70010-4.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/pr70010-4.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/pr70010-4.c (.../branches/gcc-9-branch) @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mvsx" } */ + +vector int c, a, b; + +static inline void __attribute__ ((__always_inline__, target ("no-vsx"))) +foo () /* { dg-error "inlining failed in call to .* target specific option mismatch" } */ +{ + c = a + b; +} + +int +main () +{ + foo (); /* { dg-message "called from here" } */ + c = a + b; +} Index: gcc/testsuite/gcc.target/powerpc/pr91275.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/pr91275.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/pr91275.c (.../branches/gcc-9-branch) @@ -0,0 +1,26 @@ +/* Test that we generate vpmsumd correctly without a swap error. */ + +/* { dg-do run { target { p8vector_hw } } } */ +/* { dg-options "-O2 -std=gnu11" } */ + +#include + +int main() { + + const unsigned long long r0l = 0x8e7dfceac070e3a0; + vector unsigned long long r0 = (vector unsigned long long) {r0l, 0}, v; + const vector unsigned long long pd + = (vector unsigned long long) {0xc2LLU << 56, 0}; + + v = __builtin_crypto_vpmsumd ((vector unsigned long long) {r0[0], 0}, pd); + +#if __LITTLE_ENDIAN__ + if (v[0] != 0x4000000000000000 || v[1] != 0x65bd7ab605a4a8ff) + __builtin_abort (); +#else + if (v[1] != 0x4000000000000000 || v[0] != 0x65bd7ab605a4a8ff) + __builtin_abort (); +#endif + + return 0; +} Index: gcc/testsuite/gcc.target/powerpc/pr70010-1.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/pr70010-1.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/pr70010-1.c (.../branches/gcc-9-branch) @@ -0,0 +1,18 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -flto -mvsx" } */ +/* { dg-require-effective-target lto } */ + +vector int c, a, b; + +static inline void __attribute__ ((__always_inline__, target ("no-vsx"))) +foo () /* { dg-error "inlining failed in call to .* target specific option mismatch" } */ +{ + c = a + b; +} + +int +main () +{ + foo (); /* { dg-message "called from here" } */ + c = a + b; +} Index: gcc/testsuite/gcc.target/powerpc/pr70010-3.c =================================================================== --- a/src/gcc/testsuite/gcc.target/powerpc/pr70010-3.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/powerpc/pr70010-3.c (.../branches/gcc-9-branch) @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -mno-vsx" } */ + +vector int c, a, b; + +static inline void __attribute__ ((__always_inline__, target ("no-vsx"))) +foo () +{ + c = a + b; +} + +int +main () +{ + foo (); + c = a + b; +} Index: gcc/testsuite/gcc.target/arm/acle/crc_hf_1.c =================================================================== --- a/src/gcc/testsuite/gcc.target/arm/acle/crc_hf_1.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/arm/acle/crc_hf_1.c (.../branches/gcc-9-branch) @@ -0,0 +1,14 @@ +/* Test that using an Armv8-a hard-float target doesn't + break CRC intrinsics. */ + +/* { dg-do compile } */ +/* { dg-require-effective-target arm_hard_vfp_ok } */ +/* { dg-options "-mfloat-abi=hard -march=armv8-a+simd+crc" } */ + +#include + +uint32_t +foo (uint32_t a, uint32_t b) +{ + return __crc32cw (a, b); +} Index: gcc/testsuite/gcc.target/arm/pr88167-1.c =================================================================== --- a/src/gcc/testsuite/gcc.target/arm/pr88167-1.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/arm/pr88167-1.c (.../branches/gcc-9-branch) @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target arm_thumb1_ok } */ +/* { dg-options "-O2 -mthumb" } */ + +void *retaddr; + +void foo (void) { + retaddr = __builtin_return_address (0); + + /* Used for enforcing registers stacking. */ + asm volatile ("" : : : "r0", "r1", "r2", "r3", "r4", "r5", "r6", "r7", + "r8", "r9", "r10", "r11", "r12"); +} + +/* { dg-final { scan-assembler-not "mov\tlr," } } */ Index: gcc/testsuite/gcc.target/arm/pr88167-2.c =================================================================== --- a/src/gcc/testsuite/gcc.target/arm/pr88167-2.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/arm/pr88167-2.c (.../branches/gcc-9-branch) @@ -0,0 +1,18 @@ +/* { dg-do run } */ +/* { dg-options "-O2" } */ +/* { dg-skip-if "" { ! { arm_thumb1 } } } */ + +int __attribute__((noclone, noinline)) +foo (int a, long long b) { + /* Used for enforcing registers stacking. */ + asm volatile ("" : : : "r0", "r1", "r2", "r3", + "r8", "r9", "r10", "r11", "r12"); + return (int) b; +} + +int main () +{ + if (foo (1, 0x1000000000000003LL) != 3) + __builtin_abort (); + __builtin_exit (0); +} Index: gcc/testsuite/gcc.target/arm/multilib.exp =================================================================== --- a/src/gcc/testsuite/gcc.target/arm/multilib.exp (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/arm/multilib.exp (.../branches/gcc-9-branch) @@ -753,6 +753,28 @@ {-march=armv8-m.main+fp.dp -mfpu=fpv5-d16 -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp" {-march=armv8-m.main+fp+dsp -mfpu=fpv5-d16 -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp" {-march=armv8-m.main+fp.dp+dsp -mfpu=fpv5-d16 -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp" + {-march=armv7-r+fp -mfpu=auto -mfloat-abi=softfp} "thumb/v7+fp/softfp" + {-march=armv7-r+fp -mfpu=auto -mfloat-abi=hard} "thumb/v7+fp/hard" + {-march=armv7-r+fp+idiv -mfpu=auto -mfloat-abi=softfp} "thumb/v7+fp/softfp" + {-march=armv7-r+fp+idiv -mfpu=auto -mfloat-abi=hard} "thumb/v7+fp/hard" + {-march=armv7-r+vfpv3-d16-fp16 -mfpu=auto -mfloat-abi=softfp} "thumb/v7+fp/softfp" + {-march=armv7-r+vfpv3-d16-fp16 -mfpu=auto -mfloat-abi=hard} "thumb/v7+fp/hard" + {-march=armv7-r+vfpv3-d16-fp16+idiv -mfpu=auto -mfloat-abi=softfp} "thumb/v7+fp/softfp" + {-march=armv7-r+vfpv3-d16-fp16+idiv -mfpu=auto -mfloat-abi=hard} "thumb/v7+fp/hard" + {-march=armv7-r+fp.sp -mfpu=auto -mfloat-abi=softfp} "thumb/v7-r+fp.sp/softfp" + {-march=armv7-r+fp.sp -mfpu=auto -mfloat-abi=hard} "thumb/v7-r+fp.sp/hard" + {-march=armv7-r+fp.sp+idiv -mfpu=auto -mfloat-abi=softfp} "thumb/v7-r+fp.sp/softfp" + {-march=armv7-r+fp.sp+idiv -mfpu=auto -mfloat-abi=hard} "thumb/v7-r+fp.sp/hard" + {-march=armv7-r+vfpv3xd -mfpu=auto -mfloat-abi=softfp} "thumb/v7-r+fp.sp/softfp" + {-march=armv7-r+vfpv3xd -mfpu=auto -mfloat-abi=hard} "thumb/v7-r+fp.sp/hard" + {-march=armv7-r+vfpv3xd+idiv -mfpu=auto -mfloat-abi=softfp} "thumb/v7-r+fp.sp/softfp" + {-march=armv7-r+vfpv3xd+idiv -mfpu=auto -mfloat-abi=hard} "thumb/v7-r+fp.sp/hard" + {-march=armv7-r+vfpv3xd-fp16+idiv -mfpu=auto -mfloat-abi=softfp} "thumb/v7-r+fp.sp/softfp" + {-march=armv7-r+vfpv3xd-fp16+idiv -mfpu=auto -mfloat-abi=hard} "thumb/v7-r+fp.sp/hard" + {-march=armv8-r+fp.sp -mfpu=auto -mfloat-abi=softfp} "thumb/v7-r+fp.sp/softfp" + {-march=armv8-r+fp.sp -mfpu=auto -mfloat-abi=hard} "thumb/v7-r+fp.sp/hard" + {-march=armv8-r+crc+fp.sp -mfpu=auto -mfloat-abi=softfp} "thumb/v7-r+fp.sp/softfp" + {-march=armv8-r+crc+fp.sp -mfpu=auto -mfloat-abi=hard} "thumb/v7-r+fp.sp/hard" } { check_multi_dir $opts $dir } Index: gcc/testsuite/gcc.target/s390/sigfpe-eh.c =================================================================== --- a/src/gcc/testsuite/gcc.target/s390/sigfpe-eh.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/s390/sigfpe-eh.c (.../branches/gcc-9-branch) @@ -0,0 +1,10 @@ +/* { dg-do compile } */ +/* { dg-options "-march=z196 -O2 -fexceptions -fnon-call-exceptions" } */ + +extern float f (void); +extern float g (void); + +float h (float x, float y) +{ + return x < y ? f () : g (); +} Index: gcc/testsuite/gcc.target/s390/s390.exp =================================================================== --- a/src/gcc/testsuite/gcc.target/s390/s390.exp (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/s390/s390.exp (.../branches/gcc-9-branch) @@ -86,18 +86,22 @@ int main (void) { asm (".machinemode zarch" : : ); - #if __ARCH__ >= 11 - asm ("lcbb %%r2,0(%%r15),0" : : ); + #if __ARCH__ >= 13 + asm ("ncrk %%r2,%%r2,%%r2" : : : "r2"); + #elif __ARCH__ >= 12 + asm ("agh %%r2,0(%%r15)" : : : "r2"); + #elif __ARCH__ >= 11 + asm ("lochiz %%r2,42" : : : "r2"); #elif __ARCH__ >= 10 - asm ("risbgn %%r2,%%r2,0,0,0" : : ); + asm ("risbgn %%r2,%%r2,0,0,0" : : : "r2"); #elif __ARCH__ >= 9 - asm ("sgrk %%r2,%%r2,%%r2" : : ); + asm ("sgrk %%r2,%%r2,%%r2" : : : "r2"); #elif __ARCH__ >= 8 - asm ("rosbg %%r2,%%r2,0,0,0" : : ); + asm ("rosbg %%r2,%%r2,0,0,0" : : : "r2"); #elif __ARCH__ >= 7 - asm ("nilf %%r2,0" : : ); + asm ("nilf %%r2,0" : : : "r2"); #elif __ARCH__ >= 6 - asm ("lay %%r2,0(%%r15)" : : ); + asm ("lay %%r2,0(%%r15)" : : : "r2"); #elif __ARCH__ >= 5 asm ("tam" : : ); #endif @@ -107,8 +111,8 @@ asm ("etnd %0" : "=d" (nd)); } #endif - #ifdef __VX__ - asm ("vzero %%v0" : : ); + #if defined (__VX__) && defined (__zarch__) + asm ("vzero %%v0" : : : "v0"); #endif return 0; } Index: gcc/testsuite/gcc.target/sparc/overflow-1.c =================================================================== --- a/src/gcc/testsuite/gcc.target/sparc/overflow-1.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/sparc/overflow-1.c (.../branches/gcc-9-branch) @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -mcpu=v8" } */ +/* { dg-options "-O -fno-pie -mcpu=v8" } */ /* { dg-require-effective-target ilp32 } */ #include Index: gcc/testsuite/gcc.target/sparc/overflow-5.c =================================================================== --- a/src/gcc/testsuite/gcc.target/sparc/overflow-5.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/sparc/overflow-5.c (.../branches/gcc-9-branch) @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target lp64 } */ -/* { dg-options "-O -mvis3" } */ +/* { dg-options "-O -fno-pie -mvis3" } */ #include #include Index: gcc/testsuite/gcc.target/sparc/overflow-2.c =================================================================== --- a/src/gcc/testsuite/gcc.target/sparc/overflow-2.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/sparc/overflow-2.c (.../branches/gcc-9-branch) @@ -1,5 +1,5 @@ /* { dg-do compile } */ -/* { dg-options "-O -mcpu=v8" } */ +/* { dg-options "-O -fno-pie -mcpu=v8" } */ /* { dg-require-effective-target ilp32 } */ #include Index: gcc/testsuite/gcc.target/sparc/overflow-3.c =================================================================== --- a/src/gcc/testsuite/gcc.target/sparc/overflow-3.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/sparc/overflow-3.c (.../branches/gcc-9-branch) @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target lp64 } */ -/* { dg-options "-O" } */ +/* { dg-options "-O -fno-pie" } */ #include #include Index: gcc/testsuite/gcc.target/sparc/overflow-4.c =================================================================== --- a/src/gcc/testsuite/gcc.target/sparc/overflow-4.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/sparc/overflow-4.c (.../branches/gcc-9-branch) @@ -1,6 +1,6 @@ /* { dg-do compile } */ /* { dg-require-effective-target lp64 } */ -/* { dg-options "-O -mno-vis3 -mno-vis4" } */ +/* { dg-options "-O -fno-pie -mno-vis3 -mno-vis4" } */ #include #include Index: gcc/testsuite/gcc.target/sparc/20161111-1.c =================================================================== --- a/src/gcc/testsuite/gcc.target/sparc/20161111-1.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/sparc/20161111-1.c (.../branches/gcc-9-branch) @@ -14,4 +14,4 @@ return retval; } -/* { dg-final { scan-assembler-not "and\t%" } } */ +/* { dg-final { scan-assembler-not "and\t%" { xfail *-*-* } } } */ Index: gcc/testsuite/gcc.target/mips/get-fcsr-3.c =================================================================== --- a/src/gcc/testsuite/gcc.target/mips/get-fcsr-3.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/mips/get-fcsr-3.c (.../branches/gcc-9-branch) @@ -0,0 +1,9 @@ +/* { dg-options "-mabi=64 -mhard-float" } */ + +NOMIPS16 unsigned int +foo (void) +{ + return __builtin_mips_get_fcsr () & 0x1; +} + +/* { dg-final { scan-assembler "cfc1" } } */ Index: gcc/testsuite/gcc.target/mips/cfgcleanup-jalr1.c =================================================================== --- a/src/gcc/testsuite/gcc.target/mips/cfgcleanup-jalr1.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/mips/cfgcleanup-jalr1.c (.../branches/gcc-9-branch) @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-mabicalls -fpic -mno-mips16 -mno-micromips" } */ +/* { dg-skip-if "needs codesize optimization" { *-*-* } { "-O0" "-O1" "-O2" "-O3" } { "" } } */ + +extern void foo (void*); + +extern void bar (void*); + +void +test (void* p) +{ + if (!p) + foo(p); + else + bar(p); +} + +/* { dg-final { scan-assembler-not "\\\.reloc\t1f,R_MIPS_JALR,foo" } } */ +/* { dg-final { scan-assembler-not "\\\.reloc\t1f,R_MIPS_JALR,bar" } } */ Index: gcc/testsuite/gcc.target/mips/pr91769.c =================================================================== --- a/src/gcc/testsuite/gcc.target/mips/pr91769.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/mips/pr91769.c (.../branches/gcc-9-branch) @@ -0,0 +1,19 @@ +/* PR target/91769 */ +/* { dg-do compile } */ +/* { dg-skip-if "naming registers makes this a code quality test" { *-*-* } { "-O0" "-g" } { "" } } */ +/* { dg-options "-EL -mgp32 -mhard-float" } */ + +NOCOMPRESSION double +foo (void) +{ + register double* pf __asm__ ("$a1"); + __asm__ __volatile__ ("":"=r"(pf)); + double f = *pf; + + if (f != f) + f = -f; + return f; +} + +/* { dg-final { scan-assembler-not "lw\t\\\$4,0\\(\\\$5\\)\n\tlw\t\\\$5,4\\(\\\$5\\)\n\tldc1\t\\\$.*,0\\(\\\$5\\)" } } */ +/* { dg-final { scan-assembler "lw\t\\\$4,0\\(\\\$5\\)\n\tlw\t\\\$5,4\\(\\\$5\\)\n\tmtc1\t\\\$4,\\\$.*\n\tmthc1\t\\\$5,\\\$.*" } } */ Index: gcc/testsuite/gcc.target/mips/cfgcleanup-jalr2.c =================================================================== --- a/src/gcc/testsuite/gcc.target/mips/cfgcleanup-jalr2.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/mips/cfgcleanup-jalr2.c (.../branches/gcc-9-branch) @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-mabicalls -fpic -mno-mips16 -mno-micromips" } */ +/* { dg-additional-options "-fno-inline -fipa-ra -mcompact-branches=never" } */ +/* { dg-skip-if "needs codesize optimization" { *-*-* } { "-O0" "-O1" "-O2" "-O3" } { "" } } */ + +static int foo (void* p) { __asm__ (""::"r"(p):"$t0"); return 0; } + +static int bar (void* p) { return 1; } + +int +test (void* p) +{ + int res = !p ? foo(p) : bar(p); + + register int tmp __asm__("$t0") = -1; + __asm__ (""::"r"(tmp)); + + return res; +} + +/* { dg-final { scan-assembler "\\\.reloc\t1f,R_MIPS_JALR,foo" } } */ +/* { dg-final { scan-assembler "\\\.reloc\t1f,R_MIPS_JALR,bar" } } */ +/* { dg-final { scan-assembler-not "\\.set\tnomacro\n\tjalr\t\\\$25" } } */ Index: gcc/testsuite/gcc.target/mips/cfgcleanup-jalr3.c =================================================================== --- a/src/gcc/testsuite/gcc.target/mips/cfgcleanup-jalr3.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/mips/cfgcleanup-jalr3.c (.../branches/gcc-9-branch) @@ -0,0 +1,23 @@ +/* { dg-do compile } */ +/* { dg-options "-mabicalls -fpic -mno-mips16 -mno-micromips" } */ +/* { dg-additional-options "-fno-inline -fipa-ra -mcompact-branches=never" } */ +/* { dg-skip-if "needs codesize optimization" { *-*-* } { "-O0" "-O1" "-O2" "-O3" } { "" } } */ + +static int foo (void* p) { return 0; } + +static int bar (void* p) { return 1; } + +int +test (void* p) +{ + int res = !p ? foo(p) : bar(p); + + register int tmp __asm__("$t0") = -1; + __asm__ (""::"r"(tmp)); + + return res; +} + +/* { dg-final { scan-assembler-not "\\\.reloc\t1f,R_MIPS_JALR,foo" } } */ +/* { dg-final { scan-assembler-not "\\\.reloc\t1f,R_MIPS_JALR,bar" } } */ +/* { dg-final { scan-assembler "\\.set\tnomacro\n\tjalr\t\\\$25" } } */ Index: gcc/testsuite/gcc.target/riscv/shift-shift-4.c =================================================================== --- a/src/gcc/testsuite/gcc.target/riscv/shift-shift-4.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/riscv/shift-shift-4.c (.../branches/gcc-9-branch) @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv32i -mabi=ilp32 -O2" } */ + +/* One zero-extend shift can be eliminated by modifying the constant in the + greater than test. Started working after modifying the splitter + lshrsi3_zero_extend_3+1 to use a temporary reg for the first split dest. */ +int +sub (int i) +{ + i &= 0x7fffffff; + return i > 0x7f800000; +} +/* { dg-final { scan-assembler-not "srli" } } */ Index: gcc/testsuite/gcc.target/riscv/shift-shift-5.c =================================================================== --- a/src/gcc/testsuite/gcc.target/riscv/shift-shift-5.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/riscv/shift-shift-5.c (.../branches/gcc-9-branch) @@ -0,0 +1,16 @@ +/* { dg-do compile } */ +/* { dg-options "-march=rv64gc -mabi=lp64d -O2" } */ + +/* Fails if lshrsi3_zero_extend_3+1 uses a temp reg which has no REG_DEST + note. */ +unsigned long +sub (long l) +{ + union u { + struct s { int a : 19; unsigned int b : 13; int x; } s; + long l; + } u; + u.l = l; + return u.s.b; +} +/* { dg-final { scan-assembler "srliw" } } */ Index: gcc/testsuite/gcc.target/aarch64/nosplit-di-const-volatile_1.c =================================================================== --- a/src/gcc/testsuite/gcc.target/aarch64/nosplit-di-const-volatile_1.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/aarch64/nosplit-di-const-volatile_1.c (.../branches/gcc-9-branch) @@ -0,0 +1,15 @@ +/* Check that storing the 64-bit immediate to a volatile location is done + with a single store. */ + +/* { dg-do compile } */ +/* { dg-options "-O2" } */ + +typedef unsigned long long u64; + +void bar (u64 *x) +{ + *(volatile u64 *)x = 0xabcdef10abcdef10ULL; +} + +/* { dg-final { scan-assembler-times "str\tx..?, .*" 1 } } */ +/* { dg-final { scan-assembler-not "str\tw..?, .*" } } */ Index: gcc/testsuite/gcc.target/aarch64/no-inline-lrint_3.c =================================================================== --- a/src/gcc/testsuite/gcc.target/aarch64/no-inline-lrint_3.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/aarch64/no-inline-lrint_3.c (.../branches/gcc-9-branch) @@ -0,0 +1,17 @@ +/* { dg-do compile } */ +/* { dg-require-effective-target ilp32 } */ +/* { dg-options "-O3 -fno-math-errno -fno-fp-int-builtin-inexact" } */ + +#define TEST(name, float_type, int_type, fn) void f_##name (float_type x) \ +{ \ + volatile int_type b = __builtin_##fn (x); \ +} + +TEST (dld, double, long, lrint) +TEST (flf, float , long, lrintf) + +TEST (did, double, int, lrint) +TEST (fif, float , int, lrintf) + +/* { dg-final { scan-assembler-times "fcvtzs\tw\[0-9\]+, \[d,s\]\[0-9\]+" 2 } } */ +/* { dg-final { scan-assembler-times "bl\tlrint" 2 } } */ Index: gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-3.c (.../branches/gcc-9-branch) @@ -15,7 +15,7 @@ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler-times {jmp[ \t]*\.?LIND} 2 } } */ /* { dg-final { scan-assembler-times {call[ \t]*\.?LIND} 2 } } */ /* { dg-final { scan-assembler-times {\tpause} 1 } } */ Index: gcc/testsuite/gcc.target/i386/indirect-thunk-1.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-1.c (.../branches/gcc-9-branch) @@ -14,7 +14,7 @@ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */ /* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */ Index: gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-2.c (.../branches/gcc-9-branch) @@ -15,7 +15,7 @@ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */ /* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */ Index: gcc/testsuite/gcc.target/i386/pr91704.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr91704.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr91704.c (.../branches/gcc-9-branch) @@ -0,0 +1,14 @@ +/* PR target/91704 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -funsigned-char -mavx2 -mavx512f -masm=att" } */ +/* { dg-final { scan-assembler-times "\tvpcmpgtb\t%ymm" 1 } } */ +/* { dg-final { scan-assembler-not "\tvpsubusb\t" } } */ +/* { dg-final { scan-assembler-not "\tvpcmpeqb\t" } } */ + +#include + +__m256i +foo (__m256i x, __m256i y) +{ + return _mm256_cmpgt_epi8 (x, y); +} Index: gcc/testsuite/gcc.target/i386/ret-thunk-9.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/ret-thunk-9.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-9.c (.../branches/gcc-9-branch) @@ -17,7 +17,7 @@ /* { dg-final { scan-assembler "_?__x86_return_thunk:" } } */ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_bar} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_bar\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_bar\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler-times {\tpause} 2 } } */ /* { dg-final { scan-assembler-times {\tlfence} 2 } } */ /* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ Index: gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-4.c (.../branches/gcc-9-branch) @@ -15,7 +15,7 @@ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler-times {jmp[ \t]*\.?LIND} 2 } } */ /* { dg-final { scan-assembler-times {call[ \t]*\.?LIND} 2 } } */ /* { dg-final { scan-assembler-times {\tpause} 1 } } */ Index: gcc/testsuite/gcc.target/i386/pr32219-2.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr32219-2.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr32219-2.c (.../branches/gcc-9-branch) @@ -20,5 +20,5 @@ /* { dg-final { scan-assembler "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %" { target { ia32 && { ! *-*-darwin* } } } } } */ /* Darwin m32 defaults to PIC but common symbols need to be indirected. */ -/* { dg-final { scan-assembler {movl[ \t]l_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t][Ll]_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ Index: gcc/testsuite/gcc.target/i386/indirect-thunk-2.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-2.c (.../branches/gcc-9-branch) @@ -14,7 +14,7 @@ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */ /* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */ Index: gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-3.c (.../branches/gcc-9-branch) @@ -17,7 +17,7 @@ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler-times {jmp[ \t]*\.?LIND} 2 } } */ /* { dg-final { scan-assembler-times {call[ \t]*\.?LIND} 2 } } */ /* { dg-final { scan-assembler {\tpause} } } */ Index: gcc/testsuite/gcc.target/i386/pr32219-3.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr32219-3.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr32219-3.c (.../branches/gcc-9-branch) @@ -24,4 +24,4 @@ /* For Darwin, we need PIC to allow PIE, but also we must indirect weak symbols so that they can be indirected. Again, dyld knows how to deal with this. */ -/* { dg-final { scan-assembler {movl[ \t]l_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t][Ll]_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ Index: gcc/testsuite/gcc.target/i386/indirect-thunk-3.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-3.c (.../branches/gcc-9-branch) @@ -15,7 +15,7 @@ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */ /* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */ Index: gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-4.c (.../branches/gcc-9-branch) @@ -16,7 +16,7 @@ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler-times {jmp[ \t]*\.?LIND} 2 } } */ /* { dg-final { scan-assembler-times {call[ \t]*\.?LIND} 2 } } */ /* { dg-final { scan-assembler {\tpause} } } */ Index: gcc/testsuite/gcc.target/i386/pr87853.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr87853.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr87853.c (.../branches/gcc-9-branch) @@ -0,0 +1,20 @@ +/* PR target/87853 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -funsigned-char -msse2 -mno-sse3 -masm=att" } */ +/* { dg-final { scan-assembler-times "\tpcmpgtb\t%xmm" 2 } } */ +/* { dg-final { scan-assembler-not "\tpsubusb\t" } } */ +/* { dg-final { scan-assembler-not "\tpcmpeqb\t" } } */ + +#include + +__m128i +foo (__m128i x, __m128i y) +{ + return _mm_cmpgt_epi8 (x, y); +} + +__m128i +bar (__m128i x, __m128i y) +{ + return _mm_cmplt_epi8 (x, y); +} Index: gcc/testsuite/gcc.target/i386/pr32219-4.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr32219-4.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr32219-4.c (.../branches/gcc-9-branch) @@ -21,4 +21,4 @@ /* { dg-final { scan-assembler "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %" { target { ia32 && { ! *-*-darwin* } } } } } */ /* Darwin m32 equivalent (indirect and PIC). */ -/* { dg-final { scan-assembler {movl[ \t]l_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t][Ll]_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ Index: gcc/testsuite/gcc.target/i386/indirect-thunk-4.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-4.c (.../branches/gcc-9-branch) @@ -15,7 +15,7 @@ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */ /* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */ Index: gcc/testsuite/gcc.target/i386/pr92225.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr92225.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr92225.c (.../branches/gcc-9-branch) @@ -0,0 +1,19 @@ +/* PR target/92225 */ +/* { dg-do compile } */ +/* { dg-options "-O2 -ftree-vectorize -msse2 -mno-sse4" } */ + +void a (long); + +unsigned *b; + +void +c () +{ + long d = 2; + int e = 0; + + for (; e < 1024; e++) + if (b[e] > d) + d = b[e]; + a (d); +} Index: gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-5.c (.../branches/gcc-9-branch) @@ -17,7 +17,7 @@ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ /* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */ Index: gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-1.c (.../branches/gcc-9-branch) @@ -14,7 +14,7 @@ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ /* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */ Index: gcc/testsuite/gcc.target/i386/ret-thunk-14.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/ret-thunk-14.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-14.c (.../branches/gcc-9-branch) @@ -19,6 +19,6 @@ /* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_bar} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_bar\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_bar\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ Index: gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-6.c (.../branches/gcc-9-branch) @@ -16,7 +16,7 @@ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ /* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */ Index: gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-2.c (.../branches/gcc-9-branch) @@ -14,7 +14,7 @@ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ /* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */ Index: gcc/testsuite/gcc.target/i386/ret-thunk-15.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/ret-thunk-15.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/ret-thunk-15.c (.../branches/gcc-9-branch) @@ -19,6 +19,6 @@ /* { dg-final { scan-assembler-times {\tlfence} 1 } } */ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*bar" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_bar} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_bar\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_bar\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler-not "pushq\[ \t\]%rax" } } */ Index: gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-1.c (.../branches/gcc-9-branch) @@ -14,7 +14,7 @@ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */ /* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */ /* { dg-final { scan-assembler {\tpause} } } */ Index: gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-3.c (.../branches/gcc-9-branch) @@ -15,7 +15,7 @@ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ /* { dg-final { scan-assembler-not {jmp[ \t]*\.?LIND} } } */ Index: gcc/testsuite/gcc.target/i386/pr32219-7.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr32219-7.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr32219-7.c (.../branches/gcc-9-branch) @@ -23,4 +23,4 @@ /* { dg-final { scan-assembler-not "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %eax" { target { ia32 && { ! *-*-darwin* } } } } } */ /* Darwin m32 equivalent (indirect and PIC). */ -/* { dg-final { scan-assembler {movl[ \t]l_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t][Ll]_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ Index: gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-inline-2.c (.../branches/gcc-9-branch) @@ -14,7 +14,7 @@ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */ /* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */ /* { dg-final { scan-assembler {\tpause} } } */ Index: gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-extern-4.c (.../branches/gcc-9-branch) @@ -15,6 +15,6 @@ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "call\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler-not {\t(lfence|pause)} } } */ Index: gcc/testsuite/gcc.target/i386/pr32219-8.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr32219-8.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr32219-8.c (.../branches/gcc-9-branch) @@ -21,4 +21,4 @@ /* { dg-final { scan-assembler "movl\[ \t\]xxx@GOT\\(%\[^,\]*\\), %" { target { ia32 && { ! *-*-darwin* } } } } } */ /* Darwin m32 default to PIC but needs indirection for the weak symbol. */ -/* { dg-final { scan-assembler {movl[ \t]l_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t][Ll]_xxx\$non_lazy_ptr-L1\$pb\(%eax\),[ \t]%eax} { target { ia32 && *-*-darwin* } } } } */ Index: gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/indirect-thunk-attr-1.c (.../branches/gcc-9-branch) @@ -17,7 +17,7 @@ /* { dg-final { scan-assembler "mov(?:l|q)\[ \t\]*dispatch" { target *-*-linux* } } } */ /* { dg-final { scan-assembler {movq[ \t]*_dispatch} { target { lp64 && *-*-darwin* } } } } */ -/* { dg-final { scan-assembler {movl[ \t]*l_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ +/* { dg-final { scan-assembler {movl[ \t]*[Ll]_dispatch\$non_lazy_ptr-L[0-9]+\$pb} { target { ia32 && *-*-darwin* } } } } */ /* { dg-final { scan-assembler "jmp\[ \t\]*_?__x86_indirect_thunk_(r|e)ax" } } */ /* { dg-final { scan-assembler {jmp[ \t]*\.?LIND} } } */ /* { dg-final { scan-assembler {call[ \t]*\.?LIND} } } */ Index: gcc/testsuite/gcc.target/i386/pr91623.c =================================================================== --- a/src/gcc/testsuite/gcc.target/i386/pr91623.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.target/i386/pr91623.c (.../branches/gcc-9-branch) @@ -0,0 +1,32 @@ +/* PR middle-end/91623 */ +/* { dg-do compile } */ +/* { dg-options "-O3 -msse4.1 -mno-sse4.2" } */ + +typedef long long V __attribute__((__vector_size__(16))); +V e, h; +int d; +const int i; + +void foo (void); + +void +bar (int k, int l) +{ + if (d && 0 <= k - 1 && l) + foo (); +} + +void +baz (void) +{ + V n = (V) { 1 }; + V g = (V) {}; + V o = g; + for (int f = 0; f < i; ++f) + { + V a = o == n; + h = a; + bar (f, i); + o = e; + } +} Index: gcc/testsuite/gfortran.dg/do_subscript_3.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/do_subscript_3.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/do_subscript_3.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,22 @@ +! { dg-do compile } +! PR fortran/91424 +! Check that only one warning is issued inside blocks, and that +! warnings are also issued for contained subroutines. + +program main + real :: a(5) + block + integer :: j + do j=0, 5 ! { dg-warning "out of bounds" } + a(j) = 2. ! { dg-warning "out of bounds" } + end do + end block + call x +contains + subroutine x + integer :: i + do i=1,6 ! { dg-warning "out of bounds" } + a(i) = 2. ! { dg-warning "out of bounds" } + end do + end subroutine x +end program main Index: gcc/testsuite/gfortran.dg/pr91565.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr91565.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr91565.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,17 @@ +! { dg-do compile } +! PR fortran/91565 +! Contributed by Gerhard Steinmetz +program p + integer, parameter :: a(2) = [2,2] ! { dg-error "\(1\)" } + print *, reshape([1,2,3,4,5,6], [2,3], order=a) ! { dg-error "not a permutation" } +end + +subroutine foo + integer, parameter :: a(1) = 1 ! { dg-error "\(1\)" } + print *, reshape([1,2,3,4,5,6], [2,3], order=a) ! { dg-error "are different" } +end + +subroutine bar + integer, parameter :: a(1,2) = 1 ! { dg-error "\(1\)" } + print *, reshape([1,2,3,4,5,6], [2,3], order=a) ! { dg-error "are different" } +end Index: gcc/testsuite/gfortran.dg/pr91359_2.f =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr91359_2.f (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr91359_2.f (.../branches/gcc-9-branch) @@ -0,0 +1,17 @@ +! { dg-do run } +! PR fortran/91359 +! Orginal code contributed by Brian T. Carcich +! + logical function zero() result(a) + goto 2 +1 return +2 a = .false. + if (.not.a) goto 1 + return + end + + program test_zero + logical zero + if (zero()) stop 'FAIL: zero() returned .TRUE.' + stop 'OKAY: zero() returned .FALSE.' + end Index: gcc/testsuite/gfortran.dg/associate_49.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/associate_49.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/associate_49.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,34 @@ +! { dg-do run } +! +! Test the fix for PR91588, in which the declaration of 'a' caused +! an ICE. +! +! Contributed by Gerhardt Steinmetz +! +program p + character(4), parameter :: parm = '7890' + associate (z => '1234') + block + integer(len(z)) :: a + if (kind(a) .ne. 4) stop 1 + end block + end associate + associate (z => '123') + block + integer(len(z)+1) :: a + if (kind(a) .ne. 4) stop 2 + end block + end associate + associate (z => 1_8) + block + integer(kind(z)) :: a + if (kind(a) .ne. 8) stop 3 + end block + end associate + associate (z => parm) + block + integer(len(z)) :: a + if (kind(a) .ne. 4) stop 4 + end block + end associate +end Index: gcc/testsuite/gfortran.dg/pr85543.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr85543.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr85543.f90 (.../branches/gcc-9-branch) @@ -6,3 +6,4 @@ real(z()) function f() ! { dg-error "in initialization expression at" } end end +! { dg-prune-output "Bad kind expression for function" } Index: gcc/testsuite/gfortran.dg/pr91801.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr91801.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr91801.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,7 @@ +! { dg-do compile } +! PR fortran/91801 +! Code contributed by Gerhard Steinmetz +program p + integer, parameter :: a(2) = [2,0] ! { dg-error "Element with a value of" } + print *, reshape([1,2,3,4,5,6], [2,3], order=a) ! { dg-error "for the RESHAPE intrinsic near" } +end Index: gcc/testsuite/gfortran.dg/unlimited_polymorphic_28.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/unlimited_polymorphic_28.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/unlimited_polymorphic_28.f90 (.../branches/gcc-9-branch) @@ -21,7 +21,7 @@ type,abstract,extends(c_base) :: c_derived contains - procedure :: f_base => f_derived ! { dg-error "Type mismatch in function result \\(CLASS\\(\\*\\)/CLASS\\(c_base\\)\\)" } + procedure :: f_base => f_derived ! { dg-error "Type mismatch in function result" } end type c_derived contains Index: gcc/testsuite/gfortran.dg/gomp/pr87752.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/gomp/pr87752.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/gomp/pr87752.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,12 @@ +! PR fortran/87752 +! { dg-do compile } +! { dg-additional-options "-Ofast" } + +subroutine foo (n, u, v) + integer :: n + real, pointer :: u(:), v(:) + !$omp parallel do simd + do i = 1, n + u(:) = v(:) + end do +end Index: gcc/testsuite/gfortran.dg/deferred_character_34.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/deferred_character_34.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/deferred_character_34.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,10 @@ +! { dg-do run } +! PR fortran/90561 +! This used to ICE. +! Original test case by Gerhard Steinmetz. +program p + character(:), allocatable :: z(:) + z = [character(2):: 'ab', 'xy'] + z = z(2) + if (any(z /= 'xy')) stop 1 +end Index: gcc/testsuite/gfortran.dg/pr70754.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr70754.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr70754.f90 (.../branches/gcc-9-branch) @@ -18,12 +18,13 @@ integer (ii4), dimension(40,40) :: c integer i, j - do i=1,20 - b(i,j) = 123 * a(i,j) + 34 * a(i,j+1) & - + 34 * a(i,j-1) + a(i+1,j+1) & - + a(i+1,j-1) + a(i-1,j+1) & - + a(i-1,j-1) - c(i,j) = 123 + j = 10 + do i=11,30 + b(i,j) = 123 * a(i,j) + 34 * a(i,j+1) & + + 34 * a(i,j-1) + a(i+1,j+1) & + + a(i+1,j-1) + a(i-1,j+1) & + + a(i-1,j-1) + c(i,j) = 123 end do where ((xyz(:,:,2) /= 0) .and. (c /= 0)) Index: gcc/testsuite/gfortran.dg/pr91642.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr91642.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr91642.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,19 @@ +! { dg-do compile } +! PR fortran/91642 +! Code contributed by Gerhard Steinmetz +program p + integer i + integer :: iol + integer, external :: null + i = 0 + inquire (iolength=iol) i, null() + if (iol == 4) stop 1 +end + +subroutine q + integer i + integer :: iol + i = 0 + inquire (iolength=iol) i, null() ! { dg-error "cannot appear in INQUIRE" } + if (iol == 4) stop 1 +end Index: gcc/testsuite/gfortran.dg/char_result_mod_19.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/char_result_mod_19.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/char_result_mod_19.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,18 @@ +! { dg-do run } +! { dg-additional-sources char_result_19.f90 } +! +! Module for char_result_19.f90 +! Tests fix for PR86248 +! +module test_module + implicit none + public :: func_1 + private + character(len=*),dimension(0:2),parameter :: darray = (/"el0 ","el11","el2 "/) +contains + function func_1 (func_1_input) result(f) + integer, intent(in) :: func_1_input + character(len = len_trim (darray(func_1_input))) :: f + f = darray(func_1_input) + end function func_1 +end module test_module Index: gcc/testsuite/gfortran.dg/pr91587.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr91587.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr91587.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,12 @@ +! { dg-do compile } +! PR fortran/91587 +! Code contributed by Gerhard Steinmetz +program p + backspace(err=!) ! { dg-error "Invalid value for" } + flush(err=!) ! { dg-error "Invalid value for" } + rewind(err=!) ! { dg-error "Invalid value for" } +end + +subroutine bar ! An other matcher runs, and gives a different error. + endfile(err=!) ! { dg-error "Expecting END" } +end Index: gcc/testsuite/gfortran.dg/pr78719_3.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr78719_3.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr78719_3.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,32 @@ +! { dg-do compile } +! PR fortran/78719 +! Code contributed by Gerhard Steinmetz +program p + + type t + integer :: n + end type + + class(t) :: g ! { dg-error "must be dummy, allocatable or pointer" } + + abstract interface + subroutine h + end + end interface + + procedure(h), pointer :: s + + s => f + call s + s => g ! { dg-error "Invalid procedure pointer" } + call s + + contains + + subroutine f + end + + subroutine g ! { dg-error "has an explicit interface" } + end + +end program p ! { dg-error "Syntax error" } Index: gcc/testsuite/gfortran.dg/typebound_call_22.f03 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/typebound_call_22.f03 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/typebound_call_22.f03 (.../branches/gcc-9-branch) @@ -26,4 +26,4 @@ call x%bar () end program -! { dg-final { scan-tree-dump-times "base \\(\\);" 1 "optimized" } } +! { dg-final { scan-tree-dump-times "base \\(\\);" 1 "optimized" { xfail *-*-* } } } Index: gcc/testsuite/gfortran.dg/use_rename_8.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/use_rename_8.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/use_rename_8.f90 (.../branches/gcc-9-branch) @@ -19,8 +19,8 @@ USE MOO, ONLY: X => B END SUBROUTINE T -SUBROUTINE C - USE MOO, ONLY: C ! { dg-error "is also the name of the current program unit" } +SUBROUTINE C ! { dg-error "\(1\)" } + USE MOO, ONLY: C ! { dg-error "conflicts with the" } END SUBROUTINE C SUBROUTINE D @@ -36,15 +36,15 @@ USE MOO, ONLY: X => F END SUBROUTINE F -SUBROUTINE X - USE MOO, ONLY: X => G ! { dg-error "is also the name of the current program unit" } +SUBROUTINE X ! { dg-error "\(1\)" } + USE MOO, ONLY: X => G ! { dg-error "conflicts with the rename" } END SUBROUTINE X -SUBROUTINE Y - USE MOO, ONLY: Y => H ! { dg-error "is also the name of the current program unit" } +SUBROUTINE Y ! { dg-error "\(1\)" } + USE MOO, ONLY: Y => H ! { dg-error "conflicts with the rename" } END SUBROUTINE Y -SUBROUTINE Z - USE MOO, ONLY: Z => I, Z => I ! { dg-error "is also the name of the current program unit" } +SUBROUTINE Z ! { dg-error "\(1\)" } + USE MOO, ONLY: Z => I, Z => I ! { dg-error "conflicts with the rename" } END SUBROUTINE Z Index: gcc/testsuite/gfortran.dg/pr89943_2.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr89943_2.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr89943_2.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,33 @@ +! { dg-do compile } +! PR fortran/89943 +! Code contributed by Alberto Luaces +module Foo_mod + + implicit none + + interface + module function runFoo4C(ndim) bind(C, name="runFoo") + use, intrinsic :: iso_c_binding + implicit none + integer runFoo4c + integer(c_int32_t) , intent(in) :: ndim + end function runFoo4C + end interface + + contains + +end module Foo_mod + +submodule(Foo_mod) Foo_smod + + contains + + module function runFoo4C(ndim) bind(C, name="runFoo") + use, intrinsic :: iso_c_binding + implicit none + integer runFoo4c + integer(c_int32_t) , intent(in) :: ndim + end function runFoo4C + +end submodule Foo_smod + Index: gcc/testsuite/gfortran.dg/warn_unused_dummy_argument_5.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/warn_unused_dummy_argument_5.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/warn_unused_dummy_argument_5.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,16 @@ +! { dg-do compile } +! { dg-additional-options "-Wunused-dummy-argument" } +! PR 91557 - this used to generate a bogus warning +! Test case by Gerhard Steinmetz +program p + integer :: a, b + a = 1 + call g +contains + subroutine g + integer :: x, y + call h (x, y) + if ( a > 0 ) y = y - 1 + b = y - x + 1 + end +end Index: gcc/testsuite/gfortran.dg/pr47054_2.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr47054_2.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr47054_2.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,41 @@ +! { dg-do compile } +! { dg-options "-fcray-pointer" } +! PR fortran/47054 +! Code contributed by Deji Akingunola +subroutine host_sub(F_su,F_nk) + implicit none + + integer :: F_nk + real,dimension(F_nk) :: F_su + integer G_ni, G_nj + real*8 G_xg_8, G_yg_8 + pointer (paxg_8, G_xg_8(G_ni)) + pointer (payg_8, G_yg_8(G_nj)) + common / G_p / paxg_8,payg_8 + common / G / G_ni, G_nj + + call internal_sub(F_su,F_nk) + return +contains + + subroutine internal_sub(F_su,F_nk) + implicit none + integer G_ni, G_nj + real*8 G_xg_8, G_yg_8 + pointer (paxg_8, G_xg_8(G_ni)) + pointer (payg_8, G_yg_8(G_nj)) + common / G_p / paxg_8,payg_8 + common / G / G_ni, G_nj + + integer :: F_nk + real,dimension(F_nk) :: F_su + integer k,k2 + + k2 = 0 + do k = 1, F_nk, 2 + k2 = k2+1 + F_su(k) = F_su(k) + 1.0 + enddo + return + end subroutine internal_sub +end subroutine host_sub Index: gcc/testsuite/gfortran.dg/pr91553.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr91553.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr91553.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,8 @@ +! { dg-do run } +! Code contributed by Gerhard Steinmetz +program p + complex z(1) + z = (1.0, 2.0) * [real :: (3.0 + 4.0)] + if (real(z(1)) /= 7.) stop 1 + if (aimag(z(1)) /= 14.) stop 2 +end Index: gcc/testsuite/gfortran.dg/pr91564.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr91564.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr91564.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,16 @@ +! { dg-do compile } +! PR fortran/91564 +! Contributed by Gerhard Steinmetz. +program p + integer i, j + call kill (1, 2, 3) ! { dg-error "shall be an INTENT" } + i = 42 + call bar(i, j) +end + +subroutine bar(n, m) + integer, intent(in) :: n + integer, intent(inout) :: m + call kill (1, 3, n) ! { dg-error "shall be an INTENT" } + call kill (1, 3, m) +end subroutine bar Index: gcc/testsuite/gfortran.dg/pr91727.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr91727.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr91727.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,9 @@ +! { dg-do compile } +! Code contributed by Gerhard Steinmetz. +program p + type t + class(*), allocatable :: a + end type + type(t) :: x + allocate (x%a, source=[1]) ! { dg-error "have the same rank as" } +end Index: gcc/testsuite/gfortran.dg/pr87993.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr87993.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr87993.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,8 @@ +! { dg-do run } +! Code contributed by Gerhard Steinmetz +program p + integer, parameter :: a(2) = 1 + integer, parameter :: b = a%kind + if (any(a /= 1)) stop 1 + if (b /= kind(a)) stop 2 +end Index: gcc/testsuite/gfortran.dg/do_subscript_6.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/do_subscript_6.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/do_subscript_6.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,11 @@ +! { dg-do compile } +! { dg-options "-std=legacy" } +! PR 91550 - this used to cause an ICE +! Test case by Gerhard Steinmetz +program p + real :: a(3) + integer :: i + do i = 1, 3, .1 ! { dg-error "cannot be zero" } + a(i) = i + end do +end Index: gcc/testsuite/gfortran.dg/pr91641.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr91641.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr91641.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,7 @@ +! { dg-do compile } +! PR fortran/91641 +! Code conyributed by Gerhard Steinmetz +program p + real, pointer :: z(:) + print *, is_contiguous (null(z)) ! { dg-error "shall be an associated" } +end Index: gcc/testsuite/gfortran.dg/pr91471.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr91471.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr91471.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,14 @@ +! { dg-do compile } +! PR fortran/91471 +! Code contributed by Sameeran Joshi +! +! This invalid code (x(1) is referenced, but never set) caused an ICE due +! to hitting a gfc_internal_error() in primary.c (gfc_variable_attr). The +! fix is to remove that gfc_internal_error(). +! +program dynamic + implicit none + integer, dimension(:), allocatable :: x + allocate(x(1)) + stop x(1) +end program dynamic Index: gcc/testsuite/gfortran.dg/pr78719_2.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr78719_2.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr78719_2.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,32 @@ +! { dg-do compile } +! PR fortran/78719 +! Code contributed by Gerhard Steinmetz +program p + + type t + integer :: n + end type + + real :: g + + abstract interface + subroutine h + end + end interface + + procedure(h), pointer :: s + + s => f + call s + s => g ! { dg-error "Invalid procedure pointer" } + call s + + contains + + subroutine f + end + + subroutine g ! { dg-error "has an explicit interface" } + end + +end program p ! { dg-error "Syntax error" } Index: gcc/testsuite/gfortran.dg/ISO_Fortran_binding_13.c =================================================================== --- a/src/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_13.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_13.c (.../branches/gcc-9-branch) @@ -0,0 +1,12 @@ +/* Test the fix for PR91926. */ + +/* Contributed by José Rui Faustino de Sousa */ + +#include + +int ifb_echo(void*); + +int ifb_echo(void *this) +{ + return this == NULL ? 1 : 2; +} Index: gcc/testsuite/gfortran.dg/pr91785.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr91785.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr91785.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,8 @@ +! { dg-do compile } +! PR fortran/91785 +! Code contributed by Gerhard Steinmetz +program p + complex :: a(*) ! { dg-error "Assumed size array at" } + real :: b(2) + b = a%im ! { dg-error "upper bound in the last dimension" } +end Index: gcc/testsuite/gfortran.dg/use_15.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/use_15.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/use_15.f90 (.../branches/gcc-9-branch) @@ -28,8 +28,8 @@ end subroutine -subroutine my_sub3 (a) - use test_mod2, my_sub3 => my_sub2 ! { dg-error "is also the name of the current program unit" } +subroutine my_sub3 (a) ! { dg-error "\(1\)" } + use test_mod2, my_sub3 => my_sub2 ! { dg-error "conflicts with the rename" } real a print *, a end subroutine Index: gcc/testsuite/gfortran.dg/pr71649.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr71649.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr71649.f90 (.../branches/gcc-9-branch) @@ -1,13 +1,13 @@ ! { dg-do compile } ! PR71649 Internal Compiler Error -SUBROUTINE Compiler_Options ( Options, Version, WriteOpt ) - USE ISO_FORTRAN_ENV, ONLY : Compiler_Version, Compiler_Options ! { dg-error "already declared" } +SUBROUTINE Compiler_Options ( Options, Version, WriteOpt ) ! { dg-error "\(1\)" } + USE ISO_FORTRAN_ENV, ONLY : Compiler_Version, Compiler_Options ! { dg-error "conflicts with the" } IMPLICIT NONE CHARACTER (LEN=*), INTENT(OUT) :: Options CHARACTER (LEN=*), INTENT(OUT) :: Version LOGICAL, INTENT(IN), OPTIONAL :: WriteOpt - Version = Compiler_Version() - Options = Compiler_Options() ! { dg-error "Unexpected use of subroutine name" } + Version = Compiler_Version() ! { dg-error "has no IMPLICIT type" } + Options = Compiler_Options() ! { dg-error "Unexpected use of subroutine name" } RETURN END SUBROUTINE Compiler_Options Index: gcc/testsuite/gfortran.dg/pr89943_1.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr89943_1.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr89943_1.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,31 @@ +! { dg-do compile } +! PR fortran/89943 +! Code contributed by Alberto Luaces +module Foo_mod + + implicit none + + interface + module subroutine runFoo4C(ndim) bind(C, name="runFoo") + use, intrinsic :: iso_c_binding + implicit none + integer(c_int32_t) , intent(in) :: ndim + end subroutine runFoo4C + end interface + + contains + +end module Foo_mod + +submodule(Foo_mod) Foo_smod + + contains + + module subroutine runFoo4C(ndim) bind(C, name="runFoo") + use, intrinsic :: iso_c_binding + implicit none + integer(c_int32_t) , intent(in) :: ndim + end subroutine runFoo4C + +end submodule Foo_smod + Index: gcc/testsuite/gfortran.dg/ISO_Fortran_binding_14.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_14.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_14.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,41 @@ +! { dg-do run } +! +! Correct an error in the eveluation of the CFI descriptor attribute for +! the case where the bind_C formal argument is not an assumed shape array +! and not allocatable or pointer. +! +! Contributed by Gilles Gouaillardet +! +MODULE FOO +INTERFACE +SUBROUTINE dummy(buf) BIND(C, name="sync") +type(*), dimension(..) :: buf +END SUBROUTINE +END INTERFACE +END MODULE + +PROGRAM main + USE FOO + IMPLICIT NONE + integer(8) :: before, after + + INTEGER, parameter :: n = 1 + + INTEGER, ALLOCATABLE :: buf(:) + INTEGER :: buf2(n) + INTEGER :: i + + ALLOCATE(buf(n)) + before = LOC(buf(1)) + CALL dummy (buf) + after = LOC(buf(1)) + + if (before .NE. after) stop 1 + + before = LOC(buf2(1)) + CALL dummy (buf) + after = LOC(buf2(1)) + + if (before .NE. after) stop 2 + +END PROGRAM Index: gcc/testsuite/gfortran.dg/bind_c_array_params_3_aux.c =================================================================== --- a/src/gcc/testsuite/gfortran.dg/bind_c_array_params_3_aux.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/bind_c_array_params_3_aux.c (.../branches/gcc-9-branch) @@ -0,0 +1,26 @@ +/* Used by bind_c_array_params_3.f90. */ +/* PR fortran/92284. */ + +#include +#include +#include + +#include "../../../libgfortran/ISO_Fortran_binding.h" + +void arr_set_c(CFI_cdesc_t*); + +void arr_set_c(CFI_cdesc_t *arr){ + int i, stat, *auxp = NULL; + CFI_index_t lb[] = {1}; + CFI_index_t ub[] = {9}; + + assert(arr); + assert(arr->rank==1); + assert(!arr->base_addr); + stat = CFI_allocate(arr, lb, ub, sizeof(int)); + assert(stat==CFI_SUCCESS); + auxp = (int*)arr->base_addr; + assert(auxp); + for(i=0; i +! +program test + use test_module + implicit none + integer :: i + character(:), allocatable :: chr + do i = 0, 2 + chr = func_1 (i) + select case (i) + case (0) + if (chr .ne. 'el0') stop i + case (1) + if (chr .ne. 'el11') stop i + case (2) + if (chr .ne. 'el2') stop i + end select + end do +end program test Index: gcc/testsuite/gfortran.dg/allocated_3.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/allocated_3.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/allocated_3.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,6 @@ +! { dg-do compile } +! PR fortran/91551 +! Contributed by Gerhard Steinmetz +program p + if (allocated()) stop 1 ! { dg-error "requires an array or scalar allocatable" } +end Index: gcc/testsuite/gfortran.dg/function_kinds_5.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/function_kinds_5.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/function_kinds_5.f90 (.../branches/gcc-9-branch) @@ -8,3 +8,4 @@ real (bad_kind(0d0)) function foo () ! { dg-error "must be an intrinsic function" } foo = real (kind (foo)) end function +! { dg-prune-output "Bad kind expression for function" } Index: gcc/testsuite/gfortran.dg/pr88072.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr88072.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr88072.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,30 @@ +! { dg-do compile } +! PR fortran/88072 +! Original code contributed by Andrew Wood +module m1 + + implicit none + + type, abstract, public :: t1 + integer, dimension(:), allocatable :: i + contains + procedure(f1), deferred :: f + end type t1 + + type, extends(t1), public :: t2 ! { dg-error "must be ABSTRACT because" } + contains + procedure :: f => f2 ! { dg-error "mismatch for the overriding" } + end type t2 + + abstract interface + function f1(this) ! { dg-error "must be dummy, allocatable or" } + import + class(t1) :: this + class(t1) :: f1 + end function f1 + end interface + contains + type(t2) function f2(this) + class(t2) :: this + end function f2 +end module m1 Index: gcc/testsuite/gfortran.dg/do_subscript_5.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/do_subscript_5.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/do_subscript_5.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,20 @@ +! { dg-do compile } +! { dg-additional-options "-Wdo-subscript" } +! PR 90563 - this used to be rejected, wrongly +! Original test case by Tobias Neumann +program test + implicit none + integer, parameter :: swap(4) = [2,1,3,4] + real :: p(20) + integer :: j + + p = 0.0 + + ! The following warnings are actually bogus, but we are not yet + ! clever enough to suppress them. + do j=1,6 ! { dg-warning "out of bounds" } + if (j<5) then + p(j) = p(swap(j)) ! { dg-warning "out of bounds" } + endif + enddo +end program Index: gcc/testsuite/gfortran.dg/pr91660_2.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr91660_2.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr91660_2.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,9 @@ +! { dg-do compile } +! PR fortran/91660 +program foo + type(doubleprecision :: x ! { dg-error "Malformed type-spec" } + type(double precision :: y ! { dg-error "Malformed type-spec" } + type(character(len=3) :: a ! { dg-error "Malformed type-spec" } + type(doublecomplex :: b ! { dg-error "Malformed type-spec" } + type(double complex :: c ! { dg-error "Malformed type-spec" } +end program foo Index: gcc/testsuite/gfortran.dg/pr78719_1.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr78719_1.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr78719_1.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,29 @@ +! { dg-do run } +! PR fortran/78719 +! Code contributed by Gerhard Steinmetz +program p + + type t + integer :: n + end type + + abstract interface + subroutine h + end + end interface + + procedure(h), pointer :: s + + s => f + call s + s => g + call s + + contains + + subroutine f + end + + subroutine g + end +end program p Index: gcc/testsuite/gfortran.dg/pr78739.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr78739.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr78739.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,15 @@ +! { dg-do compile } +! { dg-options "-w" } +! PR fortran/78739 +! Code contributed Gerhard Steinmetz +function f(n) + f() = n ! { dg-error "conflicts with function name" } +end + +function g() + g(x) = x ! { dg-error "conflicts with function name" } +end + +function a() ! This should cause an error, but cannot be easily detected! + a() = x +end Index: gcc/testsuite/gfortran.dg/pr89647.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr89647.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr89647.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,33 @@ +! { dg-do compile } +! Code contributed by Ian Harvey + MODULE m1 + IMPLICIT NONE + PUBLIC :: False + PUBLIC :: True + CONTAINS + FUNCTION False() RESULT(b) + LOGICAL :: b + b = .FALSE. + END FUNCTION False + + FUNCTION True() RESULT(b) + LOGICAL :: b + b = .TRUE. + END FUNCTION True + END MODULE m1 + + MODULE m2 + USE m1 + IMPLICIT NONE + TYPE, ABSTRACT :: t_parent + CONTAINS + PROCEDURE(False), DEFERRED, NOPASS :: Binding + END TYPE t_parent + CONTAINS + SUBROUTINE s + TYPE, EXTENDS(t_parent) :: t_extension + CONTAINS + PROCEDURE, NOPASS :: Binding => True + END TYPE t_extension + END SUBROUTINE s + END MODULE m2 Index: gcc/testsuite/gfortran.dg/pr91589.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr91589.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr91589.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,15 @@ +! { dg-do compile } +! +! Check the fix for PR91589, in which the invalid expression caused an ICE. +! Other statements using this invalid expression cause "Unclassifiable statement at..." +! +! Contributed by Gerhardt Steinmetz +! +program p + type t + integer :: a + end type + type(t) :: x = t(1) + call sub (x%a%a) ! { dg-error "Syntax error in argument list" } +end + Index: gcc/testsuite/gfortran.dg/pr69455_2.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr69455_2.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr69455_2.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,13 @@ +! { dg-do run } +program foo + block + use, intrinsic :: ISO_FORTRAN_ENV, only: wp => REAL32, ik => INT32 + if (ik /= 4) stop 1 + if (wp /= 4) stop 2 + end block + block + use, intrinsic :: ISO_FORTRAN_ENV, only: wp => REAL64, ik => INT64 + if (ik /= 8) stop 3 + if (wp /= 8) stop 4 + end block +end program foo Index: gcc/testsuite/gfortran.dg/ISO_Fortran_binding_13.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_13.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/ISO_Fortran_binding_13.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,39 @@ +! { dg-do run { target c99_runtime } } +! { dg-additional-sources ISO_Fortran_binding_13.c } +! +! Test the fix for PR91926. The additional source is the main program. +! +! Contributed by José Rui Faustino de Sousa +! +program ifb_p + + implicit none + + integer :: i = 42 + + interface + integer function ifb_echo_aux(this) bind(c, name="ifb_echo") + implicit none + type(*), dimension(..), & ! removing assumed rank solves segmentation fault + optional, intent(in) :: this + end function ifb_echo_aux + end interface + + if (ifb_echo_aux() .ne. 1) STOP 1 ! worked + if (ifb_echo() .ne. 1) stop 2 ! segmentation fault + if (ifb_echo_aux(i) .ne. 2) stop 3 ! worked + if (ifb_echo(i) .ne. 2) stop 4 ! worked + + stop + +contains + + integer function ifb_echo(this) + type(*), dimension(..), & + optional, intent(in) :: this + + ifb_echo = ifb_echo_aux(this) + return + end function ifb_echo + +end program ifb_p Index: gcc/testsuite/gfortran.dg/pr92208.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr92208.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr92208.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,39 @@ +! { dg-do run } +! +! PR fortran/92208 +! +! Contributed by Nils Reiche +! +program stringtest + implicit none + integer, parameter :: noVars = 2 + +! print*, "varNames: ", createVarnames("var",noVars) + call function1(noVars,createVarnames("var",noVars),"path") + +contains + +function createVarnames(string,noVars) result(stringArray) + implicit none + character(len=*), intent(in) :: string + integer, intent(in) :: noVars + character(len=len_trim(string)+6), dimension(noVars) :: stringArray + integer :: i + do i=1,noVars + write(stringArray(i),'(a,i0)') string, i + enddo +end function createVarnames + +subroutine function1(noVars,varNames,path) + implicit none + integer, intent(in) :: noVars + character(len=*), intent(in) :: path + character(len=*), dimension(noVars) :: varNames + + if (path /= 'path') stop 1 + if (any(varNames /= ['var1', 'var2'])) stop 2 + !print*, "function1-path : ", trim(path) + !print*, "function1-varNames: ", varNames +end subroutine function1 + +end program stringtest Index: gcc/testsuite/gfortran.dg/pr91485.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr91485.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr91485.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,24 @@ +! { dg-do compile } +module foo + implicit none + interface operator(.x.) + module procedure product + end interface operator(.x.) + contains + function product(x, y) + real, intent(in) :: x, y + real :: product + product = x * y + end function product +end module foo + +module gfcbug155 + implicit none + contains + subroutine print_prod (x, y) + use foo, only : operator(.x.) + implicit none + real :: x, y + print *, x .x. y + end subroutine print_prod +end module gfcbug155 Index: gcc/testsuite/gfortran.dg/pr89943_4.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr89943_4.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr89943_4.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,29 @@ +! { dg-do compile } +module Foo_mod + + implicit none + + interface + module function runFoo4C(ndim) bind(C, name="runFoo") + use, intrinsic :: iso_c_binding + implicit none + integer runFoo4c + integer(c_int32_t) , intent(in) :: ndim + end function runFoo4C + end interface + + contains + +end module Foo_mod + +submodule(Foo_mod) Foo_smod + + contains + + module function runFoo4C(ndim) bind(C, name="runFu") ! { dg-error "Mismatch in BIND" } + use, intrinsic :: iso_c_binding ! { dg-error "Unexpected USE statement in" } + implicit none ! { dg-error "Unexpected IMPLICIT NONE statement" } + integer(c_int32_t) , intent(in) :: ndim ! { dg-error "Unexpected data declaration" } + end function runFoo4C ! { dg-error "Expecting END SUBMODULE" } + +end submodule Foo_smod Index: gcc/testsuite/gfortran.dg/pr91496.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr91496.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr91496.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,38 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +! +subroutine foo (a, b, c, n) + implicit none + real a(*), b(*), c(*) + integer :: i, n + external bar +!DIR$ unroll (4) +!GCC$ unroll 4 + do i = 1, n + a(i) = b(i) + c(i) + end do +!DIR$ ivdep +!GCC$ ivdep + do i = 1, n + a(i) = b(i) + c(i) + end do +!DIR$ vector +!GCC$ vector + do i = 1, n + a(i) = b(i) + c(i) + end do +!DIR$ novector +!GCC$ novector + do i = 1, n + a(i) = b(i) + c(i) + end do +!GCC$ ivdep +!GCC$ vector + do i = 1, n + a(i) = b(i) + c(i) + end do +!DIR$ noinline +!GCC$ noinline ! { dg-warning "Unclassifiable GCC directive" } + call bar (a) +end subroutine foo +! { dg-final { scan-tree-dump-times "ANNOTATE_EXPR" 6 "original" } } Index: gcc/testsuite/gfortran.dg/pr91714.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr91714.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr91714.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,10 @@ +! { dg-do compile } +! Contributed by Gerhard Steinmetz +program p + typea ! { dg-error "Mangled derived type" } + integer b + end type ! { dg-error "Expecting END PROGRAM" } + type(a) :: c ! { dg-error "is being used before it" } + c = a(1) + print *, c +end Index: gcc/testsuite/gfortran.dg/allocated_2.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/allocated_2.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/allocated_2.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,16 @@ +! { dg-do compile } +program foo + + implicit none + + integer, allocatable :: x + integer, allocatable :: a(:) + + logical a1, a2 + + a1 = allocated(scalar=a) ! { dg-error "Scalar entity required" } + a2 = allocated(array=x) ! { dg-error "Array entity required" } + a1 = allocated(scalar=x, array=a) ! { dg-error "Too many arguments" } + a1 = allocated(array=a, scalar=x) ! { dg-error "Too many arguments" } + +end program foo Index: gcc/testsuite/gfortran.dg/pr87991.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr87991.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr87991.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,11 @@ +! { dg-do compile } +! { dg-options "-w" } +! PR fortran/87991 +program p + type t + character(:), pointer :: c + end type + type(t) :: x + allocate (character(3) :: x%c) + data x%c /'abc'/ ! { dg-error "has the pointer attribute" } +end Index: gcc/testsuite/gfortran.dg/bind-c-intent-out.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/bind-c-intent-out.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/bind-c-intent-out.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,42 @@ +! { dg-do compile } +! { dg-options "-fdump-tree-original" } +! +! PR fortran/91863 +! +! Contributed by G. Steinmetz +! + +subroutine sub(x) bind(c) + implicit none (type, external) + integer, allocatable, intent(out) :: x(:) + + allocate(x(3:5)) + x(:) = [1, 2, 3] +end subroutine sub + + +program p + implicit none (type, external) + interface + subroutine sub(x) bind(c) + integer, allocatable, intent(out) :: x(:) + end + end interface + integer, allocatable :: a(:) + + call sub(a) + if (.not.allocated(a)) stop 1 + if (any(shape(a) /= [3])) stop 2 + if (lbound(a,1) /= 3 .or. ubound(a,1) /= 5) stop 3 + if (any(a /= [1, 2, 3])) stop 4 +end program p + +! "cfi" only appears in context of "a" -> bind-C descriptor +! the intent(out) implies freeing in the callee (!), hence the "free" +! It is the only 'free' as 'a' is part of the main program and, hence, implicitly has the SAVE attribute. +! The 'cfi = 0' appears before the call due to the deallocate and when preparing the C descriptor +! As cfi (i.e. the descriptor itself) is allocated in libgomp, it has to be freed after the call. + +! { dg-final { scan-tree-dump-times "__builtin_free" 2 "original" } } +! { dg-final { scan-tree-dump-times "__builtin_free \\(cfi\\.\[0-9\]+\\);" 2 "original" } } +! { dg-final { scan-tree-dump-times "cfi\\.\[0-9\]+ = 0B;" 2 "original" } } Index: gcc/testsuite/gfortran.dg/do_subscript_4.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/do_subscript_4.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/do_subscript_4.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,11 @@ +! { dg-do compile } +! PR 91424 - this used to warn although the DO loop is zero trip. +program main + implicit none + integer :: i + real :: a(2) + do i=1,3,-1 + a(i) = 2. + end do + print *,a +end program main Index: gcc/testsuite/gfortran.dg/pr91942.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr91942.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr91942.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,10 @@ +! { dg-do compile } +! PR fortran/91942 +! Code contributed by Gerhard Steinmetz +program p + integer :: i + backspace (iostat=i%kind) ! { dg-error "Expecting a variable at" } + endfile (iostat=i%kind) ! { dg-error "Expecting END PROGRAM" } + flush (iostat=i%kind) ! { dg-error "Expecting a variable at" } + rewind (iostat=i%kind) ! { dg-error "Expecting a variable at" } +end Index: gcc/testsuite/gfortran.dg/pr92277.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr92277.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr92277.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,32 @@ +! { dg-do compile } +! +! PR fortran/92277 +! +! Contributed by José Rui Faustino de Sousa +! +module arr_m + implicit none +contains + subroutine arr_set(this, that) + integer, intent(out) :: this(..) + integer, optional, intent(out) :: that(..) + + interface + subroutine arr_set_c(this) bind(c) + use, intrinsic :: iso_c_binding, only: c_int + implicit none + integer(kind=c_int), intent(out) :: this(..) + end subroutine arr_set_c + subroutine arr_set_c_opt(this) bind(c) + use, intrinsic :: iso_c_binding, only: c_int + implicit none + integer(kind=c_int), optional, intent(out) :: this(..) + end subroutine arr_set_c_opt + end interface + + call arr_set_c(this) + call arr_set_c(that) + call arr_set_c_opt(this) + call arr_set_c_opt(that) + end subroutine arr_set +end module arr_m Index: gcc/testsuite/gfortran.dg/pr91566.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr91566.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr91566.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,14 @@ +! { dg-do compile } +! Code contributed by Gerhard Steinmetz +program p + call q + call r +end program p + +subroutine q + print *, -merge([3,4], 0, [.false.,.true.]) +end + +subroutine r + print *, 2 + merge([3,4], 0, [.false.,.true.]) +end Index: gcc/testsuite/gfortran.dg/pr91660_1.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr91660_1.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr91660_1.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,9 @@ +! { dg-do compile } +! PR fortran/91660 +! Code contributed by Gerhard Steinmetz +program p + type t + end type + type (t x ! { dg-error "Malformed type-spec" } + x = t() ! { dg-error "Cannot convert" } +end Index: gcc/testsuite/gfortran.dg/pr91802.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr91802.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr91802.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,9 @@ +! { dg-do compile } +! { dg-options "-fcoarray=single" } +! Code contributed by Gerhard Steinmetz +! PR fortran/91802 +module m + real :: x + dimension :: x(1,2,1,2,1,2,1,2) + codimension :: x[1,2,1,2,1,2,1,*] ! { dg-error "exceeds 15" } +end Index: gcc/testsuite/gfortran.dg/bind_c_array_params_3.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/bind_c_array_params_3.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/bind_c_array_params_3.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,39 @@ +! { dg-do run } +! { dg-additional-sources bind_c_array_params_3_aux.c } +! +! PR fortran/92284 +! +! Contributed by José Rui Faustino de Sousa +! +program arr_p + use, intrinsic :: iso_c_binding, only: c_int + implicit none (type, external) + + integer(kind=c_int), pointer :: arr(:) + integer :: i + + nullify(arr) + call arr_set(arr) + + if (.not.associated(arr)) stop 1 + if (lbound(arr,dim=1) /= 1) stop 2 + if (ubound(arr,dim=1) /= 9) stop 3 + if (any (arr /= [(i, i=0,8)])) stop 4 + deallocate(arr) + +contains + + subroutine arr_set(this) !bind(c) + integer(kind=c_int), pointer, intent(out) :: this(:) + + interface + subroutine arr_set_c(this) bind(c) + use, intrinsic :: iso_c_binding, only: c_int + implicit none + integer(kind=c_int), pointer, intent(out) :: this(:) + end subroutine arr_set_c + end interface + + call arr_set_c(this) + end subroutine arr_set +end program arr_p Index: gcc/testsuite/gfortran.dg/pr69455_1.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr69455_1.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr69455_1.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,14 @@ +! { dg-do run } +program foo + block + use, intrinsic :: iso_c_binding, only: wp => c_float, ik => c_int + if (ik /= 4) stop 1 + if (wp /= 4) stop 2 + end block + block + use, intrinsic :: iso_c_binding, only: wp => c_double, ik => c_int64_t + if (ik /= 8) stop 3 + if (wp /= 8) stop 4 + end block +end program foo + Index: gcc/testsuite/gfortran.dg/directive_unroll_5.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/directive_unroll_5.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/directive_unroll_5.f90 (.../branches/gcc-9-branch) @@ -31,7 +31,7 @@ integer :: a(n), b(n) integer (kind=4) :: i !GCC$ unroll 8 - write (*,*) "wrong"! { dg-error "directive does not commence a loop" } + write (*,*) "wrong"! { dg-error "directive not at the start of a loop" } DO i=n, 1, -1 call dummy2(a(i), b(i), i) ENDDO Index: gcc/testsuite/gfortran.dg/pr91359_1.f =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr91359_1.f (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr91359_1.f (.../branches/gcc-9-branch) @@ -0,0 +1,17 @@ +! { dg-do run } +! PR fortran/91359 +! Orginal code contributed by Brian T. Carcich +! + logical function zero() + goto 2 +1 return +2 zero = .false. + if (.not.zero) goto 1 + return + end + + program test_zero + logical zero + if (zero()) stop 'FAIL: zero() returned .TRUE.' + stop 'OKAY: zero() returned .FALSE.' + end Index: gcc/testsuite/gfortran.dg/dec_type_print_3.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/dec_type_print_3.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/dec_type_print_3.f90 (.../branches/gcc-9-branch) @@ -8,9 +8,9 @@ include 'dec_type_print.f90' -! { dg-error "Invalid character in name" "" { target *-*-* } 52 } +! { dg-error "Mangled derived type definition" "" { target *-*-* } 52 } ! { dg-error "Invalid character in name" "" { target *-*-* } 53 } -! { dg-error "Invalid character in name" "" { target *-*-* } 54 } +! { dg-error "Mangled derived type definition" "" { target *-*-* } 54 } ! { dg-error "Invalid character in name" "" { target *-*-* } 55 } ! { dg-error "Invalid character in name" "" { target *-*-* } 56 } ! { dg-error "Invalid character in name" "" { target *-*-* } 57 } Index: gcc/testsuite/gfortran.dg/pr89943_3.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr89943_3.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr89943_3.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,28 @@ +! { dg-do compile } +module Foo_mod + + implicit none + + interface + module subroutine runFoo4C(ndim) bind(C, name="runFoo") + use, intrinsic :: iso_c_binding + implicit none + integer(c_int32_t) , intent(in) :: ndim + end subroutine runFoo4C + end interface + + contains + +end module Foo_mod + +submodule(Foo_mod) Foo_smod + + contains + + module subroutine runFoo4C(ndim) bind(C, name="runFu") ! { dg-error "Mismatch in BIND" } + use, intrinsic :: iso_c_binding ! { dg-error "Unexpected USE statement" } + implicit none ! { dg-error "Unexpected IMPLICIT NONE statement" } + integer(c_int32_t) , intent(in) :: ndim ! { dg-error "Unexpected data declaration" } + end subroutine runFoo4C ! { dg-error " Expecting END SUBMODULE" } + +end submodule Foo_smod Index: gcc/testsuite/gfortran.dg/pr91864.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pr91864.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pr91864.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,22 @@ +program p + integer :: i + read (*,*) i%kind ! { dg-error "Expecting variable or io-implied-do" } +end + +subroutine t + integer, allocatable :: x(:) + integer :: stat + allocate (x(3), stat=stat%kind) ! { dg-error "cannot be a constant" } +end + +subroutine u + integer, allocatable :: x(:) + integer :: stat + allocate (x(3), stat%kind=stat) ! { dg-error "Unexpected constant" } +end + +subroutine v + integer, allocatable :: x(:) + integer :: stat + deallocate (x, stat%kind=stat) ! { dg-error "Unexpected constant" } +end Index: gcc/testsuite/gfortran.dg/allocated_1.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/allocated_1.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/allocated_1.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,24 @@ +! { dg-do run } +program foo + + implicit none + + integer, allocatable :: x + integer, allocatable :: a(:) + + logical a1, a2 + + a1 = allocated(scalar=x) + if (a1 .neqv. .false.) stop 1 + a2 = allocated(array=a) + if (a2 .neqv. .false.) stop 2 + + allocate(x) + allocate(a(2)) + + a1 = allocated(scalar=x) + if (a1 .neqv. .true.) stop 3 + a2 = allocated(array=a) + if (a2 .neqv. .true.) stop 4 + +end program foo Index: gcc/testsuite/gfortran.dg/pdt_4.f03 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/pdt_4.f03 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/pdt_4.f03 (.../branches/gcc-9-branch) @@ -97,9 +97,9 @@ type (mytype(4, *)) :: arg ! OK end subroutine subroutine bar(arg) ! { dg-error "is neither allocatable nor a pointer" } - type (thytype(8, :, 4) :: arg + type (thytype(8, :, 4)) :: arg end subroutine subroutine foobar(arg) ! OK - type (thytype(8, *, 4) :: arg + type (thytype(8, *, 4)) :: arg end subroutine end Index: gcc/testsuite/gfortran.dg/class_71.f90 =================================================================== --- a/src/gcc/testsuite/gfortran.dg/class_71.f90 (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gfortran.dg/class_71.f90 (.../branches/gcc-9-branch) @@ -0,0 +1,13 @@ +! { dg-do compile } +! +! PR fortran/91586 +! +! Contributed by G. Steinmetz +! +program p + type t + class(*), allocatable :: a + end type + class(t) :: x, y ! { dg-error "must be dummy, allocatable or pointer" } + y = x ! { dg-error "Nonallocatable variable must not be polymorphic in intrinsic assignment" } +end Index: gcc/testsuite/gcc.c-torture/execute/20190820-1.c =================================================================== --- a/src/gcc/testsuite/gcc.c-torture/execute/20190820-1.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.c-torture/execute/20190820-1.c (.../branches/gcc-9-branch) @@ -0,0 +1,111 @@ +/* PR rtl-optimization/91347 */ +/* Reported by John David Anglin */ + +typedef unsigned short __u16; +typedef __signed__ int __s32; +typedef unsigned int __u32; +typedef __signed__ long long __s64; +typedef unsigned long long __u64; +typedef __u16 u16; +typedef __s32 s32; +typedef __u32 u32; +typedef __u64 u64; +typedef _Bool bool; +typedef s32 int32_t; +typedef u32 uint32_t; +typedef u64 uint64_t; + +char hex_asc_upper[16]; +u16 decpair[100]; + +static __attribute__ ((noipa)) void +put_dec_full4 (char *buf, unsigned r) +{ + unsigned q; + q = (r * 0x147b) >> 19; + *((u16 *)buf) = decpair[r - 100*q]; + buf += 2; + *((u16 *)buf) = decpair[q]; +} + +static __attribute__ ((noipa)) unsigned +put_dec_helper4 (char *buf, unsigned x) +{ + uint32_t q = (x * (uint64_t)0x346DC5D7) >> 43; + put_dec_full4(buf, x - q * 10000); + return q; +} + +static __attribute__ ((noipa)) char * +put_dec (char *buf, unsigned long long n) +{ + uint32_t d3, d2, d1, q, h; + d1 = ((uint32_t)n >> 16); + h = (n >> 32); + d2 = (h ) & 0xffff; + d3 = (h >> 16); + q = 656 * d3 + 7296 * d2 + 5536 * d1 + ((uint32_t)n & 0xffff); + q = put_dec_helper4(buf, q); + q += 7671 * d3 + 9496 * d2 + 6 * d1; + q = put_dec_helper4(buf+4, q); + q += 4749 * d3 + 42 * d2; + q = put_dec_helper4(buf+8, q); + return buf; +} + +struct printf_spec { + unsigned int type:8; + signed int field_width:24; + unsigned int flags:8; + unsigned int base:8; + signed int precision:16; +} __attribute__((__packed__)); + +static __attribute__ ((noipa)) char * +number (char *buf, char *end, unsigned long long num, struct printf_spec spec) +{ + + char tmp[3 * sizeof(num)] __attribute__((__aligned__(2))); + char sign; + char locase; + int need_pfx = ((spec.flags & 64) && spec.base != 10); + int i; + bool is_zero = num == 0LL; + int field_width = spec.field_width; + int precision = spec.precision; + + i = 0; + if (num < spec.base) + tmp[i++] = hex_asc_upper[num] | locase; + else if (spec.base != 10) { + int mask = spec.base - 1; + int shift = 3; + if (spec.base == 16) + shift = 4; + else + __builtin_abort (); + do { + tmp[i++] = (hex_asc_upper[((unsigned char)num) & mask] | locase); + num >>= shift; + } while (num); + } else { + i = put_dec(tmp, num) - tmp; + } + return buf; +} + +static __attribute__ ((noipa)) char * +pointer_string (char *buf, char *end, const void *ptr, struct printf_spec spec) +{ + spec.base = 16; + spec.flags = 0; + return number(buf, end, 100, spec); +} + +int +main (void) +{ + struct printf_spec spec; + char *s = pointer_string (0, 0, 0, spec); + return 0; +} Index: gcc/testsuite/gcc.c-torture/execute/20191023-1.c =================================================================== --- a/src/gcc/testsuite/gcc.c-torture/execute/20191023-1.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.c-torture/execute/20191023-1.c (.../branches/gcc-9-branch) @@ -0,0 +1,73 @@ +/* PR tree-optimization/92131 */ +/* Testcase by Armin Rigo */ + +long b, c, d, e, f, i; +char g, h, j, k; +int *aa; + +static void error (void) __attribute__((noipa)); +static void error (void) { __builtin_abort(); } + +static void see_me_here (void) __attribute__((noipa)); +static void see_me_here (void) {} + +static void aaa (void) __attribute__((noipa)); +static void aaa (void) {} + +static void a (void) __attribute__((noipa)); +static void a (void) { + long am, ao; + if (aa == 0) { + aaa(); + if (j) + goto ay; + } + return; +ay: + aaa(); + if (k) { + aaa(); + goto az; + } + return; +az: + if (i) + if (g) + if (h) + if (e) + goto bd; + return; +bd: + am = 0; + while (am < e) { + switch (c) { + case 8: + goto bh; + case 4: + return; + } + bh: + if (am >= 0) + b = -am; + ao = am + b; + f = ao & 7; + if (f == 0) + see_me_here(); + if (ao >= 0) + am++; + else + error(); + } +} + +int main (void) +{ + j++; + k++; + i++; + g++; + h++; + e = 1; + a(); + return 0; +} Index: gcc/testsuite/gcc.c-torture/execute/pr91635.c =================================================================== --- a/src/gcc/testsuite/gcc.c-torture/execute/pr91635.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.c-torture/execute/pr91635.c (.../branches/gcc-9-branch) @@ -0,0 +1,57 @@ +/* PR target/91635 */ + +#if __CHAR_BIT__ == 8 && __SIZEOF_SHORT__ == 2 \ + && __SIZEOF_INT__ == 4 && __SIZEOF_LONG_LONG__ == 8 +unsigned short b, c; +int u, v, w, x; + +__attribute__ ((noipa)) int +foo (unsigned short c) +{ + c <<= __builtin_add_overflow (-c, -1, &b); + c >>= 1; + return c; +} + +__attribute__ ((noipa)) int +bar (unsigned short b) +{ + b <<= -14 & 15; + b = b >> -~1; + return b; +} + +__attribute__ ((noipa)) int +baz (unsigned short e) +{ + e <<= 1; + e >>= __builtin_add_overflow (8719476735, u, &v); + return e; +} + +__attribute__ ((noipa)) int +qux (unsigned int e) +{ + c = ~1; + c *= e; + c = c >> (-15 & 5); + return c + w + x; +} +#endif + +int +main () +{ +#if __CHAR_BIT__ == 8 && __SIZEOF_SHORT__ == 2 \ + && __SIZEOF_INT__ == 4 && __SIZEOF_LONG_LONG__ == 8 + if (foo (0xffff) != 0x7fff) + __builtin_abort (); + if (bar (5) != 5) + __builtin_abort (); + if (baz (~0) != 0x7fff) + __builtin_abort (); + if (qux (2) != 0x7ffe) + __builtin_abort (); +#endif + return 0; +} Index: gcc/testsuite/gcc.c-torture/execute/20190901-1.c =================================================================== --- a/src/gcc/testsuite/gcc.c-torture/execute/20190901-1.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.c-torture/execute/20190901-1.c (.../branches/gcc-9-branch) @@ -0,0 +1,36 @@ +/* PR target/91472 */ +/* Reported by John Paul Adrian Glaubitz */ + +typedef unsigned int gmp_uint_least32_t; + +union ieee_double_extract +{ + struct + { + gmp_uint_least32_t sig:1; + gmp_uint_least32_t exp:11; + gmp_uint_least32_t manh:20; + gmp_uint_least32_t manl:32; + } s; + double d; +}; + +double __attribute__((noipa)) +tests_infinity_d (void) +{ + union ieee_double_extract x; + x.s.exp = 2047; + x.s.manl = 0; + x.s.manh = 0; + x.s.sig = 0; + return x.d; +} + +int +main (void) +{ + double x = tests_infinity_d (); + if (x == 0.0) + __builtin_abort (); + return 0; +} Index: gcc/testsuite/gcc.c-torture/execute/pr91597.c =================================================================== --- a/src/gcc/testsuite/gcc.c-torture/execute/pr91597.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.c-torture/execute/pr91597.c (.../branches/gcc-9-branch) @@ -0,0 +1,48 @@ +/* PR tree-optimization/91597 */ + +enum E { A, B, C }; +struct __attribute__((aligned (4))) S { enum E e; }; + +enum E +foo (struct S *o) +{ + if (((__UINTPTR_TYPE__) (o) & 1) == 0) + return o->e; + else + return A; +} + +int +bar (struct S *o) +{ + return foo (o) == B || foo (o) == C; +} + +static inline void +baz (struct S *o, int d) +{ + if (__builtin_expect (!bar (o), 0)) + __builtin_abort (); + if (d > 2) return; + baz (o, d + 1); +} + +void +qux (struct S *o) +{ + switch (o->e) + { + case A: return; + case B: baz (o, 0); break; + case C: baz (o, 0); break; + } +} + +struct S s = { C }; + +int +main () +{ + qux (&s); + return 0; +} Index: gcc/testsuite/gcc.c-torture/execute/pr91632.c =================================================================== --- a/src/gcc/testsuite/gcc.c-torture/execute/pr91632.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.c-torture/execute/pr91632.c (.../branches/gcc-9-branch) @@ -0,0 +1,30 @@ +/* PR tree-optimization/91632 */ +/* { dg-additional-options "-fwrapv" } */ + +static int +__attribute__((noipa)) +foo (char x) +{ + switch (x) + { + case '"': + case '<': + case '>': + case '\\': + case '^': + case '`': + case '{': + case '|': + case '}': + return 0; + } + return 1; +} + +int +main () +{ + if (foo ('h') == 0) + __builtin_abort (); + return 0; +} Index: gcc/testsuite/gcc.c-torture/compile/pr92231.c =================================================================== --- a/src/gcc/testsuite/gcc.c-torture/compile/pr92231.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.c-torture/compile/pr92231.c (.../branches/gcc-9-branch) @@ -0,0 +1,9 @@ +/* PR middle-end/92231 */ + +extern int bar (void); + +int +foo (void) +{ + return (&bar + 4096) (); +} Index: gcc/testsuite/gcc.c-torture/compile/pr91001.c =================================================================== --- a/src/gcc/testsuite/gcc.c-torture/compile/pr91001.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.c-torture/compile/pr91001.c (.../branches/gcc-9-branch) @@ -0,0 +1,31 @@ +/* PR middle-end/91001 */ +/* PR middle-end/91105 */ +/* PR middle-end/91106 */ + +struct __attribute__((packed)) S { short b; char c; }; +struct T { short b, c, d; }; +struct __attribute__((packed)) R { int b; char c; }; +union __attribute__((aligned(128), transparent_union)) U { struct S c; } u; +union __attribute__((aligned(32), transparent_union)) V { struct T c; } v; +union __attribute__((aligned(32), transparent_union)) W { struct R c; } w; +void foo (union U); +void bar (union V); +void baz (union W); + +void +qux (void) +{ + foo (u); +} + +void +quux (void) +{ + bar (v); +} + +void +corge (void) +{ + baz (w); +} Index: gcc/testsuite/gcc.c-torture/compile/pr92056.c =================================================================== --- a/src/gcc/testsuite/gcc.c-torture/compile/pr92056.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.c-torture/compile/pr92056.c (.../branches/gcc-9-branch) @@ -0,0 +1,18 @@ +/* PR tree-optimization/92056 */ + +const char *d; + +void +foo (int c, char *e, const char *a, const char *b) +{ + switch (c) + { + case 33: + for (;; d++) + if (__builtin_strcmp (b ? : "", d)) + return; + break; + case 4: + __builtin_sprintf (e, a); + } +} Index: gcc/testsuite/gcc.c-torture/compile/20191108-1.c =================================================================== --- a/src/gcc/testsuite/gcc.c-torture/compile/20191108-1.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.c-torture/compile/20191108-1.c (.../branches/gcc-9-branch) @@ -0,0 +1,14 @@ +/* PR target/92095 */ +/* Testcase by Sergei Trofimovich */ + +typedef union { + double a; + int b[2]; +} c; + +double d(int e) +{ + c f; + (&f)->b[0] = 15728640; + return e ? -(&f)->a : (&f)->a; +} Index: gcc/testsuite/gcc.dg/gomp/pr90637.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/gomp/pr90637.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.dg/gomp/pr90637.c (.../branches/gcc-9-branch) @@ -0,0 +1,14 @@ +/* PR tree-optimization/90637 */ +/* { dg-do compile } */ +/* { dg-options "-fopenmp -O1 --param sink-frequency-threshold=90" } */ + +int v; + +void +foo (int c) +{ + int i; +#pragma omp for simd if (c) lastprivate (v) schedule (static, 16) + for (i = 0; i < 64; ++i) + v = i; +} Index: gcc/testsuite/gcc.dg/pr91885.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/pr91885.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.dg/pr91885.c (.../branches/gcc-9-branch) @@ -0,0 +1,47 @@ +/* { dg-do compile } */ +/* { dg-options "-O3 -fprofile-generate" } */ +/* { dg-require-profiling "-fprofile-generate" } */ + +typedef signed long long int __int64_t; +typedef unsigned long long int __uint64_t; +typedef __int64_t int64_t; +typedef __uint64_t uint64_t; +inline void +BLI_endian_switch_int64 (int64_t *val) +{ + uint64_t tval = *val; + *val = ((tval >> 56)) | ((tval << 40) & 0x00ff000000000000ll) + | ((tval << 24) & 0x0000ff0000000000ll) + | ((tval << 8) & 0x000000ff00000000ll) + | ((tval >> 8) & 0x00000000ff000000ll) + | ((tval >> 24) & 0x0000000000ff0000ll) + | ((tval >> 40) & 0x000000000000ff00ll) | ((tval << 56)); +} +typedef struct anim_index_entry +{ + unsigned long long seek_pos_dts; + unsigned long long pts; +} anim_index_entry; +extern struct anim_index_entry * +MEM_callocN (int); +struct anim_index +{ + int num_entries; + struct anim_index_entry *entries; +}; +struct anim_index * +IMB_indexer_open (const char *name) +{ + char header[13]; + struct anim_index *idx; + int i; + idx->entries = MEM_callocN (8); + if (((1 == 0) != (header[8] == 'V'))) + { + for (i = 0; i < idx->num_entries; i++) + { + BLI_endian_switch_int64 ((int64_t *) &idx->entries[i].seek_pos_dts); + BLI_endian_switch_int64 ((int64_t *) &idx->entries[i].pts); + } + } +} Index: gcc/testsuite/gcc.dg/pr91269.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/pr91269.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.dg/pr91269.c (.../branches/gcc-9-branch) @@ -0,0 +1,70 @@ +/* PR target/91269 */ +/* Testcase by Sergei Trofimovich */ + +/* { dg-do assemble } */ +/* { dg-options "-O2 -Wno-int-conversion" } */ +/* { dg-additional-options "-fcall-used-g6 -fPIE -mcpu=niagara4" { target sparc*-*-* } } */ + +struct m; + +enum { a = 2 }; +int b[1]; +int d[2715]; +int e, f, h; +enum { i = 2 } j; +inline int c(int k) { + char *cp; + if (k >= 62 && k <= 247) + cp = b[k]; + if (cp) + return 65533; + return 2; +} +inline int g(int k) { + if (k < sizeof(d)) + return e; + return 0; +} + +int u(struct m*, char*, char*); + +int l(struct m *k, char n, long o, int *p) { + int q, flags = j, r, s, lasttwo = *p; + char inptr, outptr; + while (inptr) { + if (__builtin_expect(h, 0)) + break; + unsigned ch = inptr; + if (lasttwo) { + long need = lasttwo >> 3; + if (__builtin_expect(need > n, 0)) + break; + } else if (s == i) { + long t = c(ch); + if (t != 65533) { + int jch = g(ch); + if (jch & 8) + continue; + } + } + if (ch <= 5) + ; + else { + long t = c(ch); + if (t != 65533) + ; + else { + switch (f >> 8) + case 79: + q = f == 20308 || f == 20350; + if (q) + if (j) + r = u(k, &inptr, &outptr); + s = *p; + if (r) + if (o && flags & a) + break; + } + } + } +} Index: gcc/testsuite/gcc.dg/pr91734.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/pr91734.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.dg/pr91734.c (.../branches/gcc-9-branch) @@ -0,0 +1,97 @@ +/* PR tree-optimization/91734 */ +/* { dg-do run } */ +/* { dg-add-options ieee } */ +/* { dg-additional-options "-O2 -std=gnu99" } */ + +__attribute__((noipa, optimize ("Ofast"))) int +f1 (float x) +{ + return __builtin_sqrtf (x) < __FLT_MIN__; +} + +__attribute__((noipa, optimize ("Ofast"))) int +f2 (float x) +{ + return __builtin_sqrtf (x) < 0x1.2dd3d0p-65f; +} + +__attribute__((noipa, optimize ("Ofast"))) int +f3 (float x) +{ + return __builtin_sqrtf (x) >= 0x1.2dd3d0p-65f; +} + +__attribute__((noipa, optimize ("Ofast"))) int +f4 (float x) +{ + return __builtin_sqrtf (x) >= 0x1.5642e6p+54f; +} + +__attribute__((noipa, optimize ("Ofast"))) int +f5 (float x) +{ + return __builtin_sqrtf (x) > 0x1.5642e6p+54f; +} + +__attribute__((noipa, optimize ("Ofast"))) int +f6 (float x) +{ + return __builtin_sqrtf (x) < 0x1.4da1cp-19f; +} + +__attribute__((noipa, optimize ("Ofast"))) int +f7 (float x) +{ + return __builtin_sqrtf (x) <= 0x1.4da1cp-19f; +} + +__attribute__((noipa, optimize ("Ofast"))) int +f8 (float x) +{ + return __builtin_sqrtf (x) < 0x1.50cb62p-65f; +} + +__attribute__((noipa, optimize ("Ofast"))) int +f9 (float x) +{ + return __builtin_sqrtf (x) <= 0x1.4fc00cp-73f; +} + +__attribute__((noipa, optimize ("Ofast"))) int +f10 (float x) +{ + return __builtin_sqrtf (x) < 0x1.001002p+0f; +} + +int +main () +{ + if (__FLT_RADIX__ != 2 + || __FLT_MANT_DIG__ != 24 + || __FLT_MIN_EXP__ != -125 + || __FLT_MAX_EXP__ != 128 + || __FLT_HAS_DENORM__ != 1 + || __FLT_HAS_INFINITY__ != 1) + return 0; + if (!f1 (0.0f) || f1 (0x1.0p-149f)) + __builtin_abort (); + if (!f2 (0x1.63dbc0p-130f)) + __builtin_abort (); + if (f3 (0x1.63dbc0p-130f)) + __builtin_abort (); + if (!f4 (0x1.c996d0p+108f) || !f4 (0x1.c996cep+108f) || f4 (0x1.c996ccp+108f)) + __builtin_abort (); + if (f5 (0x1.c996d0p+108f) || f5 (0x1.c996d2p+108f) || !f5 (0x1.c996d4p+108f)) + __builtin_abort (); + if (!f6 (0x1.b2ce3p-38f) || f6 (0x1.b2ce32p-38f) || f6 (0x1.b2ce34p-38f)) + __builtin_abort (); + if (!f7 (0x1.b2ce3p-38f) || !f7 (0x1.b2ce34p-38f) || !f7 (0x1.b2ce36p-38f) || f7 (0x1.b2ce38p-38f)) + __builtin_abort (); + if (!f8 (0x1.bb166p-130f) || !f8 (0x1.bb168p-130f) || f8 (0x1.bb16ap-130f) || f8 (0x1.bb16cp-130f)) + __builtin_abort (); + if (!f9 (0x1.8p-146f) || !f9 (0x1.ap-146f) || f9 (0x1.cp-146f) || f9 (0x1.ep-146f)) + __builtin_abort (); + if (f10 (0x1.002004p+0f)) + __builtin_abort (); + return 0; +} Index: gcc/testsuite/gcc.dg/torture/pr91445.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/torture/pr91445.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.dg/torture/pr91445.c (.../branches/gcc-9-branch) @@ -0,0 +1,22 @@ +/* { dg-do run } */ + +struct S { _Bool x; }; + +void +foo (struct S *s) +{ + __builtin_memset (s, 0x11, sizeof (struct S)); + s->x = 1; +} + +int +main () +{ + struct S s; + foo (&s); + char c; + __builtin_memcpy (&c, &s.x, 1); + if (c != 1) + __builtin_abort (); + return 0; +} Index: gcc/testsuite/gcc.dg/torture/pr91812.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/torture/pr91812.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.dg/torture/pr91812.c (.../branches/gcc-9-branch) @@ -0,0 +1,26 @@ +/* { dg-do compile } */ +/* { dg-skip-if "" { *-*-* } { "-fno-fat-lto-objects" } { "" } } */ +/* { dg-options "-fdump-tree-optimized-blocks" } */ + +unsigned register1; +unsigned register2; + +void busy_wait_for_register (int x) +{ + volatile unsigned* ptr; + switch(x) { + case 0x1111: + ptr = ®ister1; + break; + + case 0x2222: + ptr = ®ister2; + break; + + default: + return; + } + while (*ptr) {} +} + +/* { dg-final { scan-tree-dump "loop depth 1" "optimized" } } */ Index: gcc/testsuite/gcc.dg/torture/pr90278.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/torture/pr90278.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.dg/torture/pr90278.c (.../branches/gcc-9-branch) @@ -0,0 +1,13 @@ +/* { dg-do compile } */ +/* { dg-additional-options "-fexceptions -fnon-call-exceptions" } */ + +double +hc (void) +{ + double dp = 0.0; + double ek[1]; + + ek[0] = 1.0 / dp < 0.0; + + return ek[0]; +} Index: gcc/testsuite/gcc.dg/pr91720.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/pr91720.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.dg/pr91720.c (.../branches/gcc-9-branch) @@ -0,0 +1,22 @@ +/* PR rtl-optimization/91720 */ +/* { dg-do run } */ +/* { dg-options "-Og -fno-forward-propagate -frerun-cse-after-loop -fno-tree-fre" } */ + +unsigned a, b; + +int +main () +{ +#if __CHAR_BIT__ == 8 + unsigned c = 1; + unsigned long long d = 0; + unsigned char e = 0; + e = __builtin_sub_overflow (d, e, &a) ? 0 : 0x80; + e = e << 7 | e >> c; + __builtin_memmove (&d, &a, 2); + b = e; + if (b != 0x40) + __builtin_abort (); +#endif + return 0; +} Index: gcc/testsuite/gcc.dg/pr89435.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/pr89435.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.dg/pr89435.c (.../branches/gcc-9-branch) @@ -0,0 +1,21 @@ +/* PR rtl-optimization/89435 */ +/* { dg-do run } */ +/* { dg-options "-O1 -fno-forward-propagate -fno-tree-forwprop -fno-tree-ccp" } */ + +unsigned short a; +unsigned int b, c, d, e, f; + +int +main () +{ +#if __CHAR_BIT__ == 8 && __SIZEOF_INT__ == 4 + unsigned char g = e = __builtin_mul_overflow_p (5, 542624702, 0); + d = __builtin_bswap64 (a); + b = __builtin_sub_overflow ((unsigned char) -e, (unsigned int) d, &g); + e = __builtin_mul_overflow (b, c, &a); + f = g + e; + if (f != 0xff) + __builtin_abort (); +#endif + return 0; +} Index: gcc/testsuite/gcc.dg/vect/pr91665.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/vect/pr91665.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.dg/vect/pr91665.c (.../branches/gcc-9-branch) @@ -0,0 +1,15 @@ +/* PR tree-optimization/91665 */ +/* { dg-do compile } */ +/* { dg-additional-options "-Ofast" } */ + +short int v; + +void +foo (short int x, short int y) +{ + short int *p = &v; + + x = 1; + while (x != 0) + x += ++y || (*p = x); +} Index: gcc/testsuite/gcc.dg/vect/vect-fma-3.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/vect/vect-fma-3.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.dg/vect/vect-fma-3.c (.../branches/gcc-9-branch) @@ -0,0 +1,17 @@ +/* PR tree-optimization/91723 */ +/* { dg-do compile { target { scalar_all_fma || { i?86-*-* x86_64-*-* } } } } */ +/* { dg-additional-options "-mfma" { target { i?86-*-* x86_64-*-* } } } */ + +void +foo (double *restrict r, const double *restrict a, + const double *restrict b, const double *restrict c) +{ + for (int i = 0; i < 1024; i++) + { + double x = __builtin_fma (a[i], b[i], c[i]); + x = __builtin_fma (a[i], b[i], x); + r[i] = x; + } +} + +/* { dg-final { scan-tree-dump-times "LOOP VECTORIZED" 1 "vect" { target vect_double } } } */ Index: gcc/testsuite/gcc.dg/tree-ssa/gen-vect-32.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-32.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-32.c (.../branches/gcc-9-branch) @@ -1,6 +1,10 @@ /* { dg-do run { target vect_cmdline_needed } } */ /* { dg-options "-O2 -ftree-vectorize -fdump-tree-vect-details -fno-vect-cost-model" } */ /* { dg-additional-options "-mno-sse" { target { i?86-*-* x86_64-*-* } } } */ +/* The IBM Z backend sets the min-vect-loop-bound param to 2 to avoid + awkward epilogue code generation in some cases. This line needs to + be removed after finding an alternate way to fix this. */ +/* { dg-additional-options "--param min-vect-loop-bound=0" { target { s390*-*-* } } } */ #include Index: gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-11.c (.../branches/gcc-9-branch) @@ -1,6 +1,10 @@ /* { dg-do run { target vect_cmdline_needed } } */ /* { dg-options "-O2 -ftree-vectorize -fwrapv -fdump-tree-vect-details -fvect-cost-model=dynamic" } */ -/* { dg-options "-O2 -ftree-vectorize -fwrapv -fdump-tree-vect-details -fvect-cost-model=dynamic -mno-sse" { target { i?86-*-* x86_64-*-* } } } */ +/* { dg-additional-options "-mno-sse" { target { i?86-*-* x86_64-*-* } } } */ +/* The IBM Z backend sets the min-vect-loop-bound param to 2 to avoid + awkward epilogue code generation in some cases. This line needs to + be removed after finding an alternate way to fix this. */ +/* { dg-additional-options "--param min-vect-loop-bound=0" { target { s390*-*-* } } } */ #include Index: gcc/testsuite/gcc.dg/tree-ssa/pr91091-2.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/tree-ssa/pr91091-2.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.dg/tree-ssa/pr91091-2.c (.../branches/gcc-9-branch) @@ -0,0 +1,15 @@ +/* { dg-do compile } */ +/* { dg-options "-O2 -fdump-tree-fre1" } */ + +struct s { int x; }; +struct t { int x; }; + +void swap(struct s* p, struct t* q) +{ + p->x = q->x; + q->x = p->x; +} + +/* The second statement is redundant. */ +/* { dg-final { scan-tree-dump-times "x = " 1 "fre1" } } */ +/* { dg-final { scan-tree-dump-times " = \[^;\]*x;" 1 "fre1" } } */ Index: gcc/testsuite/gcc.dg/tree-ssa/gen-vect-26.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-26.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-26.c (.../branches/gcc-9-branch) @@ -30,5 +30,6 @@ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! avr-*-* } } } } */ -/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target { ! avr-*-* } } } } */ -/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { ! avr-*-* } } } } */ +/* IBM Z does not require special alignment for vectorization. */ +/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target { ! { avr-*-* s390*-*-* } } } } } */ +/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { ! { avr-*-* s390*-*-* } } } } } */ Index: gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.dg/tree-ssa/gen-vect-28.c (.../branches/gcc-9-branch) @@ -38,5 +38,6 @@ /* { dg-final { scan-tree-dump-times "vectorized 1 loops" 1 "vect" { target { ! avr-*-* } } } } */ -/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target { ! avr-*-* } } } } */ -/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { ! avr-*-* } } } } */ +/* IBM Z does not require special alignment for vectorization. */ +/* { dg-final { scan-tree-dump-times "Vectorizing an unaligned access" 0 "vect" { target { ! { avr-*-* s390*-*-* } } } } } */ +/* { dg-final { scan-tree-dump-times "Alignment of access forced using peeling" 1 "vect" { target { ! { avr-*-* s390*-*-* } } } } } */ Index: gcc/testsuite/gcc.dg/Wnonnull.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/Wnonnull.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.dg/Wnonnull.c (.../branches/gcc-9-branch) @@ -2,7 +2,10 @@ { dg-do compile } { dg-options "-O2 -Wall" } */ -#include +extern __SIZE_TYPE__ strlen (const char *__s) + __attribute ((pure)) __attribute ((nonnull (1))); +extern void *memcpy (void *__restrict __dest, const void *__restrict __src, + __SIZE_TYPE__ __n) __attribute ((nonnull (1, 2))); char buf[100]; @@ -14,9 +17,9 @@ __attribute ((nonnull (1, 2))) inline char* -my_strcpy (char *restrict dst, const char *restrict src, size_t size) +my_strcpy (char *restrict dst, const char *restrict src, __SIZE_TYPE__ size) { - size_t len = strlen (src); /* { dg-warning "argument 1 null where non-null expected" } */ + __SIZE_TYPE__ len = strlen (src); /* { dg-warning "argument 1 null where non-null expected" } */ if (len < size) memcpy (dst, src, len + 1); /* { dg-warning "argument 2 null where non-null expected" } */ else Index: gcc/testsuite/gcc.dg/pr89795.c =================================================================== --- a/src/gcc/testsuite/gcc.dg/pr89795.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/gcc.dg/pr89795.c (.../branches/gcc-9-branch) @@ -0,0 +1,25 @@ +/* PR rtl-optimization/89795 */ +/* { dg-do run } */ +/* { dg-options "-O2 -fno-dce -fno-forward-propagate -fno-sched-pressure" } */ + +unsigned char a; +unsigned b, c, d; + +int +main () +{ +#if __CHAR_BIT__ == 8 + unsigned x; + int e, f; + unsigned char g; + e = __builtin_bswap32 (a); + f = __builtin_ffs (~(unsigned short) e); + a = __builtin_mul_overflow ((unsigned char) 0xf7, f, &g); + a |= __builtin_sub_overflow_p (c, 0, (unsigned char) 0); + d = g + b; + x = d; + if (x != 0xf7) + __builtin_abort (); +#endif + return 0; +} Index: gcc/testsuite/ChangeLog =================================================================== --- a/src/gcc/testsuite/ChangeLog (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/ChangeLog (.../branches/gcc-9-branch) @@ -1,3 +1,817 @@ +2019-11-08 Jakub Jelinek + + PR c++/92384 + * g++.dg/torture/pr92384.C: New test. + + Backported from mainline + 2019-11-05 Jakub Jelinek + + PR c++/92343 + * g++.dg/cpp2a/attr-likely6.C: New test. + + 2019-10-31 Jakub Jelinek + + PR preprocessor/92296 + * c-c++-common/cpp/pr92296-1.c: New test. + * c-c++-common/cpp/pr92296-2.c: New test. + + PR middle-end/92231 + * gcc.c-torture/compile/pr92231.c: New test. + + 2019-10-21 Jakub Jelinek + + PR c++/92015 + * g++.dg/cpp0x/constexpr-92015.C: New test. + +2019-11-08 Eric Botcazou + + * gcc.c-torture/compile/20191108-1.c: New test. + * gcc.target/sparc/overflow-1.c: Add -fno-pie to the options. + * gcc.target/sparc/overflow-2.c: Likewise. + * gcc.target/sparc/overflow-3.c: Likewise. + * gcc.target/sparc/overflow-4.c: Likewise. + * gcc.target/sparc/overflow-5.c: Likewise. + +2019-11-06 Ilya Leoshkevich + + Backport from mainline + * gcc.target/s390/sigfpe-eh.c: New test. + +2019-11-05 Andreas Krebbel + + Backport from mainline + 2019-11-05 Andreas Krebbel + + * gcc.dg/tree-ssa/gen-vect-26.c: Disable loop peeling check for + IBM Z. + * gcc.dg/tree-ssa/gen-vect-28.c: Likewise. + +2019-11-05 Andreas Krebbel + + Backport from mainline + 2019-11-05 Andreas Krebbel + + * gcc.dg/tree-ssa/gen-vect-11.c: Add --param min-vect-loop-bound=0 + for IBM Z. + * gcc.dg/tree-ssa/gen-vect-32.c: Likewise. + +2019-11-05 Andreas Krebbel + + Backport from mainline + 2019-11-05 Andreas Krebbel + + * gcc.target/s390/s390.exp + (check_effective_target_s390_useable_hw): Add inline asm for z14 + and z15. Replace instruction for z13 with lochiz. Add register + clobbers. Check also for __zarch__ when doing the __VX__ test. + +2019-11-04 Iain Sandoe + + Backport from mainline. + 2019-06-20 Iain Sandoe + + * obj-c++.dg/stubify-1.mm: Adjust options and scan-asm checks. + * obj-c++.dg/stubify-2.mm: Likewise. + * objc.dg/stubify-1.m: Likewise. + * objc.dg/stubify-2.m: Likewise. + +2019-11-04 Tobias Burnus + + Backport from mainline + 2019-10-30 Tobias Burnus + + PR fortran/92208 + * gfortran.dg/pr92208.f90: New. + +2019-11-04 Tobias Burnus + + Backport from mainline + 2019-10-31 Jakub Jelinek + + PR fortran/92284 + * gfortran.dg/bind_c_array_params_3_aux.c: Include + ../../../libgfortran/ISO_Fortran_binding.h rather than + ISO_Fortran_binding.h. + + 2019-10-31 Tobias Burnus + + PR fortran/92284 + * gfortran.dg/bind-c-intent-out.f90: Update expected dump; + extend comment. + * gfortran.dg/bind_c_array_params_3.f90: New. + * gfortran.dg/bind_c_array_params_3_aux.c: New. + + 2019-10-31 Tobias Burnus + + PR fortran/92277 + * fortran.dg/pr92277.f90: New. + + +2019-10-30 Iain Sandoe + + Backport from mainline. + 2019-10-22 Iain Sandoe + + * gcc.dg/Wnonnull.c: Provide prototypes for strlen and memcpy. + Use __SIZE_TYPE__ instead of size_t. + + Backport from mainline. + 2019-10-19 Iain Sandoe + + * gcc.dg/Wnonnull.c: Add attributed function declarations for + memcpy and strlen for Darwin. + +2019-10-30 Iain Sandoe + + Backport from mainline. + 2019-10-13 Iain Sandoe + + * gcc.target/i386/indirect-thunk-1.c: Allow 'l' or 'L' in + indirection label prefix, for Darwin. + * gcc.target/i386/indirect-thunk-2.c: Likewise. + * gcc.target/i386/indirect-thunk-3.c: Likewise. + * gcc.target/i386/indirect-thunk-4.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-1.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-2.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-3.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-4.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-5.c: Likewise. + * gcc.target/i386/indirect-thunk-attr-6.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-1.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-2.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-3.c: Likewise. + * gcc.target/i386/indirect-thunk-extern-4.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-1.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-2.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-3.c: Likewise. + * gcc.target/i386/indirect-thunk-inline-4.c: Likewise. + * gcc.target/i386/pr32219-2.c: Likewise. + * gcc.target/i386/pr32219-3.c: Likewise. + * gcc.target/i386/pr32219-4.c: Likewise. + * gcc.target/i386/pr32219-7.c: Likewise. + * gcc.target/i386/pr32219-8.c: Likewise. + * gcc.target/i386/ret-thunk-14.c: Likewise. + * gcc.target/i386/ret-thunk-15.c: Likewise. + * gcc.target/i386/ret-thunk-9.c: Likewise. + +2019-10-30 Iain Sandoe + + Backport from mainline. + 2019-08-13 Iain Sandoe + + * obj-c++.dg/stubify-1.mm: Rename symbol stub option. + * obj-c++.dg/stubify-2.mm: Likewise. + * objc.dg/stubify-1.m: Likewise. + * objc.dg/stubify-2.m: Likewise. + +2019-10-30 Dragan Mladjenovic + + Backport from mainline + 2019-07-09 Dragan Mladjenovic + + * gcc.target/mips/cfgcleanup-jalr1.c: New test. + * gcc.target/mips/cfgcleanup-jalr2.c: New test. + * gcc.target/mips/cfgcleanup-jalr3.c: New test. + +2019-10-29 Jakub Jelinek + + PR c++/92201 + * g++.dg/other/pr92201.C: New test. + +2019-10-28  Paul Thomas   + + Backport from trunk + PR fortran/91926 + * gfortran.dg/ISO_Fortran_binding_13.f90: New test. + * gfortran.dg/ISO_Fortran_binding_13.c: Additional source. + * gfortran.dg/ISO_Fortran_binding_14.f90: New test. + +2019-10-28 Jiufu Guo + + Backport from mainline + PR target/70010 + * gcc.target/powerpc/pr70010.c: Add -Wno-psabi. + * gcc.target/powerpc/pr70010-1.c: Require LTO. + * gcc.target/powerpc/pr70010-2.c: Require LTO. + +2019-10-28 Uroš Bizjak + + PR target/92225 + * gcc.target/i386/pr92225.c: New test. + +2019-10-28 Ilya Leoshkevich + + Backport from mainline + PR rtl-optimization/92007 + * g++.dg/opt/pr92007.C: New test (from Arseny Solokha). + +2019-10-28 Peter Bergner + Jiufu Guo + + PR target/70010 + * gcc.target/powerpc/pr70010.c: New test. + * gcc.target/powerpc/pr70010-1.c: New test. + * gcc.target/powerpc/pr70010-2.c: New test. + * gcc.target/powerpc/pr70010-3.c: New test. + * gcc.target/powerpc/pr70010-4.c: New test. + +2019-10-28 Tobias Burnus + + Backport from mainline + 2019-10-28 Tobias Burnus + + PR fortran/91863 + * gfortran.dg/bind-c-intent-out.f90: New. + +2019-10-27 Paul Thomas + + Backport from mainline + PR fortran/86248 + * gfortran.dg/char_result_19.f90: New test. + * gfortran.dg/char_result_mod_19.f90: Module for the new test. + +2019-10-25 Richard Earnshaw + + Backport from mainline + 2019-05-08 Mihail Ionescu + Richard Earnshaw + PR target/88167 + * gcc.target/arm/pr88167-1.c: New test. + * gcc.target/arm/pr88167-2.c: New test. + +2019-10-24 Mihail Ionescu + + Backport from mainline + 2019-10-18 Andre Vieira + + * gcc.target/arm/multilib.exp: Add extra tests. + +2019-10-23 Martin Liska + + Backport from mainline + 2019-09-27 Jakub Jelinek + + PR tree-optimization/91885 + * gcc.dg/pr91885.c (__int64_t): Change from long to long long. + (__uint64_t): Change from unsigned long to unsigned long long. + +2019-10-23 Martin Liska + + Backport from mainline + 2019-09-26 Martin Liska + + PR tree-optimization/91885 + * gcc.dg/pr91885.c: New test. + +2019-10-23 Eric Botcazou + + * gcc.c-torture/execute/20191023-1.c: New test. + +2019-10-23 Richard Biener + + Backport from mainline + 2019-10-17 Richard Biener + + PR debug/91887 + * g++.dg/debug/dwarf2/pr91887.C: New testcase. + +2019-10-21 Jakub Jelinek + + Backported from mainline + 2019-10-17 Jakub Jelinek + + PR tree-optimization/92056 + * gcc.c-torture/compile/pr92056.c: New test. + + PR fortran/87752 + * gfortran.dg/gomp/pr87752.f90: New test. + + 2019-10-05 Jakub Jelinek + + PR tree-optimization/91734 + * gcc.dg/pr91734.c: New test. + + 2019-10-04 Jakub Jelinek + + PR c++/91974 + * g++.dg/cpp1z/eval-order5.C: New test. + + 2019-10-01 Jakub Jelinek + + PR c++/91925 + * g++.dg/conversion/packed2.C: New test. + + 2019-09-27 Jakub Jelinek + + PR c++/88203 + * c-c++-common/gomp/pr88203-1.c: New test. + * c-c++-common/gomp/pr88203-2.c: New test. + * c-c++-common/gomp/pr88203-3.c: New test. + + PR middle-end/91920 + * c-c++-common/gomp/pr91920.c: New test. + + 2019-09-11 Jakub Jelinek + + PR rtl-optimization/89435 + PR rtl-optimization/89795 + PR rtl-optimization/91720 + * gcc.dg/pr89435.c: New test. + * gcc.dg/pr89795.c: New test. + * gcc.dg/pr91720.c: New test. + + PR tree-optimization/91723 + * gcc.dg/vect/vect-fma-3.c: New test. + + 2019-09-07 Jakub Jelinek + + PR tree-optimization/91665 + * gcc.dg/vect/pr91665.c: New test. + + 2019-09-05 Jakub Jelinek + + PR middle-end/91001 + PR middle-end/91105 + PR middle-end/91106 + * gcc.c-torture/compile/pr91001.c: New test. + + 2019-09-02 Jakub Jelinek + + PR tree-optimization/91632 + * gcc.c-torture/execute/pr91632.c: New test. + + 2019-09-01 Jakub Jelinek + + PR middle-end/91623 + * gcc.target/i386/pr91623.c: New test. + + PR lto/91572 + * g++.dg/lto/pr91572_0.C: New test. + + 2019-08-29 Jakub Jelinek + + PR tree-optimization/91351 + * g++.dg/opt/pr91351.C: New test. + + 2019-08-09 Jakub Jelinek + + PR c/91401 + * c-c++-common/gomp/pr91401-1.c: New test. + * c-c++-common/gomp/pr91401-2.c: New test. + +2019-10-18 Steven G. Kargl + + PR fortran/69455 + * gfortran.dg/pr69455_1.f90: New test. + * gfortran.dg/pr69455_2.f90: Ditto. + +2019-10-18 Tobias Burnus + + Backport from mainline + 2019-10-18 Tobias Burnus + + PR fortran/91586 + * gfortran.dg/class_71.f90: New. + +2019-10-17 Steven G. Kargl + + PR fortran/83113 + PR fortran/89943 + * gfortran.dg/pr89943_1.f90: New test. + * gfortran.dg/pr89943_2.f90: Ditto. + * gfortran.dg/pr89943_3.f90: Ditto. + * gfortran.dg/pr89943_4.f90: Ditto. + +2019-10-17 Bill Schmidt + + Backport from mainline + 2019-10-15 Bill Schmidt + + PR target/92093 + * gcc.target/powerpc/pr91275.c: Fix type and endian issues. + +2019-10-16 Richard Biener + + Backport from mainline + 2019-10-02 Richard Biener + + PR c++/91606 + * g++.dg/torture/pr91606.C: New testcase. + + 2019-09-19 Richard Biener + + PR tree-optimization/91812 + * gcc.dg/torture/pr91812.c: New testcase. + +2019-10-14 Will Schmidt + + Backport from trunk. + 2019-09-26 Will Schmidt + + * gcc.target/powerpc/pure-builtin-redundant-load.c: New. + +2019-10-11 Steven G. Kargl + + PR fortran/91715 + * gfortran.dg/function_kinds_5.f90: Prune run-on error. + * gfortran.dg/pr85543.f90: Ditto. + * gfortran.dg/pr91715.f90: New test. + +2019-10-11 Steven G. Kargl + + PR fortran/91649 + * gfortran.dg/pr91649.f90: New test. + +2019-10-10 Steven G. Kargl + + PR fortran/91801 + * gfortran.dg/pr91801.f90: New test. + +2019-10-10 Uroš Bizjak + + PR target/92022 + * g++.dg/pr92022.C: New test. + +2019-10-07 Thomas Koenig + + Backport from trunk + PR fortran/84487 + * gfortran.dg/typebound_call_22.f03: xfail. + +2019-10-07 Bill Schmidt + + Backport from mainline + 2019-10-01 Bill Schmidt + + PR target/91275 + * gcc.target/powerpc/pr91275.c: New. + +2019-10-05 Steven G. Kargl + + PR fortran/47054 + * gfortran.dg/pr47054_1.f90: New test + * gfortran.dg/pr47054_2.f90: Ditto. + +2019-10-05 Steven G. Kargl + + PR fortran/91942 + * gfortran.dg/pr91587.f90: Update dg-error regex. + * gfortran.dg/pr91942.f90: New test. + +2019-10-04 Steven G. Kargl + + PR fortran/91785 + * gfortran.dg/pr91785.f90: New test. + +2019-10-04 Dragan Mladjenovic + + Backport from mainline + 2019-10-03 Dragan Mladjenovic + + PR target/91769 + * gcc.target/mips/pr91769.c: New test. + +2019-10-02 Bernd Edlinger + + Backport from mainline + + 2019-09-13 Bernd Edlinger + + PR fortran/91716 + * gfortran.dg/pr91716.f90: New test. + +2019-10-01 Steven G. Kargl + + PR fortran/91864 + * gcc/testsuite/gfortran.dg/pr91864.f90 + +2019-10-01 Steven G. Kargl + + PR fortran/91802 + * gfortran.dg/pr91802.f90: New test. + +2019-10-01 Steven G. Kargl + + PR fortran/91714 + * gfortran.dg/dec_type_print_3.f90: Update dg-error regex. + * gfortran.dg/pr91714.f90: New test. + +2019-10-01 Steven G. Kargl + + PR fortran/91641 + * gfortran.dg/pr91641.f90: New test. + +2019-10-01 Kyrylo Tkachov + + Backport from mainline + 2019-09-24 Kyrylo Tkachov + + * gcc.target/aarch64/nosplit-di-const-volatile_1.c: New test. + +2019-09-25 Kyrylo Tkachov + + Backport from mainline + 2019-08-22 Kyrylo Tkachov + + * gcc.target/arm/acle/crc_hf_1.c: New test. + +2019-09-21 Paul Thomas + + Backport from mainline + PR fortran/91588 + * gfortran.dg/associate_49.f90: New test. + +2019-09-20 Eric Botcazou + + * gcc.dg/pr91269.c: New test. + +2019-09-19 Steven G. Kargl + + PR fortran/91727 + * gfortran.dg/pr91727.f90: New test. + +2019-09-19 Kito Cheng + + Backport from mainline + 2019-09-05 Jakub Jelinek + Jim Wilson + + PR target/91635 + * gcc.c-torture/execute/pr91635.c: New test. + * gcc.target/riscv/shift-shift-4.c: New test. + * gcc.target/riscv/shift-shift-5.c: New test. + +2019-09-18 Thomas Koenig + + Backport from trunk + PR fortran/91550 + * gfortran.dg/do_subscript_6.f90: New test. + +2019-09-15 Thomas Koenig + + Backport from trunk + PR fortran/91557 + * gfortran.dg/warn_unused_dummy_argument_5.f90: New test. + +2019-09-14 Steven G. Kargl + + PR fortran/91553 + * gfortran.dg/pr91553.f90: New test. + +2019-09-14 Steven G. Kargl + + PR fortran/91566 + * gfortran.dg/pr91566.f90: New test. + +2019-09-14 Steven G. Kargl + + PR fortran/91642 + * gfortran.dg/pr91642.f90: New test. + +2019-09-11 Eric Botcazou + + * gcc.target/sparc/20161111-1.c: XFAIL redundant zero-extension test. + +2019-09-09 Jakub Jelinek + + PR target/87853 + * gcc.target/i386/pr87853.c: New test. + + PR target/91704 + * gcc.target/i386/pr91704.c: New test. + +2019-09-07 Paul Thomas + + Backport from mainline + PR fortran/91589 + * gfortran.dg/pr91589.f90: New test. + +2019-09-05 Harald Anlauf + + Backport from mainline + PR fortran/91496 + * gfortran.dg/pr91496.f90: New testcase. + + PR fortran/91496 + * gfortran.dg/directive_unroll_5.f90: Adjust error message. + +2019-09-05 Steven G. Kargl + + PR fortran/91660 + * gfortran.dg/pdt_4.f03: Fix invalid code. + * gfortran.dg/pr91660_1.f90: New test. + * gfortran.dg/pr91660_2.f90: Ditto. + +2019-09-04 Wilco Dijkstra + + Backport from mainline + 2019-08-13 Wilco Dijkstra + + PR target/81800 + * gcc.target/aarch64/no-inline-lrint_3.c: New test. + +2019-09-03 Jakub Jelinek + + PR tree-optimization/91597 + * gcc.c-torture/execute/pr91597.c: New test. + +2019-09-02 Steven G. Kargl + + PR fortran/91552 + * gfortran.dg/pr91552.f90: New test. + +2019-09-02 Martin Liska + + Backport from mainline + 2019-09-02 Martin Liska + + PR c++/91155 + * g++.dg/torture/pr91155.C: New test. + +2019-09-01 Eric Botcazou + + * gcc.c-torture/execute/20190901-1.c: New test. + +2019-08-30 Steven G. Kargl + + PR fortran/91587 + * gfortran.dg/pr91587.f90: New test. + +2019-08-30 Steven G. Kargl + + PR fortran/91565 + * gfortran.dg/pr91565.f90: New test. + +2019-08-30 Steven G. Kargl + + PR fortran/91564 + * gfortran.dg/pr91564.f90: New test. + +2019-08-30 Steven G. Kargl + + PR fortran/91551 + * gfortran.dg/allocated_3.f90 + +2019-08-30 Segher Boessenkool + + Backport from trunk + 2019-08-23 Segher Boessenkool + + PR target/91481 + * gcc.target/powerpc/darn-3.c: New testcase. + +2019-08-30 Richard Biener + + Backport from mainline + 2019-04-29 Richard Biener + + PR tree-optimization/90278 + * gcc.dg/torture/pr90278.c: New testcase. + +2019-08-29 Richard Biener + + PR tree-optimization/91568 + * gfortran.dg/pr91568.f: New testcase. + +2019-08-28 Richard Biener + + Backport from mainline + 2019-05-27 Richard Biener + + PR tree-optimization/90637 + * gcc.dg/gomp/pr90637.c: New testcase. + +2019-08-23 Mihailo Stojanovic + + * gcc.target/mips/get-fcsr-3.c: New test. + +2019-08-20 Eric Botcazou + + * gcc.c-torture/execute/20190820-1.c: New test. + +2019-08-18 Steven G. Kargl + + PR fortran/91485 + * gfortran.dg/pr91485.f90: New test. + +2019-08-17 Steven G. Kargl + + PR fortran/91471 + * gfortran.dg/pr91471.f90: New test. + +2019-08-17 Steven G. Kargl + + PR fortran/78739 + * fortran.dg/pr78739.f90: New test. + +2019-08-17 Steven G. Kargl + + PR fortran/78719 + * gfortran.dg/pr78719_1.f90: New test. + * gfortran.dg/pr78719_2.f90: Ditto. + * gfortran.dg/pr78719_3.f90: Ditto. + +2019-08-17 Steven G. Kargl + + PR fortran/82992 + * gfortran.dg/pr71649.f90: Adjust error messages. + * gfortran.dg/use_15.f90: Ditto. + * gfortran.dg/use_rename_8.f90: Ditto. + +2019-08-15 Richard Biener + + PR tree-optimization/91445 + * gcc.dg/torture/pr91445.c: New testcase. + + Backport from mainline + 2019-07-05 Richard Biener + + PR tree-optimization/91091 + * gcc.dg/tree-ssa/pr91091-2.c: New testcase. + +2019-08-14 Martin Sebor + + Backport from mainline + + 2019-08-01 Martin Sebor + + PR c++/90947 + * c-c++-common/array-1.c: New test. + * g++.dg/abi/mangle73.C: New test. + * g++.dg/cpp2a/nontype-class23.C: New test. + * g++.dg/init/array53.C: New test. + +2019-08-14 Jonathan Wakely + + PR c++/91436 + * g++.dg/lookup/missing-std-include-5.C: Limit test to C++14 and up. + * g++.dg/lookup/missing-std-include-6.C: Don't check make_unique in + test that runs for C++11. + * g++.dg/lookup/missing-std-include-8.C: Check make_unique here. + +2019-08-13 Steven G. Kargl + + PR fortran/87991 + * gfortran.dg/pr87991.f90: New test. + +2013-08-13 Thomas Koenig + + Backport from trunk + PR fortran/90563 + * gfortran.dg/do_subsript_5.f90: New test. + +2019-08-13 Steven G. Kargl + + PR fortran/88072 + * gfortran.dg/pr88072.f90: New test. + * gfortran.dg/unlimited_polymorphic_28.f90: Fix error message. + +2019-08-13 Thomas Koenig + + Backport from trunk + PR fortran/90561 + * gfortran.dg/deferred_character_34.f90: New test. + +2019-08-13 Steven G. Kargl + + PR fortran/89647 + * gfortran.dg/pr89647.f90: New test. + +2019-08-13 Steven G. Kargl + + PR fortran/87993 + * gfortran.dg/pr87993.f90: New test. + +2019-08-13 Thomas Koenig + + Backport from trunk + PR fortran/91424 + * gfortran.dg/do_subscript_3.f90: New test. + * gfortran.dg/do_subscript_4.f90: New test. + * gfortran.dg/pr70754.f90: Use indices that to not overflow. + +2019-08-12 Steven G. Kargl + + PR fortran/91359 + * gfortran.dg/pr91359_1.f: New test. + * gfortran.dg/pr91359_2.f: Ditto. + +2019-08-12 Steven G. Kargl + + PR fortran/42546 + * gfortran.dg/allocated_1.f90: New test. + * gfortran.dg/allocated_2.f90: Ditto. + +2019-08-02 Tom Honermann + + PR c++/88095 + * g++.dg/cpp2a/udlit-class-nttp-ctad.C: New test. + * g++.dg/cpp2a/udlit-class-nttp-ctad-neg.C: New test. + * g++.dg/cpp2a/udlit-class-nttp-ctad-neg2.C: New test. + * g++.dg/cpp2a/udlit-class-nttp.C: New test. + * g++.dg/cpp2a/udlit-class-nttp-neg.C: New test. + * g++.dg/cpp2a/udlit-class-nttp-neg2.C: New test. + 2019-08-12 Release Manager * GCC 9.2.0 released. @@ -427,7 +1241,7 @@ Backport from mainline. 2019-05-15 Iain Sandoe - * lib/target-supports.exp + * lib/target-supports.exp (check_effective_target_powerpc_p8vector_ok): No support for Darwin. (check_effective_target_powerpc_p9vector_ok): Likewise. (check_effective_target_powerpc_float128_sw_ok): Likewise. @@ -720,7 +1534,7 @@ Backport from mainline PR fortran/91077 - * gfortran.dg/pointer_array_11.f90 : New test. + * gfortran.dg/pointer_array_11.f90: New test. 2019-07-05 Szabolcs Nagy @@ -969,7 +1783,7 @@ * gcc.target/i386/pr82699-6.c: Likewise * gcc.target/i386/returninst1.c: Likewise * gcc.target/i386/returninst2.c: Likewise - * gcc.target/i386/returninst3.c : Likewise + * gcc.target/i386/returninst3.c: Likewise 2019-05-30 Iain Sandoe @@ -1131,7 +1945,7 @@ Backport from trunk PR fortran/90498 - * gfortran.dg/associate_48.f90 : New test. + * gfortran.dg/associate_48.f90: New test. 2019-05-17 Jakub Jelinek @@ -3801,21 +4615,21 @@ 2019-02-23 Paul Thomas PR fortran/88117 - * gfortran.dg/deferred_character_32.f90 : New test + * gfortran.dg/deferred_character_32.f90: New test 2019-02-23 Paul Thomas PR fortran/89385 - * gfortran.dg/ISO_Fortran_binding_1.f90 : Correct test for + * gfortran.dg/ISO_Fortran_binding_1.f90: Correct test for previously incorrect lbound for allocatable expressions. Also correct stop values to avoid repetition. - * gfortran.dg/ISO_Fortran_binding_5.f90 : New test - * gfortran.dg/ISO_Fortran_binding_5.c : Support previous test. + * gfortran.dg/ISO_Fortran_binding_5.f90: New test + * gfortran.dg/ISO_Fortran_binding_5.c: Support previous test. PR fortran/89366 - * gfortran.dg/ISO_Fortran_binding_6.f90 : New test - * gfortran.dg/ISO_Fortran_binding_6.c : Support previous test. - * gfortran.dg/pr32599.f03 : Set standard to F2008. + * gfortran.dg/ISO_Fortran_binding_6.f90: New test + * gfortran.dg/ISO_Fortran_binding_6.c: Support previous test. + * gfortran.dg/pr32599.f03: Set standard to F2008. 2019-02-22 David Malcolm @@ -4444,7 +5258,7 @@ 2019-02-09 Paul Thomas PR fortran/89200 - * gfortran.dg/array_reference_2.f90 : New test. + * gfortran.dg/array_reference_2.f90: New test. 2019-02-09 Jakub Jelinek @@ -4704,17 +5518,17 @@ 2019-02-02 Paul Thomas PR fortran/88393 - * gfortran.dg/alloc_comp_assign_16.f03 : New test. + * gfortran.dg/alloc_comp_assign_16.f03: New test. 2019-02-02 Paul Thomas PR fortran/88980 - * gfortran.dg/realloc_on_assign_32.f90 : New test. + * gfortran.dg/realloc_on_assign_32.f90: New test. 2019-02-02 Paul Thomas PR fortran/88685 - * gfortran.dg/pointer_array_component_3.f90 : New test. + * gfortran.dg/pointer_array_component_3.f90: New test. 2019-02-02 Jakub Jelinek Index: gcc/testsuite/g++.dg/lookup/missing-std-include-8.C =================================================================== --- a/src/gcc/testsuite/g++.dg/lookup/missing-std-include-8.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/lookup/missing-std-include-8.C (.../branches/gcc-9-branch) @@ -13,6 +13,15 @@ // { dg-error "expected primary-expression before '\\)' token" "" { target *-*-* } .-3 } } +template +void test_make_unique () +{ + std::make_unique(); // { dg-error "'make_unique' is not a member of 'std'" } + // { dg-message "'std::make_unique' is only available from C\\+\\+14 onwards" "" { target *-*-* } .-1 } + // { dg-error "expected primary-expression before '>' token" "" { target *-*-* } .-2 } + // { dg-error "expected primary-expression before '\\)' token" "" { target *-*-* } .-3 } +} + void test_array () { std::array a; // { dg-error "'array' is not a member of 'std'" } Index: gcc/testsuite/g++.dg/lookup/missing-std-include-5.C =================================================================== --- a/src/gcc/testsuite/g++.dg/lookup/missing-std-include-5.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/lookup/missing-std-include-5.C (.../branches/gcc-9-branch) @@ -1,2 +1,3 @@ +// { dg-do compile { target c++14 } } using namespace std::complex_literals; // { dg-error "" } // { dg-message "#include " "" { target *-*-* } .-1 } Index: gcc/testsuite/g++.dg/lookup/missing-std-include-6.C =================================================================== --- a/src/gcc/testsuite/g++.dg/lookup/missing-std-include-6.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/lookup/missing-std-include-6.C (.../branches/gcc-9-branch) @@ -11,15 +11,6 @@ // { dg-error "expected primary-expression before '\\)' token" "" { target *-*-* } .-3 } } -template -void test_make_unique () -{ - auto p = std::make_unique(); // { dg-error "'make_unique' is not a member of 'std'" } - // { dg-message "'#include '" "" { target *-*-* } .-1 } - // { dg-error "expected primary-expression before '>' token" "" { target *-*-* } .-2 } - // { dg-error "expected primary-expression before '\\)' token" "" { target *-*-* } .-3 } -} - std::shared_ptr test_shared_ptr; // { dg-error "'shared_ptr' in namespace 'std' does not name a template type" } // { dg-message "'#include '" "" { target *-*-* } .-1 } Index: gcc/testsuite/g++.dg/conversion/packed2.C =================================================================== --- a/src/gcc/testsuite/g++.dg/conversion/packed2.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/conversion/packed2.C (.../branches/gcc-9-branch) @@ -0,0 +1,15 @@ +// PR c++/91925 +// { dg-do compile { target c++11 } } +// { dg-options "-fpack-struct" } + +struct A {}; +int foo (A); +struct B { + A a; + decltype (foo (a)) p; +}; +template T bar (T); +class C { + A a; + decltype (bar (a)) p; +}; Index: gcc/testsuite/g++.dg/lto/pr91572_0.C =================================================================== --- a/src/gcc/testsuite/g++.dg/lto/pr91572_0.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/lto/pr91572_0.C (.../branches/gcc-9-branch) @@ -0,0 +1,12 @@ +// PR lto/91572 +// { dg-lto-do link } +// { dg-lto-options { { -O -fPIC -flto } } } +// { dg-require-effective-target shared } +// { dg-require-effective-target fpic } +// { dg-extra-ld-options "-shared" } + +void foo (char); +namespace N { + class A { A (); }; + A::A () { asm ("" : : "g" (0)); } +} Index: gcc/testsuite/g++.dg/warn/Wsign-conversion-5.C =================================================================== --- a/src/gcc/testsuite/g++.dg/warn/Wsign-conversion-5.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/warn/Wsign-conversion-5.C (.../branches/gcc-9-branch) @@ -0,0 +1,18 @@ +// PR c++/87519 - bogus warning with -Wsign-conversion. +// { dg-options "-Wsign-conversion" } + +typedef unsigned long int uint64_t; + +void f(unsigned long int a, int q) +{ + a += a + q; // { dg-warning "may change the sign" } + + // Explicit cast should disable the warning. + a = a + static_cast(q); + a = a + (uint64_t) q; + a = a + uint64_t(q); + a = a + static_cast(q); + a = a + (const uint64_t) q; + a = a + static_cast(q); + a = a + static_cast(q); +} Index: gcc/testsuite/g++.dg/warn/ctor-dtor-privacy-4.C =================================================================== --- a/src/gcc/testsuite/g++.dg/warn/ctor-dtor-privacy-4.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/warn/ctor-dtor-privacy-4.C (.../branches/gcc-9-branch) @@ -0,0 +1,5 @@ +// PR c++/90884 +// { dg-options "-Wctor-dtor-privacy" } +// { dg-prune-output "In file included from" } + +#include "ctor-dtor-privacy-4.h" // { dg-bogus "is public" } Index: gcc/testsuite/g++.dg/warn/ctor-dtor-privacy-4.h =================================================================== --- a/src/gcc/testsuite/g++.dg/warn/ctor-dtor-privacy-4.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/warn/ctor-dtor-privacy-4.h (.../branches/gcc-9-branch) @@ -0,0 +1,7 @@ +#pragma GCC system_header + +namespace std { +struct __nonesuch { + __nonesuch(__nonesuch const &); +}; +} // namespace std Index: gcc/testsuite/g++.dg/debug/dwarf2/pr91887.C =================================================================== --- a/src/gcc/testsuite/g++.dg/debug/dwarf2/pr91887.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/debug/dwarf2/pr91887.C (.../branches/gcc-9-branch) @@ -0,0 +1,12 @@ +// { dg-do compile } +// { dg-require-effective-target c++11 } +// { dg-options "-g -fdebug-types-section" } +class A { +public: + A(); + template A(U); +}; +template struct B { typedef A type; }; +template +int Bind(R(Args...), typename B::type...) { return 0; } +void KeepBufferRefs(A, A) { A a, b(Bind(KeepBufferRefs, a, b)); } Index: gcc/testsuite/g++.dg/pr92022.C =================================================================== --- a/src/gcc/testsuite/g++.dg/pr92022.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/pr92022.C (.../branches/gcc-9-branch) @@ -0,0 +1,13 @@ +// { dg-do compile { target alpha*-*-* } } +// { dg-options "-O1 -g -fno-var-tracking -mcpu=ev4 -mieee" } + +struct a { + a(long); +}; +long b; +void c() { + a d(1); + double e = b; + for (; b;) + d = e; +} Index: gcc/testsuite/g++.dg/opt/pr91351.C =================================================================== --- a/src/gcc/testsuite/g++.dg/opt/pr91351.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/opt/pr91351.C (.../branches/gcc-9-branch) @@ -0,0 +1,38 @@ +// PR tree-optimization/91351 +// { dg-do run } +// { dg-options "-O2 -fstrict-enums" } + +enum E { e0, e1, e2, e3, e4, e5, e6, e7, e8, e9, e10, e11, e12, + e13, e14, e15, e16, e17, e18, e19, e20, e21, e22, e23, e24, e25 }; + +__attribute__((noipa)) void +foo () +{ + __builtin_abort (); +} + +__attribute__((noipa)) void +bar () +{ +} + +__attribute__((noipa)) void +baz (E e) +{ + switch (e) + { + case e11: + case e12: + case e13: foo (); break; + case e24: break; + case e14: + case e15: break; + default: bar (); break; + } +} + +int +main () +{ + baz (e3); +} Index: gcc/testsuite/g++.dg/opt/pr92007.C =================================================================== --- a/src/gcc/testsuite/g++.dg/opt/pr92007.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/opt/pr92007.C (.../branches/gcc-9-branch) @@ -0,0 +1,32 @@ +// PR rtl-optimization/92007 +// { dg-do compile } +// { dg-options "-O2 -fno-tree-dominator-opts -fno-tree-forwprop --param max-cse-insns=0 -Wno-return-type -std=gnu++98 -freorder-blocks-and-partition" } + +void +sb (int *); + +class d4 { +public: + ~d4(); + void gb (); + int op () { return no; } + int wl () { return tf; } + bool ee () try { gb (); } catch (...) { return false; } + bool b1 () { return (tf == no) ? false : ee (); } + +private: + int no, tf; +}; + +void +hs (int *v9) +{ + d4 p6; + + p6.gb (); + if (p6.op () > p6.wl ()) + { + p6.b1 (); + sb (v9); + } +} Index: gcc/testsuite/g++.dg/parse/operator8.C =================================================================== --- a/src/gcc/testsuite/g++.dg/parse/operator8.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/parse/operator8.C (.../branches/gcc-9-branch) @@ -0,0 +1,13 @@ +// PR c++/91521 - wrong error with operator->. +// { dg-do compile } + +struct foo { + int bar() { return 0; } + foo* operator->() { return this; } +}; + +int main() +{ + int pt(foo()->bar()); + return pt; +} Index: gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic9.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic9.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp0x/lambda/lambda-variadic9.C (.../branches/gcc-9-branch) @@ -0,0 +1,16 @@ +// PR c++/90538 +// { dg-do compile { target c++11 } } + +template +void f(Ts... ts) +{ + [=]{ + f(ts...); + f(ts...); + }(); +} + +void g() +{ + f(1); +} Index: gcc/testsuite/g++.dg/cpp0x/gen-attrs-68.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp0x/gen-attrs-68.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp0x/gen-attrs-68.C (.../branches/gcc-9-branch) @@ -0,0 +1,40 @@ +// PR c++/81429 - wrong parsing of constructor with C++11 attribute. +// { dg-do compile { target c++11 } } +// { dg-additional-options "-Wunused-parameter -Wno-pedantic" } + +void fn1([[maybe_unused]] int a) { } +void fn2(int a [[maybe_unused]]) { } +void fn3(__attribute__((unused)) int a) { } +void fn4(int a __attribute__((unused))) { } + +struct S1 { + S1([[maybe_unused]] int a) { } +}; + +struct S2 { + S2([[maybe_unused]] int f, [[maybe_unused]] int a) { } +}; + +struct S3 { + S3(int a [[maybe_unused]]) { } +}; + +struct S4 { + S4(int f [[maybe_unused]], int a [[maybe_unused]]) { } +}; + +struct S5 { + S5(__attribute__((unused)) int a) { } +}; + +struct S6 { + S6(__attribute__((unused)) int f, __attribute__((unused)) int a) { } +}; + +struct S7 { + S7(int a __attribute__((unused))) { } +}; + +struct S8 { + S8(int f __attribute__((unused)), int a __attribute__((unused))) { } +}; Index: gcc/testsuite/g++.dg/cpp0x/overload-conv-4.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp0x/overload-conv-4.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp0x/overload-conv-4.C (.../branches/gcc-9-branch) @@ -0,0 +1,23 @@ +// PR c++/90998 - ICE with copy elision in init by ctor and -Wconversion. +// { dg-do compile { target c++11 } } +// { dg-options "-Wconversion" } + +struct B; + +struct A { + operator B(); +}; + +struct B { + B(A const &rs); + B(B const &rs); +}; + +B +f (A x) +{ + // C++14: we call B::B(A const &) + // C++17: we call A::operator B() + return B(x); // { dg-warning "choosing .A::operator B\\(\\). over .B::B\\(const A&\\)" "" { target c++17 } } + // { dg-warning "for conversion from .A. to .B." "" { target c++17 } .-1 } +} Index: gcc/testsuite/g++.dg/cpp0x/nontype5.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp0x/nontype5.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp0x/nontype5.C (.../branches/gcc-9-branch) @@ -0,0 +1,17 @@ +// PR c++/91923 - failure-to-SFINAE with class type NTTP in C++17. +// { dg-do compile { target c++11 } } + +template +constexpr bool is_integral_(...) { + return false; +} +template +constexpr bool is_integral_(long) { + return true; +} + +static_assert(is_integral_(42), ""); +static_assert(!is_integral_(42), ""); + +struct S {}; +static_assert(!is_integral_(42), ""); Index: gcc/testsuite/g++.dg/cpp0x/constexpr-odr1.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp0x/constexpr-odr1.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp0x/constexpr-odr1.C (.../branches/gcc-9-branch) @@ -0,0 +1,19 @@ +// PR c++/92062 - ODR-use ignored for static member of class template. +// { dg-do run { target c++11 } } + +template struct A { + static const bool x; + static_assert(&x, ""); // odr-uses A<...>::x +}; + +int g; + +template +const bool A::x = (g = 42, false); + +void f(A<0>) {} // A<0> must be complete, so is instantiated +int main() +{ + if (g != 42) + __builtin_abort (); +} Index: gcc/testsuite/g++.dg/cpp0x/gen-attrs-69.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp0x/gen-attrs-69.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp0x/gen-attrs-69.C (.../branches/gcc-9-branch) @@ -0,0 +1,40 @@ +// PR c++/81429 - wrong parsing of constructor with C++11 attribute. +// { dg-do compile { target c++11 } } +// { dg-additional-options "-Wno-pedantic" } + +void fn1([[maybe_unused]] int); +void fn2(int a [[maybe_unused]]); +void fn3(__attribute__((unused)) int); +void fn4(int __attribute__((unused))); + +struct S1 { + S1([[maybe_unused]] int); +}; + +struct S2 { + S2([[maybe_unused]] int, [[maybe_unused]] int); +}; + +struct S3 { + S3(int a [[maybe_unused]]); +}; + +struct S4 { + S4(int a [[maybe_unused]], int b [[maybe_unused]]); +}; + +struct S5 { + S5(__attribute__((unused)) int); +}; + +struct S6 { + S6(__attribute__((unused)) int, __attribute__((unused)) int); +}; + +struct S7 { + S7(int __attribute__((unused))); +}; + +struct S8 { + S8(int __attribute__((unused)), int __attribute__((unused))); +}; Index: gcc/testsuite/g++.dg/cpp0x/nullptr42.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp0x/nullptr42.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp0x/nullptr42.C (.../branches/gcc-9-branch) @@ -0,0 +1,18 @@ +// PR c++/90473 - wrong code with nullptr in default argument. +// { dg-do run { target c++11 } } + +int g; +void f() { g++; } + +void fn1 (void* p = (f(), nullptr)) { } +void fn2 (int p = (f(), 0)) { } + +int main() +{ + fn1 (); + if (g != 1) + __builtin_abort (); + fn2 (); + if (g != 2) + __builtin_abort (); +} Index: gcc/testsuite/g++.dg/cpp0x/constexpr-odr2.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp0x/constexpr-odr2.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp0x/constexpr-odr2.C (.../branches/gcc-9-branch) @@ -0,0 +1,19 @@ +// PR c++/92062 - ODR-use ignored for static member of class template. +// { dg-do run { target c++11 } } + +template struct A { + static const bool x; + enum { force_instantiation =! &x}; // odr-uses A<...>::x +}; + +int g; + +template +const bool A::x = (g = 42, false); + +void f(A<0>) {} // A<0> must be complete, so is instantiated +int main() +{ + if (g != 42) + __builtin_abort (); +} Index: gcc/testsuite/g++.dg/cpp0x/range-for19.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp0x/range-for19.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp0x/range-for19.C (.../branches/gcc-9-branch) @@ -5,6 +5,6 @@ int main() { auto a; // { dg-error "no initializer" } - for(auto i: a) // { dg-error "deduce" } + for(auto i: a) ; } Index: gcc/testsuite/g++.dg/cpp0x/constexpr-92015.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp0x/constexpr-92015.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp0x/constexpr-92015.C (.../branches/gcc-9-branch) @@ -0,0 +1,7 @@ +// PR c++/92015 +// { dg-do compile { target c++11 } } + +struct S1 { char c[6] {'h', 'e', 'l', 'l', 'o', 0}; }; +struct S2 { char c[6] = "hello"; }; +static_assert (S1{}.c[0] == 'h', ""); +static_assert (S2{}.c[0] == 'h', ""); Index: gcc/testsuite/g++.dg/torture/pr91155.C =================================================================== --- a/src/gcc/testsuite/g++.dg/torture/pr91155.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/torture/pr91155.C (.../branches/gcc-9-branch) @@ -0,0 +1,18 @@ +/* PR c++/91155. */ + +template< char C > struct dummy {}; + +template< typename T > const char *test() +{ + __builtin_printf ("test: %s\n", __PRETTY_FUNCTION__); + return __PRETTY_FUNCTION__; +} + +int main() +{ + if (__builtin_strcmp ("const char* test() [with T = dummy<\'\\000\'>]", test< dummy< '\0' > > ()) != 0) + {};// __builtin_abort (); + if (__builtin_strcmp ("const char* test() [with T = dummy<\'\\\'\'>]", test< dummy< '\'' > > ()) != 0) + {};// __builtin_abort (); + return 0; +} Index: gcc/testsuite/g++.dg/torture/pr92384.C =================================================================== --- a/src/gcc/testsuite/g++.dg/torture/pr92384.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/torture/pr92384.C (.../branches/gcc-9-branch) @@ -0,0 +1,38 @@ +// PR c++/92384 +// { dg-do run } + +struct S {}; +struct T : public S { S a, b, c, d, e, f, g, h, i, j, k, l, m; }; +struct U { long long a, b, c; }; + +U +foo (S, S, S, T, T, T, U g) +{ + return g; +} + +__attribute__((noipa)) bool +bar (S a, S b, S c, T d, T e, T f, U g, void **h) +{ + h[0] = (void *) &a; + h[1] = (void *) &b; + h[2] = (void *) &c; + h[3] = (void *) &d; + h[4] = (void *) &e; + h[5] = (void *) &f; + h[6] = (void *) &g; + asm volatile ("" : : "r" (h) : "memory"); + return (h[0] != h[1] && h[1] != h[2] && h[2] != h[3] + && h[3] != h[4] && h[4] != h[5] && h[5] != h[6]); +} + +int +main () +{ + S a; + T b; + U c = { 1, 2, 3 }; + void *d[7]; + if (!bar (a, a, a, b, b, b, c, d)) + __builtin_abort (); +} Index: gcc/testsuite/g++.dg/torture/pr91606.C =================================================================== --- a/src/gcc/testsuite/g++.dg/torture/pr91606.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/torture/pr91606.C (.../branches/gcc-9-branch) @@ -0,0 +1,109 @@ +/* { dg-do run } */ +/* { dg-additional-options "-fstrict-aliasing" } */ + +#include +#include +#include + +template +struct variant +{ + constexpr variant(T1 arg) + : f1(arg), + index(0) + {} + + constexpr variant(T2 arg) + : f2(arg), + index(1) + {} + + union + { + T1 f1; + T2 f2; + }; + std::size_t index = 0; +}; + +template +constexpr const T1* get_if(const variant* v) +{ + if (v->index != 0) + { + return nullptr; + } + return &v->f1; +} + +template +constexpr const T2* get_if(const variant* v) +{ + if (v->index != 1) + { + return nullptr; + } + return &v->f2; +} + +template +struct my_array +{ + constexpr const T* begin() const + { + return data; + } + + constexpr const T* end() const + { + return data + N; + } + + T data[N]; +}; + +template +constexpr auto get_array_of_variants(Ts ...ptrs) +{ + return std::array...>, sizeof...(Ts)>{ ptrs... }; +} + +template +constexpr auto get_member_functions(); + +template +constexpr int getFuncId(Member (Class::*memFuncPtr)) +{ + int idx = 0u; + for (auto &anyFunc : get_member_functions()) + { + if (auto *specificFunc = get_if(&anyFunc)) + { + if (*specificFunc == memFuncPtr) + { + return idx; + } + } + ++idx; + } + std::abort(); +} + +struct MyStruct +{ + void fun1(int /*a*/) {} + + int fun2(char /*b*/, short /*c*/, bool /*d*/) { return 0; } + +}; + +template <> +constexpr auto get_member_functions() +{ + return get_array_of_variants(&MyStruct::fun1, &MyStruct::fun2); +} + +int main() +{ + return getFuncId(&MyStruct::fun1); +} Index: gcc/testsuite/g++.dg/cpp1y/dr1560.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp1y/dr1560.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp1y/dr1560.C (.../branches/gcc-9-branch) @@ -1,14 +0,0 @@ -// Core 1560 -// { dg-do compile { target c++14 } } - -struct A -{ - A(); - A(const A&) = delete; -}; - -void f(bool b) -{ - A a; - b ? a : throw 42; -} Index: gcc/testsuite/g++.dg/cpp1y/constexpr-incr2.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp1y/constexpr-incr2.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp1y/constexpr-incr2.C (.../branches/gcc-9-branch) @@ -0,0 +1,66 @@ +// PR c++/91705 - constexpr evaluation rejects ++/-- on floats. +// { dg-do compile { target c++14 } } + +#define SA(X) static_assert((X),#X) + +template +constexpr T fn1(T t) +{ + return ++t; +} + +constexpr float fn2(float t) +{ + return ++t; +} + +template +constexpr T fn3(T t) +{ + return --t; +} + +constexpr float fn4(float t) +{ + return --t; +} + +template +constexpr T fn5(T t) +{ + return t++; +} + +constexpr float fn6(float t) +{ + return t++; +} + +template +constexpr T fn7(T t) +{ + return t--; +} + +constexpr float fn8(float t) +{ + return t--; +} + +constexpr double r1 = fn1(2.0f); +SA(r1 == 3); +constexpr double r2 = fn2(2.0f); +SA(r2 == 3); +constexpr double r3 = fn3(2.0f); +SA(r3 == 1); +constexpr double r4 = fn4(2.0f); +SA(r4 == 1); + +constexpr double r5 = fn5(2.0f); +SA(r5 == 2); +constexpr double r6 = fn6(2.0f); +SA(r6 == 2); +constexpr double r7 = fn7(2.0f); +SA(r7 == 2); +constexpr double r8 = fn8(2.0f); +SA(r8 == 2); Index: gcc/testsuite/g++.dg/cpp1y/lambda-init16.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp1y/lambda-init16.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp1y/lambda-init16.C (.../branches/gcc-9-branch) @@ -3,7 +3,7 @@ template < class T = int > void f (T) { - auto g = [&a = f] () {}; // { dg-error "invalid initialization" } + auto g = [&a = f] () {}; // { dg-error "auto" } } int main () Index: gcc/testsuite/g++.dg/cpp1y/var-templ63.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp1y/var-templ63.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp1y/var-templ63.C (.../branches/gcc-9-branch) @@ -0,0 +1,5 @@ +// PR c++/91740 - ICE with constexpr call and ?: in ARRAY_REF. +// { dg-do compile { target c++14 } } + +constexpr bool f(const char*) { return true; } +template const char c = "FOO"[f("BAR") ? 1 : 0]; Index: gcc/testsuite/g++.dg/cpp1y/nontype1.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp1y/nontype1.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp1y/nontype1.C (.../branches/gcc-9-branch) @@ -0,0 +1,42 @@ +// PR c++/91129 - wrong error with binary op in template argument. +// { dg-do compile { target c++14 } } + +template +struct C +{ + constexpr operator T() const { return v; } + constexpr auto operator()() const { return v; } +}; + +template +struct A +{ +}; + +template +void foo () +{ + A{}> a0; + A{}> a1; + A{}> a2; + A{}> a3; + A{}> a4; + A{}> a5; + A{}> a6; + A{}> a7; + A{}> a8; + A{}> a9; + A{}> a10; + A> C{})> a11; + A{}> a12; + A{}> a13; + A{}> a14; + A{}> a15; + A{}> a16; + A{}> a17; +} + +int main() +{ + foo<10>(); +} Index: gcc/testsuite/g++.dg/cpp1y/auto-fn56.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp1y/auto-fn56.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp1y/auto-fn56.C (.../branches/gcc-9-branch) @@ -0,0 +1,19 @@ +// PR c++/91378 +// { dg-do compile { target c++14 } } + +struct B +{ + int i; +}; + +struct C +{ + template static auto + g(B b) noexcept(noexcept(b.i)) { } +}; + +template +void h(T t) +{ + C::g({}); +} Index: gcc/testsuite/g++.dg/cpp1z/decomp50.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp1z/decomp50.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp1z/decomp50.C (.../branches/gcc-9-branch) @@ -0,0 +1,51 @@ +// PR c++/92106 - ICE with structured bindings and -Wreturn-local-addr. +// { dg-do compile { target c++17 } } + +template struct B; +template struct B<_Tp *> { typedef _Tp& reference; }; +struct C { + template using rebind = _Up *; +}; +template class D { +public: + typename B<_Iterator>::reference operator*(); + void operator++(); +}; + +template +bool operator!=(D<_Iterator, _Container>, D<_Iterator, _Container>); +template class F { +public: + typedef _Tp value_type; +}; + +template struct G { + template struct H { using type = C::rebind<_Tp>; }; + using const_pointer = typename H::type; +}; +template > class I { + typedef D::const_pointer, int> const_iterator; + +public: + const_iterator begin(); + const_iterator end(); +}; + +struct A { + struct J { + int name; + int value; + }; + I members; + template const int *find(Key) { + for (const auto &[name, value] : members) + // See + // for why we don't warn here. + return &value; // { dg-bogus "address of local variable" } + return nullptr; + } +}; +int main() { + A a; + a.find(""); +} Index: gcc/testsuite/g++.dg/cpp1z/eval-order5.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp1z/eval-order5.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp1z/eval-order5.C (.../branches/gcc-9-branch) @@ -0,0 +1,31 @@ +// PR c++/91974 +// { dg-do run } +// { dg-options "-fstrong-eval-order" } + +extern "C" void abort (); + +bool ok = false; + +void +foo (int x) +{ + if (x != 0) + abort (); + ok = true; +} + +void +bar (int) +{ + abort (); +} + +int +main () +{ + typedef void (*T) (int); + T fn = foo; + fn ((fn = bar, 0)); + if (fn != bar || !ok) + abort (); +} Index: gcc/testsuite/g++.dg/ext/is_final.C =================================================================== --- a/src/gcc/testsuite/g++.dg/ext/is_final.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/ext/is_final.C (.../branches/gcc-9-branch) @@ -43,3 +43,17 @@ static_assert( __is_final (Ff), "Ff is final" ); static_assert( __is_final (Ff), "Ff is final" ); +// PR 85254 + +template struct final_trait_wrap{ typedef T type; }; + +template struct my_is_final +{ + static const bool value = __is_final(typename final_trait_wrap::type); +}; + +struct final1 final {}; +template struct final2 final {}; + +static_assert( my_is_final::value, "final1 is final" ); +static_assert( my_is_final>::value, "final2 is final" ); Index: gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-neg2.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-neg2.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-neg2.C (.../branches/gcc-9-branch) @@ -0,0 +1,13 @@ +// PR c++/88095 +// Test class non-type template parameters for literal operator templates. +// Validate that non-literal class types are rejected. +// { dg-do compile { target c++2a } } + +struct non_literal_class { + constexpr non_literal_class(...) { } + ~non_literal_class() {} + // auto operator<=> (const non_literal_fixed_string&) = default; +}; + +template // { dg-error "11:is not a valid type for a template non-type parameter because it is not literal" } +int operator"" _udl(); // { dg-error "literal operator template .int operator\"\"_udl\\(\\). has invalid parameter list" } Index: gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-ctad.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-ctad.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-ctad.C (.../branches/gcc-9-branch) @@ -0,0 +1,24 @@ +// PR c++/88095 +// Test class non-type template parameters for literal operator templates. +// Validate support for class template argument deduction. +// { dg-do compile { target c++2a } } + +namespace std { +using size_t = decltype(sizeof(int)); +} + +template +struct fixed_string { + constexpr static std::size_t length = N; + constexpr fixed_string(...) { } + // auto operator<=> (const fixed_string&) = default; +}; +template +fixed_string(const CharT (&str)[N]) -> fixed_string; + +template +constexpr std::size_t operator"" _udl() { + return decltype(fs)::length; +} + +static_assert("test"_udl == 5); Index: gcc/testsuite/g++.dg/cpp2a/attr-likely6.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp2a/attr-likely6.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp2a/attr-likely6.C (.../branches/gcc-9-branch) @@ -0,0 +1,14 @@ +// PR c++/92343 +// { dg-do compile { target c++14 } } + +constexpr bool +foo (bool x) +{ + if (x) + [[unlikely]] return true; + else + [[likely]] return false; +} + +static_assert (foo (true), ""); +static_assert (!foo (false), ""); Index: gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp.C (.../branches/gcc-9-branch) @@ -0,0 +1,16 @@ +// PR c++/88095 +// Test class non-type template parameters for literal operator templates. +// Validate basic support. +// { dg-do compile { target c++2a } } + +struct literal_class { + constexpr literal_class(...) { } + // auto operator<=> (const fixed_string&) = default; +}; + +template +constexpr int operator"" _udl() { + return 1; +} + +static_assert("test"_udl == 1); Index: gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-ctad-neg2.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-ctad-neg2.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-ctad-neg2.C (.../branches/gcc-9-branch) @@ -0,0 +1,20 @@ +// PR c++/88095 +// Test class non-type template parameters for literal operator templates. +// Validate rejection of class template parameter packs. +// { dg-do compile { target c++2a } } + +namespace std { +using size_t = decltype(sizeof(int)); +} + +template +struct fixed_string { + constexpr static std::size_t length = N; + constexpr fixed_string(...) { } + // auto operator<=> (const fixed_string&) = default; +}; +template +fixed_string(const CharT (&str)[N]) -> fixed_string; + +template +int operator"" _udl(); // { dg-error "literal operator template .int operator\"\"_udl\\(\\). has invalid parameter list" } Index: gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-neg.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-neg.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-neg.C (.../branches/gcc-9-branch) @@ -0,0 +1,12 @@ +// PR c++/88095 +// Test class non-type template parameters for literal operator templates. +// Validate that parameter packs are rejected. +// { dg-do compile { target c++2a } } + +struct literal_class { + constexpr literal_class(...) { } + // auto operator<=> (const fixed_string&) = default; +}; + +template +int operator"" _udl(); // { dg-error "literal operator template .int operator\"\"_udl\\(\\). has invalid parameter list" } Index: gcc/testsuite/g++.dg/cpp2a/nontype-class23.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp2a/nontype-class23.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp2a/nontype-class23.C (.../branches/gcc-9-branch) @@ -0,0 +1,102 @@ +// PR c++/90947 - Simple lookup table of array of strings is miscompiled +// Test to verify that the same specializations on non-type template +// parameters of class types are in fact treated as the same. Unlike +// nontype-class15.C which involves only one-dimensional arrays this +// test involves arrays of arrays and arrays of structs. +// { dg-do compile { target c++2a } } + +struct AA3 +{ + const char a[2][2][2]; +}; + +template struct BAA3 { }; + +// Redeclare the same variable using different initialization forms +// of the same constant to verify that they are in fact all recognized +// as the same. +extern BAA3 baa3; +extern BAA3 baa3; +extern BAA3 baa3; +extern BAA3 baa3; +extern BAA3 baa3; +extern BAA3 baa3; +extern BAA3 baa3; +extern BAA3 baa3; +extern BAA3 baa3; +extern BAA3 baa3; +extern BAA3 baa3; +extern BAA3 baa3; +extern BAA3 baa3; +extern BAA3 baa3; +extern BAA3 baa3; +extern BAA3 baa3; +extern BAA3 baa3; +extern BAA3 baa3; +extern BAA3 baa3; +extern BAA3 baa3; + +extern BAA3 baa3_1; +extern BAA3 baa3_1; +extern BAA3 baa3_1; + +extern BAA3 baa3_2; +extern BAA3 baa3_2; +extern BAA3 baa3_2; +extern BAA3 baa3_2; + +extern BAA3 baa3_3; +extern BAA3 baa3_3; +extern BAA3 baa3_3; + +extern BAA3 baa3_4; +extern BAA3 baa3_4; +extern BAA3 baa3_4; + +struct AS2 +{ + struct S { const char a[2], *p; } a[2]; +}; + +template struct BAS2 { }; + +extern BAS2 bas2; +extern BAS2 bas2; +extern BAS2 bas2; +extern BAS2 bas2; +extern BAS2 bas2; +extern BAS2 bas2; +extern BAS2 bas2; +extern BAS2 bas2; +extern BAS2 bas2; +extern BAS2 bas2; +extern BAS2 bas2; +extern BAS2 bas2; + +struct AS2_2 +{ + struct S { const char a[2], *p; } a[2][2]; +}; + +template struct BAS2_2 { }; + +extern BAS2_2 b2_2; +extern BAS2_2 b2_2; +extern BAS2_2 b2_2; +extern BAS2_2 b2_2; +extern BAS2_2 b2_2; +extern BAS2_2 b2_2; +extern BAS2_2 b2_2; +extern BAS2_2 b2_2; +extern BAS2_2 b2_2; +extern BAS2_2 b2_2; +extern BAS2_2 b2_2; +extern BAS2_2 b2_2; +extern BAS2_2 b2_2; +extern BAS2_2 b2_2; +extern BAS2_2 b2_2; +extern BAS2_2 b2_2; +extern BAS2_2 b2_2; +extern BAS2_2 b2_2; +extern BAS2_2 b2_2; +extern BAS2_2 b2_2; Index: gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-ctad-neg.C =================================================================== --- a/src/gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-ctad-neg.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/cpp2a/udlit-class-nttp-ctad-neg.C (.../branches/gcc-9-branch) @@ -0,0 +1,24 @@ +// PR c++/88095 +// Test class non-type template parameters for literal operator templates. +// Validate handling of failed class template argument deduction. +// { dg-do compile { target c++2a } } + +namespace std { +using size_t = decltype(sizeof(int)); +} + +template +struct fixed_string { + constexpr static std::size_t length = N; + constexpr fixed_string(...) { } + // auto operator<=> (const fixed_string&) = default; +}; +// Missing deduction guide. + +template +constexpr std::size_t operator"" _udl() { + return decltype(fs)::length; +} + +static_assert("test"_udl == 5); // { dg-error "15:no matching function for call to" } + // { dg-error "15:class template argument deduction failed" "" { target *-*-* } .-1 } Index: gcc/testsuite/g++.dg/expr/cond16.C =================================================================== --- a/src/gcc/testsuite/g++.dg/expr/cond16.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/expr/cond16.C (.../branches/gcc-9-branch) @@ -0,0 +1,25 @@ +// PR c++/90393 +// { dg-do run } + +int c, d; + +struct string { + string(const char *p): s(p) { ++c; } + ~string() { ++d; } + string(const string& str): s(str.s) { ++c; } + const char* s; + bool empty() const { return !s; } +}; + +string foo() +{ + string s("foo"); + return s.empty() ? throw "empty" : s; +} + +int main() +{ + foo(); + if (c != d) + __builtin_abort(); +} Index: gcc/testsuite/g++.dg/expr/cond15.C =================================================================== --- a/src/gcc/testsuite/g++.dg/expr/cond15.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/expr/cond15.C (.../branches/gcc-9-branch) @@ -0,0 +1,13 @@ +// PR c++/90393 + +struct S { + S(); + S(const S&) {} +}; + +S f() { + const S m; + return true ? m : throw 0; +} + +int main() {} Index: gcc/testsuite/g++.dg/abi/mangle73.C =================================================================== --- a/src/gcc/testsuite/g++.dg/abi/mangle73.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/abi/mangle73.C (.../branches/gcc-9-branch) @@ -0,0 +1,96 @@ +// { dg-do compile { target c++2a } } + +struct A +{ + char a[2][2]; +}; + +template struct B { }; + +typedef B AZZZZ; +typedef B AZZZ_; +typedef B AZZ__; +typedef B AZ___; +typedef B A____; + +typedef B AS_S_; +typedef B AS_ZZ; +typedef B AS_Z_; +typedef B AS___; + + +// Verify that the types mangle the same. +void a_zzzz (AZZZZ) { } +// { dg-final { scan-assembler "_Z6a_zzzz1BIXtl1AEEE" } } + +void a_zzz_ (AZZZ_) { } +// { dg-final { scan-assembler "_Z6a_zzz_1BIXtl1AEEE" } } + +void a_zz__ (AZZ__) { } +// { dg-final { scan-assembler "_Z6a_zz__1BIXtl1AEEE" } } + +void a_z___ (AZ___) { } +// { dg-final { scan-assembler "_Z6a_z___1BIXtl1AEEE" } } + +void a_____ (A____) { } +// { dg-final { scan-assembler "_Z6a_____1BIXtl1AEEE" } } + +void a_s_s_ (AS_S_) { } +// { dg-final { scan-assembler "_Z6a_s_s_1BIXtl1AEEE" } } + +void a_s_zz (AS_ZZ) { } +// { dg-final { scan-assembler "_Z6a_s_zz1BIXtl1AEEE" } } + +void a_s_z_ (AS_Z_) { } +// { dg-final { scan-assembler "_Z6a_s_z_1BIXtl1AEEE" } } + +void a_s___ (AS___) { } +// { dg-final { scan-assembler "_Z6a_s___1BIXtl1AEEE" } } + + +struct C +{ + struct { const char a[2][2], *p; } a[2]; +}; + +template struct D { }; + +typedef D DZZZZZZZZZZ; +typedef D DZZZZZZZZZ_; +typedef D DZZZZZZZZ__; +typedef D DZZZZZZZ___; +typedef D DZZZZZZ____; +typedef D DZZZZZ_____; +typedef D DZZZZ______; +typedef D DZZZ_______; +typedef D DZZ________; +typedef D DZ_________; +typedef D D__________; + +typedef D DS_S_ZS_S_Z; + +void d_zzzzzzzzzz (DZZZZZZZZZZ) { } +// { dg-final { scan-assembler "_Z12d_zzzzzzzzzz1DIXtl1CEEE" } } +void d_zzzzzzzzz_ (DZZZZZZZZZ_) { } +// { dg-final { scan-assembler "_Z12d_zzzzzzzzz_1DIXtl1CEEE" } } +void d_zzzzzzzz__ (DZZZZZZZZ__) { } +// { dg-final { scan-assembler "_Z12d_zzzzzzzz__1DIXtl1CEEE" } } +void d_zzzzzzz___ (DZZZZZZZ___) { } +// { dg-final { scan-assembler "_Z12d_zzzzzzz___1DIXtl1CEEE" } } +void d_zzzzzz____ (DZZZZZZ____) { } +// { dg-final { scan-assembler "_Z12d_zzzzzz____1DIXtl1CEEE" } } +void d_zzzzz_____ (DZZZZZ_____) { } +// { dg-final { scan-assembler "_Z12d_zzzzz_____1DIXtl1CEEE" } } +void d_zzzz______ (DZZZZ______) { } +// { dg-final { scan-assembler "_Z12d_zzzz______1DIXtl1CEEE" } } +void d_zzz_______ (DZZZ_______) { } +// { dg-final { scan-assembler "_Z12d_zzz_______1DIXtl1CEEE" } } +void d_zz________ (DZZ________) { } +// { dg-final { scan-assembler "_Z12d_zz________1DIXtl1CEEE" } } +void d_z_________ (DZ_________) { } +// { dg-final { scan-assembler "_Z12d_z_________1DIXtl1CEEE" } } +void d___________ (D__________) { } +// { dg-final { scan-assembler "_Z12d___________1DIXtl1CEEE" } } + +void d_s_s_zs_s_z (DS_S_ZS_S_Z) { } +// { dg-final { scan-assembler "_Z12d_s_s_zs_s_z1DIXtl1CEEE" } } Index: gcc/testsuite/g++.dg/init/array53.C =================================================================== --- a/src/gcc/testsuite/g++.dg/init/array53.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/init/array53.C (.../branches/gcc-9-branch) @@ -0,0 +1,33 @@ +// PR c++/90947 - Simple lookup table of array of strings is miscompiled +// Verify that initializers for arrays of elements of a class type with +// "unusual" data members are correctly recognized as non-zero. +// { dg-do compile } +// { dg-options "-O1 -fdump-tree-optimized" } + +struct S +{ + const char *p; + static int i; + enum { e }; + typedef int X; + int: 1, b:1; + union { + int c; + }; + const char *q; +}; + +void f (void) +{ + const struct S a[2] = + { + { /* .p = */ "", /* .b = */ 0, /* .c = */ 0, /* .q = */ "" }, + { /* .p = */ "", /* .b = */ 0, /* .c = */ 0, /* .q = */ "" } + }; + + if (!a[0].p || *a[0].p || !a[0].q || *a[0].q + || !a[1].p || *a[1].p || !a[1].q || *a[1].q) + __builtin_abort (); +} + +// { dg-final { scan-tree-dump-not "abort" "optimized" } } Index: gcc/testsuite/g++.dg/init/array54.C =================================================================== --- a/src/gcc/testsuite/g++.dg/init/array54.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/init/array54.C (.../branches/gcc-9-branch) @@ -0,0 +1,13 @@ +// PR c++/90947 +// { dg-do run { target c++11 } } + +#include + +static std::atomic a[1] { {1} }; + +int +main () +{ + if (a[0].load () != 1) + __builtin_abort (); +} Index: gcc/testsuite/g++.dg/other/pr92201.C =================================================================== --- a/src/gcc/testsuite/g++.dg/other/pr92201.C (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/g++.dg/other/pr92201.C (.../branches/gcc-9-branch) @@ -0,0 +1,7 @@ +// PR c++/92201 + +int +foo (void (*p) ()) +{ + return (*reinterpret_cast (p)) (); +} Index: gcc/testsuite/objc.dg/stubify-1.m =================================================================== --- a/src/gcc/testsuite/objc.dg/stubify-1.m (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/objc.dg/stubify-1.m (.../branches/gcc-9-branch) @@ -4,7 +4,7 @@ /* { dg-do compile { target *-*-darwin* } } */ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */ /* { dg-require-effective-target ilp32 } */ -/* { dg-options "-Os -mdynamic-no-pic -mmacosx-version-min=10.4" } */ +/* { dg-options "-Os -mdynamic-no-pic -mmacosx-version-min=10.4 -msymbol-stubs" } */ typedef struct objc_object { } *id ; int x = 41 ; @@ -28,8 +28,8 @@ } @end -/* { dg-final { scan-assembler-not "\(bl|call\)\[ \t\]+_objc_msgSend\n" } } */ -/* { dg-final { scan-assembler "\(bl|call\)\[ \t\]+L_objc_msgSend\\\$stub\n" } } */ -/* { dg-final { scan-assembler-not "\(bl|call\)\[ \t\]+_bogonic\n" } } */ -/* { dg-final { scan-assembler "\(bl|call\)\[ \t\]+L_bogonic\\\$stub\n" } } */ -/* { dg-final { scan-assembler-not "\\\$non_lazy_ptr" } } */ +/* { dg-final { scan-assembler-not {(bl|call)[ \t]+_objc_msgSend\n} } } */ +/* { dg-final { scan-assembler {(bl|call)[ \t]+L_objc_msgSend\$stub\n} } } */ +/* { dg-final { scan-assembler-not {(bl|call)[ \t]+_bogonic\n} } } */ +/* { dg-final { scan-assembler {(bl|call)[ \t]+L_bogonic\$stub\n} } } */ +/* { dg-final { scan-assembler-not {\$non_lazy_ptr} } } */ Index: gcc/testsuite/objc.dg/stubify-2.m =================================================================== --- a/src/gcc/testsuite/objc.dg/stubify-2.m (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/objc.dg/stubify-2.m (.../branches/gcc-9-branch) @@ -1,10 +1,10 @@ /* All calls must be properly stubified, m32 only. */ /* Testcase extracted from TextEdit:Document.m. */ -/* { dg-do compile { target powerpc*-*-darwin* } } */ +/* { dg-do compile { target *-*-darwin* } } */ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */ /* { dg-require-effective-target ilp32 } */ -/* { dg-options "-mdynamic-no-pic -fdump-rtl-jump -mmacosx-version-min=10.4" } */ +/* { dg-options "-mdynamic-no-pic -mmacosx-version-min=10.4 -msymbol-stubs" } */ typedef struct objc_object { } *id ; int x = 41 ; @@ -30,4 +30,9 @@ /* Any symbol_ref of an un-stubified objc_msgSend is an error; look for "objc_msgSend" in quotes, without the $stub suffix. */ -/* { dg-final { scan-rtl-dump-not "symbol_ref.*\"objc_msgSend\"" "jump" } } */ + +/* { dg-final { scan-assembler-not {(bl|call)[ \t]+_objc_msgSend\n} } } */ +/* { dg-final { scan-assembler {(bl|call)[ \t]+L_objc_msgSend\$stub\n} } } */ +/* { dg-final { scan-assembler-not {(bl|call)[ \t]+_bogonic\n} } } */ +/* { dg-final { scan-assembler {(bl|call)[ \t]+L_bogonic\$stub\n} } } */ +/* { dg-final { scan-assembler-not {\$non_lazy_ptr} } } */ Index: gcc/testsuite/obj-c++.dg/stubify-1.mm =================================================================== --- a/src/gcc/testsuite/obj-c++.dg/stubify-1.mm (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/obj-c++.dg/stubify-1.mm (.../branches/gcc-9-branch) @@ -4,7 +4,7 @@ /* { dg-do compile { target *-*-darwin* } } */ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */ /* { dg-require-effective-target ilp32 } */ -/* { dg-options "-Os -mdynamic-no-pic -fno-exceptions -mmacosx-version-min=10.4" } */ +/* { dg-options "-mdynamic-no-pic -fno-exceptions -mmacosx-version-min=10.4 -msymbol-stubs" } */ typedef struct objc_object { } *id ; int x = 41 ; @@ -32,8 +32,8 @@ } @end -/* { dg-final { scan-assembler-not "\(bl|call\)\[ \t\]+_objc_msgSend\n" } } */ -/* { dg-final { scan-assembler "\(bl|call\)\[ \t\]+L_objc_msgSend\\\$stub\n" } } */ -/* { dg-final { scan-assembler-not "\(bl|call\)\[ \t\]+_bogonic\n" } } */ -/* { dg-final { scan-assembler "\(bl|call\)\[ \t\]+L_bogonic\\\$stub\n" } } */ -/* { dg-final { scan-assembler-not "\\\$non_lazy_ptr" } } */ +/* { dg-final { scan-assembler-not {(bl|call)[ \t]+_objc_msgSend\n} } } */ +/* { dg-final { scan-assembler {(bl|call)[ \t]+L_objc_msgSend\$stub\n} } } */ +/* { dg-final { scan-assembler-not {(bl|call)[ \t]+_bogonic\n} } } */ +/* { dg-final { scan-assembler {(bl|call)[ \t]+L_bogonic\$stub\n} } } */ +/* { dg-final { scan-assembler-not {\$non_lazy_ptr} } } */ Index: gcc/testsuite/obj-c++.dg/stubify-2.mm =================================================================== --- a/src/gcc/testsuite/obj-c++.dg/stubify-2.mm (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/obj-c++.dg/stubify-2.mm (.../branches/gcc-9-branch) @@ -4,7 +4,7 @@ /* { dg-do compile { target *-*-darwin* } } */ /* { dg-skip-if "" { *-*-* } { "-fgnu-runtime" } { "" } } */ /* { dg-require-effective-target ilp32 } */ -/* { dg-options "-mdynamic-no-pic -fdump-rtl-jump -mmacosx-version-min=10.4" } */ +/* { dg-options "-mdynamic-no-pic -mmacosx-version-min=10.4 -msymbol-stubs" } */ typedef struct objc_object { } *id ; int x = 41 ; @@ -30,4 +30,9 @@ /* Any symbol_ref of an un-stubified objc_msgSend is an error; look for "objc_msgSend" in quotes, without the $stub suffix. */ -/* { dg-final { scan-rtl-dump-not "symbol_ref.*\"objc_msgSend\"" "jump" } } */ + +/* { dg-final { scan-assembler-not {(bl|call)[ \t]+_objc_msgSend\n} } } */ +/* { dg-final { scan-assembler {(bl|call)[ \t]+L_objc_msgSend\$stub\n} } } */ +/* { dg-final { scan-assembler-not {(bl|call)[ \t]+_Z7bogoniciii\n} } } */ +/* { dg-final { scan-assembler {(bl|call)[ \t]+L__Z7bogoniciii\$stub\n} } } */ +/* { dg-final { scan-assembler-not {\$non_lazy_ptr} } } */ Index: gcc/testsuite/c-c++-common/cpp/pr92296-1.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/cpp/pr92296-1.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/c-c++-common/cpp/pr92296-1.c (.../branches/gcc-9-branch) @@ -0,0 +1,32 @@ +/* PR preprocessor/92296 */ +/* { dg-do preprocess } */ + +#pragma push_macro("__TIMESTAMP__") +#pragma pop_macro("__TIMESTAMP__") + +#pragma push_macro("__TIME__") +#pragma pop_macro("__TIME__") + +#pragma push_macro("__DATE__") +#pragma pop_macro("__DATE__") + +#pragma push_macro("__FILE__") +#pragma pop_macro("__FILE__") + +#pragma push_macro("__BASE_FILE__") +#pragma pop_macro("__BASE_FILE__") + +#pragma push_macro("__LINE__") +#pragma pop_macro("__LINE__") + +#pragma push_macro("__INCLUDE_LEVEL__") +#pragma pop_macro("__INCLUDE_LEVEL__") + +#pragma push_macro("__COUNTER__") +#pragma pop_macro("__COUNTER__") + +#pragma push_macro("__has_attribute") +#pragma pop_macro("__has_attribute") + +#pragma push_macro("__has_cpp_attribute") +#pragma pop_macro("__has_cpp_attribute") Index: gcc/testsuite/c-c++-common/cpp/pr92296-2.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/cpp/pr92296-2.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/c-c++-common/cpp/pr92296-2.c (.../branches/gcc-9-branch) @@ -0,0 +1,73 @@ +/* PR preprocessor/92296 */ +/* { dg-do preprocess } */ +/* { dg-options "-Wno-builtin-macro-redefined" } */ + +#pragma push_macro("__TIMESTAMP__") +#undef __TIMESTAMP__ +#define __TIMESTAMP__ "Thu Oct 31 12:00:00 2019" +timestamp1 = __TIMESTAMP__ +#pragma pop_macro("__TIMESTAMP__") +timestamp2 = __TIMESTAMP__ + +#pragma push_macro("__TIME__") +#undef __TIME__ +#define __TIME__ "12:00:00" +time1 = __TIME__ +#pragma pop_macro("__TIME__") +time2 = __TIME__ + +#pragma push_macro("__DATE__") +#undef __DATE__ +#define __DATE__ "Oct 31 2019" +date1 = __DATE__ +#pragma pop_macro("__DATE__") +date2 = __DATE__ + +#pragma push_macro("__FILE__") +#undef __FILE__ +#define __FILE__ "pr92296-3.c" +file1 = __FILE__ /* { dg-final { scan-file pr92296-2.i "file1 = \"pr92296-3.c\"" } } */ +#pragma pop_macro("__FILE__") +file2 = __FILE__ /* { dg-final { scan-file-not pr92296-2.i "file2 = \"pr92296-3.c\"" } } */ + +#pragma push_macro("__BASE_FILE__") +#undef __BASE_FILE__ +#define __BASE_FILE__ "pr92296-4.c" +filebase1 = __BASE_FILE__ /* { dg-final { scan-file pr92296-2.i "filebase1 = \"pr92296-4.c\"" } } */ +#pragma pop_macro("__BASE_FILE__") +filebase2 = __BASE_FILE__ /* { dg-final { scan-file-not pr92296-2.i "filebase2 = \"pr92296-4.c\"" } } */ + +#pragma push_macro("__LINE__") +#undef __LINE__ /* { dg-warning "undefining" } */ +#define __LINE__ 142 +line1 = __LINE__ /* { dg-final { scan-file pr92296-2.i "line1 = 142" } } */ +#pragma pop_macro("__LINE__") +line2 = __LINE__ /* { dg-final { scan-file pr92296-2.i "line2 = 45" } } */ + +#pragma push_macro("__INCLUDE_LEVEL__") +#undef __INCLUDE_LEVEL__ /* { dg-warning "undefining" } */ +#define __INCLUDE_LEVEL__ 42 +includelevel1 = __INCLUDE_LEVEL__ /* { dg-final { scan-file pr92296-2.i "includelevel1 = 42" } } */ +#pragma pop_macro("__INCLUDE_LEVEL__") +includelevel2 = __INCLUDE_LEVEL__ /* { dg-final { scan-file pr92296-2.i "includelevel2 = 0" } } */ + +#pragma push_macro("__COUNTER__") +#undef __COUNTER__ /* { dg-warning "undefining" } */ +#define __COUNTER__ 172 +counter1 = __COUNTER__ /* { dg-final { scan-file pr92296-2.i "counter1 = 172" } } */ +#pragma pop_macro("__COUNTER__") +counter2 = __COUNTER__ /* { dg-final { scan-file-not pr92296-2.i "counter2 = 172" } } */ + +#pragma push_macro("__has_attribute") +#undef __has_attribute /* { dg-warning "undefining" } */ +#define __has_attribute(x) 0 +hasattr1 = __has_attribute(noreturn) /* { dg-final { scan-file pr92296-2.i "hasattr1 = 0" } } */ +#pragma pop_macro("__has_attribute") +hasattr2 = __has_attribute(noreturn) /* { dg-final { scan-file-not pr92296-2.i "hasattr2 = 0" } } */ + +#pragma push_macro("__has_cpp_attribute") +#undef __has_cpp_attribute /* { dg-warning "undefining" } */ +#define __has_cpp_attribute(x) 0 +hasattrcpp1 = __has_cpp_attribute(noreturn) /* { dg-final { scan-file pr92296-2.i "hasattrcpp1 = 0" } } */ +#pragma pop_macro("__has_cpp_attribute") +hasattrcpp2 = __has_cpp_attribute(noreturn) /* { dg-final { scan-file-not pr92296-2.i "hasattrcpp2 = 0" } } */ Index: gcc/testsuite/c-c++-common/array-1.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/array-1.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/c-c++-common/array-1.c (.../branches/gcc-9-branch) @@ -0,0 +1,247 @@ +// PR c++/90947 - Simple lookup table of array of strings is miscompiled +// { dg-do compile } +// { dg-options "-O1 -fdump-tree-optimized" } + +#define assert(expr) ((expr) ? (void)0 : __builtin_abort ()) + +void pr90947 (void) +{ + int vecsize = 4; + int index = 0; + static const char *a[4][4] = + { + { ".x", ".y", ".z", ".w" }, + { ".xy", ".yz", ".zw", 0 }, + { ".xyz", ".yzw", 0, 0 }, + { "", 0, 0, 0 }, + }; + + assert (vecsize >= 1 && vecsize <= 4); + assert (index >= 0 && index < 4); + assert (a[vecsize - 1][index]); +} + +void f_a1_1 (void) +{ + { + const char* a[1][1] = { { 0 } }; + assert (0 == a[0][0]); + } + { + const char* a[1][1] = { { "" } }; + assert ('\0' == *a[0][0]); + } +} + +void f_a2_1 (void) +{ + { + const char* a[2][1] = { { "" }, { "" } }; + assert ('\0' == *a[0][0] && '\0' == *a[1][0]); + } + { + const char* a[2][1] = { { 0 }, { "" } }; + assert (0 == a[0][0] && '\0' == *a[1][0]); + } + { + const char* a[2][1] = { { }, { "" } }; + assert (0 == a[0][0] && '\0' == *a[1][0]); + } +} + +void f_a2_2 (void) +{ + { + const char* a[2][2] = { { "", "" }, { "", "" } }; + assert ('\0' == *a[0][0] && '\0' == *a[0][1]); + assert ('\0' == *a[1][0] && '\0' == *a[1][1]); + } + { + const char* a[2][2] = { { "", "" }, { "", 0 } }; + assert ('\0' == *a[0][0] && '\0' == *a[0][1]); + assert ('\0' == *a[1][0] && 0 == a[1][1]); + } + { + const char* a[2][2] = { { "", "" }, { "" } }; + assert ('\0' == *a[0][0] && '\0' == *a[0][1]); + assert ('\0' == *a[1][0] && 0 == a[1][1]); + } + { + const char* a[2][2] = { { "", "" }, { 0, "" } }; + assert ('\0' == *a[0][0] && '\0' == *a[0][1]); + assert (0 == a[1][0] && '\0' == *a[1][1]); + } + { + const char* a[2][2] = { { "", 0 }, { 0, "" } }; + assert ('\0' == *a[0][0] && 0 == a[0][1]); + assert (0 == a[1][0] && '\0' == *a[1][1]); + } + { + const char* a[2][2] = { { 0, 0 }, { 0, "" } }; + assert (0 == a[0][0] && 0 == a[0][1]); + assert (0 == a[1][0] && '\0' == *a[1][1]); + } + { + const char* a[2][2] = { { 0 }, { 0, "" } }; + assert (0 == a[0][0] && 0 == a[0][1]); + assert (0 == a[1][0] && '\0' == *a[1][1]); + } + { + const char* a[2][2] = { { }, { 0, "" } }; + assert (0 == a[0][0] && 0 == a[0][1]); + assert (0 == a[1][0] && '\0' == *a[1][1]); + } +} + +void f_a2_2_2 (void) +{ + { + const char* a[2][2][2] = + { { { "", "" }, { "", "" } }, { { "", "" }, { "", "" } } }; + + assert ('\0' == *a[0][0][0] && '\0' == *a[0][0][1]); + assert ('\0' == *a[0][1][0] && '\0' == *a[0][1][1]); + assert ('\0' == *a[1][0][0] && '\0' == *a[1][0][1]); + assert ('\0' == *a[1][1][0] && '\0' == *a[1][1][1]); + } + + { + const char* a[2][2][2] = + { { { "", "" }, { "", "" } }, { { "", "" }, { 0, "" } } }; + + assert ('\0' == *a[0][0][0] && '\0' == *a[0][0][1]); + assert ('\0' == *a[0][1][0] && '\0' == *a[0][1][1]); + assert ('\0' == *a[1][0][0] && '\0' == *a[1][0][1]); + assert (0 == a[1][1][0] && '\0' == *a[1][1][1]); + } + + { + const char* a[2][2][2] = + { { { "", "" }, { "", "" } }, { { 0, 0 }, { 0, "" } } }; + + assert ('\0' == *a[0][0][0] && '\0' == *a[0][0][1]); + assert ('\0' == *a[0][1][0] && '\0' == *a[0][1][1]); + assert (0 == a[1][0][0] && 0 == a[1][0][1]); + assert (0 == a[1][1][0] && '\0' == *a[1][1][1]); + } + + { + const char* a[2][2][2] = + { { { "", "" }, { 0, 0 } }, { { 0, 0 }, { 0, "" } } }; + + assert ('\0' == *a[0][0][0] && '\0' == *a[0][0][1]); + assert (0 == a[0][1][0] && 0 == a[0][1][1]); + assert (0 == a[1][0][0] && 0 == a[1][0][1]); + assert (0 == a[1][1][0] && '\0' == *a[1][1][1]); + } + + { + const char* a[2][2][2] = + { { { 0, 0 }, { 0, 0 } }, { { 0, 0 }, { 0, "" } } }; + + assert (0 == a[0][0][0] && 0 == a[0][0][1]); + assert (0 == a[0][1][0] && 0 == a[0][1][1]); + assert (0 == a[1][0][0] && 0 == a[1][0][1]); + assert (0 == a[1][1][0] && '\0' == *a[1][1][1]); + } + + { + const char* a[2][2][2] = + { { { }, { } }, { { }, { 0, "" } } }; + + assert (0 == a[0][0][0] && 0 == a[0][0][1]); + assert (0 == a[0][1][0] && 0 == a[0][1][1]); + assert (0 == a[1][0][0] && 0 == a[1][0][1]); + assert (0 == a[1][1][0] && '\0' == *a[1][1][1]); + } +} + +void f_sa2_2_2 (void) +{ + struct S { const char a[2], *s, c; }; + + { + const struct S a[2][2][2] = { + { }, + { + { { }, { "", "" } }, + { } + } + }; + + assert ('\0' == *a[0][0][0].a && 0 == a[0][0][0].s && 0 == a[0][0][0].c); + assert ('\0' == *a[0][0][1].a && 0 == a[0][0][1].s && 0 == a[0][0][1].c); + assert ('\0' == *a[0][1][0].a && 0 == a[0][1][0].s && 0 == a[0][1][0].c); + assert ('\0' == *a[0][1][1].a && 0 == a[0][1][1].s && 0 == a[0][1][1].c); + + assert ('\0' == *a[1][0][0].a && 0 == a[1][0][0].s && 0 == a[1][0][0].c); + assert ('\0' == *a[1][0][1].a && '\0' == *a[1][0][1].s && 0 == a[1][0][1].c); + assert ('\0' == *a[1][1][0].a && 0 == a[1][1][0].s && 0 == a[1][1][0].c); + assert ('\0' == *a[1][1][1].a && 0 == a[1][1][1].s && 0 == a[1][1][1].c); + } + + { + const struct S a[2][2][2] = { + { }, + { + { { } }, + { { "", "" } } + } + }; + + assert ('\0' == *a[0][0][0].a && 0 == a[0][0][0].s); + assert ('\0' == *a[0][0][1].a && 0 == a[0][0][1].s); + assert ('\0' == *a[0][1][0].a && 0 == a[0][1][0].s); + assert ('\0' == *a[0][1][1].a && 0 == a[0][1][1].s); + + assert ('\0' == *a[1][0][0].a && 0 == a[1][0][0].s); + assert ('\0' == *a[1][0][1].a && 0 == a[1][0][1].s); + assert ('\0' == *a[1][1][0].a && '\0' == *a[1][1][0].s); + assert ('\0' == *a[1][1][1].a && 0 == a[1][1][1].s); + } + + { + const struct S a[2][2][2] = { + { }, + { + { { }, { } }, + { { }, { "", "", 0 } } + } + }; + + assert ('\0' == *a[0][0][0].a && 0 == a[0][0][0].s); + assert ('\0' == *a[0][0][1].a && 0 == a[0][0][1].s); + assert ('\0' == *a[0][1][0].a && 0 == a[0][1][0].s); + assert ('\0' == *a[0][1][1].a && 0 == a[0][1][1].s); + + assert ('\0' == *a[1][0][0].a && 0 == a[1][0][0].s); + assert ('\0' == *a[1][0][1].a && 0 == a[1][0][1].s); + assert ('\0' == *a[1][1][0].a && 0 == a[1][1][0].s); + assert ('\0' == *a[1][1][1].a && '\0' == *a[1][1][1].s); + } + + { + const struct S a[2][2][2] = { + { + { { { 0 }, 0, 0 }, { { 0 } , 0, 0 } }, + { { { 0 }, 0, 0 }, { { 0 } , 0, 0 } }, + }, + { + { { { 0 }, 0, 0 }, { { 0 } , 0, 0 } }, + { { }, { "", "", 0 } } + } + }; + + assert ('\0' == *a[0][0][0].a && 0 == a[0][0][0].s); + assert ('\0' == *a[0][0][1].a && 0 == a[0][0][1].s); + assert ('\0' == *a[0][1][0].a && 0 == a[0][1][0].s); + assert ('\0' == *a[0][1][1].a && 0 == a[0][1][1].s); + + assert ('\0' == *a[1][0][0].a && 0 == a[1][0][0].s); + assert ('\0' == *a[1][0][1].a && 0 == a[1][0][1].s); + assert ('\0' == *a[1][1][0].a && 0 == a[1][1][0].s); + assert ('\0' == *a[1][1][1].a && '\0' == *a[1][1][1].s); + } +} + +// { dg-final { scan-tree-dump-not "abort" "optimized" } } Index: gcc/testsuite/c-c++-common/gomp/pr88203-2.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/gomp/pr88203-2.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/c-c++-common/gomp/pr88203-2.c (.../branches/gcc-9-branch) @@ -0,0 +1,65 @@ +/* PR c++/88203 */ +/* { dg-do compile } */ +/* { dg-additional-options "-std=gnu99" { target c } } */ +/* { dg-additional-options "-std=gnu++11" { target c++ } } */ + +void foo (const char *, const char *); +#pragma omp declare target to (foo) + +void +f1 (void) +{ + #pragma omp parallel default(none) + foo (__FUNCTION__, __PRETTY_FUNCTION__); +} + +void +f2 (void) +{ + #pragma omp parallel default(none) shared(__FUNCTION__, __PRETTY_FUNCTION__) + foo (__FUNCTION__, __PRETTY_FUNCTION__); + #pragma omp parallel default(none) shared(__FUNCTION__) firstprivate(__PRETTY_FUNCTION__) + foo (__FUNCTION__, __PRETTY_FUNCTION__); +} + +void +f3 (void) +{ + #pragma omp parallel default(none) firstprivate(__FUNCTION__, __PRETTY_FUNCTION__) + foo (__FUNCTION__, __PRETTY_FUNCTION__); + #pragma omp parallel default(none) firstprivate(__FUNCTION__), shared(__PRETTY_FUNCTION__) + foo (__FUNCTION__, __PRETTY_FUNCTION__); +} + +void +f4 (void) +{ + foo (__FUNCTION__, __PRETTY_FUNCTION__); + #pragma omp parallel default(none) + foo (__FUNCTION__, __PRETTY_FUNCTION__); +} + +void +f5 (void) +{ + foo (__FUNCTION__, __PRETTY_FUNCTION__); + #pragma omp parallel default(none) shared(__FUNCTION__, __PRETTY_FUNCTION__) + foo (__FUNCTION__, __PRETTY_FUNCTION__); +} + +void +f6 (void) +{ + foo (__FUNCTION__, __PRETTY_FUNCTION__); + #pragma omp parallel default(none) firstprivate(__FUNCTION__, __PRETTY_FUNCTION__) + foo (__FUNCTION__, __PRETTY_FUNCTION__); +} + +void +f7 (void) +{ + #pragma omp target map(to: __FUNCTION__, __PRETTY_FUNCTION__) + foo (__FUNCTION__, __PRETTY_FUNCTION__); + #pragma omp task depend(inout:__FUNCTION__, __PRETTY_FUNCTION__) + foo (__FUNCTION__, __PRETTY_FUNCTION__); +} Index: gcc/testsuite/c-c++-common/gomp/pr91401-1.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/gomp/pr91401-1.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/c-c++-common/gomp/pr91401-1.c (.../branches/gcc-9-branch) @@ -0,0 +1,10 @@ +/* PR c/91401 */ + +void +foo (void) +{ + int i; + #pragma omp distribute parallel for schedule (static) dist_schedule (static) + for (i = 0; i < 64; i++) + ; +} Index: gcc/testsuite/c-c++-common/gomp/pr88203-3.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/gomp/pr88203-3.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/c-c++-common/gomp/pr88203-3.c (.../branches/gcc-9-branch) @@ -0,0 +1,28 @@ +/* PR c++/88203 */ +/* { dg-do compile } */ +/* { dg-additional-options "-std=c99" { target c } } */ +/* { dg-additional-options "-std=c++11" { target c++ } } */ + +void foo (const char *); +#pragma omp declare target to (foo) + +void +f1 (void) +{ + #pragma omp parallel for lastprivate (__func__) /* { dg-error "'__func__' is predetermined 'shared' for 'lastprivate'" } */ + for (int i = 0; i < 2; i++) + foo (__func__); + #pragma omp parallel private (__func__) /* { dg-error "'__func__' is predetermined 'shared' for 'private'" } */ + foo (__func__); +} + +void +f2 (void) +{ + foo (__func__); + #pragma omp parallel default(none) private (__func__) /* { dg-error "'__func__' is predetermined 'shared' for 'private'" } */ + foo (__func__); + #pragma omp parallel for default(none) lastprivate (__func__) /* { dg-error "'__func__' is predetermined 'shared' for 'lastprivate'" } */ + for (int i = 0; i < 2; i++) + foo (__func__); +} Index: gcc/testsuite/c-c++-common/gomp/pr91401-2.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/gomp/pr91401-2.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/c-c++-common/gomp/pr91401-2.c (.../branches/gcc-9-branch) @@ -0,0 +1,15 @@ +#pragma omp declare target +void f0 (void); + +void +f1 (void) +{ + int i; + #pragma omp distribute dist_schedule(static) dist_schedule(static) /* { dg-warning "too many 'dist_schedule' clauses" } */ + for (i = 0; i < 8; ++i) + f0 (); + #pragma omp distribute dist_schedule(static,2) dist_schedule(static,4) /* { dg-warning "too many 'dist_schedule' clauses" } */ + for (i = 0; i < 8; ++i) + f0 (); +} +#pragma omp end declare target Index: gcc/testsuite/c-c++-common/gomp/pr91920.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/gomp/pr91920.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/c-c++-common/gomp/pr91920.c (.../branches/gcc-9-branch) @@ -0,0 +1,19 @@ +/* PR middle-end/91920 */ + +void bar (float *); + +void +foo (void) +{ + int i; + float f[3] = { 0.0f, 0.0f, 0.0f }; +#pragma omp parallel for default(none) reduction(+:f[:3]) + for (i = 0; i < 1000; i++) + { + int j; + float k[3] = { 0.25f, 0.5f, 0.75f }; + for (j = 0; j < 3; j++) + f[j] += k[j]; + } + bar (f); +} Index: gcc/testsuite/c-c++-common/gomp/pr88203-1.c =================================================================== --- a/src/gcc/testsuite/c-c++-common/gomp/pr88203-1.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/testsuite/c-c++-common/gomp/pr88203-1.c (.../branches/gcc-9-branch) @@ -0,0 +1,61 @@ +/* PR c++/88203 */ +/* { dg-do compile } */ +/* { dg-additional-options "-std=c99" { target c } } */ +/* { dg-additional-options "-std=c++11" { target c++ } } */ + +void foo (const char *); +#pragma omp declare target to (foo) + +void +f1 (void) +{ + #pragma omp parallel default(none) + foo (__func__); +} + +void +f2 (void) +{ + #pragma omp parallel default(none) shared(__func__) + foo (__func__); +} + +void +f3 (void) +{ + #pragma omp parallel default(none) firstprivate(__func__) + foo (__func__); +} + +void +f4 (void) +{ + foo (__func__); + #pragma omp parallel default(none) + foo (__func__); +} + +void +f5 (void) +{ + foo (__func__); + #pragma omp parallel default(none) shared(__func__) + foo (__func__); +} + +void +f6 (void) +{ + foo (__func__); + #pragma omp parallel default(none) firstprivate(__func__) + foo (__func__); +} + +void +f7 (void) +{ + #pragma omp target map(to: __func__) + foo (__func__); + #pragma omp task depend(inout:__func__) + foo (__func__); +} Index: gcc/cp/typeck.c =================================================================== --- a/src/gcc/cp/typeck.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/cp/typeck.c (.../branches/gcc-9-branch) @@ -4309,7 +4309,7 @@ || TREE_NO_WARNING (op)) return; - tree cop = fold_non_dependent_expr (op, complain); + tree cop = fold_for_warn (op); if (TREE_CODE (cop) == ADDR_EXPR && decl_with_nonnull_addr_p (TREE_OPERAND (cop, 0)) @@ -4632,9 +4632,8 @@ || code1 == COMPLEX_TYPE || code1 == VECTOR_TYPE)) { enum tree_code tcode0 = code0, tcode1 = code1; - tree cop1 = fold_non_dependent_expr (op1, complain); doing_div_or_mod = true; - warn_for_div_by_zero (location, cop1); + warn_for_div_by_zero (location, fold_for_warn (op1)); if (tcode0 == COMPLEX_TYPE || tcode0 == VECTOR_TYPE) tcode0 = TREE_CODE (TREE_TYPE (TREE_TYPE (op0))); @@ -4673,11 +4672,8 @@ case TRUNC_MOD_EXPR: case FLOOR_MOD_EXPR: - { - tree cop1 = fold_non_dependent_expr (op1, complain); - doing_div_or_mod = true; - warn_for_div_by_zero (location, cop1); - } + doing_div_or_mod = true; + warn_for_div_by_zero (location, fold_for_warn (op1)); if (code0 == VECTOR_TYPE && code1 == VECTOR_TYPE && TREE_CODE (TREE_TYPE (type0)) == INTEGER_TYPE @@ -4770,7 +4766,7 @@ } else if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE) { - tree const_op1 = fold_non_dependent_expr (op1, complain); + tree const_op1 = fold_for_warn (op1); if (TREE_CODE (const_op1) != INTEGER_CST) const_op1 = op1; result_type = type0; @@ -4816,10 +4812,10 @@ } else if (code0 == INTEGER_TYPE && code1 == INTEGER_TYPE) { - tree const_op0 = fold_non_dependent_expr (op0, complain); + tree const_op0 = fold_for_warn (op0); if (TREE_CODE (const_op0) != INTEGER_CST) const_op0 = op0; - tree const_op1 = fold_non_dependent_expr (op1, complain); + tree const_op1 = fold_for_warn (op1); if (TREE_CODE (const_op1) != INTEGER_CST) const_op1 = op1; result_type = type0; @@ -5516,9 +5512,9 @@ if (! converted) { warning_sentinel w (warn_sign_conversion, short_compare); - if (TREE_TYPE (op0) != result_type) + if (!same_type_p (TREE_TYPE (op0), result_type)) op0 = cp_convert_and_check (result_type, op0, complain); - if (TREE_TYPE (op1) != result_type) + if (!same_type_p (TREE_TYPE (op1), result_type)) op1 = cp_convert_and_check (result_type, op1, complain); if (op0 == error_mark_node || op1 == error_mark_node) @@ -9296,8 +9292,10 @@ tree base = DECL_DECOMP_BASE (whats_returned); if (TYPE_REF_P (TREE_TYPE (base))) { - tree init = DECL_INITIAL (base); - return maybe_warn_about_returning_address_of_local (init); + if (tree init = DECL_INITIAL (base)) + return maybe_warn_about_returning_address_of_local (init); + else + return false; } } bool w = false; Index: gcc/cp/class.c =================================================================== --- a/src/gcc/cp/class.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/cp/class.c (.../branches/gcc-9-branch) @@ -1907,6 +1907,7 @@ = TYPE_HAS_NONTRIVIAL_DESTRUCTOR (t); TYPE_POLYMORPHIC_P (variants) = TYPE_POLYMORPHIC_P (t); + CLASSTYPE_FINAL (variants) = CLASSTYPE_FINAL (t); TYPE_BINFO (variants) = TYPE_BINFO (t); @@ -2149,10 +2150,10 @@ if (!nonprivate_ctor) { - warning (OPT_Wctor_dtor_privacy, - "%q#T only defines private constructors and has no friends", - t); - if (copy_or_move) + bool w = warning (OPT_Wctor_dtor_privacy, + "%q#T only defines private constructors and has " + "no friends", t); + if (w && copy_or_move) inform (DECL_SOURCE_LOCATION (copy_or_move), "%q#D is public, but requires an existing %q#T object", copy_or_move, t); Index: gcc/cp/decl.c =================================================================== --- a/src/gcc/cp/decl.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/cp/decl.c (.../branches/gcc-9-branch) @@ -4474,13 +4474,27 @@ static tree cp_make_fname_decl (location_t loc, tree id, int type_dep) { - const char *const name = (type_dep && in_template_function () - ? NULL : fname_as_string (type_dep)); + const char * name = NULL; + bool release_name = false; + if (!(type_dep && in_template_function ())) + { + if (current_function_decl == NULL_TREE) + name = "top level"; + else if (type_dep == 1) /* __PRETTY_FUNCTION__ */ + name = cxx_printable_name (current_function_decl, 2); + else if (type_dep == 0) /* __FUNCTION__ */ + { + name = fname_as_string (type_dep); + release_name = true; + } + else + gcc_unreachable (); + } tree type; tree init = cp_fname_init (name, &type); tree decl = build_decl (loc, VAR_DECL, id, type); - if (name) + if (release_name) free (CONST_CAST (char *, name)); /* As we're using pushdecl_with_scope, we must set the context. */ @@ -5836,8 +5850,8 @@ /* Pointers initialized to strings must be treated as non-zero even if the string is empty. */ tree init_type = TREE_TYPE (elt_init); - if ((POINTER_TYPE_P (elt_type) != POINTER_TYPE_P (init_type)) - || !initializer_zerop (elt_init)) + if (POINTER_TYPE_P (elt_type) != POINTER_TYPE_P (init_type) + || !type_initializer_zero_p (elt_type, elt_init)) last_nonzero = index; /* This can happen with an invalid initializer (c++/54501). */ @@ -6114,7 +6128,7 @@ (CONSTRUCTOR_ELT (stripped_init,0)->value)))) { if (complain & tf_error) - error ("too many braces around scalar initializer" + error ("too many braces around scalar initializer " "for type %qT", type); init = error_mark_node; } @@ -8407,7 +8421,7 @@ (acquire_name, build_function_type_list (integer_type_node, TREE_TYPE (guard_addr), NULL_TREE), - NULL_TREE, ECF_NOTHROW | ECF_LEAF); + NULL_TREE, ECF_NOTHROW); if (!release_fn || !abort_fn) vfntype = build_function_type_list (void_type_node, TREE_TYPE (guard_addr), @@ -8414,7 +8428,7 @@ NULL_TREE); if (!release_fn) release_fn = push_library_fn (release_name, vfntype, NULL_TREE, - ECF_NOTHROW | ECF_LEAF); + ECF_NOTHROW); if (!abort_fn) abort_fn = push_library_fn (abort_name, vfntype, NULL_TREE, ECF_NOTHROW | ECF_LEAF); @@ -9539,10 +9553,12 @@ TYPE_PTRMEMFUNC_FLAG (t) = 1; field = build_decl (input_location, FIELD_DECL, pfn_identifier, type); + DECL_NONADDRESSABLE_P (field) = 1; fields = field; field = build_decl (input_location, FIELD_DECL, delta_identifier, delta_type_node); + DECL_NONADDRESSABLE_P (field) = 1; DECL_CHAIN (field) = fields; fields = field; @@ -11435,6 +11451,8 @@ else if (late_return_type && sfk != sfk_conversion) { + if (late_return_type == error_mark_node) + return error_mark_node; if (cxx_dialect < cxx11) /* Not using maybe_warn_cpp0x because this should always be an error. */ @@ -13042,7 +13060,9 @@ /* Avoid redundant -Wzero-as-null-pointer-constant warnings at the call sites. */ if (TYPE_PTR_OR_PTRMEM_P (decl_type) - && null_ptr_cst_p (arg)) + && null_ptr_cst_p (arg) + /* Don't lose side-effects as in PR90473. */ + && !TREE_SIDE_EFFECTS (arg)) return nullptr_node; /* [dcl.fct.default] Index: gcc/cp/constexpr.c =================================================================== --- a/src/gcc/cp/constexpr.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/cp/constexpr.c (.../branches/gcc-9-branch) @@ -2703,7 +2703,10 @@ : field == part) { if (value) - return value; + { + STRIP_ANY_LOCATION_WRAPPER (value); + return value; + } else /* We're in the middle of initializing it. */ break; @@ -2793,6 +2796,7 @@ FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value) { tree bitpos = bit_position (field); + STRIP_ANY_LOCATION_WRAPPER (value); if (bitpos == start && DECL_SIZE (field) == TREE_OPERAND (t, 1)) return value; if (TREE_CODE (TREE_TYPE (field)) == INTEGER_TYPE @@ -3973,6 +3977,10 @@ tree offset = TREE_OPERAND (t, 1); gcc_assert (TREE_CONSTANT (offset)); + /* OFFSET is constant, but perhaps not constant enough. We need to + e.g. bash FLOAT_EXPRs to REAL_CSTs. */ + offset = fold_simple (offset); + /* The operand as an lvalue. */ op = cxx_eval_constant_expression (ctx, op, true, non_constant_p, overflow_p); @@ -5917,6 +5925,7 @@ case LABEL_DECL: case LABEL_EXPR: case CASE_LABEL_EXPR: + case PREDICT_EXPR: case CONST_DECL: case SIZEOF_EXPR: case ALIGNOF_EXPR: @@ -6751,7 +6760,6 @@ case CLEANUP_STMT: case EMPTY_CLASS_EXPR: - case PREDICT_EXPR: return false; case GOTO_EXPR: Index: gcc/cp/tree.c =================================================================== --- a/src/gcc/cp/tree.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/cp/tree.c (.../branches/gcc-9-branch) @@ -5487,6 +5487,68 @@ return false; } +/* Given an initializer INIT for a TYPE, return true if INIT is zero + so that it can be replaced by value initialization. This function + distinguishes betwen empty strings as initializers for arrays and + for pointers (which make it return false). */ + +bool +type_initializer_zero_p (tree type, tree init) +{ + if (type == error_mark_node || init == error_mark_node) + return false; + + STRIP_NOPS (init); + + if (POINTER_TYPE_P (type)) + return TREE_CODE (init) != STRING_CST && initializer_zerop (init); + + if (TREE_CODE (init) != CONSTRUCTOR) + return initializer_zerop (init); + + if (TREE_CODE (type) == ARRAY_TYPE) + { + tree elt_type = TREE_TYPE (type); + elt_type = TYPE_MAIN_VARIANT (elt_type); + if (elt_type == char_type_node) + return initializer_zerop (init); + + tree elt_init; + unsigned HOST_WIDE_INT i; + FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), i, elt_init) + if (!type_initializer_zero_p (elt_type, elt_init)) + return false; + return true; + } + + if (TREE_CODE (type) != RECORD_TYPE) + return initializer_zerop (init); + + if (TYPE_NON_AGGREGATE_CLASS (type)) + return false; + + tree fld = TYPE_FIELDS (type); + + tree fld_init; + unsigned HOST_WIDE_INT i; + FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (init), i, fld_init) + { + fld = next_initializable_field (fld); + if (!fld) + return true; + + tree fldtype = TREE_TYPE (fld); + if (!type_initializer_zero_p (fldtype, fld_init)) + return false; + + fld = DECL_CHAIN (fld); + if (!fld) + break; + } + + return true; +} + #if defined ENABLE_TREE_CHECKING && (GCC_VERSION >= 2007) /* Complain that some language-specific thing hanging off a tree node has been accessed improperly. */ Index: gcc/cp/ChangeLog =================================================================== --- a/src/gcc/cp/ChangeLog (.../tags/gcc_9_2_0_release) +++ b/src/gcc/cp/ChangeLog (.../branches/gcc-9-branch) @@ -1,3 +1,238 @@ +2019-11-08 Marek Polacek + + Backported from mainline + 2019-10-29 Marek Polacek + + PR c++/90998 - ICE with copy elision in init by ctor and -Wconversion. + * call.c (joust): Don't attempt to warn if ->second_conv is null. + +2019-11-08 Jakub Jelinek + + Backported from mainline + 2019-11-05 Jakub Jelinek + + PR c++/92343 + * constexpr.c (potential_constant_expression_1): Return true rather + than false for PREDICT_EXPR. + + 2019-10-31 Jakub Jelinek + + PR c++/90947 + * cp-tree.h (type_initializer_zero_p): Declare. + * decl.c (reshape_init_array_1): Formatting fix. + * tree.c (type_initializer_zero_p): New function. Moved from + ../tree.c, use next_initializable_field, formatting fix. Return + false for TYPE_NON_AGGREGATE_CLASS types. + + 2019-10-22 Jakub Jelinek + + PR tree-optimization/85887 + * decl.c (expand_static_init): Drop ECF_LEAF from __cxa_guard_acquire + and __cxa_guard_release. + + 2019-10-21 Jakub Jelinek + + PR c++/92015 + * constexpr.c (cxx_eval_component_reference, cxx_eval_bit_field_ref): + Use STRIP_ANY_LOCATION_WRAPPER on CONSTRUCTOR elts. + +2019-10-29 Jakub Jelinek + + PR c++/92201 + * cp-gimplify.c (cp_gimplify_expr): If gimplify_to_rvalue changes the + function pointer type, re-add cast to the original one. + +2018-10-26 Ville Voutilainen + + Backport from mainline + + 2019-06-01 Ville Voutilainen + + PR c++/85254 + * class.c (fixup_type_variants): Handle CLASSTYPE_FINAL. + +2019-10-24 Marek Polacek + + * decl.c (reshape_init_r): Add missing space. + +2019-10-22 Marek Polacek + + Backported from mainline + 2019-10-21 Marek Polacek + + PR c++/92106 - ICE with structured bindings and -Wreturn-local-addr. + * typeck.c (maybe_warn_about_returning_address_of_local): Avoid + recursing on null initializer and return false instead. + + PR c++/92062 - ODR-use ignored for static member of class template. + * pt.c (has_value_dependent_address): Strip location wrappers. + +2019-10-21 Jakub Jelinek + + Backported from mainline + 2019-10-04 Jakub Jelinek + + PR c++/91974 + * cp-gimplify.c (cp_gimplify_expr) : For + -fstrong-eval-order ensure CALL_EXPR_FN side-effects are evaluated + before any arguments. Additionally, ensure CALL_EXPR_FN that isn't + invariant nor OBJ_TYPE_REF nor SSA_NAME is forced into a temporary. + + 2019-09-27 Jakub Jelinek + + PR c++/88203 + * parser.c (cp_parser_omp_var_list_no_open): Parse predefined + variables. + * semantics.c (finish_omp_clauses): Allow predefined variables in + shared and firstprivate clauses, even when they are predetermined + shared. + * cp-gimplify.c (cxx_omp_predetermined_sharing_1): Return + OMP_CLAUSE_DEFAULT_SHARED for predefined variables. + + 2019-08-09 Jakub Jelinek + + PR c/91401 + * parser.c (cp_parser_omp_clause_dist_schedule): Comment out the + check_no_duplicate_clause call, instead emit a warning for duplicate + dist_schedule clauses. + +2019-10-16 Richard Biener + + Backport from mainline + 2019-10-02 Richard Biener + + PR c++/91606 + * decl.c (build_ptrmemfunc_type): Mark pointer-to-member + fat pointer structure members as DECL_NONADDRESSABLE_P. + +2019-10-08 Marek Polacek + + Backported from mainline + 2019-09-15 Marek Polacek + + PR c++/91740 - ICE with constexpr call and ?: in ARRAY_REF. + * pt.c (build_non_dependent_expr): Call build_non_dependent_expr for + the first operand. + +2019-09-28 Marek Polacek + + Backported from mainline + 2019-09-28 Marek Polacek + + PR c++/91923 - failure-to-SFINAE with class type NTTP in C++17. + * pt.c (invalid_nontype_parm_type_p): Only emit errors when + tf_error. + +2019-09-10 Marek Polacek + + Backported from mainline + 2019-09-10 Marek Polacek + + PR c++/91705 - constexpr evaluation rejects ++/-- on floats. + * constexpr.c (cxx_eval_increment_expression): Call fold_simple on + the offset. + +2019-09-01 Marek Polacek + + Backported from mainline + 2019-09-01 Marek Polacek + + PR c++/91129 - wrong error with binary op in template argument. + * typeck.c (warn_for_null_address): Use fold_for_warn instead of + fold_non_dependent_expr. + (cp_build_binary_op): Likewise. + +2019-08-31 Iain Sandoe + + Backported from mainline + 2019-08-23 Iain Sandoe + + PR pch/61250 + * parser.c (cp_parser_initial_pragma): Call c_common_no_more_pch () + after determining that the first token is not + PRAGMA_GCC_PCH_PREPROCESS. + +2019-08-23 Marek Polacek + + Backported from mainline + 2019-08-23 Marek Polacek + + PR c++/91521 - wrong error with operator->. + * decl.c (grokdeclarator): Return error_mark_node for an invalid + trailing return type. + +2019-08-16 Jason Merrill + + PR c++/90393 - ICE with throw in ?: + * call.c (build_conditional_expr_1): Revert changes from + PR c++/64372 and c++/86205. + +2019-08-15 Marek Polacek + + Backported from mainline + 2019-08-07 Marek Polacek + + PR c++/81429 - wrong parsing of constructor with C++11 attribute. + * parser.c (cp_parser_constructor_declarator_p): Handle the scenario + when a parameter declaration begins with [[attribute]]. + + 2019-08-08 Marek Polacek + + PR c++/87519 - bogus warning with -Wsign-conversion. + * typeck.c (cp_build_binary_op): Use same_type_p instead of comparing + the types directly. + + 2019-08-13 Marek Polacek + + PR c++/90473 - wrong code with nullptr in default argument. + * call.c (null_ptr_cst_p): Update quote from the standard. + * decl.c (check_default_argument): Don't return nullptr when the arg + has side-effects. + + 2019-06-14 Marek Polacek + + PR c++/90884 - stray note with -Wctor-dtor-privacy. + * class.c (maybe_warn_about_overly_private_class): Guard the call to + inform. + +2019-08-14 Martin Sebor + + Backported from mainline + 2019-08-01 Martin Sebor + + PR c++/90947 + * decl.c (reshape_init_array_1): Avoid truncating initializer + lists containing string literals. + +2019-08-14 Jonathan Wakely + + PR c++/91436 + * name-lookup.c (get_std_name_hint): Fix min_dialect field for + complex_literals and make_unique entries. + +2019-08-12 Tom Honermann + + * parser.c (cp_parser_template_declaration_after_parameters): Enable + class template argument deduction for non-type template parameters + in literal operator templates. + +2019-08-12 Jason Merrill + + PR c++/91378 - ICE with noexcept and auto return type. + * pt.c (maybe_instantiate_noexcept): push_to_top_level. + + PR c++/90538 - multiple expansions of capture packs + * cp-tree.h (DECLTYPE_FOR_INIT_CAPTURE): Remove. + * lambda.c (add_capture): Copy parameter packs from init. + (lambda_capture_field_type): Always use auto for init-capture. + * pt.c (uses_parameter_packs): Return tree. + (tsubst) [DECLTYPE_TYPE]: Remove init-capture handling. + (gen_elem_of_pack_expansion_instantiation): Don't push + local_specialization_stack. + (prepend_one_capture): New. + (tsubst_lambda_expr): Use it. Don't touch local_specializations. + (do_auto_deduction): Avoid redundant error. + 2019-08-12 Release Manager * GCC 9.2.0 released. @@ -16,7 +251,7 @@ Backported from mainline 2019-08-02 Marek Polacek - + PR c++/91230 - wrong error with __PRETTY_FUNCTION__ and generic lambda. * pt.c (value_dependent_expression_p): Consider __PRETTY_FUNCTION__ inside a template function value-dependent. Index: gcc/cp/cp-gimplify.c =================================================================== --- a/src/gcc/cp/cp-gimplify.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/cp/cp-gimplify.c (.../branches/gcc-9-branch) @@ -816,6 +816,27 @@ case CALL_EXPR: ret = GS_OK; + if (flag_strong_eval_order == 2 + && CALL_EXPR_FN (*expr_p) + && cp_get_callee_fndecl_nofold (*expr_p) == NULL_TREE) + { + tree fnptrtype = TREE_TYPE (CALL_EXPR_FN (*expr_p)); + enum gimplify_status t + = gimplify_expr (&CALL_EXPR_FN (*expr_p), pre_p, NULL, + is_gimple_call_addr, fb_rvalue); + if (t == GS_ERROR) + ret = GS_ERROR; + else if (is_gimple_variable (CALL_EXPR_FN (*expr_p)) + && TREE_CODE (CALL_EXPR_FN (*expr_p)) != SSA_NAME) + CALL_EXPR_FN (*expr_p) + = get_initialized_tmp_var (CALL_EXPR_FN (*expr_p), pre_p, + NULL); + /* GIMPLE considers most pointer conversion useless, but for + calls we actually care about the exact function pointer type. */ + if (t != GS_ERROR && TREE_TYPE (CALL_EXPR_FN (*expr_p)) != fnptrtype) + CALL_EXPR_FN (*expr_p) + = build1 (NOP_EXPR, fnptrtype, CALL_EXPR_FN (*expr_p)); + } if (!CALL_EXPR_FN (*expr_p)) /* Internal function call. */; else if (CALL_EXPR_REVERSE_ARGS (*expr_p)) @@ -2050,6 +2071,9 @@ tree ctx = CP_DECL_CONTEXT (decl); if (TYPE_P (ctx) && MAYBE_CLASS_TYPE_P (ctx)) return OMP_CLAUSE_DEFAULT_SHARED; + + if (c_omp_predefined_variable (decl)) + return OMP_CLAUSE_DEFAULT_SHARED; } /* this may not be specified in data-sharing clauses, still we need Index: gcc/cp/pt.c =================================================================== --- a/src/gcc/cp/pt.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/cp/pt.c (.../branches/gcc-9-branch) @@ -3875,7 +3875,7 @@ } /* Determines if the expression or type T uses any parameter packs. */ -bool +tree uses_parameter_packs (tree t) { tree parameter_packs = NULL_TREE; @@ -3885,7 +3885,7 @@ ppd.type_pack_expansion_p = false; cp_walk_tree (&t, &find_parameter_packs_r, &ppd, ppd.visited); delete ppd.visited; - return parameter_packs != NULL_TREE; + return parameter_packs; } /* Turn ARG, which may be an expression, type, or a TREE_LIST @@ -6353,6 +6353,8 @@ static bool has_value_dependent_address (tree op) { + STRIP_ANY_LOCATION_WRAPPER (op); + /* We could use get_inner_reference here, but there's no need; this is only relevant for template non-type arguments, which can only be expressed as &id-expression. */ @@ -11757,10 +11759,6 @@ ARGUMENT_PACK_SELECT_INDEX (aps) = index; } - // Any local specialization bindings arising from this substitution - // cannot be reused for a different INDEX. - local_specialization_stack lss (lss_copy); - /* Substitute into the PATTERN with the (possibly altered) arguments. */ if (pattern == in_decl) @@ -15130,24 +15128,12 @@ /*function_p*/false, /*integral_constant_expression*/false); - if (DECLTYPE_FOR_INIT_CAPTURE (t)) - { - if (type == NULL_TREE) - { - if (complain & tf_error) - error ("empty initializer in lambda init-capture"); - type = error_mark_node; - } - else if (TREE_CODE (type) == TREE_LIST) - type = build_x_compound_expr_from_list (type, ELK_INIT, complain); - } - --cp_unevaluated_operand; --c_inhibit_evaluation_warnings; if (DECLTYPE_FOR_LAMBDA_CAPTURE (t)) type = lambda_capture_field_type (type, - DECLTYPE_FOR_INIT_CAPTURE (t), + false /*explicit_init*/, DECLTYPE_FOR_REF_CAPTURE (t)); else if (DECLTYPE_FOR_LAMBDA_PROXY (t)) type = lambda_proxy_type (type); @@ -18014,6 +18000,33 @@ return t; } +/* Subroutine of tsubst_lambda_expr: add the FIELD/INIT capture pair to the + LAMBDA_EXPR_CAPTURE_LIST passed in LIST. Do deduction for a previously + dependent init-capture. */ + +static void +prepend_one_capture (tree field, tree init, tree &list, + tsubst_flags_t complain) +{ + if (tree auto_node = type_uses_auto (TREE_TYPE (field))) + { + tree type = NULL_TREE; + if (!init) + { + if (complain & tf_error) + error ("empty initializer in lambda init-capture"); + init = error_mark_node; + } + else if (TREE_CODE (init) == TREE_LIST) + init = build_x_compound_expr_from_list (init, ELK_INIT, complain); + if (!type) + type = do_auto_deduction (TREE_TYPE (field), init, auto_node, complain); + TREE_TYPE (field) = type; + cp_apply_type_quals_to_decl (cp_type_quals (type), field); + } + list = tree_cons (field, init, list); +} + /* T is a LAMBDA_EXPR. Generate a new LAMBDA_EXPR for the current instantiation context. Instantiating a pack expansion containing a lambda might result in multiple lambdas all based on the same lambda in the @@ -18025,17 +18038,8 @@ tree oldfn = lambda_function (t); in_decl = oldfn; - /* If we have already specialized this lambda expr, reuse it. See - PR c++/87322. */ - if (local_specializations) - if (tree r = retrieve_local_specialization (t)) - return r; - tree r = build_lambda_expr (); - if (local_specializations) - register_local_specialization (r, t); - LAMBDA_EXPR_LOCATION (r) = LAMBDA_EXPR_LOCATION (t); LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (r) @@ -18088,15 +18092,15 @@ gcc_assert (TREE_CODE (init) == TREE_VEC && TREE_VEC_LENGTH (init) == len); for (int i = 0; i < len; ++i) - LAMBDA_EXPR_CAPTURE_LIST (r) - = tree_cons (TREE_VEC_ELT (field, i), - TREE_VEC_ELT (init, i), - LAMBDA_EXPR_CAPTURE_LIST (r)); + prepend_one_capture (TREE_VEC_ELT (field, i), + TREE_VEC_ELT (init, i), + LAMBDA_EXPR_CAPTURE_LIST (r), + complain); } else { - LAMBDA_EXPR_CAPTURE_LIST (r) - = tree_cons (field, init, LAMBDA_EXPR_CAPTURE_LIST (r)); + prepend_one_capture (field, init, LAMBDA_EXPR_CAPTURE_LIST (r), + complain); if (id_equal (DECL_NAME (field), "__this")) LAMBDA_EXPR_THIS_CAPTURE (r) = field; @@ -24321,12 +24325,11 @@ } else if (push_tinst_level (fn)) { + push_to_top_level (); push_access_scope (fn); push_deferring_access_checks (dk_no_deferred); input_location = DECL_SOURCE_LOCATION (fn); - tree save_ccp = current_class_ptr; - tree save_ccr = current_class_ref; /* If needed, set current_class_ptr for the benefit of tsubst_copy/PARM_DECL. */ tree tdecl = DECL_TEMPLATE_RESULT (DECL_TI_TEMPLATE (fn)); @@ -24352,9 +24355,6 @@ /*function_p=*/false, /*i_c_e_p=*/true); - current_class_ptr = save_ccp; - current_class_ref = save_ccr; - /* Build up the noexcept-specification. */ spec = build_noexcept_spec (noex, tf_warning_or_error); @@ -24364,6 +24364,7 @@ pop_deferring_access_checks (); pop_access_scope (fn); pop_tinst_level (); + pop_from_top_level (); } else spec = noexcept_false_spec; @@ -25232,8 +25233,9 @@ { if (cxx_dialect < cxx2a) { - error ("non-type template parameters of class type only available " - "with %<-std=c++2a%> or %<-std=gnu++2a%>"); + if (complain & tf_error) + error ("non-type template parameters of class type only available " + "with %<-std=c++2a%> or %<-std=gnu++2a%>"); return true; } if (dependent_type_p (type)) @@ -26715,7 +26717,7 @@ if (TREE_CODE (expr) == COND_EXPR) return build3 (COND_EXPR, TREE_TYPE (expr), - TREE_OPERAND (expr, 0), + build_non_dependent_expr (TREE_OPERAND (expr, 0)), (TREE_OPERAND (expr, 1) ? build_non_dependent_expr (TREE_OPERAND (expr, 1)) : build_non_dependent_expr (TREE_OPERAND (expr, 0))), @@ -27615,6 +27617,9 @@ } else { + if (error_operand_p (init)) + return error_mark_node; + tree parms = build_tree_list (NULL_TREE, type); tree tparms; Index: gcc/cp/semantics.c =================================================================== --- a/src/gcc/cp/semantics.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/cp/semantics.c (.../branches/gcc-9-branch) @@ -7790,6 +7790,13 @@ case OMP_CLAUSE_DEFAULT_UNSPECIFIED: break; case OMP_CLAUSE_DEFAULT_SHARED: + if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_SHARED + || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE) + && c_omp_predefined_variable (t)) + /* The __func__ variable and similar function-local predefined + variables may be listed in a shared or firstprivate + clause. */ + break; if (VAR_P (t) && OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE && TREE_STATIC (t) Index: gcc/cp/parser.c =================================================================== --- a/src/gcc/cp/parser.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/cp/parser.c (.../branches/gcc-9-branch) @@ -27596,7 +27596,9 @@ /* A parameter declaration begins with a decl-specifier, which is either the "attribute" keyword, a storage class specifier, or (usually) a type-specifier. */ - && !cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer)) + && !cp_lexer_next_token_is_decl_specifier_keyword (parser->lexer) + /* A parameter declaration can also begin with [[attribute]]. */ + && !cp_next_tokens_can_be_std_attribute_p (parser)) { tree type; tree pushed_scope = NULL_TREE; @@ -27911,7 +27913,10 @@ { tree parm_list = TREE_VEC_ELT (parameter_list, 0); tree parm = INNERMOST_TEMPLATE_PARMS (parm_list); - if (CLASS_TYPE_P (TREE_TYPE (parm))) + if (TREE_CODE (parm) != PARM_DECL) + ok = false; + else if (MAYBE_CLASS_TYPE_P (TREE_TYPE (parm)) + && !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))) /* OK, C++20 string literal operator template. We don't need to warn in lower dialects here because we will have already warned about the template parameter. */; @@ -27925,7 +27930,7 @@ tree type = INNERMOST_TEMPLATE_PARMS (parm_type); tree parm_list = TREE_VEC_ELT (parameter_list, 1); tree parm = INNERMOST_TEMPLATE_PARMS (parm_list); - if (parm == error_mark_node + if (TREE_CODE (parm) != PARM_DECL || TREE_TYPE (parm) != TREE_TYPE (type) || !TEMPLATE_PARM_PARAMETER_PACK (DECL_INITIAL (parm))) ok = false; @@ -32463,6 +32468,14 @@ decl = TREE_OPERAND (decl, 0); cp_lexer_consume_token (parser->lexer); } + else if (cp_parser_is_keyword (token, RID_FUNCTION_NAME) + || cp_parser_is_keyword (token, RID_PRETTY_FUNCTION_NAME) + || cp_parser_is_keyword (token, RID_C99_FUNCTION_NAME)) + { + cp_id_kind idk; + decl = cp_parser_primary_expression (parser, false, false, false, + &idk); + } else { name = cp_parser_id_expression (parser, /*template_p=*/false, @@ -34891,8 +34904,10 @@ else if (!cp_parser_require (parser, CPP_CLOSE_PAREN, RT_COMMA_CLOSE_PAREN)) goto resync_fail; - check_no_duplicate_clause (list, OMP_CLAUSE_DIST_SCHEDULE, "dist_schedule", - location); + /* check_no_duplicate_clause (list, OMP_CLAUSE_DIST_SCHEDULE, + "dist_schedule", location); */ + if (omp_find_clause (list, OMP_CLAUSE_DIST_SCHEDULE)) + warning_at (location, 0, "too many %qs clauses", "dist_schedule"); OMP_CLAUSE_CHAIN (c) = list; return c; @@ -40746,7 +40761,10 @@ cp_lexer_get_preprocessor_token (NULL, first_token); if (cp_parser_pragma_kind (first_token) != PRAGMA_GCC_PCH_PREPROCESS) - return; + { + c_common_no_more_pch (); + return; + } cp_lexer_get_preprocessor_token (NULL, first_token); if (first_token->type == CPP_STRING) Index: gcc/cp/call.c =================================================================== --- a/src/gcc/cp/call.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/cp/call.c (.../branches/gcc-9-branch) @@ -530,9 +530,8 @@ /* [conv.ptr] - A null pointer constant is an integral constant expression - (_expr.const_) rvalue of integer type that evaluates to zero or - an rvalue of type std::nullptr_t. */ + A null pointer constant is an integer literal ([lex.icon]) with value + zero or a prvalue of type std::nullptr_t. */ if (NULLPTR_TYPE_P (type)) return true; @@ -5186,18 +5185,15 @@ arg3_type = unlowered_expr_type (arg3); if (VOID_TYPE_P (arg2_type) || VOID_TYPE_P (arg3_type)) { - /* 'void' won't help in resolving an overloaded expression on the - other side, so require it to resolve by itself. */ - if (arg2_type == unknown_type_node) - { - arg2 = resolve_nondeduced_context_or_error (arg2, complain); - arg2_type = TREE_TYPE (arg2); - } - if (arg3_type == unknown_type_node) - { - arg3 = resolve_nondeduced_context_or_error (arg3, complain); - arg3_type = TREE_TYPE (arg3); - } + /* Do the conversions. We don't these for `void' type arguments + since it can't have any effect and since decay_conversion + does not handle that case gracefully. */ + if (!VOID_TYPE_P (arg2_type)) + arg2 = decay_conversion (arg2, complain); + if (!VOID_TYPE_P (arg3_type)) + arg3 = decay_conversion (arg3, complain); + arg2_type = TREE_TYPE (arg2); + arg3_type = TREE_TYPE (arg3); /* [expr.cond] @@ -5204,28 +5200,41 @@ One of the following shall hold: --The second or the third operand (but not both) is a - throw-expression (_except.throw_); the result is of the type - and value category of the other. + throw-expression (_except.throw_); the result is of the + type of the other and is an rvalue. --Both the second and the third operands have type void; the - result is of type void and is a prvalue. */ + result is of type void and is an rvalue. + + We must avoid calling force_rvalue for expressions of type + "void" because it will complain that their value is being + used. */ if (TREE_CODE (arg2) == THROW_EXPR && TREE_CODE (arg3) != THROW_EXPR) { + if (!VOID_TYPE_P (arg3_type)) + { + arg3 = force_rvalue (arg3, complain); + if (arg3 == error_mark_node) + return error_mark_node; + } + arg3_type = TREE_TYPE (arg3); result_type = arg3_type; - is_glvalue = glvalue_p (arg3); } else if (TREE_CODE (arg2) != THROW_EXPR && TREE_CODE (arg3) == THROW_EXPR) { + if (!VOID_TYPE_P (arg2_type)) + { + arg2 = force_rvalue (arg2, complain); + if (arg2 == error_mark_node) + return error_mark_node; + } + arg2_type = TREE_TYPE (arg2); result_type = arg2_type; - is_glvalue = glvalue_p (arg2); } else if (VOID_TYPE_P (arg2_type) && VOID_TYPE_P (arg3_type)) - { - result_type = void_type_node; - is_glvalue = false; - } + result_type = void_type_node; else { if (complain & tf_error) @@ -5244,6 +5253,7 @@ return error_mark_node; } + is_glvalue = false; goto valid_operands; } /* [expr.cond] @@ -5361,6 +5371,10 @@ && same_type_p (arg2_type, arg3_type)) { result_type = arg2_type; + if (processing_template_decl) + /* Let lvalue_kind know this was a glvalue. */ + result_type = cp_build_reference_type (result_type, xvalue_p (arg2)); + arg2 = mark_lvalue_use (arg2); arg3 = mark_lvalue_use (arg3); goto valid_operands; @@ -5558,13 +5572,6 @@ return error_mark_node; valid_operands: - if (processing_template_decl && is_glvalue) - { - /* Let lvalue_kind know this was a glvalue. */ - tree arg = (result_type == arg2_type ? arg2 : arg3); - result_type = cp_build_reference_type (result_type, xvalue_p (arg)); - } - result = build3_loc (loc, COND_EXPR, result_type, arg1, arg2, arg3); /* If the ARG2 and ARG3 are the same and don't have side-effects, @@ -10732,7 +10739,9 @@ either between a constructor and a conversion op, or between two conversion ops. */ if ((complain & tf_warning) - && winner && warn_conversion && cand1->second_conv + /* In C++17, the constructor might have been elided, which means that + an originally null ->second_conv could become non-null. */ + && winner && warn_conversion && cand1->second_conv && cand2->second_conv && (!DECL_CONSTRUCTOR_P (cand1->fn) || !DECL_CONSTRUCTOR_P (cand2->fn)) && winner != compare_ics (cand1->second_conv, cand2->second_conv)) { Index: gcc/cp/lambda.c =================================================================== --- a/src/gcc/cp/lambda.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/cp/lambda.c (.../branches/gcc-9-branch) @@ -220,17 +220,8 @@ tree type; bool is_this = is_this_parameter (tree_strip_nop_conversions (expr)); - if (!is_this && type_dependent_expression_p (expr)) + if (!is_this && explicit_init_p) { - type = cxx_make_type (DECLTYPE_TYPE); - DECLTYPE_TYPE_EXPR (type) = expr; - DECLTYPE_FOR_LAMBDA_CAPTURE (type) = true; - DECLTYPE_FOR_INIT_CAPTURE (type) = explicit_init_p; - DECLTYPE_FOR_REF_CAPTURE (type) = by_reference_p; - SET_TYPE_STRUCTURAL_EQUALITY (type); - } - else if (!is_this && explicit_init_p) - { tree auto_node = make_auto (); type = auto_node; @@ -240,6 +231,14 @@ type = build_reference_type (type); type = do_auto_deduction (type, expr, auto_node); } + else if (!is_this && type_dependent_expression_p (expr)) + { + type = cxx_make_type (DECLTYPE_TYPE); + DECLTYPE_TYPE_EXPR (type) = expr; + DECLTYPE_FOR_LAMBDA_CAPTURE (type) = true; + DECLTYPE_FOR_REF_CAPTURE (type) = by_reference_p; + SET_TYPE_STRUCTURAL_EQUALITY (type); + } else { type = non_reference (unlowered_expr_type (expr)); @@ -602,7 +601,16 @@ name = get_identifier (buf); if (variadic) - type = make_pack_expansion (type); + { + type = make_pack_expansion (type); + if (explicit_init_p) + /* With an explicit initializer 'type' is auto, which isn't really a + parameter pack in this context. We will want as many fields as we + have elements in the expansion of the initializer, so use its packs + instead. */ + PACK_EXPANSION_PARAMETER_PACKS (type) + = uses_parameter_packs (initializer); + } /* Make member variable. */ member = build_decl (input_location, FIELD_DECL, name, type); Index: gcc/cp/cp-tree.h =================================================================== --- a/src/gcc/cp/cp-tree.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/cp/cp-tree.h (.../branches/gcc-9-branch) @@ -423,7 +423,6 @@ LAMBDA_EXPR_MUTABLE_P (in LAMBDA_EXPR) DECL_FINAL_P (in FUNCTION_DECL) QUALIFIED_NAME_IS_TEMPLATE (in SCOPE_REF) - DECLTYPE_FOR_INIT_CAPTURE (in DECLTYPE_TYPE) CONSTRUCTOR_IS_DEPENDENT (in CONSTRUCTOR) TINFO_USED_TEMPLATE_ID (in TEMPLATE_INFO) PACK_EXPANSION_SIZEOF_P (in *_PACK_EXPANSION) @@ -4471,12 +4470,10 @@ (DECLTYPE_TYPE_CHECK (NODE))->type_common.string_flag /* These flags indicate that we want different semantics from normal - decltype: lambda capture just drops references, init capture - uses auto semantics, lambda proxies look through implicit dereference. */ + decltype: lambda capture just drops references, + lambda proxies look through implicit dereference. */ #define DECLTYPE_FOR_LAMBDA_CAPTURE(NODE) \ TREE_LANG_FLAG_0 (DECLTYPE_TYPE_CHECK (NODE)) -#define DECLTYPE_FOR_INIT_CAPTURE(NODE) \ - TREE_LANG_FLAG_1 (DECLTYPE_TYPE_CHECK (NODE)) #define DECLTYPE_FOR_LAMBDA_PROXY(NODE) \ TREE_LANG_FLAG_2 (DECLTYPE_TYPE_CHECK (NODE)) #define DECLTYPE_FOR_REF_CAPTURE(NODE) \ @@ -6779,7 +6776,7 @@ extern tree instantiate_decl (tree, bool, bool); extern int comp_template_parms (const_tree, const_tree); extern bool builtin_pack_fn_p (tree); -extern bool uses_parameter_packs (tree); +extern tree uses_parameter_packs (tree); extern bool template_parameter_pack_p (const_tree); extern bool function_parameter_pack_p (const_tree); extern bool function_parameter_expanded_from_pack_p (tree, tree); @@ -7328,6 +7325,11 @@ extern void cxx_print_statistics (void); extern bool maybe_warn_zero_as_null_pointer_constant (tree, location_t); +/* Analogous to initializer_zerop but also examines the type for + which the initializer is being used. Unlike initializer_zerop, + considers empty strings to be zero initializers for arrays and + non-zero for pointers. */ +extern bool type_initializer_zero_p (tree, tree); /* in ptree.c */ extern void cxx_print_xnode (FILE *, tree, int); Index: gcc/cp/name-lookup.c =================================================================== --- a/src/gcc/cp/name-lookup.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/cp/name-lookup.c (.../branches/gcc-9-branch) @@ -5656,7 +5656,7 @@ {"bitset", "", cxx11}, /* . */ {"complex", "", cxx98}, - {"complex_literals", "", cxx98}, + {"complex_literals", "", cxx14}, /* . */ {"condition_variable", "", cxx11}, {"condition_variable_any", "", cxx11}, @@ -5718,7 +5718,7 @@ {"multimap", "", cxx98}, /* . */ {"make_shared", "", cxx11}, - {"make_unique", "", cxx11}, + {"make_unique", "", cxx14}, {"shared_ptr", "", cxx11}, {"unique_ptr", "", cxx11}, {"weak_ptr", "", cxx11}, Index: gcc/passes.def =================================================================== --- a/src/gcc/passes.def (.../tags/gcc_9_2_0_release) +++ b/src/gcc/passes.def (.../branches/gcc-9-branch) @@ -434,6 +434,7 @@ NEXT_PASS (pass_ud_rtl_dce); NEXT_PASS (pass_combine); NEXT_PASS (pass_if_after_combine); + NEXT_PASS (pass_jump_after_combine); NEXT_PASS (pass_partition_blocks); NEXT_PASS (pass_outof_cfg_layout_mode); NEXT_PASS (pass_split_all_insns); @@ -450,7 +451,6 @@ NEXT_PASS (pass_reload); NEXT_PASS (pass_postreload); PUSH_INSERT_PASSES_WITHIN (pass_postreload) - NEXT_PASS (pass_postreload_jump); NEXT_PASS (pass_postreload_cse); NEXT_PASS (pass_gcse2); NEXT_PASS (pass_split_after_reload); Index: gcc/lto-streamer-out.c =================================================================== --- a/src/gcc/lto-streamer-out.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/lto-streamer-out.c (.../branches/gcc-9-branch) @@ -43,6 +43,7 @@ #include "debug.h" #include "omp-offload.h" #include "print-tree.h" +#include "tree-dfa.h" static void lto_write_tree (struct output_block*, tree, bool); @@ -1891,7 +1892,7 @@ streamer_write_hwi (ob, -1); - bb = ENTRY_BLOCK_PTR_FOR_FN (cfun); + bb = ENTRY_BLOCK_PTR_FOR_FN (fn); while (bb->next_bb) { streamer_write_hwi (ob, bb->next_bb->index); @@ -1900,9 +1901,6 @@ streamer_write_hwi (ob, -1); - /* ??? The cfgloop interface is tied to cfun. */ - gcc_assert (cfun == fn); - /* Output the number of loops. */ streamer_write_uhwi (ob, number_of_loops (fn)); @@ -2063,6 +2061,62 @@ collect_block_tree_leafs (BLOCK_SUBBLOCKS (root), leafs); } +/* This performs function body modifications that are needed for streaming + to work. */ + +void +lto_prepare_function_for_streaming (struct cgraph_node *node) +{ + struct function *fn = DECL_STRUCT_FUNCTION (node->decl); + basic_block bb; + + if (number_of_loops (fn)) + { + push_cfun (fn); + loop_optimizer_init (AVOID_CFG_MODIFICATIONS); + loop_optimizer_finalize (); + pop_cfun (); + } + /* We will renumber the statements. The code that does this uses + the same ordering that we use for serializing them so we can use + the same code on the other end and not have to write out the + statement numbers. We do not assign UIDs to PHIs here because + virtual PHIs get re-computed on-the-fly which would make numbers + inconsistent. */ + set_gimple_stmt_max_uid (fn, 0); + FOR_ALL_BB_FN (bb, fn) + { + for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi); + gsi_next (&gsi)) + { + gphi *stmt = gsi.phi (); + + /* Virtual PHIs are not going to be streamed. */ + if (!virtual_operand_p (gimple_phi_result (stmt))) + gimple_set_uid (stmt, inc_gimple_stmt_max_uid (fn)); + } + for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi); + gsi_next (&gsi)) + { + gimple *stmt = gsi_stmt (gsi); + gimple_set_uid (stmt, inc_gimple_stmt_max_uid (fn)); + } + } + /* To avoid keeping duplicate gimple IDs in the statements, renumber + virtual phis now. */ + FOR_ALL_BB_FN (bb, fn) + { + for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi); + gsi_next (&gsi)) + { + gphi *stmt = gsi.phi (); + if (virtual_operand_p (gimple_phi_result (stmt))) + gimple_set_uid (stmt, inc_gimple_stmt_max_uid (fn)); + } + } + +} + /* Output the body of function NODE->DECL. */ static void @@ -2086,9 +2140,6 @@ gcc_assert (current_function_decl == NULL_TREE && cfun == NULL); - /* Set current_function_decl and cfun. */ - push_cfun (fn); - /* Make string 0 be a NULL string. */ streamer_write_char_stream (ob->string_stream, 0); @@ -2125,9 +2176,6 @@ debug info. */ if (gimple_has_body_p (function)) { - /* Fixup loops if required to match discovery done in the reader. */ - loop_optimizer_init (AVOID_CFG_MODIFICATIONS); - streamer_write_uhwi (ob, 1); output_struct_function_base (ob, fn); @@ -2137,45 +2185,6 @@ /* Output any exception handling regions. */ output_eh_regions (ob, fn); - - /* We will renumber the statements. The code that does this uses - the same ordering that we use for serializing them so we can use - the same code on the other end and not have to write out the - statement numbers. We do not assign UIDs to PHIs here because - virtual PHIs get re-computed on-the-fly which would make numbers - inconsistent. */ - set_gimple_stmt_max_uid (cfun, 0); - FOR_ALL_BB_FN (bb, cfun) - { - for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi); - gsi_next (&gsi)) - { - gphi *stmt = gsi.phi (); - - /* Virtual PHIs are not going to be streamed. */ - if (!virtual_operand_p (gimple_phi_result (stmt))) - gimple_set_uid (stmt, inc_gimple_stmt_max_uid (cfun)); - } - for (gimple_stmt_iterator gsi = gsi_start_bb (bb); !gsi_end_p (gsi); - gsi_next (&gsi)) - { - gimple *stmt = gsi_stmt (gsi); - gimple_set_uid (stmt, inc_gimple_stmt_max_uid (cfun)); - } - } - /* To avoid keeping duplicate gimple IDs in the statements, renumber - virtual phis now. */ - FOR_ALL_BB_FN (bb, cfun) - { - for (gphi_iterator gsi = gsi_start_phis (bb); !gsi_end_p (gsi); - gsi_next (&gsi)) - { - gphi *stmt = gsi.phi (); - if (virtual_operand_p (gimple_phi_result (stmt))) - gimple_set_uid (stmt, inc_gimple_stmt_max_uid (cfun)); - } - } - /* Output the code for the function. */ FOR_ALL_BB_FN (bb, fn) output_bb (ob, bb, fn); @@ -2184,9 +2193,6 @@ streamer_write_record_start (ob, LTO_null); output_cfg (ob, fn); - - loop_optimizer_finalize (); - pop_cfun (); } else streamer_write_uhwi (ob, 0); @@ -2617,12 +2623,6 @@ const char *comdat; unsigned char c; - gcc_checking_assert (TREE_PUBLIC (t) - && (TREE_CODE (t) != FUNCTION_DECL - || !fndecl_built_in_p (t)) - && !DECL_ABSTRACT_P (t) - && (!VAR_P (t) || !DECL_HARD_REGISTER (t))); - gcc_assert (VAR_OR_FUNCTION_DECL_P (t)); name = IDENTIFIER_POINTER (DECL_ASSEMBLER_NAME (t)); Index: gcc/tree-ssa-math-opts.c =================================================================== --- a/src/gcc/tree-ssa-math-opts.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-ssa-math-opts.c (.../branches/gcc-9-branch) @@ -3840,7 +3840,7 @@ memset (&widen_mul_stats, 0, sizeof (widen_mul_stats)); calculate_dominance_info (CDI_DOMINATORS); - renumber_gimple_stmt_uids (); + renumber_gimple_stmt_uids (cfun); math_opts_dom_walker (&cfg_changed).walk (ENTRY_BLOCK_PTR_FOR_FN (cfun)); Index: gcc/tree-ssa-alias.c =================================================================== --- a/src/gcc/tree-ssa-alias.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-ssa-alias.c (.../branches/gcc-9-branch) @@ -2599,8 +2599,8 @@ static bool maybe_skip_until (gimple *phi, tree &target, basic_block target_bb, - ao_ref *ref, tree vuse, unsigned int &limit, bitmap *visited, - bool abort_on_visited, + ao_ref *ref, tree vuse, bool tbaa_p, unsigned int &limit, + bitmap *visited, bool abort_on_visited, void *(*translate)(ao_ref *, tree, void *, bool *), void *data) { @@ -2634,7 +2634,7 @@ /* An already visited PHI node ends the walk successfully. */ if (bitmap_bit_p (*visited, SSA_NAME_VERSION (PHI_RESULT (def_stmt)))) return !abort_on_visited; - vuse = get_continuation_for_phi (def_stmt, ref, limit, + vuse = get_continuation_for_phi (def_stmt, ref, tbaa_p, limit, visited, abort_on_visited, translate, data); if (!vuse) @@ -2649,7 +2649,7 @@ if ((int)limit <= 0) return false; --limit; - if (stmt_may_clobber_ref_p_1 (def_stmt, ref)) + if (stmt_may_clobber_ref_p_1 (def_stmt, ref, tbaa_p)) { bool disambiguate_only = true; if (translate @@ -2681,7 +2681,7 @@ Returns NULL_TREE if no suitable virtual operand can be found. */ tree -get_continuation_for_phi (gimple *phi, ao_ref *ref, +get_continuation_for_phi (gimple *phi, ao_ref *ref, bool tbaa_p, unsigned int &limit, bitmap *visited, bool abort_on_visited, void *(*translate)(ao_ref *, tree, void *, bool *), @@ -2724,7 +2724,8 @@ arg1 = PHI_ARG_DEF (phi, i); if (arg1 == arg0) ; - else if (! maybe_skip_until (phi, arg0, dom, ref, arg1, limit, visited, + else if (! maybe_skip_until (phi, arg0, dom, ref, arg1, tbaa_p, + limit, visited, abort_on_visited, /* Do not translate when walking over backedges. */ @@ -2768,7 +2769,7 @@ TODO: Cache the vector of equivalent vuses per ref, vuse pair. */ void * -walk_non_aliased_vuses (ao_ref *ref, tree vuse, +walk_non_aliased_vuses (ao_ref *ref, tree vuse, bool tbaa_p, void *(*walker)(ao_ref *, tree, void *), void *(*translate)(ao_ref *, tree, void *, bool *), tree (*valueize)(tree), @@ -2809,7 +2810,7 @@ if (gimple_nop_p (def_stmt)) break; else if (gimple_code (def_stmt) == GIMPLE_PHI) - vuse = get_continuation_for_phi (def_stmt, ref, limit, + vuse = get_continuation_for_phi (def_stmt, ref, tbaa_p, limit, &visited, translated, translate, data); else { @@ -2819,7 +2820,7 @@ break; } --limit; - if (stmt_may_clobber_ref_p_1 (def_stmt, ref)) + if (stmt_may_clobber_ref_p_1 (def_stmt, ref, tbaa_p)) { if (!translate) break; Index: gcc/lto-wrapper.c =================================================================== --- a/src/gcc/lto-wrapper.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/lto-wrapper.c (.../branches/gcc-9-branch) @@ -128,12 +128,11 @@ #define DUMPBASE_SUFFIX ".ltrans18446744073709551615" /* Create decoded options from the COLLECT_GCC and COLLECT_GCC_OPTIONS - environment according to LANG_MASK. */ + environment. */ static void get_options_from_collect_gcc_options (const char *collect_gcc, const char *collect_gcc_options, - unsigned int lang_mask, struct cl_decoded_option **decoded_options, unsigned int *decoded_options_count) { @@ -175,8 +174,7 @@ argc = obstack_object_size (&argv_obstack) / sizeof (void *) - 1; argv = XOBFINISH (&argv_obstack, const char **); - decode_cmdline_options_to_array (argc, (const char **)argv, - lang_mask, + decode_cmdline_options_to_array (argc, (const char **)argv, CL_DRIVER, decoded_options, decoded_options_count); obstack_free (&argv_obstack, NULL); } @@ -1008,8 +1006,7 @@ { struct cl_decoded_option *f2decoded_options; unsigned int f2decoded_options_count; - get_options_from_collect_gcc_options (collect_gcc, - fopts, CL_LANG_ALL, + get_options_from_collect_gcc_options (collect_gcc, fopts, &f2decoded_options, &f2decoded_options_count); if (!fdecoded_options) @@ -1150,7 +1147,6 @@ fatal_error (input_location, "environment variable COLLECT_GCC_OPTIONS must be set"); get_options_from_collect_gcc_options (collect_gcc, collect_gcc_options, - CL_LANG_ALL, &decoded_options, &decoded_options_count); Index: gcc/tree-ssa-alias.h =================================================================== --- a/src/gcc/tree-ssa-alias.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-ssa-alias.h (.../branches/gcc-9-branch) @@ -131,11 +131,11 @@ extern bool call_may_clobber_ref_p_1 (gcall *, ao_ref *); extern bool stmt_kills_ref_p (gimple *, tree); extern bool stmt_kills_ref_p (gimple *, ao_ref *); -extern tree get_continuation_for_phi (gimple *, ao_ref *, +extern tree get_continuation_for_phi (gimple *, ao_ref *, bool, unsigned int &, bitmap *, bool, void *(*)(ao_ref *, tree, void *, bool *), void *); -extern void *walk_non_aliased_vuses (ao_ref *, tree, +extern void *walk_non_aliased_vuses (ao_ref *, tree, bool, void *(*)(ao_ref *, tree, void *), void *(*)(ao_ref *, tree, void *, bool *), tree (*)(tree), unsigned &, void *); Index: gcc/tree-ssa-sink.c =================================================================== --- a/src/gcc/tree-ssa-sink.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-ssa-sink.c (.../branches/gcc-9-branch) @@ -439,7 +439,10 @@ if (sinkbb == frombb) return false; - *togsi = gsi_for_stmt (use); + if (sinkbb == gimple_bb (use)) + *togsi = gsi_for_stmt (use); + else + *togsi = gsi_after_labels (sinkbb); return true; } Index: gcc/dwarf2out.c =================================================================== --- a/src/gcc/dwarf2out.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/dwarf2out.c (.../branches/gcc-9-branch) @@ -15461,7 +15461,7 @@ if (mode != GET_MODE (rtl) && GET_MODE (rtl) != VOIDmode) return NULL; - scalar_int_mode int_mode, inner_mode, op1_mode; + scalar_int_mode int_mode = BImode, inner_mode, op1_mode; switch (GET_CODE (rtl)) { case POST_INC: @@ -22284,19 +22284,18 @@ /* If the contexts differ, we may not be talking about the same thing. ??? When in LTO the DIE parent is the "abstract" copy and the - context_die is the specification "copy". But this whole block - should eventually be no longer needed. */ - if (parm_die && parm_die->die_parent != context_die && !in_lto_p) + context_die is the specification "copy". */ + if (parm_die + && parm_die->die_parent != context_die + && (parm_die->die_parent->die_tag != DW_TAG_GNU_formal_parameter_pack + || parm_die->die_parent->die_parent != context_die) + && !in_lto_p) { - if (!DECL_ABSTRACT_P (node)) - { - /* This can happen when creating an inlined instance, in - which case we need to create a new DIE that will get - annotated with DW_AT_abstract_origin. */ - parm_die = NULL; - } - else - gcc_unreachable (); + gcc_assert (!DECL_ABSTRACT_P (node)); + /* This can happen when creating a concrete instance, in + which case we need to create a new DIE that will get + annotated with DW_AT_abstract_origin. */ + parm_die = NULL; } if (parm_die && parm_die->die_parent == NULL) @@ -26647,17 +26646,13 @@ { dw_die_ref die = lookup_decl_die (decl); - /* We may have to generate early debug late for LTO in case debug + /* We may have to generate full debug late for LTO in case debug was not enabled at compile-time or the target doesn't support the LTO early debug scheme. */ if (! die && in_lto_p) + dwarf2out_decl (decl); + else if (die) { - dwarf2out_decl (decl); - die = lookup_decl_die (decl); - } - - if (die) - { /* We get called via the symtab code invoking late_global_decl for symbols that are optimized out. Index: gcc/match.pd =================================================================== --- a/src/gcc/match.pd (.../tags/gcc_9_2_0_release) +++ b/src/gcc/match.pd (.../branches/gcc-9-branch) @@ -1519,8 +1519,6 @@ tree etype = range_check_type (TREE_TYPE (@0)); if (etype) { - if (! TYPE_UNSIGNED (etype)) - etype = unsigned_type_for (etype); hi = fold_convert (etype, hi); lo = fold_convert (etype, lo); hi = const_binop (MINUS_EXPR, etype, hi, lo); @@ -3381,8 +3379,7 @@ (cmp { tem; } @1))))) /* Fold comparisons against built-in math functions. */ - (if (flag_unsafe_math_optimizations - && ! flag_errno_math) + (if (flag_unsafe_math_optimizations && ! flag_errno_math) (for sq (SQRT) (simplify (cmp (sq @0) REAL_CST@1) @@ -3417,56 +3414,108 @@ if x is negative or NaN. Due to -funsafe-math-optimizations, the results for other x follow from natural arithmetic. */ (cmp @0 @1))) - (if (cmp == GT_EXPR || cmp == GE_EXPR) + (if ((cmp == LT_EXPR + || cmp == LE_EXPR + || cmp == GT_EXPR + || cmp == GE_EXPR) + && !REAL_VALUE_ISNAN (TREE_REAL_CST (@1)) + /* Give up for -frounding-math. */ + && !HONOR_SIGN_DEPENDENT_ROUNDING (TREE_TYPE (@0))) (with { - REAL_VALUE_TYPE c2; + REAL_VALUE_TYPE c2; + enum tree_code ncmp = cmp; + const real_format *fmt + = REAL_MODE_FORMAT (TYPE_MODE (TREE_TYPE (@0))); real_arithmetic (&c2, MULT_EXPR, &TREE_REAL_CST (@1), &TREE_REAL_CST (@1)); - real_convert (&c2, TYPE_MODE (TREE_TYPE (@0)), &c2); + real_convert (&c2, fmt, &c2); + /* See PR91734: if c2 is inexact and sqrt(c2) < c (or sqrt(c2) >= c), + then change LT_EXPR into LE_EXPR or GE_EXPR into GT_EXPR. */ + if (!REAL_VALUE_ISINF (c2)) + { + tree c3 = fold_const_call (CFN_SQRT, TREE_TYPE (@0), + build_real (TREE_TYPE (@0), c2)); + if (c3 == NULL_TREE || TREE_CODE (c3) != REAL_CST) + ncmp = ERROR_MARK; + else if ((cmp == LT_EXPR || cmp == GE_EXPR) + && real_less (&TREE_REAL_CST (c3), &TREE_REAL_CST (@1))) + ncmp = cmp == LT_EXPR ? LE_EXPR : GT_EXPR; + else if ((cmp == LE_EXPR || cmp == GT_EXPR) + && real_less (&TREE_REAL_CST (@1), &TREE_REAL_CST (c3))) + ncmp = cmp == LE_EXPR ? LT_EXPR : GE_EXPR; + else + { + /* With rounding to even, sqrt of up to 3 different values + gives the same normal result, so in some cases c2 needs + to be adjusted. */ + REAL_VALUE_TYPE c2alt, tow; + if (cmp == LT_EXPR || cmp == GE_EXPR) + tow = dconst0; + else + real_inf (&tow); + real_nextafter (&c2alt, fmt, &c2, &tow); + real_convert (&c2alt, fmt, &c2alt); + if (REAL_VALUE_ISINF (c2alt)) + ncmp = ERROR_MARK; + else + { + c3 = fold_const_call (CFN_SQRT, TREE_TYPE (@0), + build_real (TREE_TYPE (@0), c2alt)); + if (c3 == NULL_TREE || TREE_CODE (c3) != REAL_CST) + ncmp = ERROR_MARK; + else if (real_equal (&TREE_REAL_CST (c3), + &TREE_REAL_CST (@1))) + c2 = c2alt; + } + } + } } - (if (REAL_VALUE_ISINF (c2)) - /* sqrt(x) > y is x == +Inf, when y is very large. */ - (if (HONOR_INFINITIES (@0)) - (eq @0 { build_real (TREE_TYPE (@0), c2); }) - { constant_boolean_node (false, type); }) - /* sqrt(x) > c is the same as x > c*c. */ - (cmp @0 { build_real (TREE_TYPE (@0), c2); })))) - (if (cmp == LT_EXPR || cmp == LE_EXPR) - (with - { - REAL_VALUE_TYPE c2; - real_arithmetic (&c2, MULT_EXPR, - &TREE_REAL_CST (@1), &TREE_REAL_CST (@1)); - real_convert (&c2, TYPE_MODE (TREE_TYPE (@0)), &c2); - } - (if (REAL_VALUE_ISINF (c2)) - (switch - /* sqrt(x) < y is always true, when y is a very large - value and we don't care about NaNs or Infinities. */ - (if (! HONOR_NANS (@0) && ! HONOR_INFINITIES (@0)) - { constant_boolean_node (true, type); }) - /* sqrt(x) < y is x != +Inf when y is very large and we - don't care about NaNs. */ - (if (! HONOR_NANS (@0)) - (ne @0 { build_real (TREE_TYPE (@0), c2); })) - /* sqrt(x) < y is x >= 0 when y is very large and we - don't care about Infinities. */ - (if (! HONOR_INFINITIES (@0)) - (ge @0 { build_real (TREE_TYPE (@0), dconst0); })) - /* sqrt(x) < y is x >= 0 && x != +Inf, when y is large. */ - (if (GENERIC) - (truth_andif - (ge @0 { build_real (TREE_TYPE (@0), dconst0); }) - (ne @0 { build_real (TREE_TYPE (@0), c2); })))) - /* sqrt(x) < c is the same as x < c*c, if we ignore NaNs. */ - (if (! HONOR_NANS (@0)) - (cmp @0 { build_real (TREE_TYPE (@0), c2); }) - /* sqrt(x) < c is the same as x >= 0 && x < c*c. */ - (if (GENERIC) - (truth_andif - (ge @0 { build_real (TREE_TYPE (@0), dconst0); }) - (cmp @0 { build_real (TREE_TYPE (@0), c2); }))))))))) + (if (cmp == GT_EXPR || cmp == GE_EXPR) + (if (REAL_VALUE_ISINF (c2)) + /* sqrt(x) > y is x == +Inf, when y is very large. */ + (if (HONOR_INFINITIES (@0)) + (eq @0 { build_real (TREE_TYPE (@0), c2); }) + { constant_boolean_node (false, type); }) + /* sqrt(x) > c is the same as x > c*c. */ + (if (ncmp != ERROR_MARK) + (if (ncmp == GE_EXPR) + (ge @0 { build_real (TREE_TYPE (@0), c2); }) + (gt @0 { build_real (TREE_TYPE (@0), c2); })))) + /* else if (cmp == LT_EXPR || cmp == LE_EXPR) */ + (if (REAL_VALUE_ISINF (c2)) + (switch + /* sqrt(x) < y is always true, when y is a very large + value and we don't care about NaNs or Infinities. */ + (if (! HONOR_NANS (@0) && ! HONOR_INFINITIES (@0)) + { constant_boolean_node (true, type); }) + /* sqrt(x) < y is x != +Inf when y is very large and we + don't care about NaNs. */ + (if (! HONOR_NANS (@0)) + (ne @0 { build_real (TREE_TYPE (@0), c2); })) + /* sqrt(x) < y is x >= 0 when y is very large and we + don't care about Infinities. */ + (if (! HONOR_INFINITIES (@0)) + (ge @0 { build_real (TREE_TYPE (@0), dconst0); })) + /* sqrt(x) < y is x >= 0 && x != +Inf, when y is large. */ + (if (GENERIC) + (truth_andif + (ge @0 { build_real (TREE_TYPE (@0), dconst0); }) + (ne @0 { build_real (TREE_TYPE (@0), c2); })))) + /* sqrt(x) < c is the same as x < c*c, if we ignore NaNs. */ + (if (ncmp != ERROR_MARK && ! HONOR_NANS (@0)) + (if (ncmp == LT_EXPR) + (lt @0 { build_real (TREE_TYPE (@0), c2); }) + (le @0 { build_real (TREE_TYPE (@0), c2); })) + /* sqrt(x) < c is the same as x >= 0 && x < c*c. */ + (if (ncmp != ERROR_MARK && GENERIC) + (if (ncmp == LT_EXPR) + (truth_andif + (ge @0 { build_real (TREE_TYPE (@0), dconst0); }) + (lt @0 { build_real (TREE_TYPE (@0), c2); })) + (truth_andif + (ge @0 { build_real (TREE_TYPE (@0), dconst0); }) + (le @0 { build_real (TREE_TYPE (@0), c2); }))))))))))) /* Transform sqrt(x) cmp sqrt(y) -> x cmp y. */ (simplify (cmp (sq @0) (sq @1)) Index: gcc/go/gofrontend/expressions.cc =================================================================== --- a/src/gcc/go/gofrontend/expressions.cc (.../tags/gcc_9_2_0_release) +++ b/src/gcc/go/gofrontend/expressions.cc (.../branches/gcc-9-branch) @@ -2036,7 +2036,11 @@ int do_inlining_cost() const - { return 1; } + { + if (this->type_ != NULL && this->type_->named_type() != NULL) + return 0x100000; + return 1; + } void do_export(Export_function_body*) const; @@ -2451,7 +2455,11 @@ int do_inlining_cost() const - { return 1; } + { + if (this->type_ != NULL && this->type_->named_type() != NULL) + return 0x100000; + return 1; + } void do_export(Export_function_body*) const; @@ -2664,7 +2672,11 @@ int do_inlining_cost() const - { return 2; } + { + if (this->type_ != NULL && this->type_->named_type() != NULL) + return 0x100000; + return 2; + } void do_export(Export_function_body*) const; Index: gcc/ada/sem_spark.adb =================================================================== --- a/src/gcc/ada/sem_spark.adb (.../tags/gcc_9_2_0_release) +++ b/src/gcc/ada/sem_spark.adb (.../branches/gcc-9-branch) @@ -804,7 +804,7 @@ if Present (SPARK_Pragma (Defining_Entity (Body_N))) then if Get_SPARK_Mode_From_Annotation - (SPARK_Pragma (Defining_Entity (Body_N, False))) /= Opt.On + (SPARK_Pragma (Defining_Entity (Body_N))) /= Opt.On then return; end if; @@ -1914,7 +1914,7 @@ CorSp : Node_Id; begin - if Present (SPARK_Pragma (Defining_Entity (Pack, False))) then + if Present (SPARK_Pragma (Defining_Entity (Pack))) then if Get_SPARK_Mode_From_Annotation (SPARK_Pragma (Defining_Entity (Pack))) /= Opt.On then Index: gcc/ada/ChangeLog =================================================================== --- a/src/gcc/ada/ChangeLog (.../tags/gcc_9_2_0_release) +++ b/src/gcc/ada/ChangeLog (.../branches/gcc-9-branch) @@ -1,3 +1,36 @@ +2019-11-08 Jakub Jelinek + + Backported from mainline + 2019-10-27 Jakub Jelinek + + * locales.c (iso_3166): Add missing comma after "United-States". + +2019-10-12 Eric Botcazou + + PR ada/91995 + * sem_ch8.adb (Chain_Use_Clause): Remove second argument in calls + to Defining_Entity. + * sem_elab.adb (Find_Unit_Entity): Likewise. Deal with N_Subunit + here in lieu of in Defining_Entity. + * sem_spark.adb (Check_Callable_Body): Likewise. + (Check_Package_Body): Likewise. + * sem_util.ads (Defining_Entity): Remove 2nd and 3th parameters. + * sem_util.adb (Defining_Entity): Remove 2nd and 3th parameters, + and adjust accordingly. Deal with N_Compilation_Unit. + +2019-10-11 Eric Botcazou + + * gcc-interface/decl.c (annotate_value) : Really test the + sign of the value when deciding to build a NEGATE_EXPR. + : Remove redundant line. + : Do the negation here. + +2019-09-23 Eric Botcazou + + * gcc-interface/trans.c (Attribute_to_gnu): Test Can_Use_Internal_Rep + on the underlying type of the node. + (Call_to_gnu): Likewise with the type of the prefix. + 2019-08-12 Release Manager * GCC 9.2.0 released. Index: gcc/ada/gcc-interface/decl.c =================================================================== --- a/src/gcc/ada/gcc-interface/decl.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/ada/gcc-interface/decl.c (.../branches/gcc-9-branch) @@ -8255,9 +8255,8 @@ { case INTEGER_CST: /* For negative values, build NEGATE_EXPR of the opposite. Such values - can appear for discriminants in expressions for variants. Note that, - sizetype being unsigned, we don't directly use tree_int_cst_sgn. */ - if (tree_int_cst_sign_bit (gnu_size)) + can appear for discriminants in expressions for variants. */ + if (tree_int_cst_sgn (gnu_size) < 0) { tree t = wide_int_to_tree (sizetype, -wi::to_wide (gnu_size)); tcode = Negate_Expr; @@ -8335,9 +8334,8 @@ && tree_int_cst_sign_bit (TREE_OPERAND (gnu_size, 1))) { tcode = Minus_Expr; - ops[0] = annotate_value (TREE_OPERAND (gnu_size, 0)); - wide_int op1 = -wi::to_wide (TREE_OPERAND (gnu_size, 1)); - ops[1] = annotate_value (wide_int_to_tree (sizetype, op1)); + wide_int wop1 = -wi::to_wide (TREE_OPERAND (gnu_size, 1)); + ops[1] = annotate_value (wide_int_to_tree (sizetype, wop1)); break; } @@ -8378,9 +8376,9 @@ Such values can appear in expressions with aligning patterns. */ if (TREE_CODE (TREE_OPERAND (gnu_size, 1)) == INTEGER_CST) { - wide_int op1 = wi::sext (wi::to_wide (TREE_OPERAND (gnu_size, 1)), - TYPE_PRECISION (sizetype)); - ops[1] = annotate_value (wide_int_to_tree (sizetype, op1)); + wide_int wop1 = -wi::to_wide (TREE_OPERAND (gnu_size, 1)); + tree op1 = wide_int_to_tree (sizetype, wop1); + ops[1] = annotate_value (build1 (NEGATE_EXPR, sizetype, op1)); } break; Index: gcc/ada/gcc-interface/trans.c =================================================================== --- a/src/gcc/ada/gcc-interface/trans.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/ada/gcc-interface/trans.c (.../branches/gcc-9-branch) @@ -2248,32 +2248,29 @@ /* For other address attributes applied to a nested function, find an inner ADDR_EXPR and annotate it so that we can issue a useful warning with -Wtrampolines. */ - else if (FUNC_OR_METHOD_TYPE_P (TREE_TYPE (gnu_prefix))) + else if (FUNC_OR_METHOD_TYPE_P (TREE_TYPE (gnu_prefix)) + && (gnu_expr = remove_conversions (gnu_result, false)) + && TREE_CODE (gnu_expr) == ADDR_EXPR + && decl_function_context (TREE_OPERAND (gnu_expr, 0))) { - gnu_expr = remove_conversions (gnu_result, false); + set_expr_location_from_node (gnu_expr, gnat_node); - if (TREE_CODE (gnu_expr) == ADDR_EXPR - && decl_function_context (TREE_OPERAND (gnu_expr, 0))) - { - set_expr_location_from_node (gnu_expr, gnat_node); + /* Also check the inlining status. */ + check_inlining_for_nested_subprog (TREE_OPERAND (gnu_expr, 0)); - /* Also check the inlining status. */ - check_inlining_for_nested_subprog (TREE_OPERAND (gnu_expr, 0)); + /* Moreover, for 'Access or 'Unrestricted_Access with non- + foreign-compatible representation, mark the ADDR_EXPR so + that we can build a descriptor instead of a trampoline. */ + if ((attribute == Attr_Access + || attribute == Attr_Unrestricted_Access) + && targetm.calls.custom_function_descriptors > 0 + && Can_Use_Internal_Rep (Underlying_Type (Etype (gnat_node)))) + FUNC_ADDR_BY_DESCRIPTOR (gnu_expr) = 1; - /* Moreover, for 'Access or 'Unrestricted_Access with non- - foreign-compatible representation, mark the ADDR_EXPR so - that we can build a descriptor instead of a trampoline. */ - if ((attribute == Attr_Access - || attribute == Attr_Unrestricted_Access) - && targetm.calls.custom_function_descriptors > 0 - && Can_Use_Internal_Rep (Etype (gnat_node))) - FUNC_ADDR_BY_DESCRIPTOR (gnu_expr) = 1; - - /* Otherwise, we need to check that we are not violating the - No_Implicit_Dynamic_Code restriction. */ - else if (targetm.calls.custom_function_descriptors != 0) - Check_Implicit_Dynamic_Code_Allowed (gnat_node); - } + /* Otherwise, we need to check that we are not violating the + No_Implicit_Dynamic_Code restriction. */ + else if (targetm.calls.custom_function_descriptors != 0) + Check_Implicit_Dynamic_Code_Allowed (gnat_node); } break; @@ -5103,7 +5100,8 @@ /* If the access type doesn't require foreign-compatible representation, be prepared for descriptors. */ if (targetm.calls.custom_function_descriptors > 0 - && Can_Use_Internal_Rep (Etype (Prefix (Name (gnat_node))))) + && Can_Use_Internal_Rep + (Underlying_Type (Etype (Prefix (Name (gnat_node)))))) by_descriptor = true; } else if (Nkind (Name (gnat_node)) == N_Attribute_Reference) Index: gcc/ada/sem_util.adb =================================================================== --- a/src/gcc/ada/sem_util.adb (.../tags/gcc_9_2_0_release) +++ b/src/gcc/ada/sem_util.adb (.../branches/gcc-9-branch) @@ -5827,11 +5827,7 @@ -- Defining_Entity -- --------------------- - function Defining_Entity - (N : Node_Id; - Empty_On_Errors : Boolean := False; - Concurrent_Subunit : Boolean := False) return Entity_Id - is + function Defining_Entity (N : Node_Id) return Entity_Id is begin case Nkind (N) is when N_Abstract_Subprogram_Declaration @@ -5882,25 +5878,12 @@ => return Defining_Identifier (N); + when N_Compilation_Unit => + return Defining_Entity (Unit (N)); + when N_Subunit => - declare - Bod : constant Node_Id := Proper_Body (N); - Orig_Bod : constant Node_Id := Original_Node (Bod); + return Defining_Entity (Proper_Body (N)); - begin - -- Retrieve the entity of the original protected or task body - -- if requested by the caller. - - if Concurrent_Subunit - and then Nkind (Bod) = N_Null_Statement - and then Nkind_In (Orig_Bod, N_Protected_Body, N_Task_Body) - then - return Defining_Entity (Orig_Bod); - else - return Defining_Entity (Bod); - end if; - end; - when N_Function_Instantiation | N_Function_Specification | N_Generic_Function_Renaming_Declaration @@ -5925,14 +5908,10 @@ -- can continue semantic analysis. elsif Nam = Error then - if Empty_On_Errors then - return Empty; - else - Err := Make_Temporary (Sloc (N), 'T'); - Set_Defining_Unit_Name (N, Err); + Err := Make_Temporary (Sloc (N), 'T'); + Set_Defining_Unit_Name (N, Err); - return Err; - end if; + return Err; -- If not an entity, get defining identifier @@ -5947,11 +5926,7 @@ return Entity (Identifier (N)); when others => - if Empty_On_Errors then - return Empty; - else - raise Program_Error; - end if; + raise Program_Error; end case; end Defining_Entity; Index: gcc/ada/sem_util.ads =================================================================== --- a/src/gcc/ada/sem_util.ads (.../tags/gcc_9_2_0_release) +++ b/src/gcc/ada/sem_util.ads (.../branches/gcc-9-branch) @@ -543,10 +543,7 @@ -- in the case of a descendant of a generic formal type (returns Int'Last -- instead of 0). - function Defining_Entity - (N : Node_Id; - Empty_On_Errors : Boolean := False; - Concurrent_Subunit : Boolean := False) return Entity_Id; + function Defining_Entity (N : Node_Id) return Entity_Id; -- Given a declaration N, returns the associated defining entity. If the -- declaration has a specification, the entity is obtained from the -- specification. If the declaration has a defining unit name, then the @@ -557,22 +554,6 @@ -- local entities declared during loop expansion. These entities need -- debugging information, generated through Qualify_Entity_Names, and -- the loop declaration must be placed in the table Name_Qualify_Units. - -- - -- Set flag Empty_On_Error to change the behavior of this routine as - -- follows: - -- - -- * True - A declaration that lacks a defining entity returns Empty. - -- A node that does not allow for a defining entity returns Empty. - -- - -- * False - A declaration that lacks a defining entity is given a new - -- internally generated entity which is subsequently returned. A node - -- that does not allow for a defining entity raises Program_Error. - -- - -- The former semantics is appropriate for the back end; the latter - -- semantics is appropriate for the front end. - -- - -- Set flag Concurrent_Subunit to handle rewritings of concurrent bodies - -- which act as subunits. Such bodies are generally rewritten as null. function Denotes_Discriminant (N : Node_Id; Index: gcc/ada/locales.c =================================================================== --- a/src/gcc/ada/locales.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/ada/locales.c (.../branches/gcc-9-branch) @@ -529,7 +529,7 @@ "UM", "United States Minor Outlying Islands", "US", "United States", "US", "United States of America", - "US", "United-States" + "US", "United-States", "UY", "Uruguay", "UZ", "Uzbekistan", Index: gcc/ada/sem_ch8.adb =================================================================== --- a/src/gcc/ada/sem_ch8.adb (.../tags/gcc_9_2_0_release) +++ b/src/gcc/ada/sem_ch8.adb (.../branches/gcc-9-branch) @@ -4256,9 +4256,7 @@ -- Common case for compilation unit - elsif Defining_Entity (N => Parent (N), - Empty_On_Errors => True) = Current_Scope - then + elsif Defining_Entity (Parent (N)) = Current_Scope then null; else @@ -4265,7 +4263,7 @@ -- If declaration appears in some other scope, it must be in some -- parent unit when compiling a child. - Pack := Defining_Entity (Parent (N), Empty_On_Errors => True); + Pack := Defining_Entity (Parent (N)); if not In_Open_Scopes (Pack) then null; Index: gcc/ada/sem_elab.adb =================================================================== --- a/src/gcc/ada/sem_elab.adb (.../tags/gcc_9_2_0_release) +++ b/src/gcc/ada/sem_elab.adb (.../branches/gcc-9-branch) @@ -5544,13 +5544,23 @@ N_Procedure_Instantiation) and then Nkind (Context) = N_Compilation_Unit then - return - Related_Instance (Defining_Entity (N, Concurrent_Subunit => True)); + return Related_Instance (Defining_Entity (N)); + -- The unit denotes a concurrent body acting as a subunit. Such bodies + -- are generally rewritten into null statements. The proper entity is + -- that of the "original node". + + elsif Nkind (N) = N_Subunit + and then Nkind (Proper_Body (N)) = N_Null_Statement + and then Nkind_In (Original_Node (Proper_Body (N)), N_Protected_Body, + N_Task_Body) + then + return Defining_Entity (Original_Node (Proper_Body (N))); + -- Otherwise the proper entity is the defining entity else - return Defining_Entity (N, Concurrent_Subunit => True); + return Defining_Entity (N); end if; end Find_Unit_Entity; Index: gcc/common/config/s390/s390-common.c =================================================================== --- a/src/gcc/common/config/s390/s390-common.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/common/config/s390/s390-common.c (.../branches/gcc-9-branch) @@ -47,9 +47,9 @@ /* z14 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT | PF_EXTIMM | PF_DFP | PF_Z10 | PF_Z196 | PF_ZEC12 | PF_TX | PF_Z13 | PF_VX | PF_VXE | PF_Z14, - /* arch13 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT + /* z15 */ PF_IEEE_FLOAT | PF_ZARCH | PF_LONG_DISPLACEMENT | PF_EXTIMM | PF_DFP | PF_Z10 | PF_Z196 | PF_ZEC12 | PF_TX - | PF_Z13 | PF_VX | PF_VXE | PF_Z14 | PF_VXE2 | PF_ARCH13 + | PF_Z13 | PF_VX | PF_VXE | PF_Z14 | PF_VXE2 | PF_Z15 }; /* Change optimizations to be performed, depending on the Index: gcc/dse.c =================================================================== --- a/src/gcc/dse.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/dse.c (.../branches/gcc-9-branch) @@ -2535,10 +2535,13 @@ clear_rhs_from_active_local_stores (); } } - else if (SIBLING_CALL_P (insn) && reload_completed) + else if (SIBLING_CALL_P (insn) + && (reload_completed || HARD_FRAME_POINTER_IS_ARG_POINTER)) /* Arguments for a sibling call that are pushed to memory are passed using the incoming argument pointer of the current function. After - reload that might be (and likely is) frame pointer based. */ + reload that might be (and likely is) frame pointer based. And, if + it is a frame pointer on the target, even before reload we need to + kill frame pointer based stores. */ add_wild_read (bb_info); else /* Every other call, including pure functions, may read any memory Index: gcc/lra-remat.c =================================================================== --- a/src/gcc/lra-remat.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/lra-remat.c (.../branches/gcc-9-branch) @@ -1020,7 +1020,6 @@ static void update_scratch_ops (rtx_insn *remat_insn) { - int hard_regno; lra_insn_recog_data_t id = lra_get_insn_recog_data (remat_insn); struct lra_static_insn_data *static_id = id->insn_static_data; for (int i = 0; i < static_id->n_operands; i++) @@ -1031,17 +1030,9 @@ int regno = REGNO (*loc); if (! lra_former_scratch_p (regno)) continue; - hard_regno = reg_renumber[regno]; *loc = lra_create_new_reg (GET_MODE (*loc), *loc, lra_get_allocno_class (regno), "scratch pseudo copy"); - if (hard_regno >= 0) - { - reg_renumber[REGNO (*loc)] = hard_regno; - if (lra_dump_file) - fprintf (lra_dump_file, " Assigning the same %d to r%d\n", - REGNO (*loc), hard_regno); - } lra_register_new_scratch_op (remat_insn, i, id->icode); } Index: gcc/fortran/intrinsic.c =================================================================== --- a/src/gcc/fortran/intrinsic.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/intrinsic.c (.../branches/gcc-9-branch) @@ -4180,6 +4180,50 @@ if (f == NULL && a == NULL) /* No arguments */ return true; + /* ALLOCATED has two mutually exclusive keywords, but only one + can be present at time and neither is optional. */ + if (strcmp (name, "allocated") == 0) + { + if (!a) + { + gfc_error ("ALLOCATED intrinsic at %L requires an array or scalar " + "allocatable entity", where); + return false; + } + + if (a->name) + { + if (strcmp (a->name, "scalar") == 0) + { + if (a->next) + goto whoops; + if (a->expr->rank != 0) + { + gfc_error ("Scalar entity required at %L", &a->expr->where); + return false; + } + return true; + } + else if (strcmp (a->name, "array") == 0) + { + if (a->next) + goto whoops; + if (a->expr->rank == 0) + { + gfc_error ("Array entity required at %L", &a->expr->where); + return false; + } + return true; + } + else + { + gfc_error ("Invalid keyword %qs in %qs intrinsic function at %L", + a->name, name, &a->expr->where); + return false; + } + } + } + for (;;) { /* Put the nonkeyword arguments in a 1:1 correspondence */ if (f == NULL) @@ -4199,6 +4243,7 @@ if (a == NULL) goto do_sort; +whoops: gfc_error ("Too many arguments in call to %qs at %L", name, where); return false; Index: gcc/fortran/trans-expr.c =================================================================== --- a/src/gcc/fortran/trans-expr.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/trans-expr.c (.../branches/gcc-9-branch) @@ -4989,9 +4989,10 @@ tree gfc_desc_ptr; tree type; tree cond; + tree desc_attr; int attribute; + int cfi_attribute; symbol_attribute attr = gfc_expr_attr (e); - stmtblock_t block; /* If this is a full array or a scalar, the allocatable and pointer attributes can be passed. Otherwise it is 'CFI_attribute_other'*/ @@ -4998,12 +4999,20 @@ attribute = 2; if (!e->rank || gfc_get_full_arrayspec_from_expr (e)) { - if (fsym->attr.pointer) + if (attr.pointer) attribute = 0; - else if (fsym->attr.allocatable) + else if (attr.allocatable) attribute = 1; } + /* If the formal argument is assumed shape and neither a pointer nor + allocatable, it is unconditionally CFI_attribute_other. */ + if (fsym->as->type == AS_ASSUMED_SHAPE + && !fsym->attr.pointer && !fsym->attr.allocatable) + cfi_attribute = 2; + else + cfi_attribute = attribute; + if (e->rank != 0) { parmse->force_no_tmp = 1; @@ -5018,6 +5027,10 @@ parmse->expr = build_fold_indirect_ref_loc (input_location, parmse->expr); + bool is_artificial = (INDIRECT_REF_P (parmse->expr) + ? DECL_ARTIFICIAL (TREE_OPERAND (parmse->expr, 0)) + : DECL_ARTIFICIAL (parmse->expr)); + /* Unallocated allocatable arrays and unassociated pointer arrays need their dtype setting if they are argument associated with assumed rank dummies. */ @@ -5036,7 +5049,7 @@ type = e->ts.type != BT_ASSUMED ? gfc_typenode_for_spec (&e->ts) : NULL_TREE; - if (type && DECL_ARTIFICIAL (parmse->expr) + if (type && is_artificial && type != gfc_get_element_type (TREE_TYPE (parmse->expr))) { /* Obtain the offset to the data. */ @@ -5048,8 +5061,7 @@ gfc_conv_descriptor_dtype (parmse->expr), gfc_get_dtype_rank_type (e->rank, type)); } - else if (type == NULL_TREE - || (!is_subref_array (e) && !DECL_ARTIFICIAL (parmse->expr))) + else if (type == NULL_TREE || (!is_subref_array (e) && !is_artificial)) { /* Make sure that the span is set for expressions where it might not have been done already. */ @@ -5070,41 +5082,40 @@ parmse->expr, attr); } - /* Set the CFI attribute field. */ - tmp = gfc_conv_descriptor_attribute (parmse->expr); + /* Set the CFI attribute field through a temporary value for the + gfc attribute. */ + desc_attr = gfc_conv_descriptor_attribute (parmse->expr); tmp = fold_build2_loc (input_location, MODIFY_EXPR, - void_type_node, tmp, - build_int_cst (TREE_TYPE (tmp), attribute)); + void_type_node, desc_attr, + build_int_cst (TREE_TYPE (desc_attr), cfi_attribute)); gfc_add_expr_to_block (&parmse->pre, tmp); /* Now pass the gfc_descriptor by reference. */ parmse->expr = gfc_build_addr_expr (NULL_TREE, parmse->expr); - /* Variables to point to the gfc and CFI descriptors. */ + /* Variables to point to the gfc and CFI descriptors; cfi = NULL implies + that the CFI descriptor is allocated by the gfor_fndecl_gfc_to_cfi call. */ gfc_desc_ptr = parmse->expr; cfi_desc_ptr = gfc_create_var (pvoid_type_node, "cfi"); - gfc_add_modify (&parmse->pre, cfi_desc_ptr, - build_int_cst (pvoid_type_node, 0)); + gfc_add_modify (&parmse->pre, cfi_desc_ptr, null_pointer_node); - /* Allocate the CFI descriptor and fill the fields. */ + /* Allocate the CFI descriptor itself and fill the fields. */ tmp = gfc_build_addr_expr (NULL_TREE, cfi_desc_ptr); tmp = build_call_expr_loc (input_location, gfor_fndecl_gfc_to_cfi, 2, tmp, gfc_desc_ptr); gfc_add_expr_to_block (&parmse->pre, tmp); + /* Now set the gfc descriptor attribute. */ + tmp = fold_build2_loc (input_location, MODIFY_EXPR, + void_type_node, desc_attr, + build_int_cst (TREE_TYPE (desc_attr), attribute)); + gfc_add_expr_to_block (&parmse->pre, tmp); + /* The CFI descriptor is passed to the bind_C procedure. */ parmse->expr = cfi_desc_ptr; /* Free the CFI descriptor. */ - gfc_init_block (&block); - cond = fold_build2_loc (input_location, NE_EXPR, - logical_type_node, cfi_desc_ptr, - build_int_cst (TREE_TYPE (cfi_desc_ptr), 0)); tmp = gfc_call_free (cfi_desc_ptr); - gfc_add_expr_to_block (&block, tmp); - tmp = build3_v (COND_EXPR, cond, - gfc_finish_block (&block), - build_empty_stmt (input_location)); gfc_prepend_expr_to_block (&parmse->post, tmp); /* Transfer values back to gfc descriptor. */ @@ -5112,6 +5123,25 @@ tmp = build_call_expr_loc (input_location, gfor_fndecl_cfi_to_gfc, 2, gfc_desc_ptr, tmp); gfc_prepend_expr_to_block (&parmse->post, tmp); + + /* Deal with an optional dummy being passed to an optional formal arg + by finishing the pre and post blocks and making their execution + conditional on the dummy being present. */ + if (fsym->attr.optional && e->expr_type == EXPR_VARIABLE + && e->symtree->n.sym->attr.optional) + { + cond = gfc_conv_expr_present (e->symtree->n.sym); + tmp = fold_build2 (MODIFY_EXPR, void_type_node, + cfi_desc_ptr, + build_int_cst (pvoid_type_node, 0)); + tmp = build3_v (COND_EXPR, cond, + gfc_finish_block (&parmse->pre), tmp); + gfc_add_expr_to_block (&parmse->pre, tmp); + tmp = build3_v (COND_EXPR, cond, + gfc_finish_block (&parmse->post), + build_empty_stmt (input_location)); + gfc_add_expr_to_block (&parmse->post, tmp); + } } @@ -6001,8 +6031,14 @@ gfc_add_expr_to_block (&se->pre, tmp); } - tmp = build_fold_indirect_ref_loc (input_location, - parmse.expr); + tmp = parmse.expr; + /* With bind(C), the actual argument is replaced by a bind-C + descriptor; in this case, the data component arrives here, + which shall not be dereferenced, but still freed and + nullified. */ + if (TREE_TYPE(tmp) != pvoid_type_node) + tmp = build_fold_indirect_ref_loc (input_location, + parmse.expr); if (GFC_DESCRIPTOR_TYPE_P (TREE_TYPE (tmp))) tmp = gfc_conv_descriptor_data_get (tmp); tmp = gfc_deallocate_with_status (tmp, NULL_TREE, NULL_TREE, @@ -10603,7 +10639,8 @@ if (expr1->ts.deferred && gfc_expr_attr (expr1).allocatable && gfc_check_dependency (expr1, expr2, true)) - rse.string_length = gfc_evaluate_now (rse.string_length, &rse.pre); + rse.string_length = + gfc_evaluate_now_function_scope (rse.string_length, &rse.pre); string_length = rse.string_length; } else Index: gcc/fortran/trans-array.c =================================================================== --- a/src/gcc/fortran/trans-array.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/trans-array.c (.../branches/gcc-9-branch) @@ -6110,9 +6110,12 @@ tree atype = type; while (TREE_CODE (TREE_TYPE (atype)) == ARRAY_TYPE) atype = TREE_TYPE (atype); - if (TREE_CODE (TREE_TYPE (atype)) == INTEGER_TYPE - && tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (se.expr))) - > tree_to_uhwi (TYPE_SIZE_UNIT (atype))) + gcc_checking_assert (TREE_CODE (TREE_TYPE (atype)) + == INTEGER_TYPE); + gcc_checking_assert (TREE_TYPE (TREE_TYPE (se.expr)) + == TREE_TYPE (atype)); + if (tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (se.expr))) + > tree_to_uhwi (TYPE_SIZE_UNIT (atype))) { unsigned HOST_WIDE_INT size = tree_to_uhwi (TYPE_SIZE_UNIT (atype)); @@ -6119,8 +6122,8 @@ const char *p = TREE_STRING_POINTER (se.expr); se.expr = build_string (size, p); - TREE_TYPE (se.expr) = atype; } + TREE_TYPE (se.expr) = atype; } break; @@ -8024,7 +8027,7 @@ /* The components shall be deallocated before their containing entity. */ gfc_prepend_expr_to_block (&se->post, tmp); } - if (expr->ts.type == BT_CHARACTER) + if (expr->ts.type == BT_CHARACTER && expr->expr_type != EXPR_FUNCTION) se->string_length = expr->ts.u.cl->backend_decl; if (size) array_parameter_size (se->expr, expr, size); Index: gcc/fortran/class.c =================================================================== --- a/src/gcc/fortran/class.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/class.c (.../branches/gcc-9-branch) @@ -2241,6 +2241,9 @@ if (!derived->attr.unlimited_polymorphic && derived->attr.is_class) derived = gfc_get_derived_super_type (derived); + if (!derived) + return NULL; + /* Find the gsymbol for the module of use associated derived types. */ if ((derived->attr.use_assoc || derived->attr.used_in_submodule) && !derived->attr.vtype && !derived->attr.is_class) Index: gcc/fortran/decl.c =================================================================== --- a/src/gcc/fortran/decl.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/decl.c (.../branches/gcc-9-branch) @@ -99,6 +99,11 @@ /* Set upon parsing a !GCC$ unroll n directive for use in the next loop. */ int directive_unroll = -1; +/* Set upon parsing supported !GCC$ pragmas for use in the next loop. */ +bool directive_ivdep = false; +bool directive_vector = false; +bool directive_novector = false; + /* Map of middle-end built-ins that should be vectorized. */ hash_map *gfc_vectorized_builtins; @@ -1335,9 +1340,9 @@ } /* Trap declarations of attributes in encompassing scope. The - signature for this is that ts.kind is set. Legitimate - references only set ts.type. */ - if (sym->ts.kind != 0 + signature for this is that ts.kind is nonzero for no-CLASS + entity. For a CLASS entity, ts.kind is zero. */ + if ((sym->ts.kind != 0 || sym->ts.type == BT_CLASS) && !sym->attr.implicit_type && sym->attr.proc == 0 && gfc_current_ns->parent != NULL @@ -2644,7 +2649,7 @@ then we want to set the type & bail out. */ if (flag_cray_pointer && !gfc_comp_struct (gfc_current_state ())) { - gfc_find_symbol (name, gfc_current_ns, 1, &sym); + gfc_find_symbol (name, gfc_current_ns, 0, &sym); if (sym != NULL && sym->attr.cray_pointee) { m = MATCH_YES; @@ -3991,7 +3996,6 @@ return MATCH_YES; } - m = gfc_match (" type ("); matched_type = (m == MATCH_YES); if (matched_type) @@ -4039,7 +4043,10 @@ m = MATCH_YES; if (matched_type && m == MATCH_YES && gfc_match_char (')') != MATCH_YES) - m = MATCH_ERROR; + { + gfc_error ("Malformed type-spec at %C"); + return MATCH_ERROR; + } return m; } @@ -4062,8 +4069,12 @@ && !gfc_notify_std (GFC_STD_F2008, "TYPE with " "intrinsic-type-spec at %C")) return MATCH_ERROR; + if (matched_type && gfc_match_char (')') != MATCH_YES) - return MATCH_ERROR; + { + gfc_error ("Malformed type-spec at %C"); + return MATCH_ERROR; + } ts->type = BT_REAL; ts->kind = gfc_default_double_kind; @@ -4093,7 +4104,10 @@ return MATCH_ERROR; if (matched_type && gfc_match_char (')') != MATCH_YES) - return MATCH_ERROR; + { + gfc_error ("Malformed type-spec at %C"); + return MATCH_ERROR; + } ts->type = BT_COMPLEX; ts->kind = gfc_default_double_kind; @@ -4114,7 +4128,13 @@ if (m == MATCH_ERROR) return m; - m = gfc_match_char (')'); + gfc_gobble_whitespace (); + if (gfc_peek_ascii_char () != ')') + { + gfc_error ("Malformed type-spec at %C"); + return MATCH_ERROR; + } + m = gfc_match_char (')'); /* Burn closing ')'. */ } if (m != MATCH_YES) @@ -4397,6 +4417,7 @@ gfc_next_ascii_char (); return MATCH_YES; } + gfc_error ("Malformed type-spec at %C"); return MATCH_NO; } } @@ -4410,7 +4431,10 @@ } if (matched_type && gfc_match_char (')') != MATCH_YES) - return MATCH_ERROR; + { + gfc_error ("Malformed type-spec at %C"); + return MATCH_ERROR; + } /* Defer association of the KIND expression of function results until after USE and IMPORT statements. */ @@ -6145,13 +6169,17 @@ found_prefix = true; } - if (!seen_type && ts != NULL - && gfc_match_decl_type_spec (ts, 0) == MATCH_YES - && gfc_match_space () == MATCH_YES) + if (!seen_type && ts != NULL) { - - seen_type = true; - found_prefix = true; + match m; + m = gfc_match_decl_type_spec (ts, 0); + if (m == MATCH_ERROR) + goto error; + if (m == MATCH_YES && gfc_match_space () == MATCH_YES) + { + seen_type = true; + found_prefix = true; + } } if (gfc_match ("elemental% ") == MATCH_YES) @@ -7202,13 +7230,16 @@ if (sym->attr.is_bind_c == 1) { sym->attr.is_bind_c = 0; - if (sym->old_symbol != NULL) - gfc_error_now ("BIND(C) attribute at %L can only be used for " - "variables or common blocks", - &(sym->old_symbol->declared_at)); - else - gfc_error_now ("BIND(C) attribute at %L can only be used for " - "variables or common blocks", &gfc_current_locus); + + if (gfc_state_stack->previous + && gfc_state_stack->previous->state != COMP_SUBMODULE) + { + locus loc; + loc = sym->old_symbol != NULL + ? sym->old_symbol->declared_at : gfc_current_locus; + gfc_error_now ("BIND(C) attribute at %L can only be used for " + "variables or common blocks", &loc); + } } if (found_match != MATCH_YES) @@ -7222,6 +7253,24 @@ found_match = suffix_match; } + /* F2018 C1550 (R1526) If MODULE appears in the prefix of a module + subprogram and a binding label is specified, it shall be the + same as the binding label specified in the corresponding module + procedure interface body. */ + if (sym->attr.is_bind_c && sym->attr.module_procedure && sym->old_symbol + && strcmp (sym->name, sym->old_symbol->name) == 0 + && strcmp (sym->binding_label, sym->old_symbol->binding_label) != 0) + { + const char *null = "NULL", *s1, *s2; + s1 = sym->binding_label; + if (!s1) s1 = null; + s2 = sym->old_symbol->binding_label; + if (!s2) s2 = null; + gfc_error ("Mismatch in BIND(C) names (%qs/%qs) at %C", s1, s2); + sym->refs++; /* Needed to avoid an ICE in gfc_release_symbol */ + return MATCH_ERROR; + } + if(found_match != MATCH_YES) m = MATCH_ERROR; else @@ -7460,16 +7509,16 @@ not allowed for procedures. */ if (entry->attr.is_bind_c == 1) { + locus loc; + entry->attr.is_bind_c = 0; - if (entry->old_symbol != NULL) - gfc_error_now ("BIND(C) attribute at %L can only be used for " - "variables or common blocks", - &(entry->old_symbol->declared_at)); - else - gfc_error_now ("BIND(C) attribute at %L can only be used for " - "variables or common blocks", &gfc_current_locus); - } + loc = entry->old_symbol != NULL + ? entry->old_symbol->declared_at : gfc_current_locus; + gfc_error_now ("BIND(C) attribute at %L can only be used for " + "variables or common blocks", &loc); + } + /* Check what next non-whitespace character is so we can tell if there is the required parens if we have a BIND(C). */ old_loc = gfc_current_locus; @@ -7668,13 +7717,16 @@ if (sym->attr.is_bind_c == 1) { sym->attr.is_bind_c = 0; - if (sym->old_symbol != NULL) - gfc_error_now ("BIND(C) attribute at %L can only be used for " - "variables or common blocks", - &(sym->old_symbol->declared_at)); - else - gfc_error_now ("BIND(C) attribute at %L can only be used for " - "variables or common blocks", &gfc_current_locus); + + if (gfc_state_stack->previous + && gfc_state_stack->previous->state != COMP_SUBMODULE) + { + locus loc; + loc = sym->old_symbol != NULL + ? sym->old_symbol->declared_at : gfc_current_locus; + gfc_error_now ("BIND(C) attribute at %L can only be used for " + "variables or common blocks", &loc); + } } /* C binding names are not allowed for internal procedures. */ @@ -7716,6 +7768,24 @@ return MATCH_ERROR; } + /* F2018 C1550 (R1526) If MODULE appears in the prefix of a module + subprogram and a binding label is specified, it shall be the + same as the binding label specified in the corresponding module + procedure interface body. */ + if (sym->attr.module_procedure && sym->old_symbol + && strcmp (sym->name, sym->old_symbol->name) == 0 + && strcmp (sym->binding_label, sym->old_symbol->binding_label) != 0) + { + const char *null = "NULL", *s1, *s2; + s1 = sym->binding_label; + if (!s1) s1 = null; + s2 = sym->old_symbol->binding_label; + if (!s2) s2 = null; + gfc_error ("Mismatch in BIND(C) names (%qs/%qs) at %C", s1, s2); + sym->refs++; /* Needed to avoid an ICE in gfc_release_symbol */ + return MATCH_ERROR; + } + /* Scan the dummy arguments for an alternate return. */ for (arg = sym->formal; arg; arg = arg->next) if (!arg->sym) @@ -10161,6 +10231,20 @@ return MATCH_ERROR; } + /* In free source form, need to check for TYPE XXX as oppose to TYPEXXX. + But, we need to simply return for TYPE(. */ + if (m == MATCH_NO && gfc_current_form == FORM_FREE) + { + char c = gfc_peek_ascii_char (); + if (c == '(') + return m; + if (!gfc_is_whitespace (c)) + { + gfc_error ("Mangled derived type definition at %C"); + return MATCH_NO; + } + } + m = gfc_match (" %n ", name); if (m != MATCH_YES) return m; @@ -10168,7 +10252,7 @@ /* Make sure that we don't identify TYPE IS (...) as a parameterized derived type named 'is'. TODO Expand the check, when 'name' = "is" by matching " (tname) " - and checking if this is a(n intrinsic) typename. his picks up + and checking if this is a(n intrinsic) typename. This picks up misplaced TYPE IS statements such as in select_type_1.f03. */ if (gfc_peek_ascii_char () == '(') { @@ -11472,3 +11556,53 @@ return MATCH_YES; } + +/* Match an !GCC$ IVDEP statement. + When we come here, we have already matched the !GCC$ IVDEP string. */ + +match +gfc_match_gcc_ivdep (void) +{ + if (gfc_match_eos () == MATCH_YES) + { + directive_ivdep = true; + return MATCH_YES; + } + + gfc_error ("Syntax error in !GCC$ IVDEP directive at %C"); + return MATCH_ERROR; +} + +/* Match an !GCC$ VECTOR statement. + When we come here, we have already matched the !GCC$ VECTOR string. */ + +match +gfc_match_gcc_vector (void) +{ + if (gfc_match_eos () == MATCH_YES) + { + directive_vector = true; + directive_novector = false; + return MATCH_YES; + } + + gfc_error ("Syntax error in !GCC$ VECTOR directive at %C"); + return MATCH_ERROR; +} + +/* Match an !GCC$ NOVECTOR statement. + When we come here, we have already matched the !GCC$ NOVECTOR string. */ + +match +gfc_match_gcc_novector (void) +{ + if (gfc_match_eos () == MATCH_YES) + { + directive_novector = true; + directive_vector = false; + return MATCH_YES; + } + + gfc_error ("Syntax error in !GCC$ NOVECTOR directive at %C"); + return MATCH_ERROR; +} Index: gcc/fortran/array.c =================================================================== --- a/src/gcc/fortran/array.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/array.c (.../branches/gcc-9-branch) @@ -843,6 +843,10 @@ sym->as->cotype = as->cotype; sym->as->corank = as->corank; + /* Check F2018:C822. */ + if (sym->as->rank + sym->as->corank > GFC_MAX_DIMENSIONS) + goto too_many; + for (i = 0; i < as->corank; i++) { sym->as->lower[sym->as->rank + i] = as->lower[i]; @@ -861,6 +865,10 @@ sym->as->cray_pointee = as->cray_pointee; sym->as->cp_was_assumed = as->cp_was_assumed; + /* Check F2018:C822. */ + if (sym->as->rank + sym->as->corank > GFC_MAX_DIMENSIONS) + goto too_many; + for (i = 0; i < sym->as->corank; i++) { sym->as->lower[as->rank + i] = sym->as->lower[i]; @@ -875,6 +883,12 @@ free (as); return true; + +too_many: + + gfc_error ("rank + corank of %qs exceeds %d at %C", sym->name, + GFC_MAX_DIMENSIONS); + return false; } @@ -1124,6 +1138,31 @@ } +/* Convert components of an array constructor to the type in ts. */ + +static match +walk_array_constructor (gfc_typespec *ts, gfc_constructor_base head) +{ + gfc_constructor *c; + gfc_expr *e; + match m; + + for (c = gfc_constructor_first (head); c; c = gfc_constructor_next (c)) + { + e = c->expr; + if (e->expr_type == EXPR_ARRAY && e->ts.type == BT_UNKNOWN + && !e->ref && e->value.constructor) + { + m = walk_array_constructor (ts, e->value.constructor); + if (m == MATCH_ERROR) + return m; + } + else if (!gfc_convert_type (e, ts, 1) && e->ts.type != BT_UNKNOWN) + return MATCH_ERROR; + } + return MATCH_YES; +} + /* Match an array constructor. */ match @@ -1253,14 +1292,13 @@ } } - /* Walk the constructor and ensure type conversion for numeric types. */ + /* Walk the constructor, and if possible, do type conversion for + numeric types. */ if (gfc_numeric_ts (&ts)) { - c = gfc_constructor_first (head); - for (; c; c = gfc_constructor_next (c)) - if (!gfc_convert_type (c->expr, &ts, 1) - && c->expr->ts.type != BT_UNKNOWN) - return MATCH_ERROR; + m = walk_array_constructor (&ts, head); + if (m == MATCH_ERROR) + return m; } } else @@ -2175,6 +2213,9 @@ dest->end = gfc_copy_expr (src->end); dest->step = gfc_copy_expr (src->step); dest->unroll = src->unroll; + dest->ivdep = src->ivdep; + dest->vector = src->vector; + dest->novector = src->novector; return dest; } Index: gcc/fortran/gfortran.h =================================================================== --- a/src/gcc/fortran/gfortran.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/gfortran.h (.../branches/gcc-9-branch) @@ -2407,6 +2407,9 @@ { gfc_expr *var, *start, *end, *step; unsigned short unroll; + bool ivdep; + bool vector; + bool novector; } gfc_iterator; @@ -2783,6 +2786,9 @@ bool gfc_in_match_data (void); match gfc_match_char_spec (gfc_typespec *); extern int directive_unroll; +extern bool directive_ivdep; +extern bool directive_vector; +extern bool directive_novector; /* SIMD clause enum. */ enum gfc_simd_clause Index: gcc/fortran/ChangeLog =================================================================== --- a/src/gcc/fortran/ChangeLog (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/ChangeLog (.../branches/gcc-9-branch) @@ -1,3 +1,389 @@ +2019-11-08 Tobias Burnus + + PR fortran/92208 + Backport from mainline + 2019-10-31 Tobias Burnus + + PR fortran/92277 + * trans-expr.c (gfc_conv_gfc_desc_to_cfi_desc): Fix DECL_ARTIFICIAL + checking. + +2019-11-04 Tobias Burnus + + Backport from mainline + 2019-10-30 Tobias Burnus + + PR fortran/92208 + * trans-array.c (gfc_conv_array_parameter): Only copy + string-length backend_decl if expression is not a function. + +2019-11-04 Tobias Burnus + + Backport from mainline + 2019-10-31 Tobias Burnus + + PR fortran/92284. + * trans-expr.c (gfc_conv_gfc_desc_to_cfi_desc): Free CFI descriptor + at the end; partial revised revert of Rev. 277502. + +2019-10-28  Paul Thomas   + + Backport from trunk + PR fortran/91926 + * trans-expr.c (gfc_conv_gfc_desc_to_cfi_desc): Correct the + assignment of the attribute field to account correctly for an + assumed shape dummy. Assign separately to the gfc and cfi + descriptors since the atribute can be different. Add branch to + correctly handle missing optional dummies. + +2019-10-28 Tobias Burnus + + Backport from mainline + 2019-10-28 Tobias Burnus + + PR fortran/91863 + * trans-expr.c (gfc_conv_gfc_desc_to_cfi_desc): Don't free data + memory as that's done on the Fortran side. + (gfc_conv_procedure_call): Handle void* pointers from + gfc_conv_gfc_desc_to_cfi_desc. + +2019-10-27 Paul Thomas + + Backport from mainline + PR fortran/86248 + * resolve.c (flag_fn_result_spec): Correct a typo before the + function declaration. + * trans-decl.c (gfc_sym_identifier): Boost the length of 'name' + to allow for all variants. Simplify the code by using a pointer + to the symbol's proc_name and taking the return out of each of + the conditional branches. Allow symbols with fn_result_spec set + that do not come from a procedure namespace and have a module + name to go through the non-fn_result_spec branch. + +2019-10-22 Steven G. Kargl + + PR fortran/92174 + * decl.c (attr_decl1): Move check for F2018:C822 from here ... + * array.c (gfc_set_array_spec): ... to here. + +2019-10-18 Steven G. Kargl + + PR fortran/69455 + * trans-decl.c (generate_local_decl): Avoid misconstructed + intrinsic modules in a BLOCK construct. + +2019-10-18 Tobias Burnus + + Backport from mainline + 2019-10-18 Tobias Burnus + + PR fortran/91586 + * class.c (gfc_find_derived_vtab): Return NULL + instead of deref'ing NULL pointer. + +2019-10-17 Steven G. Kargl + + PR fortran/83113 + PR fortran/89943 + decl.c (gfc_match_function_decl): Ignore duplicate BIND(C) for function + declaration in submodule. Implement at check for F2018 C1550. + (gfc_match_entry): Use temporary for locus, which allows removal of + one gfc_error_now(). + (gfc_match_subroutine): Ignore duplicate BIND(C) for subroutine + declaration in submodule. Implement at check for F2018 C1550. + +2019-10-11 Steven G. Kargl + + PR fortran/91715 + * decl.c (gfc_match_prefix): If matching a type-spec returns an error, + it's an error so re-act correctly. + +2019-10-11 Steven G. Kargl + + PR fortran/91649 + check.c (gfc_check_findloc): Additional checking for valid arguments + +2019-10-10 Steven G. Kargl + + PR fortran/91801 + * simplify.c (gfc_simplify_reshape): Convert a gcc_assert into a + gfc_error as a user can easily hit the condition. + +2019-10-07 Thomas Koenig + + Backport from trunk + PR fortran/84487 + * trans-decl.c (gfc_get_symbol_decl): For __def_init, set + DECL_ARTIFICAL and do not set TREE_READONLY. + +2019-10-05 Steven G. Kargl + + PR fortran/47054 + * decl.c (variable_decl): Do not search parent namespace for symbol. + +2019-10-04 Steven G. Kargl + + PR fortran/91942 + * io.c (match_vtag): Check for non-NULL result->symtree. + (match_out_tag): Check for invalid constant due to inquiry parameter. + (match_filepos): Instead of a syntax error, go to cleanup to get better + error messages. + +2019-10-04 Steven G. Kargl + + PR fortran/91785 + * primary.c (gfc_match_varspec): Ensure an inquiry parameter has + it locus set. + +2019-10-01 Steven G. Kargl + + PR fortran/91864 + * gcc/fortran/io.c (match_io_element): An inquiry parameter cannot be + read into. + * gcc/fortran/match.c (gfc_match_allocate): An inquiry parameter + can be neither an allocate-object nor stat variable. + (gfc_match_deallocate): An inquiry parameter cannot be deallocated. + +2019-10-01 Steven G. Kargl + + Backport of r276254+276265 + PR fortran/91802 + * decl.c (attr_decl1): Check if rank+corank > 15. + +2019-10-01 Steven G. Kargl + + PR fortran/91714 + * decl.c (gfc_match_decl_type_spec): Issue errors for a few + mangled types. + +2019-10-01 Steven G. Kargl + + PR fortran/91641 + * check.c (gfc_check_is_contiguous): null() cannot be an actual + argument to is_contiguous(). + +2019-09-21 Paul Thomas + + Backport from mainline + PR fortran/91588 + * expr.c (check_inquiry): Remove extended component refs by + using symbol pointers. If a function argument is an associate + variable with a constant target, copy the target expression in + place of the argument expression. Check that the charlen is not + NULL before using the string length. + +2019-09-19 Steven G. Kargl + + PR fortran/91727 + * resolve.c (conformable_arrays): If array-spec is NULL, then + allocate-object is a scalar. a conformability check only occurs + for an array source-expr. + +2019-09-18 Thomas Koenig + + Backport from trunk + PR fortran/91550 + * frontend-passes.c (do_subscript): If step equals + zero, a previuos error has been reported; do nothing + in this case. + * resolve.c (gfc_resolve_iterator): Move error checking + after type conversion. + +2019-09-15 Thomas Koenig + + Backport from trunk + PR fortran/91557 + * trans-decl.c (generate_local_decl): Do not warn if the symbol + is artificial. + * trans-types.c (get_formal_from_actual_arglist): Set artificial + attribute on dummy arguments. + +2019-09-14 Steven G. Kargl + + PR fortran/91553 + * simplify.c (gfc_convert_constant): During conversion check if the + constant is enclosed in parenthesis, and simplify expression. + +2019-09-14 Steven G. Kargl + + PR fortran/91566 + * simplify.c (gfc_simplify_merge): Need to simplify expression + after insertation of parenthesis. + +2019-09-14 Steven G. Kargl + + PR fortran/91642 + * io.c (gfc_match_inquire): null() cannot be in an iolength inquire + list. + +2019-09-07 Paul Thomas + + Backport from mainline + PR fortran/91589 + * primary.c (gfc_match_varspec): Return MATCH_NO on an apparent + component ref, when the primary type is intrinsic. + +2019-09-05 Harald Anlauf + + Backport from mainline + PR fortran/91496 + * gfortran.h: Extend struct gfc_iterator for loop annotations. + * array.c (gfc_copy_iterator): Copy loop annotations by IVDEP, + VECTOR, and NOVECTOR pragmas. + * decl.c (gfc_match_gcc_ivdep, gfc_match_gcc_vector) + (gfc_match_gcc_novector): New matcher functions handling IVDEP, + VECTOR, and NOVECTOR pragmas. + * match.h: Declare prototypes of matcher functions handling IVDEP, + VECTOR, and NOVECTOR pragmas. + * parse.c (decode_gcc_attribute, parse_do_block) + (parse_executable): Decode IVDEP, VECTOR, and NOVECTOR pragmas; + emit warning for unrecognized pragmas instead of error. + * trans-stmt.c (gfc_trans_simple_do, gfc_trans_do): Add code to + emit annotations for IVDEP, VECTOR, and NOVECTOR pragmas. + * gfortran.texi: Document IVDEP, VECTOR, and NOVECTOR pragmas. + + PR fortran/91496 + * parse.c (parse_executable): Improve error messages for + improperly placed pragmas not preceeding a loop. + +2019-09-05 Steven G. Kargl + + PR fortran/91660 + * decl.c (gfc_match_decl_type_spec): Improve and restore error + message for malformed types-spec. + +2019-09-02 Steven G. Kargl + + PR fortran/91552 + * array.c (walk_array_constructor): New function. + (gfc_match_array_constructor): Use it. + +2019-08-30 Steven G. Kargl + + PR fortran/91587 + * io.c (match_filepos): MATCH_ERROR should branch to a syntax error. + +2019-08-30 Steven G. Kargl + + PR fortran/91565 + * simplify.c (gfc_simplify_reshape): Add additional checks of the + ORDER dummy argument. + +2019-08-30 Steven G. Kargl + + PR fortran/91564 + * check.c (gfc_check_kill_sub): Additional checks on status dummy + argument. + +2019-08-30 Steven G. Kargl + + PR fortran/91551 + * intrinsic.c (sort_actual): ALLOCATED has one argument. Check for + no argument case. + +2019-08-30 Steven G. Kargl + + PR fortran/91485 + module.c (gfc_match_use): User defined operator cannot conflict with + a rename symbol. + +2019-08-17 Steven G. Kargl + + PR fortran/91471 + * primary.c (gfc_variable_attr): Remove a gfc_internal_error(), + which cannot be reached by conforming Fortran code, but seems to + be reachable from nonconforming Fortran code. Treat the AR_UNKNOWN + case as a no-op. + +2019-08-17 Steven G. Kargl + + PR fortran/78739 + * match.c (gfc_match_st_function): When matching a statement function, + need to check if the statement function name shadows the function + name. + +2019-08-17 Steven G. Kargl + + PR fortran/78719 + * decl.c (get_proc_name): Check for a CLASS entity when trying to + add attributes to an entity that already has an explicit interface. + +2019-08-17 Steven G. Kargl + + PR fortran/82992 + * module.c (gfc_match_use): When renaming a module entity, search + current namespace for conflicting symbol. + +2019-08-13 Steven G. Kargl + + PR fortran/87991 + * resolve.c (check_data_variable): data-stmt-object with pointer + attribute requires a data-stmt-value with the target attribute. + +2013-08-13 Thomas Koenig + + Backport from trunk + PR fortran/90563 + * frontend-passes.c (insert_index): Suppress errors while + simplifying the resulting expression. + +2019-08-13 Steven G. Kargl + + PR fortran/88072 + * misc.c (gfc_typename): Do not point to something that ought not to + be pointed at. + +2019-08-13 Thomas Koenig + + Backport from trunk + PR fortran/90561 + * trans.h (gfc_evaluate_now_function_scope): New function. + * trans.c (gfc_evaluate_now_function_scope): New function. + * trans-expr.c (gfc_trans_assignment): Use it. + +2019-08-13 Steven G. Kargl + + PR fortran/89647 + resolve.c (resolve_typebound_procedure): Allow host associated + procedure to be a binding target. While here, wrap long line. + +2019-08-13 Steven G. Kargl + + PR fortran/87993 + * expr.c (gfc_simplify_expr): Simplifcation of an array with a kind + type inquiry suffix yields a constant expression. + +2019-08-13 Thomas Koenig + + Backport from trunk + PR fortran/91424 + * frontend-passes.c (do_subscript): Do not warn for an + expression a second time. Do not warn about a zero-trip loop. + (doloop_warn): Also look at contained namespaces. + +2019-08-12 Steven G. Kargl + + PR fortran/91359 + * trans-decl.c (gfc_generate_return): Ensure something is returned + from a function. + +2019-08-12 Steven G. Kargl + + PR fortran/42546 + * check.c(gfc_check_allocated): Add comment pointing to ... + * intrinsic.c(sort_actual): ... the checking done here. + 2019-08-12 Release Manager * GCC 9.2.0 released. Index: gcc/fortran/trans-stmt.c =================================================================== --- a/src/gcc/fortran/trans-stmt.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/trans-stmt.c (.../branches/gcc-9-branch) @@ -2171,6 +2171,19 @@ build_int_cst (integer_type_node, annot_expr_unroll_kind), build_int_cst (integer_type_node, code->ext.iterator->unroll)); + if (code->ext.iterator->ivdep && cond != error_mark_node) + cond = build3 (ANNOTATE_EXPR, TREE_TYPE (cond), cond, + build_int_cst (integer_type_node, annot_expr_ivdep_kind), + integer_zero_node); + if (code->ext.iterator->vector && cond != error_mark_node) + cond = build3 (ANNOTATE_EXPR, TREE_TYPE (cond), cond, + build_int_cst (integer_type_node, annot_expr_vector_kind), + integer_zero_node); + if (code->ext.iterator->novector && cond != error_mark_node) + cond = build3 (ANNOTATE_EXPR, TREE_TYPE (cond), cond, + build_int_cst (integer_type_node, annot_expr_no_vector_kind), + integer_zero_node); + /* The loop exit. */ tmp = fold_build1_loc (loc, GOTO_EXPR, void_type_node, exit_label); TREE_USED (exit_label) = 1; @@ -2501,6 +2514,20 @@ = build3 (ANNOTATE_EXPR, TREE_TYPE (cond), cond, build_int_cst (integer_type_node, annot_expr_unroll_kind), build_int_cst (integer_type_node, code->ext.iterator->unroll)); + + if (code->ext.iterator->ivdep && cond != error_mark_node) + cond = build3 (ANNOTATE_EXPR, TREE_TYPE (cond), cond, + build_int_cst (integer_type_node, annot_expr_ivdep_kind), + integer_zero_node); + if (code->ext.iterator->vector && cond != error_mark_node) + cond = build3 (ANNOTATE_EXPR, TREE_TYPE (cond), cond, + build_int_cst (integer_type_node, annot_expr_vector_kind), + integer_zero_node); + if (code->ext.iterator->novector && cond != error_mark_node) + cond = build3 (ANNOTATE_EXPR, TREE_TYPE (cond), cond, + build_int_cst (integer_type_node, annot_expr_no_vector_kind), + integer_zero_node); + tmp = fold_build1_loc (loc, GOTO_EXPR, void_type_node, exit_label); tmp = fold_build3_loc (loc, COND_EXPR, void_type_node, cond, tmp, build_empty_stmt (loc)); Index: gcc/fortran/expr.c =================================================================== --- a/src/gcc/fortran/expr.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/expr.c (.../branches/gcc-9-branch) @@ -2220,6 +2220,11 @@ if (!simplify_ref_chain (p->ref, type, &p)) return false; + /* If the following conditions hold, we found something like kind type + inquiry of the form a(2)%kind while simplify the ref chain. */ + if (p->expr_type == EXPR_CONSTANT && !p->ref && !p->rank && !p->shape) + return true; + if (!simplify_constructor (p->value.constructor, type)) return false; @@ -2598,6 +2603,8 @@ int i = 0; gfc_actual_arglist *ap; + gfc_symbol *sym; + gfc_symbol *asym; if (!e->value.function.isym || !e->value.function.isym->inquiry) @@ -2607,20 +2614,22 @@ if (e->symtree == NULL) return MATCH_NO; - if (e->symtree->n.sym->from_intmod) + sym = e->symtree->n.sym; + + if (sym->from_intmod) { - if (e->symtree->n.sym->from_intmod == INTMOD_ISO_FORTRAN_ENV - && e->symtree->n.sym->intmod_sym_id != ISOFORTRAN_COMPILER_OPTIONS - && e->symtree->n.sym->intmod_sym_id != ISOFORTRAN_COMPILER_VERSION) + if (sym->from_intmod == INTMOD_ISO_FORTRAN_ENV + && sym->intmod_sym_id != ISOFORTRAN_COMPILER_OPTIONS + && sym->intmod_sym_id != ISOFORTRAN_COMPILER_VERSION) return MATCH_NO; - if (e->symtree->n.sym->from_intmod == INTMOD_ISO_C_BINDING - && e->symtree->n.sym->intmod_sym_id != ISOCBINDING_C_SIZEOF) + if (sym->from_intmod == INTMOD_ISO_C_BINDING + && sym->intmod_sym_id != ISOCBINDING_C_SIZEOF) return MATCH_NO; } else { - name = e->symtree->n.sym->name; + name = sym->name; functions = inquiry_func_gnu; if (gfc_option.warn_std & GFC_STD_F2003) @@ -2645,41 +2654,48 @@ if (!ap->expr) continue; + asym = ap->expr->symtree ? ap->expr->symtree->n.sym : NULL; + if (ap->expr->ts.type == BT_UNKNOWN) { - if (ap->expr->symtree->n.sym->ts.type == BT_UNKNOWN - && !gfc_set_default_type (ap->expr->symtree->n.sym, 0, gfc_current_ns)) + if (asym && asym->ts.type == BT_UNKNOWN + && !gfc_set_default_type (asym, 0, gfc_current_ns)) return MATCH_NO; - ap->expr->ts = ap->expr->symtree->n.sym->ts; + ap->expr->ts = asym->ts; } - /* Assumed character length will not reduce to a constant expression - with LEN, as required by the standard. */ - if (i == 5 && not_restricted && ap->expr->symtree - && ap->expr->symtree->n.sym->ts.type == BT_CHARACTER - && (ap->expr->symtree->n.sym->ts.u.cl->length == NULL - || ap->expr->symtree->n.sym->ts.deferred)) - { - gfc_error ("Assumed or deferred character length variable %qs " - "in constant expression at %L", - ap->expr->symtree->n.sym->name, - &ap->expr->where); - return MATCH_ERROR; - } - else if (not_restricted && !gfc_check_init_expr (ap->expr)) - return MATCH_ERROR; + if (asym && asym->assoc && asym->assoc->target + && asym->assoc->target->expr_type == EXPR_CONSTANT) + { + gfc_free_expr (ap->expr); + ap->expr = gfc_copy_expr (asym->assoc->target); + } - if (not_restricted == 0 - && ap->expr->expr_type != EXPR_VARIABLE - && !check_restricted (ap->expr)) + /* Assumed character length will not reduce to a constant expression + with LEN, as required by the standard. */ + if (i == 5 && not_restricted && asym + && asym->ts.type == BT_CHARACTER + && ((asym->ts.u.cl && asym->ts.u.cl->length == NULL) + || asym->ts.deferred)) + { + gfc_error ("Assumed or deferred character length variable %qs " + "in constant expression at %L", + asym->name, &ap->expr->where); return MATCH_ERROR; + } + else if (not_restricted && !gfc_check_init_expr (ap->expr)) + return MATCH_ERROR; - if (not_restricted == 0 - && ap->expr->expr_type == EXPR_VARIABLE - && ap->expr->symtree->n.sym->attr.dummy - && ap->expr->symtree->n.sym->attr.optional) - return MATCH_NO; + if (not_restricted == 0 + && ap->expr->expr_type != EXPR_VARIABLE + && !check_restricted (ap->expr)) + return MATCH_ERROR; + + if (not_restricted == 0 + && ap->expr->expr_type == EXPR_VARIABLE + && asym->attr.dummy && asym->attr.optional) + return MATCH_NO; } return MATCH_YES; Index: gcc/fortran/module.c =================================================================== --- a/src/gcc/fortran/module.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/module.c (.../branches/gcc-9-branch) @@ -525,6 +525,8 @@ gfc_intrinsic_op op; match m; gfc_use_list *use_list; + gfc_symtree *st; + locus loc; use_list = gfc_get_use_list (); @@ -632,6 +634,8 @@ case INTERFACE_USER_OP: case INTERFACE_GENERIC: case INTERFACE_DTIO: + loc = gfc_current_locus; + m = gfc_match (" =>"); if (type == INTERFACE_USER_OP && m == MATCH_YES @@ -642,6 +646,18 @@ if (type == INTERFACE_USER_OP) new_use->op = INTRINSIC_USER; + st = gfc_find_symtree (gfc_current_ns->sym_root, name); + if (st && type != INTERFACE_USER_OP) + { + if (m == MATCH_YES) + gfc_error ("Symbol %qs at %L conflicts with the rename symbol " + "at %L", name, &st->n.sym->declared_at, &loc); + else + gfc_error ("Symbol %qs at %L conflicts with the symbol " + "at %L", name, &st->n.sym->declared_at, &loc); + goto cleanup; + } + if (use_list->only_flag) { if (m != MATCH_YES) Index: gcc/fortran/trans.c =================================================================== --- a/src/gcc/fortran/trans.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/trans.c (.../branches/gcc-9-branch) @@ -118,7 +118,20 @@ return gfc_evaluate_now_loc (input_location, expr, pblock); } +/* Like gfc_evaluate_now, but add the created variable to the + function scope. */ +tree +gfc_evaluate_now_function_scope (tree expr, stmtblock_t * pblock) +{ + tree var; + var = gfc_create_var_np (TREE_TYPE (expr), NULL); + gfc_add_decl_to_function (var); + gfc_add_modify (pblock, var, expr); + + return var; +} + /* Build a MODIFY_EXPR node and add it to a given statement block PBLOCK. A MODIFY_EXPR is an assignment: LHS <- RHS. */ Index: gcc/fortran/trans-types.c =================================================================== --- a/src/gcc/fortran/trans-types.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/trans-types.c (.../branches/gcc-9-branch) @@ -3021,6 +3021,7 @@ } } s->attr.dummy = 1; + s->attr.artificial = 1; s->attr.intent = INTENT_UNKNOWN; (*f)->sym = s; } Index: gcc/fortran/scanner.c =================================================================== --- a/src/gcc/fortran/scanner.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/scanner.c (.../branches/gcc-9-branch) @@ -1050,6 +1050,10 @@ return; } + if (gfc_current_locus.lb != NULL + && continue_line < gfc_linebuf_linenum (gfc_current_locus.lb)) + continue_line = gfc_linebuf_linenum (gfc_current_locus.lb); + /* If -fopenmp/-fopenacc, we need to handle here 2 things: 1) don't treat !$omp/!$acc|c$omp/c$acc|*$omp / *$acc as comments, but directives @@ -1057,10 +1061,6 @@ !$|c$|*$ should be treated as 2 spaces if the characters in columns 3 to 6 are valid fixed form label columns characters. */ - if (gfc_current_locus.lb != NULL - && continue_line < gfc_linebuf_linenum (gfc_current_locus.lb)) - continue_line = gfc_linebuf_linenum (gfc_current_locus.lb); - if ((flag_openmp || flag_openmp_simd) && !flag_openacc) { if (next_char () == '$') @@ -1313,6 +1313,14 @@ if (flag_openacc) prev_openacc_flag = openacc_flag; + /* This can happen if the input file changed or via cpp's #line + without getting reset (e.g. via input_stmt). It also happens + when pre-including files via -fpre-include=. */ + if (continue_count == 0 + && gfc_current_locus.lb + && continue_line > gfc_linebuf_linenum (gfc_current_locus.lb) + 1) + continue_line = gfc_linebuf_linenum (gfc_current_locus.lb) + 1; + continue_flag = 1; if (c == '!') skip_comment_line (); @@ -1475,6 +1483,14 @@ if (flag_openacc) prev_openacc_flag = openacc_flag; + /* This can happen if the input file changed or via cpp's #line + without getting reset (e.g. via input_stmt). It also happens + when pre-including files via -fpre-include=. */ + if (continue_count == 0 + && gfc_current_locus.lb + && continue_line > gfc_linebuf_linenum (gfc_current_locus.lb) + 1) + continue_line = gfc_linebuf_linenum (gfc_current_locus.lb) + 1; + continue_flag = 1; old_loc = gfc_current_locus; @@ -1943,7 +1959,7 @@ the file stack. */ static gfc_file * -get_file (const char *name, enum lc_reason reason ATTRIBUTE_UNUSED) +get_file (const char *name, enum lc_reason reason) { gfc_file *f; Index: gcc/fortran/trans.h =================================================================== --- a/src/gcc/fortran/trans.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/trans.h (.../branches/gcc-9-branch) @@ -507,6 +507,7 @@ /* If the value is not constant, Create a temporary and copy the value. */ tree gfc_evaluate_now_loc (location_t, tree, stmtblock_t *); tree gfc_evaluate_now (tree, stmtblock_t *); +tree gfc_evaluate_now_function_scope (tree, stmtblock_t *); /* Find the appropriate variant of a math intrinsic. */ tree gfc_builtin_decl_for_float_kind (enum built_in_function, int); Index: gcc/fortran/io.c =================================================================== --- a/src/gcc/fortran/io.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/io.c (.../branches/gcc-9-branch) @@ -1441,25 +1441,30 @@ return MATCH_ERROR; } - if (result->symtree->n.sym->attr.intent == INTENT_IN) + if (result->symtree) { - gfc_error ("Variable %s cannot be INTENT(IN) at %C", tag->name); - gfc_free_expr (result); - return MATCH_ERROR; - } + bool impure; - bool impure = gfc_impure_variable (result->symtree->n.sym); - if (impure && gfc_pure (NULL)) - { - gfc_error ("Variable %s cannot be assigned in PURE procedure at %C", - tag->name); - gfc_free_expr (result); - return MATCH_ERROR; + if (result->symtree->n.sym->attr.intent == INTENT_IN) + { + gfc_error ("Variable %s cannot be INTENT(IN) at %C", tag->name); + gfc_free_expr (result); + return MATCH_ERROR; + } + + impure = gfc_impure_variable (result->symtree->n.sym); + if (impure && gfc_pure (NULL)) + { + gfc_error ("Variable %s cannot be assigned in PURE procedure at %C", + tag->name); + gfc_free_expr (result); + return MATCH_ERROR; + } + + if (impure) + gfc_unset_implicit_pure (NULL); } - if (impure) - gfc_unset_implicit_pure (NULL); - *v = result; return MATCH_YES; } @@ -1474,8 +1479,17 @@ m = match_vtag (tag, result); if (m == MATCH_YES) - gfc_check_do_variable ((*result)->symtree); + { + if ((*result)->symtree) + gfc_check_do_variable ((*result)->symtree); + if ((*result)->expr_type == EXPR_CONSTANT) + { + gfc_error ("Expecting a variable at %L", &(*result)->where); + return MATCH_ERROR; + } + } + return m; } @@ -2804,7 +2818,7 @@ m = match_file_element (fp); if (m == MATCH_ERROR) - goto done; + goto cleanup; if (m == MATCH_NO) { m = gfc_match_expr (&fp->unit); @@ -3608,8 +3622,18 @@ { m = gfc_match_variable (&expr, 0); if (m == MATCH_NO) - gfc_error ("Expected variable in READ statement at %C"); + { + gfc_error ("Expecting variable in READ statement at %C"); + m = MATCH_ERROR; + } + if (m == MATCH_YES && expr->expr_type == EXPR_CONSTANT) + { + gfc_error ("Expecting variable or io-implied-do in READ statement " + "at %L", &expr->where); + m = MATCH_ERROR; + } + if (m == MATCH_YES && expr->expr_type == EXPR_VARIABLE && expr->symtree->n.sym->attr.external) @@ -3618,7 +3642,6 @@ &expr->where); m = MATCH_ERROR; } - } else { @@ -4583,6 +4606,17 @@ if (m == MATCH_NO) goto syntax; + for (gfc_code *c = code; c; c = c->next) + if (c->expr1 && c->expr1->expr_type == EXPR_FUNCTION + && c->expr1->symtree && c->expr1->symtree->n.sym->attr.function + && !c->expr1->symtree->n.sym->attr.external + && strcmp (c->expr1->symtree->name, "null") == 0) + { + gfc_error ("NULL() near %L cannot appear in INQUIRE statement", + &c->expr1->where); + goto cleanup; + } + new_st.op = EXEC_IOLENGTH; new_st.expr1 = inquire->iolength; new_st.ext.inquire = inquire; Index: gcc/fortran/frontend-passes.c =================================================================== --- a/src/gcc/fortran/frontend-passes.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/frontend-passes.c (.../branches/gcc-9-branch) @@ -2519,7 +2519,12 @@ data.sym = sym; mpz_init_set (data.val, val); gfc_expr_walker (&n, callback_insert_index, (void *) &data); + + /* Suppress errors here - we could get errors here such as an + out of bounds access for arrays, see PR 90563. */ + gfc_push_suppress_errors (); gfc_simplify_expr (n, 0); + gfc_pop_suppress_errors (); if (n->expr_type == EXPR_CONSTANT) { @@ -2557,6 +2562,12 @@ if (in_assoc_list) return 0; + /* We already warned about this. */ + if (v->do_not_warn) + return 0; + + v->do_not_warn = 1; + for (ref = v->ref; ref; ref = ref->next) { if (ref->type == REF_ARRAY && ref->u.ar.type == AR_ELEMENT) @@ -2569,6 +2580,7 @@ bool have_do_start, have_do_end; bool error_not_proven; int warn; + int sgn; dl = lp->c; if (dl == NULL) @@ -2597,7 +2609,16 @@ Do not warn in this case. */ if (dl->ext.iterator->step->expr_type == EXPR_CONSTANT) - mpz_init_set (do_step, dl->ext.iterator->step->value.integer); + { + sgn = mpz_cmp_ui (dl->ext.iterator->step->value.integer, 0); + /* This can happen, but then the error has been + reported previusly. */ + if (sgn == 0) + continue; + + mpz_init_set (do_step, dl->ext.iterator->step->value.integer); + } + else continue; @@ -2609,7 +2630,6 @@ else have_do_start = false; - if (dl->ext.iterator->end->expr_type == EXPR_CONSTANT) { have_do_end = true; @@ -2621,6 +2641,16 @@ if (!have_do_start && !have_do_end) return 0; + /* No warning inside a zero-trip loop. */ + if (have_do_start && have_do_end) + { + int cmp; + + cmp = mpz_cmp (do_end, do_start); + if ((sgn > 0 && cmp < 0) || (sgn < 0 && cmp > 0)) + break; + } + /* May have to correct the end value if the step does not equal one. */ if (have_do_start && have_do_end && mpz_cmp_ui (do_step, 1) != 0) @@ -2762,6 +2792,12 @@ doloop_warn (gfc_namespace *ns) { gfc_code_walker (&ns->code, doloop_code, do_function, NULL); + + for (ns = ns->contained; ns; ns = ns->sibling) + { + if (ns->code == NULL || ns->code->op != EXEC_BLOCK) + doloop_warn (ns); + } } /* This selction deals with inlining calls to MATMUL. */ Index: gcc/fortran/resolve.c =================================================================== --- a/src/gcc/fortran/resolve.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/resolve.c (.../branches/gcc-9-branch) @@ -1866,7 +1866,7 @@ /* Check that name is not a derived type. */ - + static bool is_dt_name (const char *name) { @@ -7059,6 +7059,19 @@ "Step expression in DO loop")) return false; + /* Convert start, end, and step to the same type as var. */ + if (iter->start->ts.kind != iter->var->ts.kind + || iter->start->ts.type != iter->var->ts.type) + gfc_convert_type (iter->start, &iter->var->ts, 1); + + if (iter->end->ts.kind != iter->var->ts.kind + || iter->end->ts.type != iter->var->ts.type) + gfc_convert_type (iter->end, &iter->var->ts, 1); + + if (iter->step->ts.kind != iter->var->ts.kind + || iter->step->ts.type != iter->var->ts.type) + gfc_convert_type (iter->step, &iter->var->ts, 1); + if (iter->step->expr_type == EXPR_CONSTANT) { if ((iter->step->ts.type == BT_INTEGER @@ -7072,19 +7085,6 @@ } } - /* Convert start, end, and step to the same type as var. */ - if (iter->start->ts.kind != iter->var->ts.kind - || iter->start->ts.type != iter->var->ts.type) - gfc_convert_type (iter->start, &iter->var->ts, 1); - - if (iter->end->ts.kind != iter->var->ts.kind - || iter->end->ts.type != iter->var->ts.type) - gfc_convert_type (iter->end, &iter->var->ts, 1); - - if (iter->step->ts.kind != iter->var->ts.kind - || iter->step->ts.type != iter->var->ts.type) - gfc_convert_type (iter->step, &iter->var->ts, 1); - if (iter->start->expr_type == EXPR_CONSTANT && iter->end->expr_type == EXPR_CONSTANT && iter->step->expr_type == EXPR_CONSTANT) @@ -7439,7 +7439,7 @@ for (tail = e2->ref; tail && tail->next; tail = tail->next); /* First compare rank. */ - if ((tail && e1->rank != tail->u.ar.as->rank) + if ((tail && (!tail->u.ar.as || e1->rank != tail->u.ar.as->rank)) || (!tail && e1->rank != e2->rank)) { gfc_error ("Source-expr at %L must be scalar or have the " @@ -13539,6 +13539,25 @@ } else { + /* If proc has not been resolved at this point, proc->name may + actually be a USE associated entity. See PR fortran/89647. */ + if (!proc->resolved + && proc->attr.function == 0 && proc->attr.subroutine == 0) + { + gfc_symbol *tmp; + gfc_find_symbol (proc->name, gfc_current_ns->parent, 1, &tmp); + if (tmp && tmp->attr.use_assoc) + { + proc->module = tmp->module; + proc->attr.proc = tmp->attr.proc; + proc->attr.function = tmp->attr.function; + proc->attr.subroutine = tmp->attr.subroutine; + proc->attr.use_assoc = tmp->attr.use_assoc; + proc->ts = tmp->ts; + proc->result = tmp->result; + } + } + /* Check for F08:C465. */ if ((!proc->attr.subroutine && !proc->attr.function) || (proc->attr.proc != PROC_MODULE @@ -13545,8 +13564,9 @@ && proc->attr.if_source != IFSRC_IFBODY) || proc->attr.abstract) { - gfc_error ("%qs must be a module procedure or an external procedure with" - " an explicit interface at %L", proc->name, &where); + gfc_error ("%qs must be a module procedure or an external " + "procedure with an explicit interface at %L", + proc->name, &where); goto error; } } @@ -15662,8 +15682,6 @@ return false; } - has_pointer = sym->attr.pointer; - if (gfc_is_coindexed (e)) { gfc_error ("DATA element %qs at %L cannot have a coindex", sym->name, @@ -15671,19 +15689,30 @@ return false; } + has_pointer = sym->attr.pointer; + for (ref = e->ref; ref; ref = ref->next) { if (ref->type == REF_COMPONENT && ref->u.c.component->attr.pointer) has_pointer = 1; - if (has_pointer - && ref->type == REF_ARRAY - && ref->u.ar.type != AR_FULL) - { - gfc_error ("DATA element %qs at %L is a pointer and so must " - "be a full array", sym->name, where); - return false; - } + if (has_pointer) + { + if (ref->type == REF_ARRAY && ref->u.ar.type != AR_FULL) + { + gfc_error ("DATA element %qs at %L is a pointer and so must " + "be a full array", sym->name, where); + return false; + } + + if (values.vnode->expr->expr_type == EXPR_CONSTANT) + { + gfc_error ("DATA object near %L has the pointer attribute " + "and the corresponding DATA value is not a valid " + "initial-data-target", where); + return false; + } + } } if (e->rank == 0 || has_pointer) @@ -16525,8 +16554,8 @@ } -/* Function called by resolve_fntype to flag other symbol used in the - length type parameter specification of function resuls. */ +/* Function called by resolve_fntype to flag other symbols used in the + length type parameter specification of function results. */ static bool flag_fn_result_spec (gfc_expr *expr, Index: gcc/fortran/match.c =================================================================== --- a/src/gcc/fortran/match.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/match.c (.../branches/gcc-9-branch) @@ -4219,6 +4219,12 @@ if (m == MATCH_ERROR) goto cleanup; + if (tail->expr->expr_type == EXPR_CONSTANT) + { + gfc_error ("Unexpected constant at %C"); + goto cleanup; + } + if (gfc_check_do_variable (tail->expr->symtree)) goto cleanup; @@ -4351,6 +4357,12 @@ tmp = NULL; saw_stat = true; + if (stat->expr_type == EXPR_CONSTANT) + { + gfc_error ("STAT tag at %L cannot be a constant", &stat->where); + goto cleanup; + } + if (gfc_check_do_variable (stat->symtree)) goto cleanup; @@ -4627,6 +4639,12 @@ if (m == MATCH_NO) goto syntax; + if (tail->expr->expr_type == EXPR_CONSTANT) + { + gfc_error ("Unexpected constant at %C"); + goto cleanup; + } + if (gfc_check_do_variable (tail->expr->symtree)) goto cleanup; @@ -5698,7 +5716,29 @@ gfc_symbol *sym; gfc_expr *expr; match m; + char name[GFC_MAX_SYMBOL_LEN + 1]; + locus old_locus; + bool fcn; + gfc_formal_arglist *ptr; + /* Read the possible statement function name, and then check to see if + a symbol is already present in the namespace. Record if it is a + function and whether it has been referenced. */ + fcn = false; + ptr = NULL; + old_locus = gfc_current_locus; + m = gfc_match_name (name); + if (m == MATCH_YES) + { + gfc_find_symbol (name, NULL, 1, &sym); + if (sym && sym->attr.function && !sym->attr.referenced) + { + fcn = true; + ptr = sym->formal; + } + } + + gfc_current_locus = old_locus; m = gfc_match_symbol (&sym, 0); if (m != MATCH_YES) return m; @@ -5726,6 +5766,13 @@ return MATCH_ERROR; } + if (fcn && ptr != sym->formal) + { + gfc_error ("Statement function %qs at %L conflicts with function name", + sym->name, &expr->where); + return MATCH_ERROR; + } + sym->value = expr; if ((gfc_current_state () == COMP_FUNCTION Index: gcc/fortran/trans-decl.c =================================================================== --- a/src/gcc/fortran/trans-decl.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/trans-decl.c (.../branches/gcc-9-branch) @@ -369,7 +369,8 @@ static const char * mangled_identifier (gfc_symbol *sym) { - static char name[GFC_MAX_MANGLED_SYMBOL_LEN + 1]; + gfc_symbol *proc = sym->ns->proc_name; + static char name[3*GFC_MAX_MANGLED_SYMBOL_LEN + 14]; /* Prevent the mangling of identifiers that have an assigned binding label (mainly those that are bind(c)). */ @@ -376,15 +377,13 @@ if (sym->attr.is_bind_c == 1 && sym->binding_label) return sym->binding_label; - if (!sym->fn_result_spec) + if (!sym->fn_result_spec + || (sym->module && !(proc && proc->attr.flavor == FL_PROCEDURE))) { if (sym->module == NULL) return sym_identifier (sym); else - { - snprintf (name, sizeof name, "__%s_MOD_%s", sym->module, sym->name); - return name; - } + snprintf (name, sizeof name, "__%s_MOD_%s", sym->module, sym->name); } else { @@ -391,22 +390,16 @@ /* This is an entity that is actually local to a module procedure that appears in the result specification expression. Since sym->module will be a zero length string, we use ns->proc_name - instead. */ - if (sym->ns->proc_name && sym->ns->proc_name->module) - { - snprintf (name, sizeof name, "__%s_MOD__%s_PROC_%s", - sym->ns->proc_name->module, - sym->ns->proc_name->name, - sym->name); - return name; - } + to provide the module name instead. */ + if (proc && proc->module) + snprintf (name, sizeof name, "__%s_MOD__%s_PROC_%s", + proc->module, proc->name, sym->name); else - { - snprintf (name, sizeof name, "__%s_PROC_%s", - sym->ns->proc_name->name, sym->name); - return name; - } + snprintf (name, sizeof name, "__%s_PROC_%s", + proc->name, sym->name); } + + return name; } /* Get mangled identifier, adding the symbol to the global table if @@ -1892,9 +1885,13 @@ if (sym->attr.associate_var) GFC_DECL_ASSOCIATE_VAR_P (decl) = 1; + /* We no longer mark __def_init as read-only so it does not take up + space in the read-only section and dan go into the BSS instead, + see PR 84487. Marking this as artificial means that OpenMP will + treat this as predetermined shared. */ if (sym->attr.vtab || (sym->name[0] == '_' && gfc_str_startswith (sym->name, "__def_init"))) - TREE_READONLY (decl) = 1; + DECL_ARTIFICIAL (decl) = 1; return decl; } @@ -5862,9 +5859,11 @@ } else if (warn_unused_dummy_argument) { - gfc_warning (OPT_Wunused_dummy_argument, - "Unused dummy argument %qs at %L", sym->name, - &sym->declared_at); + if (!sym->attr.artificial) + gfc_warning (OPT_Wunused_dummy_argument, + "Unused dummy argument %qs at %L", sym->name, + &sym->declared_at); + if (sym->backend_decl != NULL_TREE) TREE_NO_WARNING(sym->backend_decl) = 1; } @@ -5956,7 +5955,14 @@ if (sym->ns && sym->ns->construct_entities) { - if (sym->attr.referenced) + /* Construction of the intrinsic modules within a BLOCK + construct, where ONLY and RENAMED entities are included, + seems to be bogus. This is a workaround that can be removed + if someone ever takes on the task to creating full-fledge + modules. See PR 69455. */ + if (sym->attr.referenced + && sym->from_intmod != INTMOD_ISO_C_BINDING + && sym->from_intmod != INTMOD_ISO_FORTRAN_ENV) gfc_get_symbol_decl (sym); sym->mark = 1; } @@ -6440,6 +6446,20 @@ TREE_TYPE (result), DECL_RESULT (fndecl), result); } + else + { + /* If the function does not have a result variable, result is + NULL_TREE, and a 'return' is generated without a variable. + The following generates a 'return __result_XXX' where XXX is + the function name. */ + if (sym == sym->result && sym->attr.function) + { + result = gfc_get_fake_result_decl (sym, 0); + result = fold_build2_loc (input_location, MODIFY_EXPR, + TREE_TYPE (result), + DECL_RESULT (fndecl), result); + } + } } return build1_v (RETURN_EXPR, result); Index: gcc/fortran/match.h =================================================================== --- a/src/gcc/fortran/match.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/match.h (.../branches/gcc-9-branch) @@ -246,8 +246,11 @@ match gfc_match_dimension (void); match gfc_match_external (void); match gfc_match_gcc_attributes (void); +match gfc_match_gcc_builtin (void); +match gfc_match_gcc_ivdep (void); +match gfc_match_gcc_novector (void); match gfc_match_gcc_unroll (void); -match gfc_match_gcc_builtin (void); +match gfc_match_gcc_vector (void); match gfc_match_import (void); match gfc_match_intent (void); match gfc_match_intrinsic (void); Index: gcc/fortran/parse.c =================================================================== --- a/src/gcc/fortran/parse.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/parse.c (.../branches/gcc-9-branch) @@ -1079,12 +1079,20 @@ match ("attributes", gfc_match_gcc_attributes, ST_ATTR_DECL); match ("unroll", gfc_match_gcc_unroll, ST_NONE); match ("builtin", gfc_match_gcc_builtin, ST_NONE); + match ("ivdep", gfc_match_gcc_ivdep, ST_NONE); + match ("vector", gfc_match_gcc_vector, ST_NONE); + match ("novector", gfc_match_gcc_novector, ST_NONE); /* All else has failed, so give up. See if any of the matchers has stored an error message of some sort. */ if (!gfc_error_check ()) - gfc_error_now ("Unclassifiable GCC directive at %C"); + { + if (pedantic) + gfc_error_now ("Unclassifiable GCC directive at %C"); + else + gfc_warning_now (0, "Unclassifiable GCC directive at %C, ignored"); + } reject_statement (); @@ -4672,6 +4680,21 @@ new_st.ext.iterator->unroll = directive_unroll; directive_unroll = -1; } + if (directive_ivdep) + { + new_st.ext.iterator->ivdep = directive_ivdep; + directive_ivdep = false; + } + if (directive_vector) + { + new_st.ext.iterator->vector = directive_vector; + directive_vector = false; + } + if (directive_novector) + { + new_st.ext.iterator->novector = directive_novector; + directive_novector = false; + } } else stree = NULL; @@ -5431,8 +5454,18 @@ } if (directive_unroll != -1) - gfc_error ("% directive does not commence a loop at %C"); + gfc_error ("% directive not at the start of a loop at %C"); + if (directive_ivdep) + gfc_error ("% directive not at the start of a loop at %C"); + + if (directive_vector) + gfc_error ("% directive not at the start of a loop at %C"); + + if (directive_novector) + gfc_error ("% " + "directive not at the start of a loop at %C"); + st = next_statement (); } } Index: gcc/fortran/check.c =================================================================== --- a/src/gcc/fortran/check.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/check.c (.../branches/gcc-9-branch) @@ -924,6 +924,10 @@ } +/* Limited checking for ALLOCATED intrinsic. Additional checking + is performed in intrinsic.c(sort_actual), because ALLOCATED + has two mutually exclusive non-optional arguments. */ + bool gfc_check_allocated (gfc_expr *array) { @@ -2781,6 +2785,22 @@ if (!scalar_check (status, 2)) return false; + + if (status->expr_type != EXPR_VARIABLE) + { + gfc_error ("STATUS at %L shall be an INTENT(OUT) variable", + &status->where); + return false; + } + + if (status->expr_type == EXPR_VARIABLE + && status->symtree && status->symtree->n.sym + && status->symtree->n.sym->attr.intent == INTENT_IN) + { + gfc_error ("%qs at %L shall be an INTENT(OUT) variable", + status->symtree->name, &status->where); + return false; + } } return true; @@ -3343,6 +3363,7 @@ gfc_check_findloc (gfc_actual_arglist *ap) { gfc_expr *a, *v, *m, *d, *k, *b; + bool a1, v1; a = ap->expr; if (!intrinsic_type_check (a, 0) || !array_check (a, 0)) @@ -3349,20 +3370,20 @@ return false; v = ap->next->expr; - if (!scalar_check (v,1)) + if (!intrinsic_type_check (v, 1) || !scalar_check (v,1)) return false; - /* Check if the type is compatible. */ + /* Check if the type are both logical. */ + a1 = a->ts.type == BT_LOGICAL; + v1 = v->ts.type == BT_LOGICAL; + if ((a1 && !v1) || (!a1 && v1)) + goto incompat; - if ((a->ts.type == BT_LOGICAL && v->ts.type != BT_LOGICAL) - || (a->ts.type != BT_LOGICAL && v->ts.type == BT_LOGICAL)) - { - gfc_error ("Argument %qs of %qs intrinsic at %L must be in type " - "conformance to argument %qs at %L", - gfc_current_intrinsic_arg[0]->name, - gfc_current_intrinsic, &a->where, - gfc_current_intrinsic_arg[1]->name, &v->where); - } + /* Check if the type are both character. */ + a1 = a->ts.type == BT_CHARACTER; + v1 = v->ts.type == BT_CHARACTER; + if ((a1 && !v1) || (!a1 && v1)) + goto incompat; d = ap->next->next->expr; m = ap->next->next->next->expr; @@ -3410,6 +3431,14 @@ return false; return true; + +incompat: + gfc_error ("Argument %qs of %qs intrinsic at %L must be in type " + "conformance to argument %qs at %L", + gfc_current_intrinsic_arg[0]->name, + gfc_current_intrinsic, &a->where, + gfc_current_intrinsic_arg[1]->name, &v->where); + return false; } @@ -6549,6 +6578,14 @@ bool gfc_check_is_contiguous (gfc_expr *array) { + if (array->expr_type == EXPR_NULL + && array->symtree->n.sym->attr.pointer == 1) + { + gfc_error ("Actual argument at %L of %qs intrinsic shall be an " + "associated pointer", &array->where, gfc_current_intrinsic); + return false; + } + if (!array_check (array, 0)) return false; @@ -6556,7 +6593,6 @@ } - bool gfc_check_isatty (gfc_expr *unit) { Index: gcc/fortran/primary.c =================================================================== --- a/src/gcc/fortran/primary.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/primary.c (.../branches/gcc-9-branch) @@ -1990,6 +1990,7 @@ match m; bool unknown; bool inquiry; + bool intrinsic; locus old_loc; char sep; @@ -2194,11 +2195,15 @@ if (m != MATCH_YES) return MATCH_ERROR; + intrinsic = false; if (primary->ts.type != BT_CLASS && primary->ts.type != BT_DERIVED) { inquiry = is_inquiry_ref (name, &tmp); if (inquiry) sym = NULL; + + if (sep == '%' && primary->ts.type != BT_UNKNOWN) + intrinsic = true; } else inquiry = false; @@ -2258,12 +2263,16 @@ break; } - if (!inquiry) + if (!inquiry && !intrinsic) component = gfc_find_component (sym, name, false, false, &tmp); else component = NULL; - if (component == NULL && !inquiry) + /* In some cases, returning MATCH_NO gives a better error message. Most + cases return "Unclassifiable statement at..." */ + if (intrinsic && !inquiry) + return MATCH_NO; + else if (component == NULL && !inquiry) return MATCH_ERROR; /* Extend the reference chain determined by gfc_find_component or @@ -2284,6 +2293,8 @@ if (tmp && tmp->type == REF_INQUIRY) { + if (!primary->where.lb || !primary->where.nextc) + primary->where = gfc_current_locus; gfc_simplify_expr (primary, 0); if (primary->expr_type == EXPR_CONSTANT) @@ -2559,12 +2570,10 @@ break; case AR_UNKNOWN: - /* If any of start, end or stride is not integer, there will - already have been an error issued. */ - int errors; - gfc_get_errors (NULL, &errors); - if (errors == 0) - gfc_internal_error ("gfc_variable_attr(): Bad array reference"); + /* For standard conforming code, AR_UNKNOWN should not happen. + For nonconforming code, gfortran can end up here. Treat it + as a no-op. */ + break; } break; Index: gcc/fortran/misc.c =================================================================== --- a/src/gcc/fortran/misc.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/misc.c (.../branches/gcc-9-branch) @@ -125,6 +125,7 @@ static char buffer2[GFC_MAX_SYMBOL_LEN + 7]; static int flag = 0; char *buffer; + gfc_typespec *ts1; buffer = flag ? buffer1 : buffer2; flag = !flag; @@ -156,9 +157,8 @@ sprintf (buffer, "TYPE(%s)", ts->u.derived->name); break; case BT_CLASS: - if (ts->u.derived->components) - ts = &ts->u.derived->components->ts; - if (ts->u.derived->attr.unlimited_polymorphic) + ts1 = ts->u.derived->components ? &ts->u.derived->components->ts : NULL; + if (ts1 && ts1->u.derived && ts1->u.derived->attr.unlimited_polymorphic) sprintf (buffer, "CLASS(*)"); else sprintf (buffer, "CLASS(%s)", ts->u.derived->name); Index: gcc/fortran/simplify.c =================================================================== --- a/src/gcc/fortran/simplify.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/fortran/simplify.c (.../branches/gcc-9-branch) @@ -4808,8 +4808,12 @@ gfc_constructor *tsource_ctor, *fsource_ctor, *mask_ctor; if (mask->expr_type == EXPR_CONSTANT) - return gfc_get_parentheses (gfc_copy_expr (mask->value.logical - ? tsource : fsource)); + { + result = gfc_copy_expr (mask->value.logical ? tsource : fsource); + result = gfc_get_parentheses (result); + gfc_simplify_expr (result, 1); + return result; + } if (!mask->rank || !is_constant_array_expr (mask) || !is_constant_array_expr (tsource) || !is_constant_array_expr (fsource)) @@ -6684,6 +6688,9 @@ mpz_init (index); rank = 0; + for (i = 0; i < GFC_MAX_DIMENSIONS; i++) + x[i] = 0; + for (;;) { e = gfc_constructor_lookup_expr (shape_exp->value.constructor, rank); @@ -6708,9 +6715,29 @@ } else { - for (i = 0; i < rank; i++) - x[i] = 0; + mpz_t size; + int order_size, shape_size; + if (order_exp->rank != shape_exp->rank) + { + gfc_error ("Shapes of ORDER at %L and SHAPE at %L are different", + &order_exp->where, &shape_exp->where); + return &gfc_bad_expr; + } + + gfc_array_size (shape_exp, &size); + shape_size = mpz_get_ui (size); + mpz_clear (size); + gfc_array_size (order_exp, &size); + order_size = mpz_get_ui (size); + mpz_clear (size); + if (order_size != shape_size) + { + gfc_error ("Sizes of ORDER at %L and SHAPE at %L are different", + &order_exp->where, &shape_exp->where); + return &gfc_bad_expr; + } + for (i = 0; i < rank; i++) { e = gfc_constructor_lookup_expr (order_exp->value.constructor, i); @@ -6718,9 +6745,22 @@ gfc_extract_int (e, &order[i]); - gcc_assert (order[i] >= 1 && order[i] <= rank); + if (order[i] < 1 || order[i] > rank) + { + gfc_error ("Element with a value of %d in ORDER at %L must be " + "in the range [1, ..., %d] for the RESHAPE intrinsic " + "near %L", order[i], &order_exp->where, rank, + &shape_exp->where); + return &gfc_bad_expr; + } + order[i]--; - gcc_assert (x[order[i]] == 0); + if (x[order[i]] != 0) + { + gfc_error ("ORDER at %L is not a permutation of the size of " + "SHAPE at %L", &order_exp->where, &shape_exp->where); + return &gfc_bad_expr; + } x[order[i]] = 1; } } @@ -8494,6 +8534,12 @@ { if (c->expr->expr_type == EXPR_ARRAY) tmp = gfc_convert_constant (c->expr, type, kind); + else if (c->expr->expr_type == EXPR_OP + && c->expr->value.op.op == INTRINSIC_PARENTHESES) + { + gfc_simplify_expr (c->expr, 1); + tmp = f (c->expr, kind); + } else tmp = f (c->expr, kind); } Index: gcc/optc-save-gen.awk =================================================================== --- a/src/gcc/optc-save-gen.awk (.../tags/gcc_9_2_0_release) +++ b/src/gcc/optc-save-gen.awk (.../branches/gcc-9-branch) @@ -332,7 +332,7 @@ print " indent_to, \"\","; print " \"" name "\","; print " ptr1->x_" name " ? ptr1->x_" name " : \"(null)\","; - print " ptr2->x_" name " ? ptr1->x_" name " : \"(null)\");"; + print " ptr2->x_" name " ? ptr2->x_" name " : \"(null)\");"; print ""; } Index: gcc/BASE-VER =================================================================== --- a/src/gcc/BASE-VER (.../tags/gcc_9_2_0_release) +++ b/src/gcc/BASE-VER (.../branches/gcc-9-branch) @@ -1 +1 @@ -9.2.0 +9.2.1 Index: gcc/function.c =================================================================== --- a/src/gcc/function.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/function.c (.../branches/gcc-9-branch) @@ -2449,8 +2449,7 @@ /* If the parm is to be passed as a transparent union or record, use the type of the first field for the tests below. We have already verified that the modes are the same. */ - if ((TREE_CODE (passed_type) == UNION_TYPE - || TREE_CODE (passed_type) == RECORD_TYPE) + if (RECORD_OR_UNION_TYPE_P (passed_type) && TYPE_TRANSPARENT_AGGR (passed_type)) passed_type = TREE_TYPE (first_field (passed_type)); @@ -3079,7 +3078,7 @@ move_block_from_reg (REGNO (entry_parm), mem, size_stored / UNITS_PER_WORD); } - else if (data->stack_parm == 0) + else if (data->stack_parm == 0 && !TYPE_EMPTY_P (data->passed_type)) { push_to_sequence2 (all->first_conversion_insn, all->last_conversion_insn); emit_block_move (stack_parm, data->entry_parm, GEN_INT (size), @@ -3455,7 +3454,9 @@ dest = validize_mem (copy_rtx (data->stack_parm)); src = validize_mem (copy_rtx (data->entry_parm)); - if (MEM_P (src)) + if (TYPE_EMPTY_P (data->passed_type)) + /* Empty types don't really need to be copied. */; + else if (MEM_P (src)) { /* Use a block move to handle potentially misaligned entry_parm. */ if (!to_conversion) @@ -3611,6 +3612,16 @@ { assign_parm_find_stack_rtl (parm, &data); assign_parm_adjust_entry_rtl (&data); + /* For arguments that occupy no space in the parameter + passing area, have non-zero size and have address taken, + force creation of a stack slot so that they have distinct + address from other parameters. */ + if (TYPE_EMPTY_P (data.passed_type) + && TREE_ADDRESSABLE (parm) + && data.entry_parm == data.stack_parm + && MEM_P (data.entry_parm) + && int_size_in_bytes (data.passed_type)) + data.stack_parm = NULL_RTX; } /* Record permanently how this parm was passed. */ if (data.passed_pointer) Index: gcc/tree-vectorizer.c =================================================================== --- a/src/gcc/tree-vectorizer.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-vectorizer.c (.../branches/gcc-9-branch) @@ -941,7 +941,7 @@ fold_loop_internal_call (loop_vectorized_call, boolean_true_node); loop_vectorized_call = NULL; - ret |= TODO_cleanup_cfg; + ret |= TODO_cleanup_cfg | TODO_update_ssa_only_virtuals; } } /* If outer loop vectorization fails for LOOP_VECTORIZED guarded Index: gcc/tree-vectorizer.h =================================================================== --- a/src/gcc/tree-vectorizer.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-vectorizer.h (.../branches/gcc-9-branch) @@ -132,6 +132,9 @@ unsigned int vec_stmts_size; /* Reference count in the SLP graph. */ unsigned int refcnt; + /* The maximum number of vector elements for the subtree rooted + at this node. */ + poly_uint64 max_nunits; /* Whether the scalar computations use two different operators. */ bool two_operators; /* The DEF type of this node. */ @@ -1350,19 +1353,27 @@ } /* Update maximum unit count *MAX_NUNITS so that it accounts for - the number of units in vector type VECTYPE. *MAX_NUNITS can be 1 - if we haven't yet recorded any vector types. */ + NUNITS. *MAX_NUNITS can be 1 if we haven't yet recorded anything. */ static inline void -vect_update_max_nunits (poly_uint64 *max_nunits, tree vectype) +vect_update_max_nunits (poly_uint64 *max_nunits, poly_uint64 nunits) { /* All unit counts have the form current_vector_size * X for some rational X, so two unit sizes must have a common multiple. Everything is a multiple of the initial value of 1. */ - poly_uint64 nunits = TYPE_VECTOR_SUBPARTS (vectype); *max_nunits = force_common_multiple (*max_nunits, nunits); } +/* Update maximum unit count *MAX_NUNITS so that it accounts for + the number of units in vector type VECTYPE. *MAX_NUNITS can be 1 + if we haven't yet recorded any vector types. */ + +static inline void +vect_update_max_nunits (poly_uint64 *max_nunits, tree vectype) +{ + vect_update_max_nunits (max_nunits, TYPE_VECTOR_SUBPARTS (vectype)); +} + /* Return the vectorization factor that should be used for costing purposes while vectorizing the loop described by LOOP_VINFO. Pick a reasonable estimate if the vectorization factor isn't Index: gcc/tree-vect-loop.c =================================================================== --- a/src/gcc/tree-vect-loop.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-vect-loop.c (.../branches/gcc-9-branch) @@ -6445,10 +6445,13 @@ gcc_assert (TREE_CODE (base) == INTEGER_CST && TREE_CODE (step) == INTEGER_CST); cond_reduc_val = NULL_TREE; + tree res = PHI_RESULT (STMT_VINFO_STMT (cond_stmt_vinfo)); + if (!types_compatible_p (TREE_TYPE (res), TREE_TYPE (base))) + ; /* Find a suitable value, for MAX_EXPR below base, for MIN_EXPR above base; punt if base is the minimum value of the type for MAX_EXPR or maximum value of the type for MIN_EXPR for now. */ - if (tree_int_cst_sgn (step) == -1) + else if (tree_int_cst_sgn (step) == -1) { cond_reduc_op_code = MIN_EXPR; if (tree_int_cst_sgn (base) == -1) Index: gcc/ggc.h =================================================================== --- a/src/gcc/ggc.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/ggc.h (.../branches/gcc-9-branch) @@ -243,6 +243,9 @@ function is called, not during allocations. */ extern void ggc_collect (void); +/* Return unused memory pages to the system. */ +extern void ggc_trim (void); + /* Assume that all GGC memory is reachable and grow the limits for next collection. */ extern void ggc_grow (void); Index: gcc/gimplify.c =================================================================== --- a/src/gcc/gimplify.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/gimplify.c (.../branches/gcc-9-branch) @@ -7058,6 +7058,8 @@ kind = lang_hooks.decls.omp_predetermined_sharing (decl); if (kind != OMP_CLAUSE_DEFAULT_UNSPECIFIED) default_kind = kind; + else if (VAR_P (decl) && TREE_STATIC (decl) && DECL_IN_CONSTANT_POOL (decl)) + default_kind = OMP_CLAUSE_DEFAULT_SHARED; switch (default_kind) { Index: gcc/calls.c =================================================================== --- a/src/gcc/calls.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/calls.c (.../branches/gcc-9-branch) @@ -1971,8 +1971,7 @@ /* If TYPE is a transparent union or record, pass things the way we would pass the first field of the union or record. We have already verified that the modes are the same. */ - if ((TREE_CODE (type) == UNION_TYPE || TREE_CODE (type) == RECORD_TYPE) - && TYPE_TRANSPARENT_AGGR (type)) + if (RECORD_OR_UNION_TYPE_P (type) && TYPE_TRANSPARENT_AGGR (type)) type = TREE_TYPE (first_field (type)); /* Decide where to pass this arg. @@ -2750,6 +2749,9 @@ poly_int64 size = 0; HOST_WIDE_INT const_size = 0; rtx_insn *before_arg = get_last_insn (); + tree type = TREE_TYPE (args[i].tree_value); + if (RECORD_OR_UNION_TYPE_P (type) && TYPE_TRANSPARENT_AGGR (type)) + type = TREE_TYPE (first_field (type)); /* Set non-negative if we must move a word at a time, even if just one word (e.g, partial == 4 && mode == DFmode). Set to -1 if we just use a normal move insn. This value can be @@ -2762,11 +2764,11 @@ gcc_assert (partial % UNITS_PER_WORD == 0); nregs = partial / UNITS_PER_WORD; } - else if (TYPE_MODE (TREE_TYPE (args[i].tree_value)) == BLKmode) + else if (TYPE_MODE (type) == BLKmode) { /* Variable-sized parameters should be described by a PARALLEL instead. */ - const_size = int_size_in_bytes (TREE_TYPE (args[i].tree_value)); + const_size = int_size_in_bytes (type); gcc_assert (const_size >= 0); nregs = (const_size + (UNITS_PER_WORD - 1)) / UNITS_PER_WORD; size = const_size; @@ -2893,8 +2895,7 @@ if (GET_CODE (reg) == PARALLEL) use_group_regs (call_fusage, reg); else if (nregs == -1) - use_reg_mode (call_fusage, reg, - TYPE_MODE (TREE_TYPE (args[i].tree_value))); + use_reg_mode (call_fusage, reg, TYPE_MODE (type)); else if (nregs > 0) use_regs (call_fusage, REGNO (reg), nregs); } Index: gcc/tree-dfa.c =================================================================== --- a/src/gcc/tree-dfa.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-dfa.c (.../branches/gcc-9-branch) @@ -61,23 +61,23 @@ /* Renumber all of the gimple stmt uids. */ void -renumber_gimple_stmt_uids (void) +renumber_gimple_stmt_uids (struct function *fun) { basic_block bb; - set_gimple_stmt_max_uid (cfun, 0); - FOR_ALL_BB_FN (bb, cfun) + set_gimple_stmt_max_uid (fun, 0); + FOR_ALL_BB_FN (bb, fun) { gimple_stmt_iterator bsi; for (bsi = gsi_start_phis (bb); !gsi_end_p (bsi); gsi_next (&bsi)) { gimple *stmt = gsi_stmt (bsi); - gimple_set_uid (stmt, inc_gimple_stmt_max_uid (cfun)); + gimple_set_uid (stmt, inc_gimple_stmt_max_uid (fun)); } for (bsi = gsi_start_bb (bb); !gsi_end_p (bsi); gsi_next (&bsi)) { gimple *stmt = gsi_stmt (bsi); - gimple_set_uid (stmt, inc_gimple_stmt_max_uid (cfun)); + gimple_set_uid (stmt, inc_gimple_stmt_max_uid (fun)); } } } Index: gcc/tree-dfa.h =================================================================== --- a/src/gcc/tree-dfa.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-dfa.h (.../branches/gcc-9-branch) @@ -20,7 +20,7 @@ #ifndef GCC_TREE_DFA_H #define GCC_TREE_DFA_H -extern void renumber_gimple_stmt_uids (void); +extern void renumber_gimple_stmt_uids (struct function *); extern void renumber_gimple_stmt_uids_in_blocks (basic_block *, int); extern void dump_variable (FILE *, tree); extern void debug_variable (tree); Index: gcc/gimple-fold.c =================================================================== --- a/src/gcc/gimple-fold.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/gimple-fold.c (.../branches/gcc-9-branch) @@ -6557,6 +6557,7 @@ fn = (*valueize) (gimple_call_fn (stmt)); if (TREE_CODE (fn) == ADDR_EXPR + && TREE_CODE (TREE_OPERAND (fn, 0)) == FUNCTION_DECL && fndecl_built_in_p (TREE_OPERAND (fn, 0)) && gimple_builtin_call_types_compatible_p (stmt, TREE_OPERAND (fn, 0))) Index: gcc/tree-cfgcleanup.c =================================================================== --- a/src/gcc/tree-cfgcleanup.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-cfgcleanup.c (.../branches/gcc-9-branch) @@ -101,6 +101,8 @@ if (high) { tree lhs, rhs; + if (range_check_type (TREE_TYPE (index)) == NULL_TREE) + return false; generate_range_test (bb, index, low, high, &lhs, &rhs); cond = gimple_build_cond (LE_EXPR, lhs, rhs, NULL_TREE, NULL_TREE); } Index: gcc/symbol-summary.h =================================================================== --- a/src/gcc/symbol-summary.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/symbol-summary.h (.../branches/gcc-9-branch) @@ -461,6 +461,8 @@ if ((*m_vector)[i] != NULL) this->release ((*m_vector)[i]); + vec_free (m_vector); + this->m_released = true; } @@ -926,6 +928,8 @@ if ((*m_vector)[i] != NULL) this->release ((*m_vector)[i]); + vec_free (m_vector); + this->m_released = true; } Index: gcc/cfgcleanup.c =================================================================== --- a/src/gcc/cfgcleanup.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/cfgcleanup.c (.../branches/gcc-9-branch) @@ -53,6 +53,7 @@ #include "dce.h" #include "dbgcnt.h" #include "rtl-iter.h" +#include "regs.h" #define FORWARDER_BLOCK_P(BB) ((BB)->flags & BB_FORWARDER_BLOCK) @@ -257,6 +258,10 @@ bool failed = false; reg_set_iterator rsi; + /* Jump threading may cause fixup_partitions to introduce new crossing edges, + which is not allowed after reload. */ + gcc_checking_assert (!reload_completed || !crtl->has_bb_partition); + if (b->flags & BB_NONTHREADABLE_BLOCK) return NULL; @@ -1224,6 +1229,14 @@ } } } + + HARD_REG_SET i1_used, i2_used; + + get_call_reg_set_usage (i1, &i1_used, call_used_reg_set); + get_call_reg_set_usage (i2, &i2_used, call_used_reg_set); + + if (!hard_reg_set_equal_p (i1_used, i2_used)) + return dir_none; } /* If both i1 and i2 are frame related, verify all the CFA notes @@ -3269,10 +3282,10 @@ namespace { -const pass_data pass_data_postreload_jump = +const pass_data pass_data_jump_after_combine = { RTL_PASS, /* type */ - "postreload_jump", /* name */ + "jump_after_combine", /* name */ OPTGROUP_NONE, /* optinfo_flags */ TV_JUMP, /* tv_id */ 0, /* properties_required */ @@ -3282,20 +3295,20 @@ 0, /* todo_flags_finish */ }; -class pass_postreload_jump : public rtl_opt_pass +class pass_jump_after_combine : public rtl_opt_pass { public: - pass_postreload_jump (gcc::context *ctxt) - : rtl_opt_pass (pass_data_postreload_jump, ctxt) + pass_jump_after_combine (gcc::context *ctxt) + : rtl_opt_pass (pass_data_jump_after_combine, ctxt) {} /* opt_pass methods: */ virtual unsigned int execute (function *); -}; // class pass_postreload_jump +}; // class pass_jump_after_combine unsigned int -pass_postreload_jump::execute (function *) +pass_jump_after_combine::execute (function *) { cleanup_cfg (flag_thread_jumps ? CLEANUP_THREADING : 0); return 0; @@ -3304,9 +3317,9 @@ } // anon namespace rtl_opt_pass * -make_pass_postreload_jump (gcc::context *ctxt) +make_pass_jump_after_combine (gcc::context *ctxt) { - return new pass_postreload_jump (ctxt); + return new pass_jump_after_combine (ctxt); } namespace { Index: gcc/tree-ssa-pre.c =================================================================== --- a/src/gcc/tree-ssa-pre.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-ssa-pre.c (.../branches/gcc-9-branch) @@ -1184,8 +1184,8 @@ bitmap visited = NULL; /* Try to find a vuse that dominates this phi node by skipping non-clobbering statements. */ - vuse = get_continuation_for_phi (phi, &ref, cnt, &visited, false, - NULL, NULL); + vuse = get_continuation_for_phi (phi, &ref, true, + cnt, &visited, false, NULL, NULL); if (visited) BITMAP_FREE (visited); } Index: gcc/lto/lto.c =================================================================== --- a/src/gcc/lto/lto.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/lto/lto.c (.../branches/gcc-9-branch) @@ -2446,6 +2446,15 @@ timevar_push (TV_WHOPR_WPA_IO); + ggc_trim (); + + cgraph_node *node; + /* Do body modifications needed for streaming before we fork out + worker processes. */ + FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (node) + if (!node->clone_of && gimple_has_body_p (node->decl)) + lto_prepare_function_for_streaming (node); + /* Generate a prefix for the LTRANS unit files. */ blen = strlen (ltrans_output_list); temp_filename = (char *) xmalloc (blen + sizeof ("2147483648.o")); Index: gcc/lto/ChangeLog =================================================================== --- a/src/gcc/lto/ChangeLog (.../tags/gcc_9_2_0_release) +++ b/src/gcc/lto/ChangeLog (.../branches/gcc-9-branch) @@ -1,3 +1,28 @@ +2019-11-08 Jakub Jelinek + + Backported from mainline + 2019-10-31 Jakub Jelinek + + PR middle-end/92231 + * lto-lang.c (handle_const_attribute): Don't call fndecl_built_in_p + on *node that is not FUNCTION_DECL. + +2019-10-26 Jan Hubicka + + Backport from mainline + + 2019-10-12 Jan Hubicka + * lto.c (lto_wpa_write_files): Do not update bodies of clones. + + 2019-10-11 Jan Hubicka + * lto.c (lto_wpa_write_files): Prepare all bodies for streaming. + +2019-10-25 Jan Hubicka + + Backport from mainline + * lto-partition.c (add_symbol_to_partition_1): Update. + (undo_parittion): Update. + 2019-08-12 Release Manager * GCC 9.2.0 released. Index: gcc/lto/lto-lang.c =================================================================== --- a/src/gcc/lto/lto-lang.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/lto/lto-lang.c (.../branches/gcc-9-branch) @@ -303,7 +303,8 @@ tree ARG_UNUSED (args), int ARG_UNUSED (flags), bool * ARG_UNUSED (no_add_attrs)) { - if (!fndecl_built_in_p (*node)) + if (TREE_CODE (*node) != FUNCTION_DECL + || !fndecl_built_in_p (*node)) inform (UNKNOWN_LOCATION, "%s:%s: %E: %E", __FILE__, __func__, *node, name); tree type = TREE_TYPE (*node); Index: gcc/ipa-prop.c =================================================================== --- a/src/gcc/ipa-prop.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/ipa-prop.c (.../branches/gcc-9-branch) @@ -3725,6 +3725,18 @@ ipcp_transformation_sum = ipcp_transformation_t::create_ggc (symtab); } +/* Release the IPA CP transformation summary. */ + +void +ipcp_free_transformation_sum (void) +{ + if (!ipcp_transformation_sum) + return; + + ipcp_transformation_sum->release (); + ipcp_transformation_sum = NULL; +} + /* Set the aggregate replacements of NODE to be AGGVALS. */ void Index: gcc/ipa-prop.h =================================================================== --- a/src/gcc/ipa-prop.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/ipa-prop.h (.../branches/gcc-9-branch) @@ -558,6 +558,7 @@ void ipa_set_node_agg_value_chain (struct cgraph_node *node, struct ipa_agg_replacement_value *aggvals); void ipcp_transformation_initialize (void); +void ipcp_free_transformation_sum (void); /* ipa_edge_args stores information related to a callsite and particularly its arguments. It can be accessed by the IPA_EDGE_REF macro. */ Index: gcc/po/es.po =================================================================== --- a/src/gcc/po/es.po (.../tags/gcc_9_2_0_release) +++ b/src/gcc/po/es.po (.../branches/gcc-9-branch) @@ -43,7 +43,7 @@ "Project-Id-Version: gcc 9.1.0\n" "Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n" "POT-Creation-Date: 2019-05-02 20:28+0000\n" -"PO-Revision-Date: 2019-05-17 05:23+0200\n" +"PO-Revision-Date: 2019-09-30 17:16+0200\n" "Last-Translator: Antonio Ceballos Roa \n" "Language-Team: Spanish \n" "Language: es\n" @@ -174,17 +174,11 @@ #: diagnostic.c:618 msgid "In file included from" -msgstr "" +msgstr "En el fichero incluido desde" #: diagnostic.c:619 -#, fuzzy -#| msgid "" -#| ",\n" -#| " from %s:%u" msgid " from" -msgstr "" -",\n" -" de %s:%u" +msgstr " desde" #: diagnostic.c:991 #, c-format @@ -796,10 +790,9 @@ "%s.\n" #: gcov-tool.c:528 -#, fuzzy, c-format -#| msgid "Copyright %s 2018 Free Software Foundation, Inc.\n" +#, c-format msgid "Copyright %s 2019 Free Software Foundation, Inc.\n" -msgstr "Copyright %s 2018 Free Software Foundation, Inc.\n" +msgstr "Copyright %s 2019 Free Software Foundation, Inc.\n" #: gcov-tool.c:531 gcov.c:925 #, c-format @@ -867,10 +860,9 @@ msgstr " -h, --help Muestra esta información, y finaliza\n" #: gcov.c:894 -#, fuzzy, c-format -#| msgid " -n, --no-output Do not create an output file\n" +#, c-format msgid " -i, --json-format Output JSON intermediate format into .gcov.json.gz file\n" -msgstr " -n, --no-output No crea un fichero de salida\n" +msgstr " -i, --json-format Salida con formato JSON intermedia en el fichero .gcov.json.gz\n" #: gcov.c:895 #, c-format @@ -912,10 +904,9 @@ msgstr " -p, --preserve-paths Preserva todos los nombres de ruta de los componentes\n" #: gcov.c:903 -#, fuzzy, c-format -#| msgid " -k, --use-colors Emit colored output\n" +#, c-format msgid " -q, --use-hotness-colors Emit perf-like colored output for hot lines\n" -msgstr " -k, --use-colors Emite salida con colores\n" +msgstr " -q, --use-hotness-colors Emite salida con colores de tipo perf para las líneas calientes\n" #: gcov.c:904 #, c-format @@ -928,10 +919,9 @@ msgstr " -s, --source-prefix DIR Prefijo de fuente a omitir\n" #: gcov.c:906 -#, fuzzy, c-format -#| msgid " -n, --no-output Do not create an output file\n" +#, c-format msgid " -t, --stdout Output to stdout instead of a file\n" -msgstr " -n, --no-output No crea un fichero de salida\n" +msgstr " -t, --stdout Salida en stdout en lugar de un fichero\n" #: gcov.c:907 #, c-format @@ -959,10 +949,9 @@ msgstr "gcov %s%s\n" #: gcov.c:1250 -#, fuzzy, c-format -#| msgid "Treat the input file as already preprocessed." +#, c-format msgid "'%s' file is already processed\n" -msgstr "Trata al fichero de entrada como previamente preprocesado." +msgstr "El fichero '%s' ya está procesado\n" #: gcov.c:1364 #, c-format @@ -990,16 +979,14 @@ msgstr "\n" #: gcov.c:1489 -#, fuzzy, c-format -#| msgid "%s: Cannot open output file: %s\n" +#, c-format msgid "Cannot open JSON output file %s\n" -msgstr "%s: No se puede abrir el fichero de salida: %s\n" +msgstr "No se puede abrir el fichero de salida JSON %s\n" #: gcov.c:1497 -#, fuzzy, c-format -#| msgid "Error writing output file '%s'\n" +#, c-format msgid "Error writing JSON output file %s\n" -msgstr "Error al escribir el fichero de salida '%s'\n" +msgstr "Error al escribir el fichero de salida JSON %s\n" #: gcov.c:1664 #, c-format @@ -1266,10 +1253,8 @@ msgstr "este es la insn:" #: lra-constraints.c:2971 -#, fuzzy -#| msgid "unable to generate reloads for:" msgid "unable to generate reloads for impossible constraints:" -msgstr "no se pueden generar recargas para:" +msgstr "no se pueden generar recargas para restricciones imposibles:" #: lra-constraints.c:3962 reload.c:3814 msgid "unable to generate reloads for:" @@ -1327,12 +1312,13 @@ msgstr "Ya se mostraron todas las opciones con las características deseadas\n" #: opts.c:1581 -#, fuzzy, c-format -#| msgid "invalid argument %qs to %qs" +#, c-format msgid "" " Known valid arguments for %s option:\n" " " -msgstr "argumento %qs no válido para %qs" +msgstr "" +" Argumentos válidos conocidos para la opción %s:\n" +" " #: opts.c:1631 msgid "The following options are target specific" @@ -1430,16 +1416,12 @@ msgstr "creado y usado con diferentes opciones de '%s'" #: targhooks.c:2038 -#, fuzzy -#| msgid "created and used with different settings of -fpic" msgid "created and used with different settings of %<-fpic%>" -msgstr "creado y usado con diferentes opciones de -fpic" +msgstr "creado y usado con diferentes opciones de %<-fpic%>" #: targhooks.c:2040 -#, fuzzy -#| msgid "created and used with different settings of -fpie" msgid "created and used with different settings of %<-fpie%>" -msgstr "creado y usado con diferentes opciones de -fpie" +msgstr "creado y usado con diferentes opciones de %<-fpie%>" #: tlink.c:387 #, c-format @@ -1703,16 +1685,14 @@ msgstr "El número máximo de instrucciones cuando se hace inclusión en línea por tamaño." #: params.def:97 -#, fuzzy, no-c-format -#| msgid "Use subroutines for function prologues and epilogues." +#, no-c-format msgid "Instruction accounted for function prologue, epilogue and other overhead." -msgstr "Usa subrutinas para los prólogos y epílogos de función." +msgstr "Instrucción contabilizada para el prólogo y epílogo de la función y otras sobrecargas." #: params.def:103 -#, fuzzy, no-c-format -#| msgid "Use subroutines for function prologues and epilogues." +#, no-c-format msgid "Time accounted for function prologue, epilogue and other overhead." -msgstr "Usa subrutinas para los prólogos y epílogos de función." +msgstr "Tiempo contabilizado para el prólogo y epílogo de la función y otras sobrecargas." #: params.def:109 #, no-c-format @@ -1946,10 +1926,9 @@ # 'desfactorizar' no me gusta. ¿Alguna sugerencia? - cfuga #: params.def:393 -#, fuzzy, no-c-format -#| msgid "The maximum number of insns to duplicate when unfactoring computed gotos." +#, no-c-format msgid "The maximum number of insns in loop header duplicated by the copy loop headers pass." -msgstr "El número máximo de insns a duplicar al desfactorizar gotos calculados." +msgstr "El número máximo de instrucciones en encabezamiento de bucle a duplicar en el paso de encabezamientos de bucles." #: params.def:400 #, no-c-format @@ -1982,16 +1961,14 @@ msgstr "Umbral en el número promedio de bucles considerado por el planificador de cambio de módulo." #: params.def:430 -#, fuzzy, no-c-format -#| msgid "Select fraction of the maximal count of repetitions of basic block in program given basic block needs to have to be considered hot" +#, no-c-format msgid "Select fraction of the maximal count of repetitions of basic block in program given basic block needs to have to be considered hot (used in non-LTO mode)." -msgstr "La selección de fracción de la cuenta maximal de repeticiones del bloque básico en el bloque básico dado de programa que necesita para ser considerado caliente" +msgstr "La selección de fracción de la cuenta maximal de repeticiones del bloque básico en el bloque básico dado de programa que necesita para ser considerado caliente (utilizado en modo no LTO)." #: params.def:435 -#, fuzzy, no-c-format -#| msgid "A basic block profile count is considered hot if it contributes to the given permillage of the entire profiled execution." +#, no-c-format msgid "A basic block profile count is considered hot if it contributes to the given permillage of the entire profiled execution (used in LTO mode)." -msgstr "El número de perfiles de bloque básicos se considera caliente si contribuye al pormillaje dado de la ejecución perfilada completa." +msgstr "El número de perfiles de bloque básicos se considera caliente si contribuye al pormillaje dado de la ejecución perfilada completa (utilizado en modo LTO)." #: params.def:440 #, no-c-format @@ -2009,8 +1986,7 @@ msgstr "Selección de fracción de la frecuencia máxima de ejecuciones de bloque básico en la función dada para la que el bloque básico consigue alinear." #: params.def:455 -#, fuzzy, no-c-format -#| msgid "Loops iterating at least selected number of iterations will get loop alignment.." +#, no-c-format msgid "Loops iterating at least selected number of iterations will get loop alignment." msgstr "Iterar ciclos por lo menos el número seleccionado de iteraciones que logrará alineación de bucles." @@ -2121,10 +2097,9 @@ msgstr "Número máximo (en bytes) de objetos rastreados en btyes por la eliminación de almacenamiento muerto." #: params.def:593 -#, fuzzy, no-c-format -#| msgid "Maximum number of times that an insn could be scheduled." +#, no-c-format msgid "Maximum number of queries into the alias oracle per store." -msgstr "El número máximo de veces que se puede planificar una insns." +msgstr "El número máximo de consultas al oráculo de alias por almacenamiento." #: params.def:598 #, no-c-format @@ -2495,22 +2470,19 @@ msgstr "Tamaño máximo de una lista de valores asociada con cada parámetro para propagación constante entre procedimientos." #: params.def:1092 -#, fuzzy, no-c-format -#| msgid "Threshold ipa-cp opportunity evaluation that is still considered beneficial to clone.." +#, no-c-format msgid "Threshold ipa-cp opportunity evaluation that is still considered beneficial to clone." -msgstr "Rango de evaluación de oportunidad ipa-cp que aún se considera beneficioso para clonar.." +msgstr "Rango de evaluación de oportunidad ipa-cp que aún se considera beneficioso para clonar." #: params.def:1098 -#, fuzzy, no-c-format -#| msgid "Percentage penalty the recursive functions will receive when they are evaluated for cloning.." +#, no-c-format msgid "Percentage penalty the recursive functions will receive when they are evaluated for cloning." -msgstr "Penalización porcentual que recibirán las funciones recursivas cuando se evalúen para clonación.." +msgstr "Penalización porcentual que recibirán las funciones recursivas cuando se evalúen para clonación." #: params.def:1104 -#, fuzzy, no-c-format -#| msgid "Percentage penalty functions containing a single call to another function will receive when they are evaluated for cloning.." +#, no-c-format msgid "Percentage penalty functions containing a single call to another function will receive when they are evaluated for cloning." -msgstr "Penalización porcentual que recibirán las funciones que contien una sola llamada a otra función cuando se evalúen para clonación.." +msgstr "Penalización porcentual que recibirán las funciones que contien una sola llamada a otra función cuando se evalúen para clonación." #: params.def:1110 #, no-c-format @@ -2518,16 +2490,14 @@ msgstr "Número máximo de elementos de contenido agregado de un parámetro en funciones de salto y celosías." #: params.def:1116 -#, fuzzy, no-c-format -#| msgid "Compile-time bonus IPA-CP assigns to candidates which make loop bounds or strides known.." +#, no-c-format msgid "Compile-time bonus IPA-CP assigns to candidates which make loop bounds or strides known." -msgstr "Bonificación de tiempo de compilación que IPA-CP asigna a los candidatos que dan a conocer los límites o los pasos de los bucles.." +msgstr "Bonificación de tiempo de compilación que IPA-CP asigna a los candidatos que dan a conocer los límites o los pasos de los bucles." #: params.def:1122 -#, fuzzy, no-c-format -#| msgid "Compile-time bonus IPA-CP assigns to candidates which make an array index known.." +#, no-c-format msgid "Compile-time bonus IPA-CP assigns to candidates which make an array index known." -msgstr "Bonificación de tiempo de compilación que IPA-CP asigna a los candidatos que dan conocer el índice de un array.." +msgstr "Bonificación de tiempo de compilación que IPA-CP asigna a los candidatos que dan conocer el índice de un array." #: params.def:1128 #, no-c-format @@ -2576,10 +2546,9 @@ msgstr "Permite que se introduzcan carreras de datos nuevos en stores." #: params.def:1187 -#, fuzzy, no-c-format -#| msgid "Set the maximum number of instructions executed in parallel in reassociated tree. If 0, use the target dependent heuristic.." +#, no-c-format msgid "Set the maximum number of instructions executed in parallel in reassociated tree. If 0, use the target dependent heuristic." -msgstr "Establece el número máximo de instrucciones ejecutadas en paralelo en el árbol de reasociación. Si es 0, usa la heurística dependiente del objetivo.." +msgstr "Establece el número máximo de instrucciones ejecutadas en paralelo en el árbol de reasociación. Si es 0, usa la heurística dependiente del objetivo." #: params.def:1193 #, no-c-format @@ -2748,10 +2717,9 @@ msgstr "Número máximo de definiciones posibles visitadas cuando se desvirtualiza especulativamente." #: params.def:1375 -#, fuzzy, no-c-format -#| msgid "Maximum number of constant stores to merge in the store merging pass." +#, no-c-format msgid "Maximum number of assertions to add along the default edge of a switch statement during VRP." -msgstr "Número máximo de almacenamientos constantes que hay que mezclar en el paso de mezcla de almacenamientos." +msgstr "Número máximo de aserciones que hay que añadir a lo largo del borde predefinido de una sentencia switch durante VRP." #: params.def:1381 #, no-c-format @@ -2766,7 +2734,7 @@ #: params.def:1391 #, no-c-format msgid "Maximum unroll factor for the unroll-and-jam transformation." -msgstr "" +msgstr "Máximo factor de desenrrollado para la transformación unroll-and-jam." #: params.def:1396 #, no-c-format @@ -2776,19 +2744,17 @@ #: params.def:1401 #, no-c-format msgid "True if a non-short-circuit operation is optimal." -msgstr "" +msgstr "Verdadero si una operación de non-short-circuit es óptima." #: params.def:1406 -#, fuzzy, no-c-format -#| msgid "Maximum number of instructions in basic block to be considered for SLP vectorization." +#, no-c-format msgid "The maximum number of instructions in an inner loop that is being considered for versioning." -msgstr "El número máximo de instrucciones en bloque básico que se consideran para vectorización SLP." +msgstr "El número máximo de instrucciones en un bucle interior que se consideran para versionar." #: params.def:1412 -#, fuzzy, no-c-format -#| msgid "The maximum number of instructions to consider to unroll in a loop." +#, no-c-format msgid "The maximum number of instructions in an outer loop that is being considered for versioning, on top of the instructions in inner loops." -msgstr "El número máximo de instrucciones para considerar el desenrollo en un bucle." +msgstr "El número máximo de instrucciones ien un bucle exterior que se consideran para versionar, por encima de las instrucciones en los bucles interiores." #: c-family/c-format.c:404 msgid "format" @@ -3655,15 +3621,14 @@ #: config/gcn/gcn.c:5637 config/gcn/gcn.c:5648 config/gcn/gcn.c:5651 #, c-format msgid "bad ADDR_SPACE_GLOBAL address" -msgstr "" +msgstr "dirección ADDR_SPACE_GLOBAL errónea" #: config/gcn/gcn.c:5423 config/gcn/gcn.c:5446 config/gcn/gcn.c:5475 #: config/gcn/gcn.c:5491 config/gcn/gcn.c:5510 config/gcn/gcn.c:5586 #: config/gcn/gcn.c:5782 config/gcn/gcn.c:5879 -#, fuzzy, c-format -#| msgid "invalid operand to %%Z code" +#, c-format msgid "invalid operand %%xn code" -msgstr "operando no válido para el código %%Z" +msgstr "operando no válido para el código %%xn" #: config/gcn/gcn.c:5949 #, c-format @@ -3962,22 +3927,19 @@ msgstr "extracto de cero no válido" #: config/or1k/or1k.c:1124 config/or1k/or1k.c:1132 -#, fuzzy, c-format -#| msgid "invalid operation" +#, c-format msgid "invalid relocation" -msgstr "operación no válida" +msgstr "reubicación no válida" #: config/or1k/or1k.c:1226 -#, fuzzy, c-format -#| msgid "invalid %H value" +#, c-format msgid "invalid %%H value" -msgstr "valor %H no válido" +msgstr "valor %%H no válido" #: config/or1k/or1k.c:1274 -#, fuzzy, c-format -#| msgid "unknown punctuation '%c'" +#, c-format msgid "unknown operand letter: '%c'" -msgstr "puntuación '%c' desconocida" +msgstr "letra de operando desconocida: '%c'" #: config/rl78/rl78.c:2009 config/rl78/rl78.c:2095 #, c-format @@ -3995,46 +3957,32 @@ msgstr "Pruebe ejecutar '%s' en el intérprete de órdenes para elevar su límite.\n" #: config/rs6000/rs6000.c:3995 -#, fuzzy -#| msgid "-mvsx requires hardware floating point" msgid "%<-mvsx%> requires hardware floating point" -msgstr "-mvsx requiere coma flotante de hardware" +msgstr "%<-mvsx%> requiere coma flotante de hardware" #: config/rs6000/rs6000.c:4003 -#, fuzzy -#| msgid "-mvsx needs indexed addressing" msgid "%<-mvsx%> needs indexed addressing" -msgstr "-mvsx necesita direccionamiento indizado" +msgstr "%<-mvsx%> necesita direccionamiento indexado" #: config/rs6000/rs6000.c:4008 -#, fuzzy -#| msgid "-mvsx and -mno-altivec are incompatible" msgid "%<-mvsx%> and %<-mno-altivec%> are incompatible" -msgstr "-mvsx y -mno-altivec son incompatibles" +msgstr "%<-mvsx%> y -% son incompatibles" #: config/rs6000/rs6000.c:4010 -#, fuzzy -#| msgid "-mno-altivec disables vsx" msgid "%<-mno-altivec%> disables vsx" -msgstr "-mno-altivec desactiva vsx" +msgstr "%<-mno-altivec%> desactiva vsx" #: config/rs6000/rs6000.c:4136 -#, fuzzy -#| msgid "-mquad-memory requires 64-bit mode" msgid "%<-mquad-memory%> requires 64-bit mode" -msgstr "-mquad-memory requiere modo de 64 bits" +msgstr "%<-mquad-memory%> requiere modo de 64 bits" #: config/rs6000/rs6000.c:4139 -#, fuzzy -#| msgid "-mquad-memory-atomic requires 64-bit mode" msgid "%<-mquad-memory-atomic%> requires 64-bit mode" -msgstr "-mquad-memory-atomic requiere modo de 64 bits" +msgstr "%<-mquad-memory-atomic%> requiere modo de 64 bits" #: config/rs6000/rs6000.c:4151 -#, fuzzy -#| msgid "-mquad-memory is not available in little endian mode" msgid "%<-mquad-memory%> is not available in little endian mode" -msgstr "-mquad-memory no está disponible en modo little endian" +msgstr "%<-mquad-memory%> no está disponible en modo little endian" #: config/rs6000/rs6000.c:10374 msgid "bad move" @@ -4100,10 +4048,9 @@ msgstr "valor %%q no válido" #: config/rs6000/rs6000.c:21141 -#, fuzzy, c-format -#| msgid "invalid %%J value" +#, c-format msgid "invalid %%t value" -msgstr "valor %%J no válido" +msgstr "valor %%t no válido" #: config/rs6000/rs6000.c:21158 #, c-format @@ -4121,10 +4068,9 @@ msgstr "valor %%v no válido" #: config/rs6000/rs6000.c:21234 -#, fuzzy, c-format -#| msgid "invalid %%J value" +#, c-format msgid "invalid %%V value" -msgstr "valor %%J no válido" +msgstr "valor %%V no válido" #: config/rs6000/rs6000.c:21251 config/xtensa/xtensa.c:2439 #, c-format @@ -4696,10 +4642,8 @@ msgstr "entra en la sentencia sincronizada o atómica" #: cp/decl.c:3254 -#, fuzzy -#| msgid "expected statement" msgid "enters constexpr if statement" -msgstr "se esperaba una declaración" +msgstr "entre en la sentencia if de expresión constante" #: cp/error.c:375 msgid "" @@ -5032,10 +4976,8 @@ msgstr "Rango simétrico fuera de entero implicado por Standard Fortran en %L" #: fortran/arith.c:118 -#, fuzzy -#| msgid "Illegal character in BOZ constant at %C" msgid "Illegal type in character concatenation at %L" -msgstr "Carácter ilegal en la constante BOZ en %C" +msgstr "Typo ilegal en concatenación de caracteres en %L" #: fortran/arith.c:1384 msgid "elemental binary operation" @@ -5397,10 +5339,9 @@ msgstr "El operando del operador numérico unitario %%<%s%%> en %%L es %s" #: fortran/resolve.c:3949 -#, fuzzy, c-format -#| msgid "Operands of binary numeric operator %%<%s%%> at %%L are %s/%s" +#, c-format msgid "Unexpected derived-type entities in binary intrinsic numeric operator %%<%s%%> at %%L" -msgstr "Los operandos del operador numérico binario %%<%s%%> en %%L son %s/%s" +msgstr "Entidades de tipos derivados no esperadas en el operador numérico intrínseco binario %%<%s%%> en %%L" #: fortran/resolve.c:3954 #, c-format @@ -5517,7 +5458,7 @@ #: fortran/trans-array.c:9544 #, c-format msgid "The value of the PDT LEN parameter '%s' does not agree with that in the dummy declaration" -msgstr "" +msgstr "El valor del parámetro PDT LEN '%s' no concuerda con el de la declaración «dummy»" #: fortran/trans-decl.c:6025 #, c-format @@ -5719,10 +5660,8 @@ msgstr "se requiere -E ó -x cuando la entrada es de entrada estándar" #: config/darwin.h:126 config/darwin.h:427 -#, fuzzy -#| msgid "-pg not supported on this platform" msgid "gsplit-dwarf is not supported on this platform" -msgstr "-pg no se admite en esta plataforma" +msgstr "gsplit-dwarf no se admite en esta plataforma" #: config/darwin.h:170 msgid "rdynamic is not supported" @@ -5788,8 +5727,6 @@ #: config/aarch64/aarch64-freebsd.h:37 config/arm/freebsd.h:49 #: config/riscv/freebsd.h:44 -#, fuzzy -#| msgid "consider using `-pg' instead of `-p' with gprof (1) " msgid "consider using `-pg' instead of `-p' with gprof (1)" msgstr "considere usar `-pg' en lugar de `-p' con gprof (1)" @@ -5868,7 +5805,7 @@ #: config/rs6000/rs6000.h:139 msgid "Missing -mcpu option in ASM_CPU_SPEC?" -msgstr "" +msgstr "¿Falta la opción -mcpu en ASM_CPU_SPEC?" #: config/rx/rx.h:80 msgid "-mas100-syntax is incompatible with -gdwarf" @@ -5891,10 +5828,8 @@ msgstr "SH2a no se admite para little-endian" #: config/sparc/linux64.h:148 -#, fuzzy -#| msgid "-pie is not supported in this configuration" msgid "-fsanitize=address is not supported in this configuration" -msgstr "-pie no se admite en esta configuración" +msgstr "-fsanitize=dirección no se admite en esta configuración" #: config/sparc/linux64.h:162 config/sparc/linux64.h:168 #: config/sparc/netbsd-elf.h:108 config/sparc/netbsd-elf.h:117 @@ -5960,7 +5895,7 @@ #: fortran/lang.opt:214 msgid "Warn about type and rank mismatches between arguments and parameters." -msgstr "" +msgstr "Avisa sobre discordancias de tipo y rango entre argumentos y parámetros." #: fortran/lang.opt:218 msgid "Warn if the type of a variable might be not interoperable with C." @@ -6243,7 +6178,7 @@ #: fortran/lang.opt:565 msgid "Try to interchange loops if profitable." -msgstr "" +msgstr "Intenta intercambiar bucles si es provechoso." #: fortran/lang.opt:569 msgid "Enable front end optimization." @@ -6259,7 +6194,7 @@ #: fortran/lang.opt:581 msgid "Initialize components of derived type variables according to other init flags." -msgstr "" +msgstr "Inicializa componentes de variables de tipo derivado en conformidad con otros indicadores de inicialización." #: fortran/lang.opt:585 msgid "-finit-integer=\tInitialize local integer variables to n." @@ -6315,7 +6250,7 @@ #: fortran/lang.opt:675 msgid "Path to header file that should be pre-included before each compilation unit." -msgstr "" +msgstr "Ruta de fichero de cabecera que debería preincluirse antes de cada unidad de compilación." #: fortran/lang.opt:679 msgid "Enable range checking during compilation." @@ -6517,7 +6452,7 @@ #: c-family/c.opt:276 msgid "Warn on suspicious calls of standard functions computing absolute values." -msgstr "" +msgstr "Advierte de llamadas sospechosas de funciones estándar que calculan valores absolutos." #: c-family/c.opt:280 msgid "Warn about suspicious uses of memory addresses." @@ -6545,7 +6480,7 @@ #: c-family/c.opt:317 msgid "-Wno-alloc-size-larger-than Disable Walloc-size-larger-than= warning. Equivalent to Walloc-size-larger-than= or larger." -msgstr "" +msgstr "-Wno-alloc-size-larger-than Desactiva el aviso Walloc-size-larger-than=. Equivalente a Walloc-size-larger-than= o mayor." #: c-family/c.opt:321 msgid "-Walloc-zero Warn for calls to allocation functions that specify zero bytes." @@ -6557,7 +6492,7 @@ #: c-family/c.opt:331 msgid "-Wno-alloca-larger-than Disable Walloca-larger-than= warning. Equivalent to Walloca-larger-than= or larger." -msgstr "" +msgstr "-Wno-alloca-larger-than Desactiva el aviso Walloca-larger-than=. Equivalente a Walloca-larger-than= o mayor." #: c-family/c.opt:343 msgid "Warn whenever an Objective-C assignment is being intercepted by the garbage collector." @@ -6588,10 +6523,8 @@ msgstr "Avisa cuando una macro de preprocesador interna está sin definir o redefinida." #: c-family/c.opt:371 -#, fuzzy -#| msgid "Warn about features not present in ISO C99, but present in ISO C11." msgid "Warn about features not present in ISO C11, but present in ISO C2X." -msgstr "Avisa sobre características no presentes en ISO C99, pero presentes en ISO C11." +msgstr "Avisa sobre características no presentes en ISO C11, pero presentes en ISO C2X." #: c-family/c.opt:375 msgid "Warn about features not present in ISO C90, but present in ISO C99." @@ -6641,10 +6574,8 @@ #: c-family/c.opt:1369 c-family/c.opt:1373 c-family/c.opt:1377 #: c-family/c.opt:1381 c-family/c.opt:1385 c-family/c.opt:1389 #: config/i386/i386.opt:967 -#, fuzzy -#| msgid "Deprecated in GCC 8. This switch has no effect." msgid "Deprecated in GCC 9. This switch has no effect." -msgstr "Obsoleto en GCC 8. Esta opción no tiene efecto." +msgstr "Obsoleto en GCC 9. Esta opción no tiene efecto." #: c-family/c.opt:429 msgid "Warn about variables that might be changed by \"longjmp\" or \"vfork\"." @@ -6676,7 +6607,7 @@ #: c-family/c.opt:461 msgid "Warn about dangling else." -msgstr "Avisa sobre else colgados." +msgstr "Avisa sobre else congante." #: c-family/c.opt:465 msgid "Warn about __TIME__, __DATE__ and __TIMESTAMP__ usage." @@ -6696,11 +6627,11 @@ #: c-family/c.opt:485 msgid "Mark implicitly-declared copy operations as deprecated if the class has a user-provided copy operation." -msgstr "" +msgstr "Marca las operaciones de copia declaradas implícitamente como obsoletas si la clase tiene una operación de copia definida por el usuario." #: c-family/c.opt:490 msgid "Mark implicitly-declared copy operations as deprecated if the class has a user-provided copy operation or destructor." -msgstr "" +msgstr "Marca las operaciones de copia declaradas implícitamente como obsoletas si la clase tiene una operación de copia o un destructor definidos por el usuario." #: c-family/c.opt:495 msgid "Warn about positional initialization of structs requiring designated initializers." @@ -6776,7 +6707,7 @@ #: c-family/c.opt:575 msgid "Warn about function calls with format strings that write past the end of the destination region. Same as -Wformat-overflow=1." -msgstr "" +msgstr "Advierte de llamadas a función con cadenas de formato que escriben más allá del final de la región de destino. Igual que -Wformat-overflow=1." #: c-family/c.opt:580 msgid "Warn about possible security problems with format functions." @@ -6788,7 +6719,7 @@ #: c-family/c.opt:588 msgid "Warn about calls to snprintf and similar functions that truncate output. Same as -Wformat-truncation=1." -msgstr "" +msgstr "Advierte de llamadas a snprintf y funciones similares que truncan la salida. Igual que -Wformat-truncation=1." #: c-family/c.opt:593 msgid "Warn about strftime formats yielding 2-digit years." @@ -6824,7 +6755,7 @@ #: c-family/c.opt:630 msgid "Warn when the address of packed member of struct or union is taken." -msgstr "" +msgstr "Avisa cuando se toma la dirección del miembro empaquetado de una estructura o unión." #: c-family/c.opt:634 msgid "Warn about variables which are initialized to themselves." @@ -6832,7 +6763,7 @@ #: c-family/c.opt:638 msgid "Warn about uses of std::initializer_list that can result in dangling pointers." -msgstr "" +msgstr "Avisa sobre usos de std::initializer_list que pueden resultar en punteros " #: c-family/c.opt:642 msgid "Warn about implicit declarations." @@ -6864,7 +6795,7 @@ #: c-family/c.opt:677 msgid "Warn for suspicious integer expressions in boolean context." -msgstr "" +msgstr "Advierte de expresiones enteras sospechosas en contexto booleano." #: c-family/c.opt:681 msgid "Warn when there is a cast to a pointer from an integer of a different size." @@ -6928,7 +6859,7 @@ #: c-family/c.opt:745 msgid "Warn about unsafe macros expanding to multiple statements used as a body of a clause such as if, else, while, switch, or for." -msgstr "" +msgstr "Advierte de expansiones de macros no seguras a sentencias múltiples utilizadas como cuerpo de una cláusula como if, while, switch o for." #: c-family/c.opt:749 msgid "Warn on direct multiple inheritance." @@ -6940,7 +6871,7 @@ #: c-family/c.opt:757 msgid "Warn when fields in a struct with the packed attribute are misaligned." -msgstr "" +msgstr "Avisa cuando un struct con el atributo «packed» tiene campos desalineados." #: c-family/c.opt:761 msgid "Warn about missing sized deallocation functions." @@ -6948,7 +6879,7 @@ #: c-family/c.opt:765 msgid "Warn about suspicious divisions of two sizeof expressions that don't work correctly with pointers." -msgstr "" +msgstr "Advierte de divisiones sospechosas de dos expresiones sizeof que no funcionan correctamente con punteros." #: c-family/c.opt:769 msgid "Warn about suspicious length parameters to certain string functions if the argument uses sizeof." @@ -6960,7 +6891,7 @@ #: c-family/c.opt:777 msgid "Warn about buffer overflow in string manipulation functions like memcpy and strcpy." -msgstr "" +msgstr "Advierte de desbordamiento de búfer en funciones que manipulan cadenas, como memcpy y strcpy." #: c-family/c.opt:782 msgid "Under the control of Object Size type, warn about buffer overflow in string manipulation functions like memcpy and strcpy." @@ -7039,14 +6970,12 @@ msgstr "Avisa cuando las funciones friend sin plantillas se declaran dentro de una plantilla." #: c-family/c.opt:868 -#, fuzzy -#| msgid "conversion to void will never use a type conversion operator" msgid "Warn when a conversion function will never be called due to the type it converts to." -msgstr "la conversión a void nunca usará un operador de conversión de tipo" +msgstr "Avisa cuando una función de conversión nunca será llamada debido al tipo al que convierte." #: c-family/c.opt:872 msgid "Warn for unsafe raw memory writes to objects of class types." -msgstr "" +msgstr "Avisa en caso de escrituras de memoria en bruto no seguras a objetivos de tipos de clase." #: c-family/c.opt:876 msgid "Warn about non-virtual destructors." @@ -7130,7 +7059,7 @@ #: c-family/c.opt:991 msgid "Warn if constructor or destructors with priorities from 0 to 100 are used." -msgstr "" +msgstr "Avisa si se usan constructores o destructores con prioridades entre 0 y 100." #: c-family/c.opt:995 msgid "Warn if a property for an Objective-C object has no assign semantics specified." @@ -7150,7 +7079,7 @@ #: c-family/c.opt:1015 msgid "Warn about redundant calls to std::move." -msgstr "" +msgstr "Advierte de llamadas redundantes a std::move." #: c-family/c.opt:1019 msgid "Warn about uses of register storage specifier." @@ -7293,14 +7222,12 @@ msgstr "Avisa si se usa una matriz de longitud variable." #: c-family/c.opt:1199 -#, fuzzy -#| msgid "-Wvla-larger-than=\tWarn on unbounded uses of variable-length arrays, and on bounded uses of variable-length arrays whose bound can be larger than bytes." msgid "-Wvla-larger-than=\tWarn on unbounded uses of variable-length arrays, and on bounded uses of variable-length arrays whose bound can be larger than bytes. bytes." -msgstr "-Wvla-larger-than=\tAdvierte de usos no acotados de arrays de longitud variable y de usos acotados de arrays de longitud variable cuyo límite pueda ser más grande que bytes." +msgstr "-Wvla-larger-than=\tAdvierte de usos no acotados de arrays de longitud variable y de usos acotados de arrays de longitud variable cuyo límite pueda ser más grande que bytes. bytes" #: c-family/c.opt:1206 msgid "-Wno-vla-larger-than Disable Wvla-larger-than= warning. Equivalent to Wvla-larger-than= or larger." -msgstr "" +msgstr "-Wno-vla-larger-than Desactiva el aviso Wvla-larger-than=. Equivalente a Wvla-larger-than= o mayor." #: c-family/c.opt:1210 msgid "Warn when a register variable is declared volatile." @@ -7356,11 +7283,11 @@ #: c-family/c.opt:1267 msgid "Support C++17 allocation of over-aligned types." -msgstr "" +msgstr "Admite alojamiento C++17 de tipos sobrealineados." #: c-family/c.opt:1271 msgid "-faligned-new= Use C++17 over-aligned type allocation for alignments greater than N." -msgstr "" +msgstr "-faligned-new= Usa alojamiento de tipo sobrealineado de C++17 para alineamientos mayores que N." #: c-family/c.opt:1278 msgid "Allow variadic functions without named parameter." @@ -7385,7 +7312,7 @@ #: c-family/c.opt:1305 msgid "Enable the char8_t fundamental type and use it as the type for UTF-8 string and character literals." -msgstr "" +msgstr "Habilita el tipo fundamental char8_t y lo usa como el tipo para los literales de cadenas UTF-8 y de caracteres." #: c-family/c.opt:1393 msgid "Deprecated in GCC 8. This switch has no effect." @@ -7412,10 +7339,8 @@ msgstr "-fconstexpr-loop-limit=\tEspecifica el número de iteraciones de bucle constexpr máximo." #: c-family/c.opt:1421 -#, fuzzy -#| msgid "-fconstexpr-loop-limit=\tSpecify maximum constexpr loop iteration count." msgid "-fconstexpr-ops-limit=\tSpecify maximum number of constexpr operations during a single constexpr evaluation." -msgstr "-fconstexpr-loop-limit=\tEspecifica el número de iteraciones de bucle constexpr máximo." +msgstr "-fconstexpr-ops-limit=\tEspecifica el número máximo de operaciones constexpr durante una evaluación de constexpr." #: c-family/c.opt:1425 msgid "Emit debug annotations during preprocessing." @@ -7431,7 +7356,7 @@ #: c-family/c.opt:1441 msgid "Print hierarchical comparisons when template types are mismatched." -msgstr "" +msgstr "Imprime comparaciones jerárquicas cuando los tipos de plantilla no coinciden." #: c-family/c.opt:1445 msgid "Preprocess directives only." @@ -7443,7 +7368,7 @@ #: c-family/c.opt:1453 msgid "-fmacro-prefix-map== Map one directory name to another in __FILE__, __BASE_FILE__, and __builtin_FILE()." -msgstr "" +msgstr "-fmacro-prefix-map== Asocia un nombre de directorio a otro en __FILE__, __BASE_FILE__, y __builtin_FILE()." #: c-family/c.opt:1457 msgid "Write all declarations as Ada code transitively." @@ -7851,16 +7776,12 @@ #: c-family/c.opt:2017 c-family/c.opt:2021 c-family/c.opt:2139 #: c-family/c.opt:2143 -#, fuzzy -#| msgid "Conform to the ISO 2017 C standard (expected to be published in 2018)." msgid "Conform to the ISO 2017 C standard (published in 2018)." -msgstr "Conforma al estándar ISO 2017 C (publicación prevista en 2018)." +msgstr "Conforma al estándar ISO 2017 C (publicado en 2018)." #: c-family/c.opt:2025 -#, fuzzy -#| msgid "Conform to the ISO 2011 C standard (experimental and incomplete support)" msgid "Conform to the ISO 202X C standard draft (experimental and incomplete support)." -msgstr "Conforma al estándar ISO 2011 C (soporte experimental e incompleto)" +msgstr "Conforma al borrador del estándar ISO 202X C (soporte experimental e incompleto)" #: c-family/c.opt:2029 c-family/c.opt:2033 c-family/c.opt:2119 msgid "Conform to the ISO 1990 C standard." @@ -7915,16 +7836,12 @@ msgstr "Obsoleto en favor de -std=gnu11." #: c-family/c.opt:2091 c-family/c.opt:2095 -#, fuzzy -#| msgid "Conform to the ISO 2017 C standard (expected to be published in 2018) with GNU extensions." msgid "Conform to the ISO 2017 C standard (published in 2018) with GNU extensions." -msgstr "Conforma al estándar ISO 2017 C (publicación prevista en 2018) con extensiones GNU." +msgstr "Conforma al estándar ISO 2017 C (publicado en 2018) con extensiones GNU." #: c-family/c.opt:2099 -#, fuzzy -#| msgid "Conform to the ISO 2011 C standard with GNU extensions (experimental and incomplete support)" msgid "Conform to the ISO 202X C standard draft with GNU extensions (experimental and incomplete support)." -msgstr "Conforma al estándar ISO 2011 C con extensiones GNU (soporte experimental e incompleto)" +msgstr "Conforma al borrador del estándar ISO 202X C con extensiones GNU (soporte experimental e incompleto)." #: c-family/c.opt:2103 c-family/c.opt:2107 msgid "Conform to the ISO 1990 C standard with GNU extensions." @@ -7992,19 +7909,15 @@ #: d/lang.opt:51 msgid "-Hd

\tWrite D interface files to directory ." -msgstr "" +msgstr "-Hd \tEscribe los ficheros de interfaz de D en el directorio ." #: d/lang.opt:55 -#, fuzzy -#| msgid "-o \tPlace output into ." msgid "-Hf \tWrite D interface to ." -msgstr "-o \tColoca la salida en el ." +msgstr "-Hf \tEscribe el interfaz de D en el ." #: d/lang.opt:123 -#, fuzzy -#| msgid "Warn about casts which discard qualifiers." msgid "Warn about casts that will produce a null result." -msgstr "Avisa sobre conversiones que descartan calificadores." +msgstr "Avisa sobre conversiones que darán resultado nulo." #: d/lang.opt:139 msgid "Warn from speculative compiles such as __traits(compiles)." @@ -8011,24 +7924,20 @@ msgstr "" #: d/lang.opt:151 -#, fuzzy -#| msgid "Generate H8S code." msgid "Generate JSON file." -msgstr "Genera código H8S." +msgstr "Genera fichero JSON." #: d/lang.opt:155 -#, fuzzy -#| msgid "-MF \tWrite dependency output to the given file." msgid "-Xf \tWrite JSON output to the given ." -msgstr "-MF \tEscribe la salida de dependencias al fichero dado." +msgstr "-Xf \tEscribe salida JSON al dado." #: d/lang.opt:159 msgid "Debug library to use instead of phobos." -msgstr "" +msgstr "Biblioteca de depuración que se utilizará en lugar de phobos." #: d/lang.opt:163 msgid "Default library to use instead of phobos." -msgstr "" +msgstr "Biblioteca predefinida que se utilizará en lugar de phobos." #: d/lang.opt:167 msgid "Do link the standard D startup files in the compilation." @@ -8035,56 +7944,44 @@ msgstr "" #: d/lang.opt:174 -#, fuzzy -#| msgid "Generate code for built-in atomic operations." msgid "Generate code for all template instantiations." -msgstr "Genera código para operaciones atómicas internas." +msgstr "Genera código para todas las instanciaciones de plantillas." #: d/lang.opt:178 -#, fuzzy -#| msgid "Generate code for GNU assembler (gas)." msgid "Generate code for assert contracts." -msgstr "Genera código para el ensamblador de GNU (gas)." +msgstr "Genera código para contratos de assert." #: d/lang.opt:186 msgid "-fbounds-check=[on|safeonly|off]\tTurn array bounds checks on, in @safe code only, or off." -msgstr "" +msgstr "-fbounds-check=[on|safeonly|off]\tActiva o desactiva las comprobaciones de límites de matrices, solo en código @safe." #: d/lang.opt:210 -#, fuzzy -#| msgid "incompatible index mode" msgid "Compile in debug code." -msgstr "modo de índices incompatibles" +msgstr "Compila en código de depuración." #: d/lang.opt:214 msgid "-fdebug=\tCompile in debug code, code <= , or code identified by ." -msgstr "" +msgstr "-fdebug=\tCompila en código de depuración, código <= , o código identificado por ." #: d/lang.opt:218 -#, fuzzy -#| msgid "Generate norm instruction." msgid "Generate documentation." -msgstr "Genera instrucciones norm." +msgstr "Genera documentación." #: d/lang.opt:222 msgid "-fdoc-dir=\tWrite documentation file to directory ." -msgstr "" +msgstr "-fdoc-dir=\tEscribe el fichero de documentación en el directorio ." #: d/lang.opt:226 -#, fuzzy -#| msgid "-o \tPlace output into ." msgid "-fdoc-file=\tWrite documentation to ." -msgstr "-o \tColoca la salida en el ." +msgstr "-fdoc-file=\tEscribe la documentación en ." #: d/lang.opt:230 msgid "-fdoc-inc=\tInclude a Ddoc macro ." -msgstr "" +msgstr "-fdoc-inc=\tIncluye un de macros Ddoc." #: d/lang.opt:234 -#, fuzzy -#| msgid "Do not assume that standard C libraries and \"main\" exist." msgid "Assume that standard D runtime libraries and \"D main\" exist." -msgstr "No asume que existen las bibliotecas C estándar y \"main\"." +msgstr "Asume que existen bibliotecas D estándar de tiempo de ejecución y \"D main\"." #: d/lang.opt:238 #, fuzzy @@ -8094,7 +7991,7 @@ #: d/lang.opt:242 msgid "Ignore unsupported pragmas." -msgstr "" +msgstr "Hace caso omiso de pragmas no admitidas." #: d/lang.opt:246 #, fuzzy @@ -8104,11 +8001,11 @@ #: d/lang.opt:250 msgid "Generate a default D main() function when compiling." -msgstr "" +msgstr "Genera una función main() de D predefinida al compilar." #: d/lang.opt:254 msgid "-fmodule-file==\tuse as source file for ." -msgstr "" +msgstr "-fmodule-file==\tutiliza como fichero fuente para ." #: d/lang.opt:258 #, fuzzy @@ -8118,19 +8015,15 @@ #: d/lang.opt:262 msgid "Process all modules specified on the command line, but only generate code for the module specified by the argument." -msgstr "" +msgstr "Procesa todos los módulos especificados en la línea de órdenes, pero solo genera código para el módulo especificado por el argumento." #: d/lang.opt:266 -#, fuzzy -#| msgid "Generate code for built-in atomic operations." msgid "Generate code for postcondition contracts." -msgstr "Genera código para operaciones atómicas internas." +msgstr "Genera código para contratos de postcondiciones." #: d/lang.opt:270 -#, fuzzy -#| msgid "Generate code for built-in atomic operations." msgid "Generate code for precondition contracts." -msgstr "Genera código para operaciones atómicas internas." +msgstr "Genera código para contratos de precondiciones." #: d/lang.opt:274 #, fuzzy @@ -8139,14 +8032,12 @@ msgstr "Muestra la versión del compilador." #: d/lang.opt:282 -#, fuzzy -#| msgid "Generate code for the supervisor mode (default)." msgid "Generate code for switches without a default case." -msgstr "Genera código para el modo supervisor (predeterminado)." +msgstr "Genera código para las opciones sin caso predefinido." #: d/lang.opt:286 msgid "List information on all language changes." -msgstr "" +msgstr "Muestra información sobre todos los cambios del lenguaje." #: d/lang.opt:290 msgid "Give deprecation messages about -ftransition=import anomalies." @@ -8154,7 +8045,7 @@ #: d/lang.opt:294 msgid "List all usages of complex or imaginary types." -msgstr "" +msgstr "Enumera todos los usos de los tipos complejo o imaginario." #: d/lang.opt:298 msgid "Implement DIP1000: Scoped pointers (experimental)." @@ -8166,11 +8057,11 @@ #: d/lang.opt:306 msgid "List all non-mutable fields which occupy an object instance." -msgstr "" +msgstr "Enumera todos los campos no mutables que ocupan la instancia de un objeto." #: d/lang.opt:310 msgid "Revert to single phase name lookup." -msgstr "" +msgstr "Revierta a búsqueda de nombres de una sola fase." #: d/lang.opt:314 msgid "List all hidden GC allocations." @@ -8177,10 +8068,8 @@ msgstr "" #: d/lang.opt:318 -#, fuzzy -#| msgid "Use given thread-local storage dialect." msgid "List all variables going into thread local storage." -msgstr "Usa el dialecto de almacenamiento thread-local dado." +msgstr "Enumera todas las variables que van al almacenamiento local del hilo." #: d/lang.opt:322 #, fuzzy @@ -8193,18 +8082,16 @@ msgstr "" #: d/lang.opt:350 -#, fuzzy -#| msgid "Do not assume that standard C libraries and \"main\" exist." msgid "Do not link the standard D library in the compilation." -msgstr "No asume que existen las bibliotecas C estándar y \"main\"." +msgstr "No enlaza la biblioteca D estándar en la compilación." #: d/lang.opt:358 msgid "Link the standard D library statically in the compilation." -msgstr "" +msgstr "Enlaza la biblioteca D estándar estáticamente en la compilación." #: d/lang.opt:362 msgid "Link the standard D library dynamically in the compilation." -msgstr "" +msgstr "Enlaza la biblioteca D estándar dinámicamente en la compilación." #: go/lang.opt:42 msgid "-fgo-c-header=\tWrite Go struct definitions to file as C code." @@ -8271,16 +8158,12 @@ msgstr "-mpointer-size=[no,32,short,64,long]\tEstablece el tamaña predeterminado de los punteros." #: config/mcore/mcore.opt:23 -#, fuzzy -#| msgid "Generate code for the M*Core M210" msgid "Generate code for the M*Core M210." -msgstr "Genera código para el M*Core M210" +msgstr "Genera código para el M*Core M210." #: config/mcore/mcore.opt:27 -#, fuzzy -#| msgid "Generate code for the M*Core M340" msgid "Generate code for the M*Core M340." -msgstr "Genera código para el M*Core M340" +msgstr "Genera código para el M*Core M340." #: config/mcore/mcore.opt:31 msgid "Force functions to be aligned to a 4 byte boundary." @@ -8650,7 +8533,7 @@ #: config/m68k/m68k.opt:147 msgid "Use 32-bit offsets in jump tables rather than 16-bit offsets." -msgstr "" +msgstr "Usa desplazamientos de 32 bits en las tablas de saltos en lugar de desplazamientos de 16 bits." #: config/m68k/m68k.opt:151 msgid "Do not use the bit-field instructions." @@ -8761,11 +8644,11 @@ #: config/riscv/riscv.opt:114 msgid "Take advantage of linker relaxations to reduce the number of instructions required to materialize symbol addresses." -msgstr "" +msgstr "Aprovecha los descansos del enlazador para reducir el número de instrucciones requeridas para materializar direcciones de símbolos." #: config/riscv/riscv.opt:133 msgid "Emit RISC-V ELF attribute." -msgstr "" +msgstr "Emite el atributo ELF de RISC-V." #: config/m32c/m32c.opt:23 msgid "-msim\tUse simulator runtime." Index: gcc/po/ChangeLog =================================================================== --- a/src/gcc/po/ChangeLog (.../tags/gcc_9_2_0_release) +++ b/src/gcc/po/ChangeLog (.../branches/gcc-9-branch) @@ -1,3 +1,23 @@ +2019-10-11 Joseph Myers + + * fi.po: Update. + +2019-09-30 Joseph Myers + + * es.po: Update. + +2019-08-31 Joseph Myers + + * es.po: Update. + +2019-08-28 Joseph Myers + + * es.po: Update. + +2019-08-23 Joseph Myers + + * zh_CN.po: Update. + 2019-08-12 Release Manager * GCC 9.2.0 released. Index: gcc/po/fi.po =================================================================== --- a/src/gcc/po/fi.po (.../tags/gcc_9_2_0_release) +++ b/src/gcc/po/fi.po (.../branches/gcc-9-branch) @@ -33,7 +33,7 @@ "Project-Id-Version: gcc 9.1.0\n" "Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n" "POT-Creation-Date: 2019-05-02 20:28+0000\n" -"PO-Revision-Date: 2019-05-29 18:58+0300\n" +"PO-Revision-Date: 2019-10-11 20:03+0300\n" "Last-Translator: Lauri Nurmi \n" "Language-Team: Finnish \n" "Language: fi\n" @@ -67,9 +67,9 @@ msgstr "lähdetiedostoa %s ei löydy" #: collect2.c:1632 -#, fuzzy, c-format +#, c-format msgid "collect2 version %s\n" -msgstr "gcc-versio %s %s\n" +msgstr "collect2-versio %s\n" #: collect2.c:1737 #, c-format @@ -118,9 +118,9 @@ msgstr "const-/kopioinnin-eteneminen poistettu käytöstä" #: diagnostic.c:145 -#, fuzzy, c-format +#, c-format msgid "%s: all warnings being treated as errors" -msgstr "Käsittele kaikki varoitukset virheinä" +msgstr "%s: kaikki varoitukset käsitellään virheinä" #: diagnostic.c:150 #, c-format @@ -6142,9 +6142,8 @@ msgstr "gfortran ei tue valitsinta -E ilman valitsinta -cpp" #: objc/lang-specs.h:30 objc/lang-specs.h:41 -#, fuzzy msgid "GNU Objective C no longer supports traditional compilation" -msgstr "GCC ei enää tue valitsinta -traditional ilman valitsinta -E" +msgstr "GNU Objective C ei enää tue perinteistä kääntämistä" #: objc/lang-specs.h:55 msgid "objc-cpp-output is deprecated; please use objective-c-cpp-output instead" @@ -6688,9 +6687,8 @@ msgstr "Noudata ISO Fortran 95 -standardia" #: fortran/lang.opt:827 -#, fuzzy msgid "Conform to nothing in particular." -msgstr "Älä noudata mitään erityisesti" +msgstr "Älä noudata mitään erityisesti." #: fortran/lang.opt:831 msgid "Accept extensions to support legacy code." @@ -6732,24 +6730,20 @@ msgstr "-isystem \tLisää järjestelmän include-polun alkuun" #: c-family/c.opt:217 -#, fuzzy msgid "Generate make dependencies." -msgstr "Luo make-riippuvuudet" +msgstr "Luo make-riippuvuudet." #: c-family/c.opt:221 -#, fuzzy msgid "Generate make dependencies and compile." -msgstr "Luo make-riippuvuudet ja käännä" +msgstr "Luo make-riippuvuudet ja käännä." #: c-family/c.opt:225 -#, fuzzy msgid "-MF \tWrite dependency output to the given file." -msgstr "Kirjoita riippuvuustuloste annettuun tiedostoon" +msgstr "-MF \tKirjoita riippuvuustuloste annettuun tiedostoon." #: c-family/c.opt:229 -#, fuzzy msgid "Treat missing header files as generated files." -msgstr "Käsittele puuttuvia otsikkotiedostoja luotavina tiedostoina" +msgstr "Käsittele puuttuvia otsikkotiedostoja luotavina tiedostoina." #: c-family/c.opt:233 msgid "Like -M but ignore system header files." @@ -6773,9 +6767,8 @@ msgstr "" #: c-family/c.opt:253 -#, fuzzy msgid "Do not generate #line directives." -msgstr "Älä luo #line-direktiivejä" +msgstr "Älä luo #line-direktiivejä." #: c-family/c.opt:257 #, fuzzy @@ -6817,11 +6810,9 @@ msgid "Enable most warning messages." msgstr "Subject: Fetchmailin varoitus liian suuresta viestistä" -# vähän fuzzy #: c-family/c.opt:308 -#, fuzzy msgid "Warn on any use of alloca." -msgstr "Varoita pragmain väärästä käytöstä." +msgstr "Varoita kaikesta allocan käytöstä." #: c-family/c.opt:312 #, fuzzy @@ -6931,9 +6922,8 @@ #: c-family/c.opt:1369 c-family/c.opt:1373 c-family/c.opt:1377 #: c-family/c.opt:1381 c-family/c.opt:1385 c-family/c.opt:1389 #: config/i386/i386.opt:967 -#, fuzzy msgid "Deprecated in GCC 9. This switch has no effect." -msgstr "Vanhentunut. Tämä valitsin ei vaikuta mihinkään." +msgstr "Vanhentunut GCC 9:ssä. Tämä valitsin ei vaikuta mihinkään." #: c-family/c.opt:429 msgid "Warn about variables that might be changed by \"longjmp\" or \"vfork\"." @@ -6964,9 +6954,8 @@ msgstr "Varoita kun kaikki muodostimet ja hajottimet ovat yksityisiä." #: c-family/c.opt:461 -#, fuzzy msgid "Warn about dangling else." -msgstr "Varoita implisiittisistä funktioesittelyistä." +msgstr "Varoita orvosta elsestä." #: c-family/c.opt:465 msgid "Warn about __TIME__, __DATE__ and __TIMESTAMP__ usage." @@ -7119,9 +7108,8 @@ msgstr "Varoita tyyppimääreiden huomiotta jättämisestä." #: c-family/c.opt:622 -#, fuzzy msgid "Warn whenever attributes are ignored." -msgstr "Varoita tyyppimääreiden huomiotta jättämisestä." +msgstr "Varoita attribuuttien huomiotta jättämisestä." #: c-family/c.opt:626 #, fuzzy @@ -7196,9 +7184,8 @@ msgstr "" #: c-family/c.opt:701 -#, fuzzy msgid "Warn when a logical operator is suspiciously always evaluating to true or false." -msgstr "Varoita vertailusta, joka on aina tosi tai aina epätosi." +msgstr "Varoita, kun looginen operaattori on aina tosi tai aina epätosi." #: c-family/c.opt:705 msgid "Warn when logical not is used on the left hand side operand of a comparison." @@ -7429,9 +7416,8 @@ msgstr "Varoita pakatuista bittikentistä, joiden siirrososoite vaihtui GCC 4.4:ssä" #: c-family/c.opt:955 -#, fuzzy msgid "Warn about possibly missing parentheses." -msgstr "Varoita mahdollisesti puuttuvista sulkeista" +msgstr "Varoita mahdollisesti puuttuvista sulkeista." #: c-family/c.opt:963 msgid "Warn about calling std::move on a local object in a return statement preventing copy elision." @@ -7975,9 +7961,8 @@ msgstr "Luokittelematon lause IF-lauseessa kohdassa %C" #: c-family/c.opt:1681 -#, fuzzy msgid "Recognize C++ keywords like \"compl\" and \"xor\"." -msgstr "Tunnista C++:n avainsanat kuten ”compl” ja ”xor”" +msgstr "Tunnista C++:n avainsanat kuten ”compl” ja ”xor”." #: c-family/c.opt:1692 msgid "Look for and use PCH files even when preprocessing." @@ -8732,9 +8717,8 @@ msgstr "" #: config/mcore/mcore.opt:75 -#, fuzzy msgid "Always treat bitfields as int-sized." -msgstr "Käsittele bittikenttiä aina int-kokoisina" +msgstr "Käsittele bittikenttiä aina int-kokoisina." #: config/linux-android.opt:23 msgid "Generate code for the Android platform." @@ -19730,7 +19714,7 @@ #: cgraphunit.c:976 c/c-decl.c:11507 #, fuzzy, gcc-internal-format msgid "%q+F used but never defined" -msgstr "nimike %q+D määritelty mutta käytettämättä" +msgstr "nimike %q+D määritelty mutta käyttämättä" #: cgraphunit.c:978 c/c-decl.c:11517 #, fuzzy, gcc-internal-format @@ -29294,7 +29278,7 @@ #: c-family/c-warn.c:2021 #, gcc-internal-format msgid "label %q+D defined but not used" -msgstr "nimike %q+D määritelty mutta käytettämättä" +msgstr "nimike %q+D määritelty mutta käyttämättä" #: c-family/c-warn.c:2023 #, gcc-internal-format @@ -68642,7 +68626,7 @@ #, fuzzy #~ msgid "variable %q+D set but not used" -#~ msgstr "nimike %q+D määritelty mutta käytettämättä" +#~ msgstr "nimike %q+D määritelty mutta käyttämättä" #~ msgid "jump to label %q+D" #~ msgstr "hyppy nimiöön %q+D" @@ -68659,7 +68643,7 @@ #, fuzzy #~ msgid "parameter %q+D set but not used" -#~ msgstr "nimike %q+D määritelty mutta käytettämättä" +#~ msgstr "nimike %q+D määritelty mutta käyttämättä" #~ msgid "%q+D declared here" #~ msgstr "%q+D esitelty täällä" Index: gcc/po/zh_CN.po =================================================================== --- a/src/gcc/po/zh_CN.po (.../tags/gcc_9_2_0_release) +++ b/src/gcc/po/zh_CN.po (.../branches/gcc-9-branch) @@ -4,6 +4,7 @@ # Meng Jie , 2005-2014. # Jeff Bai , 2015. # Mingye Wang (Arthur2e5) , 2015, 2016. +# Boyuan Yang <073plan@gmail.com>, 2019. # # Fellow translatiors: # Many of the fuzzy strings are caused by an addition of a period (".") @@ -30,11 +31,11 @@ # msgid "" msgstr "" -"Project-Id-Version: gcc 6.1.0\n" +"Project-Id-Version: gcc 9.1.0\n" "Report-Msgid-Bugs-To: https://gcc.gnu.org/bugs/\n" "POT-Creation-Date: 2019-05-02 20:28+0000\n" -"PO-Revision-Date: 2016-04-30 17:13-0400\n" -"Last-Translator: Mingye Wang (Arthur2e5) \n" +"PO-Revision-Date: 2019-08-19 15:13-0400\n" +"Last-Translator: Boyuan Yang <073plan@gmail.com>\n" "Language-Team: Chinese (simplified) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" @@ -41,9 +42,8 @@ "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" -"X-Poedit-Basepath: C:/MSYS/source/gcc-4.6.0/gcc\n" "Plural-Forms: nplurals=1; plural=0;\n" -"X-Generator: Poedit 1.8.7\n" +"X-Generator: Poedit 2.2.3\n" #: cfgrtl.c:2705 msgid "flow control insn inside a basic block" @@ -478,12 +478,10 @@ msgstr " -o <文件> 输出到 <文件>。\n" #: gcc.c:3597 -#, fuzzy -#| msgid " -pie Create a position independent executable.\n" msgid "" " -pie Create a dynamically linked position independent\n" " executable.\n" -msgstr " -pie 生成位置无关可执行文件。\n" +msgstr " -pie 生成动态链接的位置无关可执行文件。\n" #: gcc.c:3599 msgid " -shared Create a shared library.\n" @@ -668,10 +666,9 @@ msgstr " rewrite [选项] <目录> 覆写测试覆盖率文件内容\n" #: gcov-tool.c:270 -#, fuzzy, c-format -#| msgid " -n, --normalize Normalize the profile\n" +#, c-format msgid " -n, --normalize Normalize the profile\n" -msgstr " -n, --normalize 归一化配置\n" +msgstr " -n, --normalize 归一化配置\n" #: gcov-tool.c:272 #, c-format @@ -774,10 +771,9 @@ "%s。\n" #: gcov-tool.c:528 -#, fuzzy, c-format -#| msgid "Copyright %s 2014-2016 Free Software Foundation, Inc.\n" +#, c-format msgid "Copyright %s 2019 Free Software Foundation, Inc.\n" -msgstr "版权所有 %s 2014-2015 自由软件基金会。\n" +msgstr "版权所有 %s 2019 自由软件基金会。\n" #: gcov-tool.c:531 gcov.c:925 #, c-format @@ -791,15 +787,12 @@ "包括没有适销性和某一专用目的下的适用性担保。\n" #: gcov.c:885 -#, fuzzy, c-format -#| msgid "" -#| "Usage: gcov [OPTION]... SOURCE|OBJ...\n" -#| "\n" +#, c-format msgid "" "Usage: gcov [OPTION...] SOURCE|OBJ...\n" "\n" msgstr "" -"用法:gconv [选项]... 源文件|对象文件...\n" +"用法:gconv [选项...] 源文件|对象文件...\n" "\n" #: gcov.c:886 @@ -844,22 +837,19 @@ msgstr " -h, --help 打印此帮助并退出\n" #: gcov.c:894 -#, fuzzy, c-format -#| msgid " -n, --no-output Do not create an output file\n" +#, c-format msgid " -i, --json-format Output JSON intermediate format into .gcov.json.gz file\n" -msgstr " -n, --no-output 不创建输出文件\n" +msgstr " -i, --json-format 以 JSON 中间格式输出至 .gcov.json.gz 文件\n" #: gcov.c:895 -#, fuzzy, c-format -#| msgid " -m, --demangled-names Output demangled function names\n" +#, c-format msgid " -j, --human-readable Output human readable numbers\n" -msgstr " -m, --demangled-names 输出解码后的函数名\n" +msgstr " -j, --human-readable 输出人类可读的数字\n" #: gcov.c:896 -#, fuzzy, c-format -#| msgid " -n, --no-output Do not create an output file\n" +#, c-format msgid " -k, --use-colors Emit colored output\n" -msgstr " -n, --no-output 不创建输出文件\n" +msgstr " -k, --use-colors 使用带颜色的输出\n" #: gcov.c:897 #, c-format @@ -904,10 +894,9 @@ msgstr " -s, --source-prefix 目录 要略去的来源前缀\n" #: gcov.c:906 -#, fuzzy, c-format -#| msgid " -n, --no-output Do not create an output file\n" +#, c-format msgid " -t, --stdout Output to stdout instead of a file\n" -msgstr " -n, --no-output 不创建输出文件\n" +msgstr " -t, --stdout 输出至标准输出而非文件\n" #: gcov.c:907 #, c-format @@ -920,10 +909,9 @@ msgstr " -v, --version 打印版本号并退出\n" #: gcov.c:909 -#, fuzzy, c-format -#| msgid " -v, --verbose Verbose mode\n" +#, c-format msgid " -w, --verbose Print verbose informations\n" -msgstr " -v, --verbo se 输出更多信息\n" +msgstr " -w, --verbose 输出详细信息\n" #: gcov.c:910 #, fuzzy, c-format @@ -937,10 +925,9 @@ msgstr "gcov %s%s\n" #: gcov.c:1250 -#, fuzzy, c-format -#| msgid "Treat the input file as already preprocessed" +#, c-format msgid "'%s' file is already processed\n" -msgstr "将输入文件当作已经预处理过的" +msgstr "" #: gcov.c:1364 #, c-format @@ -968,16 +955,14 @@ msgstr "\n" #: gcov.c:1489 -#, fuzzy, c-format -#| msgid "%s: Cannot open output file: %s\n" +#, c-format msgid "Cannot open JSON output file %s\n" -msgstr "%s:无法打开输出文件:%s\n" +msgstr "无法打开 JSON 输出文件 %s\n" #: gcov.c:1497 -#, fuzzy, c-format -#| msgid "Error writing output file '%s'\n" +#, c-format msgid "Error writing JSON output file %s\n" -msgstr "写入到输出文件 '%s' 时出错\n" +msgstr "写入到 JSON 输出文件 %s 时出错\n" #: gcov.c:1664 #, c-format @@ -3473,8 +3458,9 @@ msgstr "无效的 move 指令:" #: config/avr/avr.c:6279 +#, fuzzy msgid "bad shift insn:" -msgstr "错误的 shift 指令" +msgstr "错误的 shift 指令:" #: config/avr/avr.c:6387 config/avr/avr.c:6868 config/avr/avr.c:7283 msgid "internal compiler error. Incorrect shift:" @@ -4204,10 +4190,9 @@ msgstr "无效 %%q 值" #: config/rs6000/rs6000.c:21141 -#, fuzzy, c-format -#| msgid "invalid %%J value" +#, c-format msgid "invalid %%t value" -msgstr "无效 %%J 值" +msgstr "无效 %%t 值" #: config/rs6000/rs6000.c:21158 #, c-format @@ -4225,21 +4210,19 @@ msgstr "无效 %%v 值" #: config/rs6000/rs6000.c:21234 -#, fuzzy, c-format -#| msgid "invalid %%J value" +#, c-format msgid "invalid %%V value" -msgstr "无效 %%J 值" +msgstr "无效 %%V 值" #: config/rs6000/rs6000.c:21251 config/xtensa/xtensa.c:2439 #, c-format msgid "invalid %%x value" -msgstr "无效的 %%x 值" +msgstr "无效 %%x 值" #: config/rs6000/rs6000.c:21308 -#, fuzzy, c-format -#| msgid "invalid %%J value" +#, c-format msgid "invalid %%z value" -msgstr "无效 %%J 值" +msgstr "无效 %%z 值" #: config/rs6000/rs6000.c:21377 #, c-format @@ -4626,7 +4609,7 @@ #: c/c-objc-common.c:213 msgid "({anonymous})" -msgstr "{{匿名}}" +msgstr "({匿名})" #. If we have #. declaration-specifiers declarator decl-specs @@ -4884,7 +4867,7 @@ #: cp/error.c:1186 msgid " " -msgstr "<返回值>" +msgstr "<返回值> " #: cp/error.c:1201 msgid "{anonymous}" @@ -5196,9 +5179,8 @@ msgstr "‘%s’和‘%s’用作内建函数‘%s’的参数" #: fortran/error.c:853 -#, fuzzy msgid "Fortran 2018 deleted feature:" -msgstr "遵循 ISO Fortran 2008 标准" +msgstr "Fortran 2018 删除的特性:" #: fortran/error.c:855 #, fuzzy @@ -5207,7 +5189,7 @@ #: fortran/error.c:857 msgid "Fortran 2018:" -msgstr "" +msgstr "Fortran 2018:" #: fortran/error.c:859 #, fuzzy @@ -5215,9 +5197,8 @@ msgstr "遵循 ISO Fortran 2008 标准" #: fortran/error.c:865 -#, fuzzy msgid "GNU Extension:" -msgstr "使用 PE 格式的 GNU 扩展来对齐 common 数据" +msgstr "GNU 扩展:" #: fortran/error.c:867 #, fuzzy @@ -5230,9 +5211,8 @@ msgstr "对声明中的过时用法给出警告" #: fortran/error.c:871 -#, fuzzy msgid "Deleted feature:" -msgstr "%L处的 H 格式限定符已在 Fortran 95 中被删除" +msgstr "删除的特性:" #: fortran/expr.c:3632 msgid "array assignment" @@ -5919,10 +5899,8 @@ msgstr "%qE属性在此平台上不受支持" #: config/darwin.h:170 -#, fuzzy -#| msgid "-fpic is not supported" msgid "rdynamic is not supported" -msgstr "不支持 -fpic" +msgstr "不支持 rdynamic" #: config/darwin.h:258 msgid "-current_version only allowed with -dynamiclib" @@ -6307,16 +6285,12 @@ msgstr "对长度为 0 的格式字符串给出警告" #: fortran/lang.opt:354 -#, fuzzy -#| msgid "Enable preprocessing" msgid "Enable preprocessing." -msgstr "启用预处理" +msgstr "启用预处理。" #: fortran/lang.opt:362 -#, fuzzy -#| msgid "Disable preprocessing" msgid "Disable preprocessing." -msgstr "禁用预处理" +msgstr "禁用预处理。" #: fortran/lang.opt:370 #, fuzzy @@ -6922,10 +6896,8 @@ msgstr "不生成 #line 指令" #: c-family/c.opt:257 -#, fuzzy -#| msgid "-U\tUndefine " msgid "-U\tUndefine ." -msgstr "-U<宏>\t取消定义宏" +msgstr "-U<宏>\t取消定义<宏>。" #: c-family/c.opt:261 #, fuzzy @@ -7116,10 +7088,8 @@ msgstr "对可能嵌套的注释和长度超过一个物理行长的 C++ 注释给出警告" #: c-family/c.opt:437 -#, fuzzy -#| msgid "Synonym for -Wcomment" msgid "Synonym for -Wcomment." -msgstr "-Wcomment 的同义词" +msgstr "-Wcomment 的同义词。" #: c-family/c.opt:441 #, fuzzy @@ -8054,16 +8024,12 @@ #: c-family/c.opt:1282 c-family/c.opt:1530 c-family/c.opt:1854 #: c-family/c.opt:1858 c-family/c.opt:1874 -#, fuzzy -#| msgid "No longer supported" msgid "No longer supported." -msgstr "不再受支持" +msgstr "不再支持。" #: c-family/c.opt:1286 -#, fuzzy -#| msgid "Recognize the \"asm\" keyword" msgid "Recognize the \"asm\" keyword." -msgstr "识别“asm”关键字" +msgstr "识别“asm”关键字。" #: c-family/c.opt:1294 #, fuzzy @@ -8197,10 +8163,8 @@ msgstr "不假定标准 C 库和“main”存在" #: c-family/c.opt:1505 -#, fuzzy -#| msgid "Recognize GNU-defined keywords" msgid "Recognize GNU-defined keywords." -msgstr "识别 GNU 定义的关键字" +msgstr "识别 GNU 定义的关键字。" #: c-family/c.opt:1509 #, fuzzy @@ -8495,10 +8459,8 @@ msgstr "未指定“signed”或“unsigned”时默认位段为无符号的" #: c-family/c.opt:1834 ada/gcc-interface/lang.opt:85 -#, fuzzy -#| msgid "Make \"char\" unsigned by default" msgid "Make \"char\" unsigned by default." -msgstr "使“char”类型默认为无符号" +msgstr "使“char”类型默认为无符号。" #: c-family/c.opt:1838 #, fuzzy @@ -8759,14 +8721,12 @@ msgstr "遵循 ISO 1990 C 标准,也支持 GNU 扩展" #: c-family/c.opt:2059 -#, fuzzy msgid "Deprecated in favor of -std=gnu++11." -msgstr "已弃用,请改用 -std=gnu99" +msgstr "已弃用,请改用 -std=gnu++11。" #: c-family/c.opt:2063 -#, fuzzy msgid "Deprecated in favor of -std=gnu++14." -msgstr "已弃用,请改用 -std=gnu99" +msgstr "已弃用,请改用 -std=gnu++14。" #: c-family/c.opt:2067 #, fuzzy @@ -8775,9 +8735,8 @@ msgstr "遵循 ISO 1990 C 标准,也支持 GNU 扩展" #: c-family/c.opt:2071 -#, fuzzy msgid "Deprecated in favor of -std=gnu++17." -msgstr "已弃用,请改用 -std=gnu99" +msgstr "已弃用,请改用 -std=gnu+17。" #: c-family/c.opt:2075 #, fuzzy @@ -8798,9 +8757,8 @@ msgstr "遵循 ISO 1990 C 标准,也支持 GNU 扩展" #: c-family/c.opt:2087 -#, fuzzy msgid "Deprecated in favor of -std=gnu11." -msgstr "已弃用,请改用 -std=gnu99" +msgstr "已弃用,请改用 -std=gnu11。" #: c-family/c.opt:2091 c-family/c.opt:2095 #, fuzzy @@ -8845,16 +8803,12 @@ msgstr "已弃用,为 -std=iso9899:1999 所取代" #: c-family/c.opt:2150 -#, fuzzy -#| msgid "Enable traditional preprocessing" msgid "Enable traditional preprocessing." -msgstr "启用传统预处理" +msgstr "启用传统预处理。" #: c-family/c.opt:2154 -#, fuzzy -#| msgid "-trigraphs\tSupport ISO C trigraphs" msgid "-trigraphs\tSupport ISO C trigraphs." -msgstr "-trigraphs\t支持 ISO C 三元符" +msgstr "-trigraphs\t支持 ISO C 三元符。" #: c-family/c.opt:2158 #, fuzzy @@ -9004,7 +8958,7 @@ #: d/lang.opt:242 msgid "Ignore unsupported pragmas." -msgstr "" +msgstr "忽略不支持的 pragma。" #: d/lang.opt:246 #, fuzzy @@ -9272,7 +9226,7 @@ #: config/linux-android.opt:23 msgid "Generate code for the Android platform." -msgstr "为 Android 操作系统生成代码。" +msgstr "为 Android 平台生成代码。" #: config/mmix/mmix.opt:24 #, fuzzy @@ -9700,10 +9654,8 @@ msgstr "为 ColdFire v4e 生成代码" #: config/m68k/m68k.opt:123 -#, fuzzy -#| msgid "Specify the target CPU" msgid "Specify the target CPU." -msgstr "选择目标 CPU" +msgstr "指定目标 CPU。" #: config/m68k/m68k.opt:127 #, fuzzy @@ -11831,10 +11783,8 @@ msgstr "为 TDA 区域合格的数据设置最大尺寸" #: config/v850/v850.opt:82 -#, fuzzy -#| msgid "Do not enforce strict alignment" msgid "Do not enforce strict alignment." -msgstr "不强制严格对齐" +msgstr "不强制严格对齐。" #: config/v850/v850.opt:86 #, fuzzy @@ -11842,22 +11792,16 @@ msgstr "置放跳跃式表格用于开关叙述进入.data 区段而非.code 区段" #: config/v850/v850.opt:93 -#, fuzzy -#| msgid "Compile for the v850 processor" msgid "Compile for the v850 processor." -msgstr "为 v850 处理器编译" +msgstr "为 v850 处理器编译。" #: config/v850/v850.opt:97 -#, fuzzy -#| msgid "Compile for the v850e processor" msgid "Compile for the v850e processor." -msgstr "为 v850e 处理器编译" +msgstr "为 v850e 处理器编译。" #: config/v850/v850.opt:101 -#, fuzzy -#| msgid "Compile for the v850e1 processor" msgid "Compile for the v850e1 processor." -msgstr "为 v850e1 处理器编译" +msgstr "为 v850e1 处理器编译。" #: config/v850/v850.opt:105 #, fuzzy @@ -11866,21 +11810,16 @@ msgstr "为 v850e1 的 v850es 变种编译" #: config/v850/v850.opt:109 -#, fuzzy -#| msgid "Compile for the v850e2 processor" msgid "Compile for the v850e2 processor." -msgstr "为 v850e2 处理器编译" +msgstr "为 v850e2 处理器编译。" #: config/v850/v850.opt:113 -#, fuzzy -#| msgid "Compile for the v850e2v3 processor" msgid "Compile for the v850e2v3 processor." -msgstr "为 v850e2v3 处理器编译" +msgstr "为 v850e2v3 处理器编译。" #: config/v850/v850.opt:117 -#, fuzzy msgid "Compile for the v850e3v5 processor." -msgstr "为 v850e2v3 处理器编译" +msgstr "为 v850e2v3 处理器编译。" #: config/v850/v850.opt:124 #, fuzzy @@ -11919,9 +11858,8 @@ msgstr "启用使用 RX FPU 指令。这是默认值。" #: config/v850/v850.opt:155 -#, fuzzy msgid "Enable support for the old GCC ABI." -msgstr "启用对巨型对象的支持" +msgstr "启用对旧有 GCC ABI 的支持。" #: config/v850/v850.opt:159 msgid "Support alignments of up to 64-bits." @@ -11940,26 +11878,20 @@ msgstr "支持传统多线程" #: config/lynx.opt:27 -#, fuzzy -#| msgid "Use shared libraries" msgid "Use shared libraries." -msgstr "使用共享库" +msgstr "使用共享库。" #: config/lynx.opt:31 -#, fuzzy -#| msgid "Support multi-threading" msgid "Support multi-threading." -msgstr "支持多线程" +msgstr "支持多线程。" #: config/nvptx/nvptx.opt:22 config/gcn/gcn.opt:47 -#, fuzzy msgid "Generate code for a 32-bit ABI." -msgstr "生成 32 位 SHmedia 代码" +msgstr "为 32 位 ABI 生成代码。" #: config/nvptx/nvptx.opt:26 config/gcn/gcn.opt:51 -#, fuzzy msgid "Generate code for a 64-bit ABI." -msgstr "生成 64 位代码" +msgstr "为 64 位 ABI 生成代码。" #: config/nvptx/nvptx.opt:30 #, fuzzy @@ -12034,9 +11966,8 @@ msgstr "对待数据参考作为接近,far 或中。中是缺省" #: config/cr16/cr16.opt:42 -#, fuzzy msgid "Generate code for CR16C architecture." -msgstr "为 Android 操作系统生成代码。" +msgstr "为 CR16C 架构生成代码。" #: config/cr16/cr16.opt:46 #, fuzzy @@ -12157,22 +12088,16 @@ msgstr "" #: config/m32r/m32r.opt:34 -#, fuzzy -#| msgid "Compile for the m32rx" msgid "Compile for the m32rx." -msgstr "为 m32rx 编译" +msgstr "为 m32rx 编译。" #: config/m32r/m32r.opt:38 -#, fuzzy -#| msgid "Compile for the m32r2" msgid "Compile for the m32r2." -msgstr "为 m32r2 编译" +msgstr "为 m32r2 编译。" #: config/m32r/m32r.opt:42 -#, fuzzy -#| msgid "Compile for the m32r" msgid "Compile for the m32r." -msgstr "为 m32r 编译" +msgstr "为 m32r 编译。" #: config/m32r/m32r.opt:46 #, fuzzy @@ -12259,16 +12184,12 @@ msgstr "指定 TPF-OS 的主对象" #: config/s390/s390.opt:48 -#, fuzzy -#| msgid "31 bit ABI" msgid "31 bit ABI." -msgstr "31 位 ABI" +msgstr "31 位 ABI。" #: config/s390/s390.opt:52 -#, fuzzy -#| msgid "64 bit ABI" msgid "64 bit ABI." -msgstr "64 位 ABI" +msgstr "64 位 ABI。" #: config/s390/s390.opt:120 #, fuzzy @@ -12284,9 +12205,8 @@ #: config/s390/s390.opt:128 #, fuzzy -#| msgid "ESA/390 architecture" msgid "ESA/390 architecture." -msgstr "ESA/390 结构" +msgstr "ESA/390 结构。" #: config/s390/s390.opt:132 #, fuzzy @@ -12739,9 +12659,8 @@ #: config/sparc/sparc.opt:30 config/sparc/sparc.opt:34 #: config/visium/visium.opt:37 #, fuzzy -#| msgid "Use hardware FP" msgid "Use hardware FP." -msgstr "使用硬件浮点单元" +msgstr "使用硬件浮点单元。" #: config/sparc/sparc.opt:38 config/visium/visium.opt:41 #, fuzzy @@ -12785,10 +12704,8 @@ msgstr "启用 clip 指令" #: config/sparc/sparc.opt:66 -#, fuzzy -#| msgid "Compile for V8+ ABI" msgid "Compile for V8+ ABI." -msgstr "为 V8+ ABI 编译" +msgstr "为 V8+ ABI 编译。" #: config/sparc/sparc.opt:70 #, fuzzy @@ -12851,16 +12768,12 @@ msgstr "指针是 32 位" #: config/sparc/sparc.opt:118 -#, fuzzy -#| msgid "Use 64-bit ABI" msgid "Use 64-bit ABI." -msgstr "使用 64 位 ABI" +msgstr "使用 64 位 ABI。" #: config/sparc/sparc.opt:122 -#, fuzzy -#| msgid "Use 32-bit ABI" msgid "Use 32-bit ABI." -msgstr "使用 32 位 ABI" +msgstr "使用 32 位 ABI。" #: config/sparc/sparc.opt:126 #, fuzzy @@ -12967,10 +12880,8 @@ msgstr "为 32 位指针编译" #: config/rs6000/aix64.opt:32 config/rs6000/linux64.opt:28 -#, fuzzy -#| msgid "Select code model" msgid "Select code model." -msgstr "选择代码模型" +msgstr "选择代码模型。" #: config/rs6000/aix64.opt:49 #, fuzzy @@ -13033,10 +12944,8 @@ msgstr "使用扩展 PowerPC V2.05 通用寄存器浮点转移指令" #: config/rs6000/rs6000.opt:153 -#, fuzzy -#| msgid "Use AltiVec instructions" msgid "Use AltiVec instructions." -msgstr "使用 AltiVec 指令" +msgstr "使用 AltiVec 指令。" #: config/rs6000/rs6000.opt:157 #, fuzzy @@ -13242,16 +13151,12 @@ msgstr "不使用位段指令" #: config/rs6000/rs6000.opt:358 -#, fuzzy -#| msgid "Use the ELFv1 ABI" msgid "Use the ELFv1 ABI." -msgstr "使用 ELFv1 ABI" +msgstr "使用 ELFv1 ABI。" #: config/rs6000/rs6000.opt:362 -#, fuzzy -#| msgid "Use the ELFv2 ABI" msgid "Use the ELFv2 ABI." -msgstr "使用 ELFv2 ABI" +msgstr "使用 ELFv2 ABI。" #: config/rs6000/rs6000.opt:382 #, fuzzy @@ -13477,10 +13382,8 @@ msgstr "假设所有可变参数函数都有原型" #: config/rs6000/sysv4.opt:103 -#, fuzzy -#| msgid "Use EABI" msgid "Use EABI." -msgstr "使用 EABI" +msgstr "使用 EABI。" #: config/rs6000/sysv4.opt:107 #, fuzzy @@ -13776,10 +13679,8 @@ msgstr "使用除法指令" #: config/or1k/or1k.opt:67 -#, fuzzy -#| msgid "Use the soft multiply emulation (default)" msgid "Use multiply emulation." -msgstr "使用软件模拟乘法(默认)" +msgstr "使用乘法模拟。" #: config/nios2/elf.opt:26 #, fuzzy @@ -66815,14 +66716,14 @@ msgstr "不包含子目录注释" #: fortran/scanner.c:336 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "Nonexistent include directory %qs" -msgstr "忽略不存在的目录“%s”\n" +msgstr "不存在的 include 目录 %qs" #: fortran/scanner.c:341 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qs is not a directory" -msgstr "不是目录" +msgstr "%qs 不是目录" #: fortran/scanner.c:744 #, fuzzy, gcc-internal-format, gfc-internal-format @@ -66893,9 +66794,9 @@ msgstr "%s:%d:无效的预处理指令" #: fortran/scanner.c:2471 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "Cannot open file %qs" -msgstr "无法打开文件 %s\n" +msgstr "无法打开文件 %qs" #: fortran/simplify.c:92 #, gcc-internal-format, gfc-internal-format @@ -69343,9 +69244,9 @@ msgstr "已弃用%<-mfused-madd%>;请改用%<-ffp-contract=%>" #: config/microblaze/microblaze.opt:87 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qs is deprecated; use -fstack-check" -msgstr "已弃用%qE:%s" +msgstr "%qs 已弃用;请换用 -fstack-check" #: config/microblaze/microblaze.opt:95 #, gcc-internal-format @@ -69356,9 +69257,9 @@ #: config/arc/arc.opt:349 config/arc/arc.opt:353 config/arc/arc.opt:357 #: config/arc/arc.opt:361 config/arc/arc.opt:364 config/arc/arc.opt:367 #: config/arc/arc.opt:384 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "%qs is deprecated" -msgstr "已弃用%qE" +msgstr "%qs 已弃用" #: lto/lang.opt:28 #, fuzzy, gcc-internal-format @@ -69392,9 +69293,9 @@ msgstr "未知的栈重用级别%qs" #: common.opt:1777 -#, fuzzy, gcc-internal-format +#, gcc-internal-format msgid "unknown IRA algorithm %qs" -msgstr "未知的 TLS 模型%qs" +msgstr "未知的 IRA 算法 %qs" #: common.opt:1790 #, fuzzy, gcc-internal-format @@ -69435,7 +69336,7 @@ #: common.opt:2530 #, gcc-internal-format msgid "unknown TLS model %qs" -msgstr "未知的 TLS 模型%qs" +msgstr "未知的 TLS 模型 %qs" #: common.opt:2862 #, fuzzy, gcc-internal-format Index: gcc/tree-ssa-forwprop.c =================================================================== --- a/src/gcc/tree-ssa-forwprop.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-ssa-forwprop.c (.../branches/gcc-9-branch) @@ -2496,6 +2496,8 @@ { int did_something; did_something = forward_propagate_into_comparison (&gsi); + if (maybe_clean_or_replace_eh_stmt (stmt, gsi_stmt (gsi))) + bitmap_set_bit (to_purge, bb->index); if (did_something == 2) cfg_changed = true; changed = did_something != 0; Index: gcc/ggc-page.c =================================================================== --- a/src/gcc/ggc-page.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/ggc-page.c (.../branches/gcc-9-branch) @@ -1016,6 +1016,8 @@ static void release_pages (void) { + size_t n1 = 0; + size_t n2 = 0; #ifdef USING_MADVISE page_entry *p, *start_p; char *start; @@ -1061,6 +1063,7 @@ else G.free_pages = p; G.bytes_mapped -= mapped_len; + n1 += len; continue; } prev = newprev; @@ -1092,6 +1095,7 @@ /* Don't count those pages as mapped to not touch the garbage collector unnecessarily. */ G.bytes_mapped -= len; + n2 += len; while (start_p != p) { start_p->discarded = true; @@ -1124,6 +1128,7 @@ } munmap (start, len); + n1 += len; G.bytes_mapped -= len; } @@ -1151,11 +1156,21 @@ { *gp = g->next; G.bytes_mapped -= g->alloc_size; + n1 += g->alloc_size; free (g->allocation); } else gp = &g->next; #endif + if (!quiet_flag && (n1 || n2)) + { + fprintf (stderr, " {GC"); + if (n1) + fprintf (stderr, " released %luk", (unsigned long)(n1 / 1024)); + if (n2) + fprintf (stderr, " madv_dontneed %luk", (unsigned long)(n2 / 1024)); + fprintf (stderr, "}"); + } } /* This table provides a fast way to determine ceil(log_2(size)) for @@ -2178,13 +2193,12 @@ return; timevar_push (TV_GC); - if (!quiet_flag) - fprintf (stderr, " {GC %luk -> ", (unsigned long) G.allocated / 1024); if (GGC_DEBUG_LEVEL >= 2) fprintf (G.debug_file, "BEGIN COLLECTING\n"); /* Zero the total allocated bytes. This will be recalculated in the sweep phase. */ + size_t allocated = G.allocated; G.allocated = 0; /* Release the pages we freed the last time we collected, but didn't @@ -2191,6 +2205,10 @@ reuse in the interim. */ release_pages (); + /* Output this later so we do not interfere with release_pages. */ + if (!quiet_flag) + fprintf (stderr, " {GC %luk -> ", (unsigned long) allocated / 1024); + /* Indicate that we've seen collections at this context depth. */ G.context_depth_collections = ((unsigned long)1 << (G.context_depth + 1)) - 1; @@ -2221,11 +2239,27 @@ fprintf (G.debug_file, "END COLLECTING\n"); } -/* Assume that all GGC memory is reachable and grow the limits for next collection. - With checking, trigger GGC so -Q compilation outputs how much of memory really is - reachable. */ +/* Return free pages to the system. */ void +ggc_trim () +{ + timevar_push (TV_GC); + G.allocated = 0; + sweep_pages (); + release_pages (); + if (!quiet_flag) + fprintf (stderr, " {GC trimmed to %luk, %luk mapped}", + (unsigned long) G.allocated / 1024, + (unsigned long) G.bytes_mapped / 1024); + timevar_pop (TV_GC); +} + +/* Assume that all GGC memory is reachable and grow the limits for next + collection. With checking, trigger GGC so -Q compilation outputs how much + of memory really is reachable. */ + +void ggc_grow (void) { if (!flag_checking) @@ -2556,6 +2590,9 @@ count_old_page_tables = G.by_depth_in_use; + if (fread (&d, sizeof (d), 1, f) != 1) + fatal_error (input_location, "cannot read PCH file: %m"); + /* We've just read in a PCH file. So, every object that used to be allocated is now free. */ clear_marks (); @@ -2584,8 +2621,6 @@ /* Allocate the appropriate page-table entries for the pages read from the PCH file. */ - if (fread (&d, sizeof (d), 1, f) != 1) - fatal_error (input_location, "can%'t read PCH file: %m"); for (i = 0; i < NUM_ORDERS; i++) { Index: gcc/ira.c =================================================================== --- a/src/gcc/ira.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/ira.c (.../branches/gcc-9-branch) @@ -5198,6 +5198,8 @@ int ira_max_point_before_emit; bool saved_flag_caller_saves = flag_caller_saves; enum ira_region saved_flag_ira_region = flag_ira_region; + unsigned int i; + int num_used_regs = 0; clear_bb_flags (); @@ -5213,12 +5215,17 @@ ira_conflicts_p = optimize > 0; + /* Determine the number of pseudos actually requiring coloring. */ + for (i = FIRST_PSEUDO_REGISTER; i < DF_REG_SIZE (df); i++) + num_used_regs += !!(DF_REG_USE_COUNT (i) + DF_REG_DEF_COUNT (i)); + /* If there are too many pseudos and/or basic blocks (e.g. 10K pseudos and 10K blocks or 100K pseudos and 1K blocks), we will use simplified and faster algorithms in LRA. */ lra_simple_p = (ira_use_lra_p - && max_reg_num () >= (1 << 26) / last_basic_block_for_fn (cfun)); + && num_used_regs >= (1 << 26) / last_basic_block_for_fn (cfun)); + if (lra_simple_p) { /* It permits to skip live range splitting in LRA. */ Index: gcc/tree-vect-stmts.c =================================================================== --- a/src/gcc/tree-vect-stmts.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-vect-stmts.c (.../branches/gcc-9-branch) @@ -3279,7 +3279,7 @@ if (!vectype_in) vectype_in = vectypes[i]; else if (vectypes[i] - && vectypes[i] != vectype_in) + && !types_compatible_p (vectypes[i], vectype_in)) { if (dump_enabled_p ()) dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, @@ -8276,7 +8276,9 @@ || alignment_support_scheme == dr_explicit_realign) && !compute_in_loop) { - msq = vect_setup_realignment (first_stmt_info, gsi, &realignment_token, + msq = vect_setup_realignment (first_stmt_info_for_drptr + ? first_stmt_info_for_drptr + : first_stmt_info, gsi, &realignment_token, alignment_support_scheme, NULL_TREE, &at_loop); if (alignment_support_scheme == dr_explicit_realign_optimized) Index: gcc/omp-simd-clone.c =================================================================== --- a/src/gcc/omp-simd-clone.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/omp-simd-clone.c (.../branches/gcc-9-branch) @@ -498,7 +498,6 @@ /* Adjust the function return type. */ if (orig_rettype == void_type_node) return NULL_TREE; - TREE_TYPE (fndecl) = build_distinct_type_copy (TREE_TYPE (fndecl)); t = TREE_TYPE (TREE_TYPE (fndecl)); if (INTEGRAL_TYPE_P (t) || POINTER_TYPE_P (t)) veclen = node->simdclone->vecsize_int; @@ -724,11 +723,7 @@ else new_reversed = void_list_node; } - - tree new_type = build_distinct_type_copy (TREE_TYPE (node->decl)); - TYPE_ARG_TYPES (new_type) = new_reversed; - TREE_TYPE (node->decl) = new_type; - + TYPE_ARG_TYPES (TREE_TYPE (node->decl)) = new_reversed; adjustments.release (); } args.release (); @@ -1164,6 +1159,7 @@ { push_cfun (DECL_STRUCT_FUNCTION (node->decl)); + TREE_TYPE (node->decl) = build_distinct_type_copy (TREE_TYPE (node->decl)); targetm.simd_clone.adjust (node); tree retval = simd_clone_adjust_return_type (node); @@ -1737,6 +1733,8 @@ simd_clone_adjust (n); else { + TREE_TYPE (n->decl) + = build_distinct_type_copy (TREE_TYPE (n->decl)); targetm.simd_clone.adjust (n); simd_clone_adjust_return_type (n); simd_clone_adjust_argument_types (n); Index: gcc/tree-ssa-scopedtables.c =================================================================== --- a/src/gcc/tree-ssa-scopedtables.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-ssa-scopedtables.c (.../branches/gcc-9-branch) @@ -298,7 +298,7 @@ && TREE_CODE (gimple_assign_lhs (stmt)) == SSA_NAME && (ao_ref_init (&ref, gimple_assign_rhs1 (stmt)), ref.base_alias_set = ref.ref_alias_set = tbaa_p ? -1 : 0, true) - && walk_non_aliased_vuses (&ref, vuse2, vuse_eq, NULL, NULL, + && walk_non_aliased_vuses (&ref, vuse2, true, vuse_eq, NULL, NULL, limit, vuse1) != NULL)) { if (insert) Index: gcc/symtab.c =================================================================== --- a/src/gcc/symtab.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/symtab.c (.../branches/gcc-9-branch) @@ -2328,10 +2328,18 @@ first place. */ if (VAR_P (decl) && DECL_HARD_REGISTER (decl)) return false; - /* FIXME: Builtins corresponding to real functions probably should have - symbol table entries. */ - if (TREE_CODE (decl) == FUNCTION_DECL && fndecl_built_in_p (decl)) - return false; + if (TREE_CODE (decl) == FUNCTION_DECL && !definition + && fndecl_built_in_p (decl)) + { + /* Builtins like those for most math functions have actual implementations + in libraries so make sure to output references into the symbol table to + make those libraries referenced. Note this is incomplete handling for + now and only covers math functions. */ + if (builtin_with_linkage_p (decl)) + return true; + else + return false; + } /* We have real symbol that should be in symbol table. However try to trim down the refernces to libraries bit more because linker will otherwise Index: gcc/tree-ssa-phiprop.c =================================================================== --- a/src/gcc/tree-ssa-phiprop.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-ssa-phiprop.c (.../branches/gcc-9-branch) @@ -338,8 +338,15 @@ && (!type || types_compatible_p (TREE_TYPE (gimple_assign_lhs (use_stmt)), type)) - /* We cannot replace a load that may throw or is volatile. */ - && !stmt_can_throw_internal (cfun, use_stmt))) + /* We cannot replace a load that may throw or is volatile. + For volatiles the transform can change the number of + executions if the load is inside a loop but the address + computations outside (PR91812). We could relax this + if we guard against that appropriately. For loads that can + throw we could relax things if the moved loads all are + known to not throw. */ + && !stmt_can_throw_internal (cfun, use_stmt) + && !gimple_has_volatile_ops (use_stmt))) continue; /* Check if we can move the loads. The def stmt of the virtual use Index: gcc/tree-object-size.c =================================================================== --- a/src/gcc/tree-object-size.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-object-size.c (.../branches/gcc-9-branch) @@ -890,6 +890,9 @@ else expr_object_size (osi, var, then_); + if (object_sizes[object_size_type][varno] == unknown[object_size_type]) + return reexamine; + if (TREE_CODE (else_) == SSA_NAME) reexamine |= merge_object_sizes (osi, var, else_, 0); else Index: gcc/ggc-none.c =================================================================== --- a/src/gcc/ggc-none.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/ggc-none.c (.../branches/gcc-9-branch) @@ -72,3 +72,8 @@ ggc_grow (void) { } + +void +ggc_trim (void) +{ +} Index: gcc/config.gcc =================================================================== --- a/src/gcc/config.gcc (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config.gcc (.../branches/gcc-9-branch) @@ -4700,14 +4700,12 @@ echo "#undef LINK_OS_EXTRA_SPEC32" echo "#define LINK_OS_EXTRA_SPEC32" \ "\"%(link_os_new_dtags)" \ - "-rpath $prefix/lib -rpath $at/lib" \ - "-L $prefix/lib -L $at/lib\"" + "-rpath $prefix/lib -rpath $at/lib\"" echo echo "#undef LINK_OS_EXTRA_SPEC64" echo "#define LINK_OS_EXTRA_SPEC64" \ "\"%(link_os_new_dtags)" \ - "-rpath $prefix/lib64 -rpath $at/lib64" \ - "-L $prefix/lib64 -L $at/lib64\"" + "-rpath $prefix/lib64 -rpath $at/lib64\"" echo echo "#undef LINK_OS_NEW_DTAGS_SPEC" echo "#define LINK_OS_NEW_DTAGS_SPEC" \ @@ -4720,7 +4718,10 @@ echo "#define MD_EXEC_PREFIX \"$at/bin/\"" echo echo "#undef MD_STARTFILE_PREFIX" - echo "#define MD_STARTFILE_PREFIX \"$at/lib/\"") \ + echo "#define MD_STARTFILE_PREFIX \"$prefix/lib/\"" + echo + echo "#undef MD_STARTFILE_PREFIX_1" + echo "#define MD_STARTFILE_PREFIX_1 \"$at/lib/\"") \ > advance-toolchain.h else echo "Unknown advance-toolchain $with_advance_toolchain" @@ -4743,7 +4744,7 @@ for which in arch tune; do eval "val=\$with_$which" case ${val} in - "" | native | z900 | z990 | z9-109 | z9-ec | z10 | z196 | zEC12 | z13 | z14 | arch5 | arch6 | arch7 | arch8 | arch9 | arch10 | arch11 | arch12 | arch13 ) + "" | native | z900 | z990 | z9-109 | z9-ec | z10 | z196 | zEC12 | z13 | z14 | z15 | arch5 | arch6 | arch7 | arch8 | arch9 | arch10 | arch11 | arch12 | arch13 ) # OK ;; *) Index: gcc/tree-switch-conversion.c =================================================================== --- a/src/gcc/tree-switch-conversion.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-switch-conversion.c (.../branches/gcc-9-branch) @@ -605,7 +605,9 @@ vec *constructor = m_constructors[num]; wide_int coeff_a, coeff_b; bool linear_p = contains_linear_function_p (constructor, &coeff_a, &coeff_b); - if (linear_p) + tree type; + if (linear_p + && (type = range_check_type (TREE_TYPE ((*constructor)[0].value)))) { if (dump_file && coeff_a.to_uhwi () > 0) fprintf (dump_file, "Linear transformation with A = %" PRId64 @@ -613,13 +615,12 @@ coeff_b.to_shwi ()); /* We must use type of constructor values. */ - tree t = unsigned_type_for (TREE_TYPE ((*constructor)[0].value)); gimple_seq seq = NULL; - tree tmp = gimple_convert (&seq, t, m_index_expr); - tree tmp2 = gimple_build (&seq, MULT_EXPR, t, - wide_int_to_tree (t, coeff_a), tmp); - tree tmp3 = gimple_build (&seq, PLUS_EXPR, t, tmp2, - wide_int_to_tree (t, coeff_b)); + tree tmp = gimple_convert (&seq, type, m_index_expr); + tree tmp2 = gimple_build (&seq, MULT_EXPR, type, + wide_int_to_tree (type, coeff_a), tmp); + tree tmp3 = gimple_build (&seq, PLUS_EXPR, type, tmp2, + wide_int_to_tree (type, coeff_b)); tree tmp4 = gimple_convert (&seq, TREE_TYPE (name), tmp3); gsi_insert_seq_before (&gsi, seq, GSI_SAME_STMT); load = gimple_build_assign (name, tmp4); @@ -1350,7 +1351,7 @@ entire)); } else - for (int i = end - 1; i >= start; i--) + for (int i = end - 1; i >= start; i--) output.safe_push (clusters[i]); end = start; @@ -1483,7 +1484,7 @@ unsigned int i, j, k; unsigned int count; - tree unsigned_index_type = unsigned_type_for (index_type); + tree unsigned_index_type = range_check_type (index_type); gimple_stmt_iterator gsi; gassign *shift_stmt; @@ -1793,7 +1794,8 @@ tree index_type = TREE_TYPE (index_expr); basic_block bb = gimple_bb (m_switch); - if (gimple_switch_num_labels (m_switch) == 1) + if (gimple_switch_num_labels (m_switch) == 1 + || range_check_type (index_type) == NULL_TREE) return false; /* Find the default case target label. */ Index: gcc/tree-cfg.c =================================================================== --- a/src/gcc/tree-cfg.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-cfg.c (.../branches/gcc-9-branch) @@ -9151,7 +9151,7 @@ tree *lhs, tree *rhs) { tree type = TREE_TYPE (index); - tree utype = unsigned_type_for (type); + tree utype = range_check_type (type); low = fold_convert (utype, low); high = fold_convert (utype, high); Index: gcc/passes.c =================================================================== --- a/src/gcc/passes.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/passes.c (.../branches/gcc-9-branch) @@ -1646,14 +1646,6 @@ } } -/* Because inlining might remove no-longer reachable nodes, we need to - keep the array visible to garbage collector to avoid reading collected - out nodes. */ -static int nnodes; -static GTY ((length ("nnodes"))) cgraph_node **order; - -#define uid_hash_t hash_set > - /* Hook called when NODE is removed and therefore should be excluded from order vector. DATA is a hash set with removed nodes. */ @@ -1660,10 +1652,33 @@ static void remove_cgraph_node_from_order (cgraph_node *node, void *data) { - uid_hash_t *removed_nodes = (uid_hash_t *)data; - removed_nodes->add (node->get_uid ()); + hash_set *removed_nodes = (hash_set *)data; + removed_nodes->add (node); } +/* Hook called when NODE is insert and therefore should be + excluded from removed_nodes. DATA is a hash set with removed nodes. */ + +static void +insert_cgraph_node_to_order (cgraph_node *node, void *data) +{ + hash_set *removed_nodes = (hash_set *)data; + removed_nodes->remove (node); +} + +/* Hook called when NODE is duplicated and therefore should be + excluded from removed_nodes. DATA is a hash set with removed nodes. */ + +static void +duplicate_cgraph_node_to_order (cgraph_node *node, cgraph_node *node2, + void *data) +{ + hash_set *removed_nodes = (hash_set *)data; + gcc_checking_assert (!removed_nodes->contains (node)); + removed_nodes->remove (node2); +} + + /* If we are in IPA mode (i.e., current_function_decl is NULL), call function CALLBACK for every function in the call graph. Otherwise, call CALLBACK on the current function. @@ -1677,26 +1692,30 @@ callback (cfun, data); else { - cgraph_node_hook_list *hook; - uid_hash_t removed_nodes; - gcc_assert (!order); - order = ggc_vec_alloc (symtab->cgraph_count); + hash_set removed_nodes; + unsigned nnodes = symtab->cgraph_count; + cgraph_node **order = XNEWVEC (cgraph_node *, nnodes); nnodes = ipa_reverse_postorder (order); for (i = nnodes - 1; i >= 0; i--) order[i]->process = 1; - hook = symtab->add_cgraph_removal_hook (remove_cgraph_node_from_order, - &removed_nodes); + cgraph_node_hook_list *removal_hook + = symtab->add_cgraph_removal_hook (remove_cgraph_node_from_order, + &removed_nodes); + cgraph_node_hook_list *insertion_hook + = symtab->add_cgraph_insertion_hook (insert_cgraph_node_to_order, + &removed_nodes); + cgraph_2node_hook_list *duplication_hook + = symtab->add_cgraph_duplication_hook (duplicate_cgraph_node_to_order, + &removed_nodes); for (i = nnodes - 1; i >= 0; i--) { cgraph_node *node = order[i]; /* Function could be inlined and removed as unreachable. */ - if (node == NULL || removed_nodes.contains (node->get_uid ())) + if (node == NULL || removed_nodes.contains (node)) continue; - /* Allow possibly removed nodes to be garbage collected. */ - order[i] = NULL; node->process = 0; if (node->has_gimple_body_p ()) { @@ -1706,11 +1725,12 @@ pop_cfun (); } } - symtab->remove_cgraph_removal_hook (hook); + symtab->remove_cgraph_removal_hook (removal_hook); + symtab->remove_cgraph_insertion_hook (insertion_hook); + symtab->remove_cgraph_duplication_hook (duplication_hook); + + free (order); } - ggc_free (order); - order = NULL; - nnodes = 0; } /* Helper function to perform function body dump. */ @@ -2699,20 +2719,12 @@ { struct cgraph_node *node = order[i]; - if (gimple_has_body_p (node->decl)) + if (node->definition && node->need_lto_streaming) { - /* When streaming out references to statements as part of some IPA - pass summary, the statements need to have uids assigned and the - following does that for all the IPA passes here. Naturally, this - ordering then matches the one IPA-passes get in their stmt_fixup - hooks. */ - - push_cfun (DECL_STRUCT_FUNCTION (node->decl)); - renumber_gimple_stmt_uids (); - pop_cfun (); + if (gimple_has_body_p (node->decl)) + lto_prepare_function_for_streaming (node); + lto_set_symtab_encoder_in_partition (encoder, node); } - if (node->definition && node->need_lto_streaming) - lto_set_symtab_encoder_in_partition (encoder, node); } FOR_EACH_DEFINED_FUNCTION (node) @@ -2780,28 +2792,13 @@ ipa_write_optimization_summaries (lto_symtab_encoder_t encoder) { struct lto_out_decl_state *state = lto_new_out_decl_state (); - lto_symtab_encoder_iterator lsei; state->symtab_node_encoder = encoder; lto_output_init_mode_table (); lto_push_out_decl_state (state); - for (lsei = lsei_start_function_in_partition (encoder); - !lsei_end_p (lsei); lsei_next_function_in_partition (&lsei)) - { - struct cgraph_node *node = lsei_cgraph_node (lsei); - /* When streaming out references to statements as part of some IPA - pass summary, the statements need to have uids assigned. - For functions newly born at WPA stage we need to initialize - the uids here. */ - if (node->definition - && gimple_has_body_p (node->decl)) - { - push_cfun (DECL_STRUCT_FUNCTION (node->decl)); - renumber_gimple_stmt_uids (); - pop_cfun (); - } - } + /* Be sure that we did not forget to renumber stmt uids. */ + gcc_checking_assert (flag_wpa); gcc_assert (flag_wpa); pass_manager *passes = g->get_passes (); @@ -3060,5 +3057,3 @@ } return e != NULL; } - -#include "gt-passes.h" Index: gcc/config/alpha/alpha.c =================================================================== --- a/src/gcc/config/alpha/alpha.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/alpha/alpha.c (.../branches/gcc-9-branch) @@ -8839,6 +8839,9 @@ case CODE_LABEL: goto close_shadow; + case DEBUG_INSN: + break; + default: gcc_unreachable (); } Index: gcc/config/s390/s390.md =================================================================== --- a/src/gcc/config/s390/s390.md (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/s390/s390.md (.../branches/gcc-9-branch) @@ -513,11 +513,11 @@ ;; Processor type. This attribute must exactly match the processor_type ;; enumeration in s390.h. -(define_attr "cpu" "z900,z990,z9_109,z9_ec,z10,z196,zEC12,z13,z14,arch13" +(define_attr "cpu" "z900,z990,z9_109,z9_ec,z10,z196,zEC12,z13,z14,z15" (const (symbol_ref "s390_tune_attr"))) (define_attr "cpu_facility" - "standard,ieee,zarch,cpu_zarch,longdisp,extimm,dfp,z10,z196,zEC12,vx,z13,z14,vxe,arch13,vxe2" + "standard,ieee,zarch,cpu_zarch,longdisp,extimm,dfp,z10,z196,zEC12,vx,z13,z14,vxe,z15,vxe2" (const_string "standard")) (define_attr "enabled" "" @@ -575,8 +575,8 @@ (match_test "TARGET_VXE")) (const_int 1) - (and (eq_attr "cpu_facility" "arch13") - (match_test "TARGET_ARCH13")) + (and (eq_attr "cpu_facility" "z15") + (match_test "TARGET_Z15")) (const_int 1) (and (eq_attr "cpu_facility" "vxe2") @@ -613,7 +613,7 @@ ;; Pipeline description for z14 (include "3906.md") -;; Pipeline description for arch13 +;; Pipeline description for z15 (include "8561.md") ;; Predicates @@ -642,7 +642,7 @@ (define_mode_iterator DD_DF [DF DD]) (define_mode_iterator TD_TF [TF TD]) -; 32 bit int<->fp conversion instructions are available since VXE2 (arch13). +; 32 bit int<->fp conversion instructions are available since VXE2 (z15). (define_mode_iterator VX_CONV_BFP [DF (SF "TARGET_VXE2")]) (define_mode_iterator VX_CONV_INT [DI (SI "TARGET_VXE2")]) @@ -6749,7 +6749,7 @@ stoc%C1\t%3,%0 stoc%D1\t%4,%0" [(set_attr "op_type" "RRF,RRF,RRF,RSY,RSY,RIE,RIE,RSY,RSY") - (set_attr "cpu_facility" "*,*,arch13,*,*,z13,z13,*,*")]) + (set_attr "cpu_facility" "*,*,z15,*,*,z13,z13,*,*")]) ;; ;;- Multiply instructions. @@ -7568,7 +7568,7 @@ (and:GPR (not:GPR (match_operand:GPR 1 "nonimmediate_operand" "")) (match_operand:GPR 2 "general_operand" ""))) (clobber (reg:CC CC_REGNUM))] - "!TARGET_ARCH13 + "!TARGET_Z15 && ! reload_completed && (GET_CODE (operands[0]) != MEM /* Ensure that s390_logical_operator_ok_p will succeed even @@ -7925,7 +7925,7 @@ (set (match_operand:GPR 0 "register_operand" "=d") (ANDOR:GPR (not:GPR (match_dup 1)) (match_dup 2)))] - "TARGET_ARCH13 && s390_match_ccmode(insn, CCTmode)" + "TARGET_Z15 && s390_match_ccmode(insn, CCTmode)" "crk\t%0,%2,%1" [(set_attr "op_type" "RRF")]) @@ -7937,7 +7937,7 @@ (match_operand:GPR 2 "register_operand" "d")) (const_int 0))) (clobber (match_scratch:GPR 0 "=d"))] - "TARGET_ARCH13 && s390_match_ccmode(insn, CCTmode)" + "TARGET_Z15 && s390_match_ccmode(insn, CCTmode)" "crk\t%0,%2,%1" [(set_attr "op_type" "RRF")]) @@ -7947,7 +7947,7 @@ (ANDOR:GPR (not:GPR (match_operand:GPR 1 "register_operand" "d")) (match_operand:GPR 2 "register_operand" "d"))) (clobber (reg:CC CC_REGNUM))] - "TARGET_ARCH13" + "TARGET_Z15" "crk\t%0,%2,%1" [(set_attr "op_type" "RRF")]) @@ -7965,7 +7965,7 @@ (set (match_operand:GPR 0 "register_operand" "=d") (ANDOR:GPR (not:GPR (match_dup 1)) (not:GPR (match_dup 2))))] - "TARGET_ARCH13 && s390_match_ccmode(insn, CCTmode)" + "TARGET_Z15 && s390_match_ccmode(insn, CCTmode)" "nrk\t%0,%1,%2" [(set_attr "op_type" "RRF")]) @@ -7977,7 +7977,7 @@ (not:GPR (match_operand:GPR 2 "register_operand" "d"))) (const_int 0))) (clobber (match_scratch:GPR 0 "=d"))] - "TARGET_ARCH13 && s390_match_ccmode(insn, CCTmode)" + "TARGET_Z15 && s390_match_ccmode(insn, CCTmode)" "nrk\t%0,%1,%2" [(set_attr "op_type" "RRF")]) @@ -7987,7 +7987,7 @@ (ANDOR:GPR (not:GPR (match_operand:GPR 1 "register_operand" "d")) (not:GPR (match_operand:GPR 2 "register_operand" "d")))) (clobber (reg:CC CC_REGNUM))] - "TARGET_ARCH13" + "TARGET_Z15" "nrk\t%0,%1,%2" [(set_attr "op_type" "RRF")]) @@ -8371,7 +8371,7 @@ (set (match_operand:GPR 0 "register_operand" "=d") (xor:GPR (not:GPR (match_dup 1)) (match_dup 2)))] - "TARGET_ARCH13 && s390_match_ccmode(insn, CCTmode)" + "TARGET_Z15 && s390_match_ccmode(insn, CCTmode)" "nxrk\t%0,%1,%2" [(set_attr "op_type" "RRF")]) @@ -8383,7 +8383,7 @@ (match_operand:GPR 2 "register_operand" "d"))) (const_int 0))) (clobber (match_scratch:GPR 0 "=d"))] - "TARGET_ARCH13 && s390_match_ccmode(insn, CCTmode)" + "TARGET_Z15 && s390_match_ccmode(insn, CCTmode)" "nxrk\t%0,%1,%2" [(set_attr "op_type" "RRF")]) @@ -8393,7 +8393,7 @@ (not:GPR (xor:GPR (match_operand:GPR 1 "register_operand" "d") (match_operand:GPR 2 "register_operand" "d")))) (clobber (reg:CC CC_REGNUM))] - "TARGET_ARCH13" + "TARGET_Z15" "nxrk\t%0,%1,%2" [(set_attr "op_type" "RRF")]) @@ -11351,34 +11351,34 @@ ; Population count instruction ; -(define_insn "*popcountdi_arch13_cc" +(define_insn "*popcountdi_z15_cc" [(set (reg CC_REGNUM) (compare (popcount:DI (match_operand:DI 1 "register_operand" "d")) (const_int 0))) (set (match_operand:DI 0 "register_operand" "=d") (match_dup 1))] - "TARGET_ARCH13 && s390_match_ccmode (insn, CCTmode)" + "TARGET_Z15 && s390_match_ccmode (insn, CCTmode)" "popcnt\t%0,%1,8" [(set_attr "op_type" "RRF")]) -(define_insn "*popcountdi_arch13_cconly" +(define_insn "*popcountdi_z15_cconly" [(set (reg CC_REGNUM) (compare (popcount:DI (match_operand:DI 1 "register_operand" "d")) (const_int 0))) (clobber (match_scratch:DI 0 "=d"))] - "TARGET_ARCH13 && s390_match_ccmode(insn, CCTmode)" + "TARGET_Z15 && s390_match_ccmode(insn, CCTmode)" "popcnt\t%0,%1,8" [(set_attr "op_type" "RRF")]) -(define_insn "*popcountdi_arch13" +(define_insn "*popcountdi_z15" [(set (match_operand:DI 0 "register_operand" "=d") (popcount:DI (match_operand:DI 1 "register_operand" "d"))) (clobber (reg:CC CC_REGNUM))] - "TARGET_ARCH13" + "TARGET_Z15" "popcnt\t%0,%1,8" [(set_attr "op_type" "RRF")]) -; The pre-arch13 popcount instruction counts the bits of op1 in 8 byte +; The pre-z15 popcount instruction counts the bits of op1 in 8 byte ; portions and stores the result in the corresponding bytes in op0. (define_insn "*popcount_z196" [(set (match_operand:INT 0 "register_operand" "=d") @@ -11422,7 +11422,7 @@ (clobber (reg:CC CC_REGNUM))])] "TARGET_Z196" { - if (!TARGET_ARCH13) + if (!TARGET_Z15) { emit_insn (gen_popcountdi2_z196 (operands[0], operands[1])); DONE; @@ -11453,7 +11453,7 @@ ; popcount always counts on the full 64 bit. With the z196 version ; counting bits per byte we just ignore the upper 4 bytes. With the -; arch13 version we have to zero out the upper 32 bits first. +; z15 version we have to zero out the upper 32 bits first. (define_expand "popcountsi2" [(set (match_dup 2) (zero_extend:DI (match_operand:SI 1 "register_operand"))) @@ -11463,7 +11463,7 @@ (subreg:SI (match_dup 3) 4))] "TARGET_Z196" { - if (!TARGET_ARCH13) + if (!TARGET_Z15) { emit_insn (gen_popcountsi2_z196 (operands[0], operands[1])); DONE; @@ -11501,7 +11501,7 @@ (subreg:HI (match_dup 3) 6))] "TARGET_Z196" { - if (!TARGET_ARCH13) + if (!TARGET_Z15) { emit_insn (gen_popcounthi2_z196 (operands[0], operands[1])); DONE; @@ -11516,7 +11516,7 @@ ; For popcount on a single byte the old z196 style popcount ; instruction is ideal. Since it anyway does a byte-wise popcount we ; just use it instead of zero extending the QImode input to DImode and -; using the arch13 popcount variant. +; using the z15 popcount variant. (define_expand "popcountqi2" [; popcnt op0, op1 (parallel [(set (match_operand:QI 0 "register_operand" "") Index: gcc/config/s390/s390.opt =================================================================== --- a/src/gcc/config/s390/s390.opt (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/s390/s390.opt (.../branches/gcc-9-branch) @@ -110,9 +110,12 @@ Enum(processor_type) String(arch12) Value(PROCESSOR_3906_Z14) EnumValue -Enum(processor_type) String(arch13) Value(PROCESSOR_8561_ARCH13) +Enum(processor_type) String(z15) Value(PROCESSOR_8561_Z15) EnumValue +Enum(processor_type) String(arch13) Value(PROCESSOR_8561_Z15) + +EnumValue Enum(processor_type) String(native) Value(PROCESSOR_NATIVE) DriverOnly mbackchain Index: gcc/config/s390/s390-c.c =================================================================== --- a/src/gcc/config/s390/s390-c.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/s390/s390-c.c (.../branches/gcc-9-branch) @@ -905,6 +905,12 @@ return error_mark_node; } + if (!TARGET_VXE2 && (ob_flags & B_VXE2)) + { + error_at (loc, "%qF requires z15 or higher", ob_fndecl); + return error_mark_node; + } + ob_fcode -= S390_BUILTIN_MAX; for (b_arg_chain = TYPE_ARG_TYPES (TREE_TYPE (ob_fndecl)); @@ -983,6 +989,15 @@ return error_mark_node; } + + if (!TARGET_VXE2 + && bflags_overloaded_builtin_var[last_match_index] & B_VXE2) + { + error_at (loc, "%qs matching variant requires z15 or higher", + IDENTIFIER_POINTER (DECL_NAME (ob_fndecl))); + return error_mark_node; + } + if (bflags_overloaded_builtin_var[last_match_index] & B_DEP) warning_at (loc, 0, "%qs matching variant is deprecated.", IDENTIFIER_POINTER (DECL_NAME (ob_fndecl))); Index: gcc/config/s390/driver-native.c =================================================================== --- a/src/gcc/config/s390/driver-native.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/s390/driver-native.c (.../branches/gcc-9-branch) @@ -121,10 +121,10 @@ break; case 0x8561: case 0x8562: - cpu = "arch13"; + cpu = "z15"; break; default: - cpu = "arch13"; + cpu = "z15"; break; } } Index: gcc/config/s390/vector.md =================================================================== --- a/src/gcc/config/s390/vector.md (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/s390/vector.md (.../branches/gcc-9-branch) @@ -70,7 +70,7 @@ (define_mode_iterator V_128_NOSINGLE [V16QI V8HI V4SI V4SF V2DI V2DF]) -; 32 bit int<->fp vector conversion instructions are available since VXE2 (arch13). +; 32 bit int<->fp vector conversion instructions are available since VXE2 (z15). (define_mode_iterator VX_VEC_CONV_BFP [V2DF (V4SF "TARGET_VXE2")]) (define_mode_iterator VX_VEC_CONV_INT [V2DI (V4SI "TARGET_VXE2")]) Index: gcc/config/s390/s390-opts.h =================================================================== --- a/src/gcc/config/s390/s390-opts.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/s390/s390-opts.h (.../branches/gcc-9-branch) @@ -37,7 +37,7 @@ PROCESSOR_2827_ZEC12, PROCESSOR_2964_Z13, PROCESSOR_3906_Z14, - PROCESSOR_8561_ARCH13, + PROCESSOR_8561_Z15, PROCESSOR_NATIVE, PROCESSOR_max }; Index: gcc/config/s390/s390.c =================================================================== --- a/src/gcc/config/s390/s390.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/s390/s390.c (.../branches/gcc-9-branch) @@ -337,7 +337,7 @@ { "zEC12", "zEC12", PROCESSOR_2827_ZEC12, &zEC12_cost, 10 }, { "z13", "z13", PROCESSOR_2964_Z13, &zEC12_cost, 11 }, { "z14", "arch12", PROCESSOR_3906_Z14, &zEC12_cost, 12 }, - { "arch13", "", PROCESSOR_8561_ARCH13, &zEC12_cost, 13 }, + { "z15", "arch13", PROCESSOR_8561_Z15, &zEC12_cost, 13 }, { "native", "", PROCESSOR_NATIVE, NULL, 0 } }; @@ -811,6 +811,12 @@ error ("Builtin %qF requires z14 or higher.", fndecl); return const0_rtx; } + + if ((bflags & B_VXE2) && !TARGET_VXE2) + { + error ("Builtin %qF requires z15 or higher.", fndecl); + return const0_rtx; + } } if (fcode >= S390_OVERLOADED_BUILTIN_VAR_OFFSET && fcode < S390_ALL_BUILTIN_MAX) @@ -1782,7 +1788,7 @@ if (*code == EQ) new_code = reversed_comparison_code_parts (GET_CODE (*op0), XEXP (*op0, 0), - XEXP (*op1, 0), NULL); + XEXP (*op0, 1), NULL); else new_code = GET_CODE (*op0); @@ -1795,7 +1801,7 @@ } /* ~a==b -> ~(a^b)==0 ~a!=b -> ~(a^b)!=0 */ - if (TARGET_ARCH13 + if (TARGET_Z15 && (*code == EQ || *code == NE) && (GET_MODE (*op0) == DImode || GET_MODE (*op0) == SImode) && GET_CODE (*op0) == NOT) @@ -1807,7 +1813,7 @@ } /* a&b == -1 -> ~a|~b == 0 a|b == -1 -> ~a&~b == 0 */ - if (TARGET_ARCH13 + if (TARGET_Z15 && (*code == EQ || *code == NE) && (GET_CODE (*op0) == AND || GET_CODE (*op0) == IOR) && (GET_MODE (*op0) == DImode || GET_MODE (*op0) == SImode) @@ -3529,7 +3535,7 @@ /* It is a real IF-THEN-ELSE. An additional move will be needed to implement that. */ - if (!TARGET_ARCH13 + if (!TARGET_Z15 && reload_completed && !rtx_equal_p (dst, then) && !rtx_equal_p (dst, els)) @@ -3551,7 +3557,7 @@ case IOR: /* nnrk, nngrk */ - if (TARGET_ARCH13 + if (TARGET_Z15 && (mode == SImode || mode == DImode) && GET_CODE (XEXP (x, 0)) == NOT && GET_CODE (XEXP (x, 1)) == NOT) @@ -3598,7 +3604,7 @@ case AND: /* nork, nogrk */ - if (TARGET_ARCH13 + if (TARGET_Z15 && (mode == SImode || mode == DImode) && GET_CODE (XEXP (x, 0)) == NOT && GET_CODE (XEXP (x, 1)) == NOT) @@ -3770,7 +3776,7 @@ *total = COSTS_N_INSNS (1); /* nxrk, nxgrk ~(a^b)==0 */ - if (TARGET_ARCH13 + if (TARGET_Z15 && GET_CODE (XEXP (x, 0)) == NOT && XEXP (x, 1) == const0_rtx && GET_CODE (XEXP (XEXP (x, 0), 0)) == XOR @@ -3785,7 +3791,7 @@ } /* nnrk, nngrk, nork, nogrk */ - if (TARGET_ARCH13 + if (TARGET_Z15 && (GET_CODE (XEXP (x, 0)) == AND || GET_CODE (XEXP (x, 0)) == IOR) && XEXP (x, 1) == const0_rtx && (GET_MODE (XEXP (x, 0)) == SImode || GET_MODE (XEXP (x, 0)) == DImode) @@ -14440,16 +14446,16 @@ if (get_attr_z14_groupoftwo (insn)) mask |= S390_SCHED_ATTR_MASK_GROUPOFTWO; break; - case PROCESSOR_8561_ARCH13: - if (get_attr_arch13_cracked (insn)) + case PROCESSOR_8561_Z15: + if (get_attr_z15_cracked (insn)) mask |= S390_SCHED_ATTR_MASK_CRACKED; - if (get_attr_arch13_expanded (insn)) + if (get_attr_z15_expanded (insn)) mask |= S390_SCHED_ATTR_MASK_EXPANDED; - if (get_attr_arch13_endgroup (insn)) + if (get_attr_z15_endgroup (insn)) mask |= S390_SCHED_ATTR_MASK_ENDGROUP; - if (get_attr_arch13_groupalone (insn)) + if (get_attr_z15_groupalone (insn)) mask |= S390_SCHED_ATTR_MASK_GROUPALONE; - if (get_attr_arch13_groupoftwo (insn)) + if (get_attr_z15_groupoftwo (insn)) mask |= S390_SCHED_ATTR_MASK_GROUPOFTWO; break; default: @@ -14487,15 +14493,15 @@ if (get_attr_z14_unit_vfu (insn)) mask |= 1 << 3; break; - case PROCESSOR_8561_ARCH13: + case PROCESSOR_8561_Z15: *units = 4; - if (get_attr_arch13_unit_lsu (insn)) + if (get_attr_z15_unit_lsu (insn)) mask |= 1 << 0; - if (get_attr_arch13_unit_fxa (insn)) + if (get_attr_z15_unit_fxa (insn)) mask |= 1 << 1; - if (get_attr_arch13_unit_fxb (insn)) + if (get_attr_z15_unit_fxb (insn)) mask |= 1 << 2; - if (get_attr_arch13_unit_vfu (insn)) + if (get_attr_z15_unit_vfu (insn)) mask |= 1 << 3; break; default: @@ -14511,7 +14517,7 @@ return false; return get_attr_z13_unit_fpd (insn) || get_attr_z14_unit_fpd (insn) - || get_attr_arch13_unit_fpd (insn); + || get_attr_z15_unit_fpd (insn); } static bool @@ -14521,7 +14527,7 @@ return false; return get_attr_z13_unit_fxd (insn) || get_attr_z14_unit_fxd (insn) - || get_attr_arch13_unit_fxd (insn); + || get_attr_z15_unit_fxd (insn); } /* Returns TRUE if INSN is a long-running instruction. */ @@ -15968,6 +15974,8 @@ static HOST_WIDE_INT s390_vector_alignment (const_tree type) { + tree size = TYPE_SIZE (type); + if (!TARGET_VX_ABI) return default_vector_alignment (type); @@ -15974,7 +15982,11 @@ if (TYPE_USER_ALIGN (type)) return TYPE_ALIGN (type); - return MIN (64, tree_to_shwi (TYPE_SIZE (type))); + if (tree_fits_uhwi_p (size) + && tree_to_uhwi (size) < BIGGEST_ALIGNMENT) + return tree_to_uhwi (size); + + return BIGGEST_ALIGNMENT; } /* Implement TARGET_CONSTANT_ALIGNMENT. Alignment on even addresses for Index: gcc/config/s390/s390-builtins.def =================================================================== --- a/src/gcc/config/s390/s390-builtins.def (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/s390/s390-builtins.def (.../branches/gcc-9-branch) @@ -281,7 +281,7 @@ #define B_HTM (1 << 1) /* Builtins requiring the transactional execution facility. */ #define B_VX (1 << 2) /* Builtins requiring the z13 vector extensions. */ #define B_VXE (1 << 3) /* Builtins requiring the z14 vector extensions. */ -#define B_VXE2 (1 << 4) /* Builtins requiring the arch13 vector extensions. */ +#define B_VXE2 (1 << 4) /* Builtins requiring the z15 vector extensions. */ #define B_DEP (1 << 5) /* Builtin has been deprecated and a warning should be issued. */ /* B_DEF defines a standard (not overloaded) builtin Index: gcc/config/s390/vx-builtins.md =================================================================== --- a/src/gcc/config/s390/vx-builtins.md (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/s390/vx-builtins.md (.../branches/gcc-9-branch) @@ -2147,7 +2147,7 @@ "fmaxb\t%v0,%v1,%v2,%b3" [(set_attr "op_type" "VRR")]) -; The element reversal builtins introduced with arch13 have been made +; The element reversal builtins introduced with z15 have been made ; available also for older CPUs down to z13. (define_expand "eltswap" [(set (match_operand:VEC_HW 0 "nonimmediate_operand" "") @@ -2181,8 +2181,8 @@ vster\t%v1,%v0" [(set_attr "op_type" "*,VRX,VRX")]) -; arch13 has instructions for doing element reversal from mem to reg -; or the other way around. For reg to reg or on pre arch13 machines +; z15 has instructions for doing element reversal from mem to reg +; or the other way around. For reg to reg or on pre z15 machines ; we have to emulate it with vector permute. (define_insn_and_split "*eltswap_emu" [(set (match_operand:VEC_HW 0 "nonimmediate_operand" "=vR") Index: gcc/config/s390/s390.h =================================================================== --- a/src/gcc/config/s390/s390.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/s390/s390.h (.../branches/gcc-9-branch) @@ -41,12 +41,12 @@ PF_Z14 = 2048, PF_VXE = 4096, PF_VXE2 = 8192, - PF_ARCH13 = 16384 + PF_Z15 = 16384 }; /* This is necessary to avoid a warning about comparing different enum types. */ -#define s390_tune_attr ((enum attr_cpu)(s390_tune > PROCESSOR_8561_ARCH13 ? PROCESSOR_8561_ARCH13 : s390_tune )) +#define s390_tune_attr ((enum attr_cpu)(s390_tune > PROCESSOR_8561_Z15 ? PROCESSOR_8561_Z15 : s390_tune )) /* These flags indicate that the generated code should run on a cpu providing the respective hardware facility regardless of the @@ -100,10 +100,10 @@ (s390_arch_flags & PF_VXE) #define TARGET_CPU_VXE_P(opts) \ (opts->x_s390_arch_flags & PF_VXE) -#define TARGET_CPU_ARCH13 \ - (s390_arch_flags & PF_ARCH13) -#define TARGET_CPU_ARCH13_P(opts) \ - (opts->x_s390_arch_flags & PF_ARCH13) +#define TARGET_CPU_Z15 \ + (s390_arch_flags & PF_Z15) +#define TARGET_CPU_Z15_P(opts) \ + (opts->x_s390_arch_flags & PF_Z15) #define TARGET_CPU_VXE2 \ (s390_arch_flags & PF_VXE2) #define TARGET_CPU_VXE2_P(opts) \ @@ -160,9 +160,9 @@ (TARGET_VX && TARGET_CPU_VXE) #define TARGET_VXE_P(opts) \ (TARGET_VX_P (opts) && TARGET_CPU_VXE_P (opts)) -#define TARGET_ARCH13 (TARGET_ZARCH && TARGET_CPU_ARCH13) -#define TARGET_ARCH13_P(opts) \ - (TARGET_ZARCH_P (opts->x_target_flags) && TARGET_CPU_ARCH13_P (opts)) +#define TARGET_Z15 (TARGET_ZARCH && TARGET_CPU_Z15) +#define TARGET_Z15_P(opts) \ + (TARGET_ZARCH_P (opts->x_target_flags) && TARGET_CPU_Z15_P (opts)) #define TARGET_VXE2 \ (TARGET_VX && TARGET_CPU_VXE2) #define TARGET_VXE2_P(opts) \ Index: gcc/config/s390/8561.md =================================================================== --- a/src/gcc/config/s390/8561.md (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/s390/8561.md (.../branches/gcc-9-branch) @@ -1,4 +1,4 @@ -;; Scheduling description for arch13. +;; Scheduling description for z15. ;; Copyright (C) 2019 Free Software Foundation, Inc. ;; Contributed by Robin Dapp (rdapp@linux.ibm.com) ;; This file is part of GCC. @@ -17,12 +17,12 @@ ;; along with GCC; see the file COPYING3. If not see ;; . -(define_attr "arch13_unit_fpd" "" +(define_attr "z15_unit_fpd" "" (cond [(eq_attr "mnemonic" "ddb,ddbr,deb,debr,dxbr,sqdb,sqdbr,sqeb,\ sqebr,sqxbr,vfddb,vfdsb,vfsqdb,vfsqsb,wfddb,wfdsb,wfdxb,wfsqdb,wfsqxb") (const_int 1)] (const_int 0))) -(define_attr "arch13_unit_fxa" "" +(define_attr "z15_unit_fxa" "" (cond [(eq_attr "mnemonic" "a,afi,ag,agf,agfi,agfr,agh,aghi,aghik,\ agr,agrk,ah,ahi,ahik,ahy,al,alc,alcg,alcgr,alcr,alfi,alg,algf,algfi,algfr,\ alghsik,algr,algrk,alhsik,alr,alrk,aly,ar,ark,ay,bras,brasl,etnd,exrl,flogr,\ @@ -39,7 +39,7 @@ xgr,xgrk,xihf,xilf,xr,xrk,xy") (const_int 1)] (const_int 0))) -(define_attr "arch13_unit_fxb" "" +(define_attr "z15_unit_fxb" "" (cond [(eq_attr "mnemonic" "agsi,algsi,alsi,asi,b,bc,bcr,bi,br,brcl,\ c,cfi,cg,cgf,cgfi,cgfr,cgfrl,cgh,cghi,cghrl,cghsi,cgit,cgr,cgrl,cgrt,ch,\ chi,chrl,chsi,chy,cit,cl,clfhsi,clfi,clfit,clg,clgf,clgfi,clgfr,clgfrl,\ @@ -52,11 +52,11 @@ vlvgp,vst,vstef,vsteg,vstl,vstrl,vstrlr,xi,xiy") (const_int 1)] (const_int 0))) -(define_attr "arch13_unit_fxd" "" +(define_attr "z15_unit_fxd" "" (cond [(eq_attr "mnemonic" "dlgr,dlr,dr,dsgfr,dsgr") (const_int 1)] (const_int 0))) -(define_attr "arch13_unit_lsu" "" +(define_attr "z15_unit_lsu" "" (cond [(eq_attr "mnemonic" "a,adb,aeb,ag,agf,agh,agsi,ah,ahy,al,alc,\ alcg,alg,algf,algsi,alsi,aly,asi,ay,c,cdb,ceb,cg,cgf,cgfrl,cgh,cghrl,cghsi,\ cgrl,ch,chrl,chsi,chy,cl,clc,clfhsi,clg,clgf,clgfrl,clghrl,clghsi,clgrl,\ @@ -73,7 +73,7 @@ vstef,vsteg,vstl,vstrl,vstrlr,x,xg,xi,xiy,xy") (const_int 1)] (const_int 0))) -(define_attr "arch13_unit_vfu" "" +(define_attr "z15_unit_vfu" "" (cond [(eq_attr "mnemonic" "adb,adbr,adtr,aeb,aebr,axbr,axtr,cdb,\ cdbr,cdtr,ceb,cebr,cpsdr,cxbr,cxtr,ddtr,dxtr,fidbr,fidbra,fidtr,fiebr,\ fiebra,fixbr,fixbra,fixtr,lcdbr,lcebr,lcxbr,ldeb,ldebr,ldetr,le,ledbr,ledtr,\ @@ -115,7 +115,7 @@ wfmxb,wfnmaxb,wfnmsxb,wfsdb,wfssb,wfsxb,wldeb,wledb") (const_int 1)] (const_int 0))) -(define_attr "arch13_cracked" "" +(define_attr "z15_cracked" "" (cond [(eq_attr "mnemonic" "bas,basr,cdfbr,cdftr,cdgbr,cdgtr,cdlfbr,\ cdlftr,cdlgbr,cdlgtr,cefbr,cegbr,celfbr,celgbr,cfdbr,cfebr,cfxbr,cgdbr,cgdtr,\ cgebr,cgxbr,cgxtr,chhsi,clfdbr,clfdtr,clfebr,clfxbr,clfxtr,clgdbr,clgdtr,\ @@ -123,13 +123,13 @@ rxsbg,stpq,vgef,vgeg,vscef,vsceg,vsteb,vsteh") (const_int 1)] (const_int 0))) -(define_attr "arch13_expanded" "" +(define_attr "z15_expanded" "" (cond [(eq_attr "mnemonic" "cds,cdsg,cdsy,cxfbr,cxftr,cxgbr,cxgtr,\ cxlfbr,cxlftr,cxlgbr,cxlgtr,dl,dlg,dsg,dsgf,lam,lm,lmg,lmy,sldl,srda,srdl,\ stam,stm,stmg,stmy,tbegin,tbeginc") (const_int 1)] (const_int 0))) -(define_attr "arch13_groupalone" "" +(define_attr "z15_groupalone" "" (cond [(eq_attr "mnemonic" "alc,alcg,alcgr,alcr,axbr,axtr,clc,cxbr,\ cxtr,dlgr,dlr,dr,dsgfr,dsgr,dxbr,dxtr,fixbr,fixbra,fixtr,flogr,lcxbr,lnxbr,\ lpxbr,ltxbr,ltxtr,lxdb,lxdbr,lxdtr,lxeb,lxebr,m,madb,maeb,maebr,mfy,mg,mgrk,\ @@ -137,11 +137,11 @@ slbgr,slbr,sqxbr,sxbr,sxtr,tabort,tcxb,tdcxt,tend,xc") (const_int 1)] (const_int 0))) -(define_attr "arch13_endgroup" "" +(define_attr "z15_endgroup" "" (cond [(eq_attr "mnemonic" "bras,brasl,exrl,ipm") (const_int 1)] (const_int 0))) -(define_attr "arch13_groupoftwo" "" +(define_attr "z15_groupoftwo" "" (cond [(eq_attr "mnemonic" "vacccq,vacq,vfmadb,vfmasb,vfmsdb,vfmssb,\ vfnmadb,vfnmasb,vfnmsdb,vfnmssb,vgfmab,vgfmaf,vgfmag,vgfmah,vmaeb,vmaef,vmaeh,\ vmahb,vmahf,vmahh,vmalb,vmaleb,vmalef,vmaleh,vmalf,vmalhb,vmalhf,vmalhh,\ @@ -149,8 +149,8 @@ wfmadb,wfmasb,wfmaxb,wfmsdb,wfmssb,wfmsxb,wfnmaxb,wfnmsxb") (const_int 1)] (const_int 0))) -(define_insn_reservation "arch13_0" 0 - (and (eq_attr "cpu" "arch13") +(define_insn_reservation "z15_0" 0 + (and (eq_attr "cpu" "z15") (eq_attr "mnemonic" "a,afi,ag,agfi,aghi,aghik,agr,agrk,ahi,ahik,al,\ alfi,alg,algf,algfi,algfr,alghsik,algr,algrk,alhsik,alr,alrk,aly,ar,ark,ay,\ b,bc,bcr,bi,br,bras,brasl,brcl,c,cfi,cg,cgfi,cghi,cghsi,cgit,cgr,cgrl,\ @@ -168,8 +168,8 @@ tmhh,tmhl,tml,tmlh,tmll,tmy,vlr,vlvgb,vlvgf,vlvgg,vlvgh,x,xg,xgr,xgrk,xihf,\ xilf,xr,xrk,xy")) "nothing") -(define_insn_reservation "arch13_1" 1 - (and (eq_attr "cpu" "arch13") +(define_insn_reservation "z15_1" 1 + (and (eq_attr "cpu" "z15") (eq_attr "mnemonic" "agf,agfr,agh,agsi,ah,ahy,algsi,alsi,asi,cgf,\ cgfr,cgfrl,cgh,cghrl,ch,chrl,chy,clm,clmy,cpsdr,laa,laag,lan,lang,lao,laog,\ lax,laxg,le,ler,ley,loc,locg,locghi,locgr,lochi,locr,mvghi,mvhhi,mvhi,mvi,\ @@ -196,8 +196,8 @@ wflcsb,wflcxb,wflndb,wflnsb,wflnxb,wflpdb,wflpsb,wflpxb,wfmaxxb,wfminxb,xi,\ xiy")) "nothing") -(define_insn_reservation "arch13_2" 2 - (and (eq_attr "cpu" "arch13") +(define_insn_reservation "z15_2" 2 + (and (eq_attr "cpu" "z15") (eq_attr "mnemonic" "cdb,cdbr,ceb,cebr,ear,ipm,l,lcbb,lcdbr,lcebr,ld,\ lde,ldy,lg,lgdr,lgrl,llc,llgc,llgf,llgfrl,llgh,llghrl,llgt,llh,llhrl,lm,\ lmg,lmy,lndbr,lnebr,lpdbr,lpebr,lrl,ltdbr,ltebr,ly,popcnt,sar,tcdb,tceb,\ @@ -208,8 +208,8 @@ vlrepf,vlrepg,vlreph,vlrl,vlvgp,vpklsfs,vpklsgs,vpklshs,vpksfs,vpksgs,vpkshs,\ wfcdb,wfcexbs,wfchexbs,wfchxbs,wfcsb")) "nothing") -(define_insn_reservation "arch13_3" 3 - (and (eq_attr "cpu" "arch13") +(define_insn_reservation "z15_3" 3 + (and (eq_attr "cpu" "z15") (eq_attr "mnemonic" "cds,cdsy,mgh,mghi,mh,mhi,mhy,std,stdy,ste,stey,\ vcksm,vfeezbs,vfeezfs,vfeezhs,vgfmab,vgfmaf,vgfmag,vgfmah,vgfmb,vgfmf,vgfmg,\ vgfmh,vistrbs,vistrfs,vistrhs,vl,vlbb,vll,vlrlr,vmaeb,vmaef,vmaeh,vmahb,\ @@ -218,14 +218,14 @@ vmleb,vmlef,vmleh,vmlf,vmlhb,vmlhf,vmlhh,vmlhw,vmlob,vmlof,vmloh,vmob,vmof,\ vmoh,vsumb,vsumgf,vsumgh,vsumh,vsumqf,vsumqg,vtm")) "nothing") -(define_insn_reservation "arch13_4" 4 - (and (eq_attr "cpu" "arch13") +(define_insn_reservation "z15_4" 4 + (and (eq_attr "cpu" "z15") (eq_attr "mnemonic" "bas,basr,chhsi,clc,ex,lam,lcgfr,lngfr,lpgfr,lxr,\ lzxr,ms,msfi,msgf,msgfi,msgfr,msr,msy,mvc,nc,oc,ppa,rxsbg,tabort,tbegin,\ tbeginc,tend,vst,vstef,vsteg,vstl,vstrl,vstrlr,xc")) "nothing") -(define_insn_reservation "arch13_5" 5 - (and (eq_attr "cpu" "arch13") +(define_insn_reservation "z15_5" 5 + (and (eq_attr "cpu" "z15") (eq_attr "mnemonic" "adb,adbr,aeb,aebr,alc,alcg,alcgr,alcr,cs,csg,\ csy,fidbr,fidbra,fiebr,fiebra,ldeb,ldebr,ledbr,madbr,mdb,mdbr,meeb,meebr,\ msdbr,msrkc,sdb,sdbr,seb,sebr,slb,slbg,slbgr,slbr,stm,stmg,stmy,vfadb,vfasb,\ @@ -233,53 +233,53 @@ vfnmssb,vfsdb,vfssb,vldeb,vledb,vmslg,wfadb,wfasb,wfidb,wfisb,wflld,wfmadb,\ wfmasb,wfmdb,wfmsb,wfmsdb,wfmssb,wfsdb,wfssb,wldeb,wledb")) "nothing") -(define_insn_reservation "arch13_6" 6 - (and (eq_attr "cpu" "arch13") +(define_insn_reservation "z15_6" 6 + (and (eq_attr "cpu" "z15") (eq_attr "mnemonic" "msg,msgr,sfpc")) "nothing") -(define_insn_reservation "arch13_7" 7 - (and (eq_attr "cpu" "arch13") +(define_insn_reservation "z15_7" 7 + (and (eq_attr "cpu" "z15") (eq_attr "mnemonic" "adtr,cdtr,fidtr,ldetr,ltdtr,msgrkc,sdtr,tdcdt,\ tdcet,vgef,vgeg")) "nothing") -(define_insn_reservation "arch13_8" 8 - (and (eq_attr "cpu" "arch13") +(define_insn_reservation "z15_8" 8 + (and (eq_attr "cpu" "z15") (eq_attr "mnemonic" "cdsg,flogr,lpq,stpq,vsteb,vsteh")) "nothing") -(define_insn_reservation "arch13_9" 9 - (and (eq_attr "cpu" "arch13") +(define_insn_reservation "z15_9" 9 + (and (eq_attr "cpu" "z15") (eq_attr "mnemonic" "cdfbr,cdgbr,cdlfbr,cdlgbr,cefbr,cegbr,celfbr,\ celgbr,cxfbr,cxgbr,cxlfbr,cxlgbr,m,madb,maeb,maebr,mfy,ml,mlr,mr,msdb,mseb,\ msebr,stam,wfaxb,wfixb,wfsxb")) "nothing") -(define_insn_reservation "arch13_10" 10 - (and (eq_attr "cpu" "arch13") +(define_insn_reservation "z15_10" 10 + (and (eq_attr "cpu" "z15") (eq_attr "mnemonic" "lxdb,lxdbr,lxeb,lxebr,vscef,vsceg")) "nothing") -(define_insn_reservation "arch13_11" 11 - (and (eq_attr "cpu" "arch13") +(define_insn_reservation "z15_11" 11 + (and (eq_attr "cpu" "z15") (eq_attr "mnemonic" "cfdbr,cfebr,cgdbr,cgebr,clfdbr,clfebr,clgdbr,\ clgebr,mg,mgrk,mlg,mlgr")) "nothing") -(define_insn_reservation "arch13_12" 12 - (and (eq_attr "cpu" "arch13") +(define_insn_reservation "z15_12" 12 + (and (eq_attr "cpu" "z15") (eq_attr "mnemonic" "cxbr,cxftr,cxlftr,cxtr,tcxb,tdcxt")) "nothing") -(define_insn_reservation "arch13_13" 13 - (and (eq_attr "cpu" "arch13") +(define_insn_reservation "z15_13" 13 + (and (eq_attr "cpu" "z15") (eq_attr "mnemonic" "axbr,axtr,fixbr,fixbra,fixtr,lcxbr,lnxbr,lpxbr,\ ltxbr,ltxtr,lxdtr,sxbr,sxtr")) "nothing") -(define_insn_reservation "arch13_14" 14 - (and (eq_attr "cpu" "arch13") +(define_insn_reservation "z15_14" 14 + (and (eq_attr "cpu" "z15") (eq_attr "mnemonic" "cfxbr,cgxbr,clfxbr,clgxbr,ledtr")) "nothing") -(define_insn_reservation "arch13_16" 16 - (and (eq_attr "cpu" "arch13") +(define_insn_reservation "z15_16" 16 + (and (eq_attr "cpu" "z15") (eq_attr "mnemonic" "cdftr,cdlftr")) "nothing") -(define_insn_reservation "arch13_20" 20 - (and (eq_attr "cpu" "arch13") +(define_insn_reservation "z15_20" 20 + (and (eq_attr "cpu" "z15") (eq_attr "mnemonic" "cdgtr,cdlgtr,cgdtr,cgxtr,clfdtr,clfxtr,clgdtr,\ clgxtr,cxgtr,cxlgtr,d,ddb,ddbr,ddtr,deb,debr,dl,dlg,dlgr,dlr,dr,dsg,dsgf,\ dsgfr,dsgr,dxbr,dxtr,efpc,mdtr,mxbr,mxtr,sqdb,sqdbr,sqeb,sqebr,sqxbr,vfddb,\ Index: gcc/config/sparc/sparc.md =================================================================== --- a/src/gcc/config/sparc/sparc.md (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/sparc/sparc.md (.../branches/gcc-9-branch) @@ -1604,10 +1604,7 @@ (clobber (reg:P O7_REG))] "REGNO (operands[0]) == INTVAL (operands[3])" { - if (flag_delayed_branch) - return "sethi\t%%hi(%a1-4), %0\n\tcall\t%a2\n\t add\t%0, %%lo(%a1+4), %0"; - else - return "sethi\t%%hi(%a1-8), %0\n\tadd\t%0, %%lo(%a1-4), %0\n\tcall\t%a2\n\t nop"; + return output_load_pcrel_sym (operands); } [(set (attr "type") (const_string "multi")) (set (attr "length") Index: gcc/config/sparc/sparc-protos.h =================================================================== --- a/src/gcc/config/sparc/sparc-protos.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/sparc/sparc-protos.h (.../branches/gcc-9-branch) @@ -69,6 +69,7 @@ extern void sparc_split_mem_reg (rtx, rtx, machine_mode); extern int sparc_split_reg_reg_legitimate (rtx, rtx); extern void sparc_split_reg_reg (rtx, rtx, machine_mode); +extern const char *output_load_pcrel_sym (rtx *); extern const char *output_ubranch (rtx, rtx_insn *); extern const char *output_cbranch (rtx, rtx, int, int, int, rtx_insn *); extern const char *output_return (rtx_insn *); Index: gcc/config/sparc/sparc.c =================================================================== --- a/src/gcc/config/sparc/sparc.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/sparc/sparc.c (.../branches/gcc-9-branch) @@ -4243,10 +4243,12 @@ } /* Global Offset Table support. */ +static GTY(()) rtx got_symbol_rtx = NULL_RTX; +static GTY(()) rtx got_register_rtx = NULL_RTX; static GTY(()) rtx got_helper_rtx = NULL_RTX; -static GTY(()) rtx got_register_rtx = NULL_RTX; -static GTY(()) rtx got_symbol_rtx = NULL_RTX; +static GTY(()) bool got_helper_needed = false; + /* Return the SYMBOL_REF for the Global Offset Table. */ static rtx @@ -4258,27 +4260,6 @@ return got_symbol_rtx; } -#ifdef HAVE_GAS_HIDDEN -# define USE_HIDDEN_LINKONCE 1 -#else -# define USE_HIDDEN_LINKONCE 0 -#endif - -static void -get_pc_thunk_name (char name[32], unsigned int regno) -{ - const char *reg_name = reg_names[regno]; - - /* Skip the leading '%' as that cannot be used in a - symbol name. */ - reg_name += 1; - - if (USE_HIDDEN_LINKONCE) - sprintf (name, "__sparc_get_pc_thunk.%s", reg_name); - else - ASM_GENERATE_INTERNAL_LABEL (name, "LADDPC", regno); -} - /* Wrapper around the load_pcrel_sym{si,di} patterns. */ static rtx @@ -4298,30 +4279,78 @@ return insn; } +/* Output the load_pcrel_sym{si,di} patterns. */ + +const char * +output_load_pcrel_sym (rtx *operands) +{ + if (flag_delayed_branch) + { + output_asm_insn ("sethi\t%%hi(%a1-4), %0", operands); + output_asm_insn ("call\t%a2", operands); + output_asm_insn (" add\t%0, %%lo(%a1+4), %0", operands); + } + else + { + output_asm_insn ("sethi\t%%hi(%a1-8), %0", operands); + output_asm_insn ("add\t%0, %%lo(%a1-4), %0", operands); + output_asm_insn ("call\t%a2", operands); + output_asm_insn (" nop", NULL); + } + + if (operands[2] == got_helper_rtx) + got_helper_needed = true; + + return ""; +} + +#ifdef HAVE_GAS_HIDDEN +# define USE_HIDDEN_LINKONCE 1 +#else +# define USE_HIDDEN_LINKONCE 0 +#endif + /* Emit code to load the GOT register. */ void load_got_register (void) { - if (!got_register_rtx) - got_register_rtx = gen_rtx_REG (Pmode, GLOBAL_OFFSET_TABLE_REGNUM); + rtx insn; if (TARGET_VXWORKS_RTP) - emit_insn (gen_vxworks_load_got ()); + { + if (!got_register_rtx) + got_register_rtx = pic_offset_table_rtx; + + insn = gen_vxworks_load_got (); + } else { + if (!got_register_rtx) + got_register_rtx = gen_rtx_REG (Pmode, GLOBAL_OFFSET_TABLE_REGNUM); + /* The GOT symbol is subject to a PC-relative relocation so we need a helper function to add the PC value and thus get the final value. */ if (!got_helper_rtx) { char name[32]; - get_pc_thunk_name (name, GLOBAL_OFFSET_TABLE_REGNUM); + + /* Skip the leading '%' as that cannot be used in a symbol name. */ + if (USE_HIDDEN_LINKONCE) + sprintf (name, "__sparc_get_pc_thunk.%s", + reg_names[REGNO (got_register_rtx)] + 1); + else + ASM_GENERATE_INTERNAL_LABEL (name, "LADDPC", + REGNO (got_register_rtx)); + got_helper_rtx = gen_rtx_SYMBOL_REF (Pmode, ggc_strdup (name)); } - emit_insn (gen_load_pcrel_sym (got_register_rtx, sparc_got (), - got_helper_rtx)); + insn + = gen_load_pcrel_sym (got_register_rtx, sparc_got (), got_helper_rtx); } + + emit_insn (insn); } /* Ensure that we are not using patterns that are not OK with PIC. */ @@ -4457,7 +4486,7 @@ return true; if (!HARD_REGISTER_P (pic_offset_table_rtx) - && (HARD_REGISTER_P (x) || lra_in_progress) + && (HARD_REGISTER_P (x) || lra_in_progress || reload_in_progress) && ORIGINAL_REGNO (x) == REGNO (pic_offset_table_rtx)) return true; @@ -5486,7 +5515,7 @@ return true; /* GOT register (%l7) if needed. */ - if (regno == GLOBAL_OFFSET_TABLE_REGNUM && got_register_rtx) + if (got_register_rtx && regno == REGNO (got_register_rtx)) return true; /* If the function accesses prior frames, the frame pointer and the return @@ -12529,10 +12558,9 @@ sparc_file_end (void) { /* If we need to emit the special GOT helper function, do so now. */ - if (got_helper_rtx) + if (got_helper_needed) { const char *name = XSTR (got_helper_rtx, 0); - const char *reg_name = reg_names[GLOBAL_OFFSET_TABLE_REGNUM]; #ifdef DWARF2_UNWIND_INFO bool do_cfi; #endif @@ -12569,17 +12597,22 @@ #ifdef DWARF2_UNWIND_INFO do_cfi = dwarf2out_do_cfi_asm (); if (do_cfi) - fprintf (asm_out_file, "\t.cfi_startproc\n"); + output_asm_insn (".cfi_startproc", NULL); #endif if (flag_delayed_branch) - fprintf (asm_out_file, "\tjmp\t%%o7+8\n\t add\t%%o7, %s, %s\n", - reg_name, reg_name); + { + output_asm_insn ("jmp\t%%o7+8", NULL); + output_asm_insn (" add\t%%o7, %0, %0", &got_register_rtx); + } else - fprintf (asm_out_file, "\tadd\t%%o7, %s, %s\n\tjmp\t%%o7+8\n\t nop\n", - reg_name, reg_name); + { + output_asm_insn ("add\t%%o7, %0, %0", &got_register_rtx); + output_asm_insn ("jmp\t%%o7+8", NULL); + output_asm_insn (" nop", NULL); + } #ifdef DWARF2_UNWIND_INFO if (do_cfi) - fprintf (asm_out_file, "\t.cfi_endproc\n"); + output_asm_insn (".cfi_endproc", NULL); #endif } @@ -13085,7 +13118,10 @@ edge entry_edge; rtx_insn *seq; - if (!crtl->uses_pic_offset_table) + /* In PIC mode, we need to always initialize the PIC register if optimization + is enabled, because we are called from IRA and LRA may later force things + to the constant pool for optimization purposes. */ + if (!flag_pic || (!crtl->uses_pic_offset_table && !optimize)) return; start_sequence (); Index: gcc/config/sparc/sparc.h =================================================================== --- a/src/gcc/config/sparc/sparc.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/sparc/sparc.h (.../branches/gcc-9-branch) @@ -736,6 +736,13 @@ register window instruction in the prologue. */ #define HARD_REGNO_RENAME_OK(FROM, TO) ((FROM) != 1) +/* Select a register mode required for caller save of hard regno REGNO. + Contrary to what is documented, the default is not the smallest suitable + mode but the largest suitable mode for the given (REGNO, NREGS) pair and + it quickly creates paradoxical subregs that can be problematic. */ +#define HARD_REGNO_CALLER_SAVE_MODE(REGNO, NREGS, MODE) \ + ((MODE) == VOIDmode ? choose_hard_reg_mode (REGNO, NREGS, false) : (MODE)) + /* Specify the registers used for certain standard purposes. The values of these macros are register numbers. */ Index: gcc/config/darwin.opt =================================================================== --- a/src/gcc/config/darwin.opt (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/darwin.opt (.../branches/gcc-9-branch) @@ -18,241 +18,383 @@ ; along with GCC; see the file COPYING3. If not see ; . -; Various linker options have a -Z added so that they can get to specs -; processing without interference. Note that an option name with a -; prefix that matches another option name, that also takes an -; argument, being mapped to a -Z linker option, needs to be modified -; so the prefix is different, otherwise a '*' after the shorter option -; will match with the longer one. +; We have a lot of Driver options, many of which are obsolete or very very +; rarely used so, to keep this file easier to manage: +; Please place all Non-driver options first (in alphabetical order), followed +; by Driver-only options. + +; Non-driver options. + +dependency-file +C ObjC C++ ObjC++ Separate Alias(MF) MissingArgError(missing filename after %qs) + +fapple-kext +Target Report C++ Var(flag_apple_kext) +Generate code for darwin loadable kernel extensions. + +iframework +Target RejectNegative C ObjC C++ ObjC++ Joined Separate +-iframework Add to the end of the system framework include path. + +mconstant-cfstrings +Target Report Var(darwin_constant_cfstrings) Init(1) +Generate compile-time CFString objects. + +Wnonportable-cfstrings +Target Report Var(darwin_warn_nonportable_cfstrings) Init(1) Warning +Warn if constant CFString objects contain non-portable characters. + +; Use new-style pic stubs if this is true, x86 only so far. +matt-stubs +Target Report Var(darwin_macho_att_stub) Init(1) +Generate AT&T-style stubs for Mach-O. + +mdynamic-no-pic +Target Common Report Mask(MACHO_DYNAMIC_NO_PIC) +Generate code suitable for executables (NOT shared libs). + +mfix-and-continue +Target Report Var(darwin_fix_and_continue) +Generate code suitable for fast turn around debugging. + +mkernel +Target Report Var(flag_mkernel) +Generate code for the kernel or loadable kernel extensions. + +; The Init here is for the convenience of GCC developers, so that cc1 +; and cc1plus don't crash if no -mmacosx-version-min is passed. The +; driver will always pass a -mmacosx-version-min, so in normal use the +; Init is never used. +mmacosx-version-min= +Target RejectNegative Joined Report Var(darwin_macosx_version_min) Init(DEF_MIN_OSX_VERSION) +The earliest MacOS X version on which this program will run. + +; Really, only relevant to PowerPC which has a 4 byte bool by default. +mone-byte-bool +Target RejectNegative Report Var(darwin_one_byte_bool) +Set sizeof(bool) to 1. + +msymbol-stubs +Target Report Var(darwin_symbol_stubs) Init(0) +Force generation of external symbol indirection stubs. + +; Some code-gen may be improved / adjusted if the linker is sufficiently modern. +mtarget-linker= +Target RejectNegative Joined Report Alias(mtarget-linker) + +mtarget-linker +Target RejectNegative Joined Separate Report Var(darwin_target_linker) Init(LD64_VERSION) +The version of ld64 in use for this toolchain. + +; Driver options. + all_load -Driver Alias(Zall_load) +Driver RejectNegative Alias(Zall_load) +Loads all members of archive libraries allowable_client -Driver Separate Alias(Zallowable_client) +Driver RejectNegative Separate Alias(Zallowable_client) +-allowable_client The output dylib is private to the client(s) named arch Driver RejectNegative Separate +-arch Specify that the output file should be generated for architecture \"name\" arch_errors_fatal -Driver Alias(Zarch_errors_fatal) +Driver RejectNegative Alias(Zarch_errors_fatal) +Mismatches between file architecture and the \"-arch\" are errors instead of warnings asm_macosx_version_min= Driver RejectNegative Joined +The earliest MacOS X version on which this program will run (formatted for the assembler) bind_at_load -Driver Alias(Zbind_at_load) +Driver RejectNegative Alias(Zbind_at_load) +Produce an output file that will bind symbols on load, rather than lazily. bundle -Driver Alias(Zbundle) +Driver RejectNegative Alias(Zbundle) +Produce a Mach-O bundle (file type MH_BUNDLE) bundle_loader -Driver Separate Alias(Zbundle_loader) +Driver RejectNegative Separate Alias(Zbundle_loader) +-bundle_loader Treat \"executable\" (that will be loading this bundle) as if it was one of the dynamic libraries the bundle is linked against for symbol resolution +client_name +Driver RejectNegative Separate +-client_name Enable the executable being built to link against a private dylib (using allowable_client) + +compatibility_version +Driver RejectNegative Separate +-compatibility_version Set the minimum version for the client interface. Clients must record a greater number than this or the binding will fail at runtime + +current_version +Driver RejectNegative Separate +-current_version Set the current version for the library. + dead_strip -Driver Alias(Zdead_strip) +Driver RejectNegative Alias(Zdead_strip) +Remove code and data that is unreachable from any exported symbol (including the entry point) -dependency-file -C ObjC C++ ObjC++ Separate Alias(MF) MissingArgError(missing filename after %qs) - dylib_file Driver Separate Alias(Zdylib_file) dylinker -Driver +Driver RejectNegative +Produce a Mach-O dylinker (file type MH_DYLINKER), only used for building dyld. +dylinker_install_name +Driver RejectNegative Separate +-dylinker_install_name Only used for building dyld. + dynamic -Driver Alias(Zdynamic) +Driver RejectNegative Alias(Zdynamic) +The default (and opposite of -static), implied by user mode executables, shared libraries and bundles. dynamiclib -Driver Alias(Zdynamiclib) +Driver RejectNegative Alias(Zdynamiclib) +Produce a Mach-O shared library (file type MH_DYLIB), synonym for -shared exported_symbols_list -Driver Separate Alias(Zexported_symbols_list) +Driver RejectNegative Separate Alias(Zexported_symbols_list) +-exported_symbols_list Global symbols in \"filename\" will be exported from the linked output file, any symbols not mentioned will be treated as hidden. filelist Driver RejectNegative Separate +Supply a list of objects to be linked from a file, rather than the command line findirect-virtual-calls Driver RejectNegative +Used for generating code for some older kernel revisions. flat_namespace Driver RejectNegative Alias(Zflat_namespace) +Ignore the normal two-level namespace; resolve symbols in command line order and do not record which library provided the resolved symbol. force_cpusubtype_ALL Driver RejectNegative Alias(Zforce_cpusubtype_ALL) +For the assembler (and linker) permit any architecture sub-variant to be used without error. force_flat_namespace Driver RejectNegative Alias(Zforce_flat_namespace) +Set the output object such that, on loading, dyld will ignore any two-level information and resolve symbols in the discovery order for loaded libs. framework Driver RejectNegative Separate +-framework The linker should search for the named framework in the framework search path. fterminated-vtables Driver RejectNegative +Used for generating code for some older kernel revisions. gfull Driver RejectNegative +Abbreviation for \"-g -fno-eliminate-unused-debug-symbols\" gused Driver RejectNegative +Abbreviation for \"-g -feliminate-unused-debug-symbols\" headerpad_max_install_names -Driver +Driver RejectNegative +Automatically adds space for longer path names in load commands (up to MAXPATHLEN) image_base -Driver Separate Alias(Zimage_base) +Driver RejectNegative Separate Alias(Zimage_base) +-image_base
Choose a base address for a dylib or bundle. init -Driver Separate Alias(Zinit) +Driver RejectNegative Separate Alias(Zinit) +-init The symbol \"symbol_name\" will be used as the first initialiser for a dylib. install_name -Driver Separate Alias(Zinstall_name) +Driver RejectNegative Separate Alias(Zinstall_name) +-install_name Set the install name for a dylib. keep_private_externs -Driver +Driver RejectNegative +Usually \"private extern\" (hidden) symbols are made local when linking, this command suppresses that such that they remain exported. -mconstant-cfstrings -Target Report Var(darwin_constant_cfstrings) Init(1) -Generate compile-time CFString objects. - multi_module Driver RejectNegative Alias(Zmulti_module) +(Obsolete after 10.4) Multi modules are ignored at runtime since MacOS 10.4 multiply_defined Driver RejectNegative Separate Alias(Zmultiply_defined) +(Obsolete after 10.4) -multiply_defined Provided a mechanism for warning about symbols defined in multiple dylibs. multiply_defined_unused Driver RejectNegative Separate Alias(Zmultiplydefinedunused) +(Obsolete after 10.4) -multiply_defined_unused Provided a mechanism for warning about symbols defined in the current executable also being defined in linked dylibs. no_dead_strip_inits_and_terms -Driver Alias(Zno_dead_strip_inits_and_terms) +Driver RejectNegative Alias(Zno_dead_strip_inits_and_terms) +(Obsolete) The linker never dead strips these items, so the option is not needed. nofixprebinding -Driver +Driver RejectNegative +(Obsolete after 10.3.9) Set MH_NOPREFIXBINDING, in an exectuable. nomultidefs -Driver +Driver RejectNegative +(Obsolete after 10.4) Set MH_NOMULTIDEFS in an umbrella framework. noprebind -Driver +Driver RejectNegative Negative(prebind) +(Obsolete) LD_PREBIND is no longer supported. noseglinkedit -Driver +Driver RejectNegative Negative(seglinkedit) +(Obsolete) This is the default. object -Driver +Driver RejectNegative +pagezero_size +Driver RejectNegative Separate +-pagezero_size size Allows setting the page 0 size to 4kb for certain special cases. + prebind -Driver +Driver RejectNegative Negative(noprebind) +(Obsolete) LD_PREBIND is no longer supported. prebind_all_twolevel_modules -Driver +Driver RejectNegative +(Obsolete) LD_PREBIND is no longer supported. preload -Driver +Driver RejectNegative +Produces a Mach-O file suitable for embedded/ROM use. private_bundle -Driver +Driver RejectNegative +(Obsolete) Allowed linking to proceed with \"-flat_namespace\" when a linked bundle contained a symbol also exported from the main executable. pthread -Driver +Driver RejectNegative rdynamic -Driver +Driver RejectNegative +Synonym for \"-export-dynamic\" for linker versions that support it. +read_only_relocs +Driver RejectNegative Separate +-read_only_relocs This will allow relocs in read-only pages (not advisable). + +sectalign +Driver RejectNegative Separate Args(3) +-sectalign Set section \"sectname\" in segment \"segname\" to have alignment \"value\" which must be an integral power of two expressed in hexadecimal form. + +sectcreate +Driver RejectNegative Separate Args(3) +-sectcreate Create section \"sectname\" in segment \"segname\" from the contents of \"file\". + +sectobjectsymbols +Driver RejectNegative Separate Args(2) +(Obsolete) -sectobjectsymbols Setting a local symbol at the start of a section is no longer supported. + +sectorder +Driver RejectNegative Separate Args(3) +(Obsolete) -sectorder orderfile Replaced by a more general option \"-order_file\". + seg_addr_table -Driver Separate Alias(Zseg_addr_table) +Driver RejectNegative Separate Alias(Zseg_addr_table) +-seg_addr_table Specify the base addresses for dynamic libraries, \"file\" contains a line for each library. +; This is only usable by the ld_classic linker. seg_addr_table_filename -Driver Separate Alias(Zfn_seg_addr_table_filename) +Driver RejectNegative Separate Alias(Zfn_seg_addr_table_filename) +(Obsolete, ld_classic only) -seg_addr_table_filename +seg1addr +Driver RejectNegative Separate +Synonym for \"image_base\" + segaddr -Driver Separate Args(2) Alias(Zsegaddr) +Driver RejectNegative Separate Args(2) Alias(Zsegaddr) +-segaddr
Set the base address of segment \"name\" to \"address\" which must be aligned to a page boundary (currently 4kb). +; This is only usable by the ld_classic linker. +segcreate +Driver RejectNegative Separate Args(3) +(Obsolete, ld_classic only) -sectcreate segname sectname file + seglinkedit -Driver +Driver RejectNegative Negative(noseglinkedit) +(Obsolete) Object files with LINKEDIT sections are no longer supported. +segprot +Driver RejectNegative Separate Args(3) +-segprot max_prot init_prot The protection values are \"r\", \"w\", \"x\" or \"-\" the latter meaning \"no access\". + segs_read_only_addr -Driver Separate Alias(Zsegs_read_only_addr) +Driver RejectNegative Separate Alias(Zsegs_read_only_addr) +-segs_read_only_addr address Allows specifying the address of the read only portion of a dylib. segs_read_write_addr -Driver Separate Alias(Zsegs_read_write_addr) +Driver RejectNegative Separate Alias(Zsegs_read_write_addr) +-segs_read_write_addr address Allows specifying the address of the read/write portion of a dylib. single_module -Driver Alias(Zsingle_module) +Driver RejectNegative Alias(Zsingle_module) +(Obsolete) This is the default. +sub_library +Driver RejectNegative Separate +-sub_library Library named \"name\" will be re-exported (only useful for dylibs). + +sub_umbrella +Driver RejectNegative Separate +-sub_umbrella Framework named \"name\" will be re-exported (only useful for dylibs). + twolevel_namespace -Driver +Driver RejectNegative +This is the default twolevel_namespace_hints -Driver +Driver RejectNegative +Specifies content that can speed up dynamic loading when the binaries are unchanged. umbrella -Driver Separate Alias(Zumbrella) +Driver RejectNegative Separate Alias(Zumbrella) +-umbrella The specified framework will be re-exported. +undefined +Driver RejectNegative Separate +-undefined Specify the handling for undefined symbols (default is error). + unexported_symbols_list -Driver Separate Alias(Zunexported_symbols_list) +Driver RejectNegative Separate Alias(Zunexported_symbols_list) +-unexported_symbols_list Don't export global symbols listed in filename. weak_reference_mismatches -Driver Separate Alias(Zweak_reference_mismatches) +Driver RejectNegative Separate Alias(Zweak_reference_mismatches) +-weak_reference_mismatches Specifies what to do if a symbol import conflicts between file (weak in one and not in another) the default is to treat the symbol as non-weak. whatsloaded -Driver +Driver RejectNegative +Logs the object files the linker loads whyload -Driver +Driver RejectNegative +Logs which symbol(s) caused an object to be loaded. +;(Obsolete, ignored) Strip symbols starting with "L", this is the default. +X +Driver RejectNegative + y -Driver Joined +Driver RejectNegative Joined +(Obsolete, ignored) Old support similar to whyload. Mach -Driver +Driver RejectNegative +(Obsolete and unhandled by ld64, ignored) ld should produce an executable (only handled by ld_classic). -Wnonportable-cfstrings -Target Report Var(darwin_warn_nonportable_cfstrings) Init(1) Warning -Warn if constant CFString objects contain non-portable characters. +;; These are not "real" options, but placeholders used to hide the real options +;; from generic options processing... FIXME: they can be eliminated now. -; Use new-style pic stubs if this is true, x86 only so far. -matt-stubs -Target Report Var(darwin_macho_att_stub) Init(1) -Generate AT&T-style stubs for Mach-O. - -mdynamic-no-pic -Target Common Report Mask(MACHO_DYNAMIC_NO_PIC) -Generate code suitable for executables (NOT shared libs). - -mfix-and-continue -Target Report Var(darwin_fix_and_continue) -Generate code suitable for fast turn around debugging. - -; The Init here is for the convenience of GCC developers, so that cc1 -; and cc1plus don't crash if no -mmacosx-version-min is passed. The -; driver will always pass a -mmacosx-version-min, so in normal use the -; Init is never used. -mmacosx-version-min= -Target Joined Report Var(darwin_macosx_version_min) Init(DEF_MIN_OSX_VERSION) -The earliest MacOS X version on which this program will run. - -mone-byte-bool -Target RejectNegative Report Var(darwin_one_byte_bool) -Set sizeof(bool) to 1. - -fapple-kext -Target Report C++ Var(flag_apple_kext) -Generate code for darwin loadable kernel extensions. - -mkernel -Target Report Var(flag_mkernel) -Generate code for the kernel or loadable kernel extensions. - -iframework -Target RejectNegative C ObjC C++ ObjC++ Joined Separate --iframework Add to the end of the system framework include path. - -X -Driver - Zall_load Driver @@ -343,62 +485,3 @@ Zweak_reference_mismatches Driver Separate -client_name -Driver Separate - -compatibility_version -Driver Separate - -current_version -Driver Separate - -dylinker_install_name -Driver Separate - -pagezero_size -Driver Separate - -read_only_relocs -Driver Separate - -sectalign -Driver Separate Args(3) - -sectcreate -Driver Separate Args(3) - -sectobjectsymbols -Driver Separate Args(2) - -sectorder -Driver Separate Args(3) - -seg1addr -Driver Separate - -segcreate -Driver Separate Args(3) - -segprot -Driver Separate Args(3) - -segs_read_only_addr -Driver Separate - -segs_read_write_addr -Driver Separate - -sub_library -Driver Separate - -sub_umbrella -Driver Separate - -; Certain aspects of code-gen may be improved / adjusted if the version of ld64 -; is sufficiently modern. -mtarget-linker -Target RejectNegative Joined Separate Report Var(darwin_target_linker) Init(LD64_VERSION) -The version of ld64 in use for this toolchain. - -undefined -Driver Separate Index: gcc/config/i386/i386.h =================================================================== --- a/src/gcc/config/i386/i386.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/i386/i386.h (.../branches/gcc-9-branch) @@ -640,7 +640,7 @@ /* Replace MACH-O, ifdefs by in-line tests, where possible. (a) Macros defined in config/i386/darwin.h */ #define TARGET_MACHO 0 -#define TARGET_MACHO_BRANCH_ISLANDS 0 +#define TARGET_MACHO_SYMBOL_STUBS 0 #define MACHOPIC_ATT_STUB 0 /* (b) Macros defined in config/darwin.h */ #define MACHO_DYNAMIC_NO_PIC_P 0 Index: gcc/config/i386/avx2intrin.h =================================================================== --- a/src/gcc/config/i386/avx2intrin.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/i386/avx2intrin.h (.../branches/gcc-9-branch) @@ -258,7 +258,7 @@ __attribute__ ((__gnu_inline__, __always_inline__, __artificial__)) _mm256_cmpgt_epi8 (__m256i __A, __m256i __B) { - return (__m256i) ((__v32qi)__A > (__v32qi)__B); + return (__m256i) ((__v32qs)__A > (__v32qs)__B); } extern __inline __m256i Index: gcc/config/i386/sse.md =================================================================== --- a/src/gcc/config/i386/sse.md (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/i386/sse.md (.../branches/gcc-9-branch) @@ -2625,7 +2625,7 @@ ;; Modes handled by reduc_sm{in,ax}* patterns. (define_mode_iterator REDUC_SSE_SMINMAX_MODE [(V4SF "TARGET_SSE") (V2DF "TARGET_SSE") - (V2DI "TARGET_SSE") (V4SI "TARGET_SSE") (V8HI "TARGET_SSE") + (V2DI "TARGET_SSE4_2") (V4SI "TARGET_SSE") (V8HI "TARGET_SSE") (V16QI "TARGET_SSE")]) (define_expand "reduc__scal_" @@ -16241,7 +16241,7 @@ } }) -(define_insn "abs2" +(define_insn "ssse3_abs2" [(set (match_operand:MMXMODEI 0 "register_operand" "=y") (abs:MMXMODEI (match_operand:MMXMODEI 1 "nonimmediate_operand" "ym")))] Index: gcc/config/i386/i386-builtin.def =================================================================== --- a/src/gcc/config/i386/i386-builtin.def (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/i386/i386-builtin.def (.../branches/gcc-9-branch) @@ -818,11 +818,11 @@ /* SSSE3 */ BDESC (OPTION_MASK_ISA_SSSE3, 0, CODE_FOR_absv16qi2, "__builtin_ia32_pabsb128", IX86_BUILTIN_PABSB128, UNKNOWN, (int) V16QI_FTYPE_V16QI) -BDESC (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_MMX, 0, CODE_FOR_absv8qi2, "__builtin_ia32_pabsb", IX86_BUILTIN_PABSB, UNKNOWN, (int) V8QI_FTYPE_V8QI) +BDESC (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_MMX, 0, CODE_FOR_ssse3_absv8qi2, "__builtin_ia32_pabsb", IX86_BUILTIN_PABSB, UNKNOWN, (int) V8QI_FTYPE_V8QI) BDESC (OPTION_MASK_ISA_SSSE3, 0, CODE_FOR_absv8hi2, "__builtin_ia32_pabsw128", IX86_BUILTIN_PABSW128, UNKNOWN, (int) V8HI_FTYPE_V8HI) -BDESC (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_MMX, 0, CODE_FOR_absv4hi2, "__builtin_ia32_pabsw", IX86_BUILTIN_PABSW, UNKNOWN, (int) V4HI_FTYPE_V4HI) +BDESC (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_MMX, 0, CODE_FOR_ssse3_absv4hi2, "__builtin_ia32_pabsw", IX86_BUILTIN_PABSW, UNKNOWN, (int) V4HI_FTYPE_V4HI) BDESC (OPTION_MASK_ISA_SSSE3, 0, CODE_FOR_absv4si2, "__builtin_ia32_pabsd128", IX86_BUILTIN_PABSD128, UNKNOWN, (int) V4SI_FTYPE_V4SI) -BDESC (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_MMX, 0, CODE_FOR_absv2si2, "__builtin_ia32_pabsd", IX86_BUILTIN_PABSD, UNKNOWN, (int) V2SI_FTYPE_V2SI) +BDESC (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_MMX, 0, CODE_FOR_ssse3_absv2si2, "__builtin_ia32_pabsd", IX86_BUILTIN_PABSD, UNKNOWN, (int) V2SI_FTYPE_V2SI) BDESC (OPTION_MASK_ISA_SSSE3, 0, CODE_FOR_ssse3_phaddwv8hi3, "__builtin_ia32_phaddw128", IX86_BUILTIN_PHADDW128, UNKNOWN, (int) V8HI_FTYPE_V8HI_V8HI) BDESC (OPTION_MASK_ISA_SSSE3 | OPTION_MASK_ISA_MMX, 0, CODE_FOR_ssse3_phaddwv4hi3, "__builtin_ia32_phaddw", IX86_BUILTIN_PHADDW, UNKNOWN, (int) V4HI_FTYPE_V4HI_V4HI) Index: gcc/config/i386/darwin.h =================================================================== --- a/src/gcc/config/i386/darwin.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/i386/darwin.h (.../branches/gcc-9-branch) @@ -90,14 +90,12 @@ #undef WCHAR_TYPE_SIZE #define WCHAR_TYPE_SIZE 32 -/* Generate branch islands stubs if this is true. */ -extern int darwin_emit_branch_islands; +/* Generate pic symbol indirection stubs if this is true. */ +#undef TARGET_MACHO_SYMBOL_STUBS +#define TARGET_MACHO_SYMBOL_STUBS (darwin_symbol_stubs) -#undef TARGET_MACHO_BRANCH_ISLANDS -#define TARGET_MACHO_BRANCH_ISLANDS darwin_emit_branch_islands - /* For compatibility with OSX system tools, use the new style of pic stub - if this is set. */ + if this is set (default). */ #undef MACHOPIC_ATT_STUB #define MACHOPIC_ATT_STUB (darwin_macho_att_stub) @@ -245,7 +243,7 @@ #undef FUNCTION_PROFILER #define FUNCTION_PROFILER(FILE, LABELNO) \ do { \ - if (TARGET_MACHO_BRANCH_ISLANDS \ + if (TARGET_MACHO_SYMBOL_STUBS \ && MACHOPIC_INDIRECT && !TARGET_64BIT) \ { \ const char *name = machopic_mcount_stub_name (); \ @@ -326,10 +324,8 @@ } \ } -/* This needs to move since i386 uses the first flag and other flags are - used in Mach-O. */ -#undef MACHO_SYMBOL_FLAG_VARIABLE -#define MACHO_SYMBOL_FLAG_VARIABLE ((SYMBOL_FLAG_MACH_DEP) << 3) +/* First available SYMBOL flag bit for use by subtargets. */ +#define SYMBOL_FLAG_SUBT_DEP (SYMBOL_FLAG_MACH_DEP << 5) #undef MACHOPIC_NL_SYMBOL_PTR_SECTION #define MACHOPIC_NL_SYMBOL_PTR_SECTION \ Index: gcc/config/i386/emmintrin.h =================================================================== --- a/src/gcc/config/i386/emmintrin.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/i386/emmintrin.h (.../branches/gcc-9-branch) @@ -1308,7 +1308,7 @@ extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) _mm_cmpeq_epi8 (__m128i __A, __m128i __B) { - return (__m128i) ((__v16qs)__A == (__v16qs)__B); + return (__m128i) ((__v16qi)__A == (__v16qi)__B); } extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__)) Index: gcc/config/i386/avxintrin.h =================================================================== --- a/src/gcc/config/i386/avxintrin.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/i386/avxintrin.h (.../branches/gcc-9-branch) @@ -47,6 +47,7 @@ typedef short __v16hi __attribute__ ((__vector_size__ (32))); typedef unsigned short __v16hu __attribute__ ((__vector_size__ (32))); typedef char __v32qi __attribute__ ((__vector_size__ (32))); +typedef signed char __v32qs __attribute__ ((__vector_size__ (32))); typedef unsigned char __v32qu __attribute__ ((__vector_size__ (32))); /* The Intel API is flexible enough that we must allow aliasing with other Index: gcc/config/i386/i386.c =================================================================== --- a/src/gcc/config/i386/i386.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/i386/i386.c (.../branches/gcc-9-branch) @@ -16960,7 +16960,7 @@ break; case SYMBOL_REF: - if (TARGET_64BIT || ! TARGET_MACHO_BRANCH_ISLANDS) + if (TARGET_64BIT || ! TARGET_MACHO_SYMBOL_STUBS) output_addr_const (file, x); else { Index: gcc/config/darwin-protos.h =================================================================== --- a/src/gcc/config/darwin-protos.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/darwin-protos.h (.../branches/gcc-9-branch) @@ -53,8 +53,6 @@ #endif /* TREE_CODE */ -extern void machopic_finish (FILE *); - extern int machopic_reloc_rw_mask (void); extern section *machopic_select_section (tree, int, unsigned HOST_WIDE_INT); Index: gcc/config/sh/sh.c =================================================================== --- a/src/gcc/config/sh/sh.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/sh/sh.c (.../branches/gcc-9-branch) @@ -664,6 +664,9 @@ #undef TARGET_CONSTANT_ALIGNMENT #define TARGET_CONSTANT_ALIGNMENT constant_alignment_word_strings +#undef TARGET_HAVE_SPECULATION_SAFE_VALUE +#define TARGET_HAVE_SPECULATION_SAFE_VALUE speculation_safe_value_not_needed + struct gcc_target targetm = TARGET_INITIALIZER; @@ -737,7 +740,7 @@ { if (tokens[i] == "strict") ret.strict = true; - else if (tokens[i].find ("gbr-offset=") == 0) + else if (!tokens[i].compare (0, strlen ("gbr-offset="), "gbr-offset=")) { std::string offset_str = tokens[i].substr (strlen ("gbr-offset=")); ret.tcb_gbr_offset = integral_argument (offset_str.c_str ()); @@ -958,11 +961,13 @@ if (flag_unsafe_math_optimizations) { /* Enable fsca insn for SH4A if not otherwise specified by the user. */ - if (global_options_set.x_TARGET_FSCA == 0 && TARGET_SH4A_FP) + if (global_options_set.x_TARGET_FSCA == 0 + && (TARGET_SH4A_FP || TARGET_FPU_SH4_300)) TARGET_FSCA = 1; /* Enable fsrra insn for SH4A if not otherwise specified by the user. */ - if (global_options_set.x_TARGET_FSRRA == 0 && TARGET_SH4A_FP) + if (global_options_set.x_TARGET_FSRRA == 0 + && (TARGET_SH4A_FP || TARGET_FPU_SH4_300)) TARGET_FSRRA = 1; } @@ -12087,9 +12092,11 @@ rtx r = gen_reg_rtx (SImode); rtx_insn* i0; if (from_mode == QImode) - i0 = emit_insn_after (gen_extendqisi2 (r, set_src), insn); + i0 = sh_check_add_incdec_notes ( + emit_insn_after (gen_extendqisi2 (r, set_src), insn)); else if (from_mode == HImode) - i0 = emit_insn_after (gen_extendhisi2 (r, set_src), insn); + i0 = sh_check_add_incdec_notes ( + emit_insn_after (gen_extendhisi2 (r, set_src), insn)); else gcc_unreachable (); @@ -12507,7 +12514,7 @@ sh_emit_mode_set (int entity ATTRIBUTE_UNUSED, int mode, int prev_mode, HARD_REG_SET regs_live ATTRIBUTE_UNUSED) { - if ((TARGET_SH4A_FP || TARGET_SH4_300) + if ((TARGET_SH4A_FP || TARGET_FPU_SH4_300) && prev_mode != FP_MODE_NONE && prev_mode != mode) { emit_insn (gen_toggle_pr ()); Index: gcc/config/sh/sh.h =================================================================== --- a/src/gcc/config/sh/sh.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/sh/sh.h (.../branches/gcc-9-branch) @@ -69,6 +69,8 @@ FPU is disabled (which makes it compatible with SH4al-dsp). */ #define TARGET_SH4A_FP (TARGET_SH4A && TARGET_FPU_ANY) +/* True if the FPU is a SH4-300 variant. */ +#define TARGET_FPU_SH4_300 (TARGET_FPU_ANY && TARGET_SH4_300) /* This is not used by the SH2E calling convention */ #define TARGET_VARARGS_PRETEND_ARGS(FUN_DECL) \ Index: gcc/config/sh/sh.md =================================================================== --- a/src/gcc/config/sh/sh.md (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/sh/sh.md (.../branches/gcc-9-branch) @@ -9163,7 +9163,7 @@ (xor:SI (reg:SI FPSCR_REG) (const_int FPSCR_PR))) (set (reg:SI FPSCR_MODES_REG) (unspec_volatile:SI [(const_int 0)] UNSPECV_FPSCR_MODES))] - "TARGET_SH4A_FP" + "TARGET_SH4A_FP || TARGET_FPU_SH4_300" "fpchg" [(set_attr "type" "fpscr_toggle")]) @@ -9391,15 +9391,31 @@ (define_expand "negsf2" [(set (match_operand:SF 0 "fp_arith_reg_operand") (neg:SF (match_operand:SF 1 "fp_arith_reg_operand")))] - "TARGET_SH2E") + "TARGET_FPU_ANY" +{ + if (TARGET_FPU_SH4_300) + emit_insn (gen_negsf2_fpscr (operands[0], operands[1])); + else + emit_insn (gen_negsf2_no_fpscr (operands[0], operands[1])); + DONE; +}) -(define_insn "*negsf2_i" +(define_insn "negsf2_no_fpscr" [(set (match_operand:SF 0 "fp_arith_reg_operand" "=f") (neg:SF (match_operand:SF 1 "fp_arith_reg_operand" "0")))] - "TARGET_SH2E" + "TARGET_FPU_ANY && !TARGET_FPU_SH4_300" "fneg %0" [(set_attr "type" "fmove")]) +(define_insn "negsf2_fpscr" + [(set (match_operand:SF 0 "fp_arith_reg_operand" "=f") + (neg:SF (match_operand:SF 1 "fp_arith_reg_operand" "0"))) + (use (reg:SI FPSCR_MODES_REG))] + "TARGET_FPU_SH4_300" + "fneg %0" + [(set_attr "type" "fmove") + (set_attr "fp_mode" "single")]) + (define_expand "sqrtsf2" [(set (match_operand:SF 0 "fp_arith_reg_operand" "") (sqrt:SF (match_operand:SF 1 "fp_arith_reg_operand" "")))] @@ -9489,15 +9505,31 @@ (define_expand "abssf2" [(set (match_operand:SF 0 "fp_arith_reg_operand") (abs:SF (match_operand:SF 1 "fp_arith_reg_operand")))] - "TARGET_SH2E") + "TARGET_FPU_ANY" +{ + if (TARGET_FPU_SH4_300) + emit_insn (gen_abssf2_fpscr (operands[0], operands[1])); + else + emit_insn (gen_abssf2_no_fpscr (operands[0], operands[1])); + DONE; +}) -(define_insn "*abssf2_i" +(define_insn "abssf2_no_fpscr" [(set (match_operand:SF 0 "fp_arith_reg_operand" "=f") (abs:SF (match_operand:SF 1 "fp_arith_reg_operand" "0")))] - "TARGET_SH2E" + "TARGET_FPU_ANY && !TARGET_FPU_SH4_300" "fabs %0" [(set_attr "type" "fmove")]) +(define_insn "abssf2_fpscr" + [(set (match_operand:SF 0 "fp_arith_reg_operand" "=f") + (abs:SF (match_operand:SF 1 "fp_arith_reg_operand" "0"))) + (use (reg:SI FPSCR_MODES_REG))] + "TARGET_FPU_SH4_300" + "fabs %0" + [(set_attr "type" "fmove") + (set_attr "fp_mode" "single")]) + (define_expand "adddf3" [(set (match_operand:DF 0 "fp_arith_reg_operand" "") (plus:DF (match_operand:DF 1 "fp_arith_reg_operand" "") @@ -9673,12 +9705,28 @@ (define_expand "negdf2" [(set (match_operand:DF 0 "fp_arith_reg_operand") (neg:DF (match_operand:DF 1 "fp_arith_reg_operand")))] - "TARGET_FPU_DOUBLE") + "TARGET_FPU_DOUBLE" +{ + if (TARGET_FPU_SH4_300) + emit_insn (gen_negdf2_fpscr (operands[0], operands[1])); + else + emit_insn (gen_negdf2_no_fpscr (operands[0], operands[1])); + DONE; +}) -(define_insn "*negdf2_i" +(define_insn "negdf2_fpscr" [(set (match_operand:DF 0 "fp_arith_reg_operand" "=f") + (neg:DF (match_operand:DF 1 "fp_arith_reg_operand" "0"))) + (use (reg:SI FPSCR_MODES_REG))] + "TARGET_FPU_SH4_300" + "fneg %0" + [(set_attr "type" "fmove") + (set_attr "fp_mode" "double")]) + +(define_insn "negdf2_no_fpscr" + [(set (match_operand:DF 0 "fp_arith_reg_operand" "=f") (neg:DF (match_operand:DF 1 "fp_arith_reg_operand" "0")))] - "TARGET_FPU_DOUBLE" + "TARGET_FPU_DOUBLE && !TARGET_FPU_SH4_300" "fneg %0" [(set_attr "type" "fmove")]) @@ -9704,15 +9752,31 @@ (define_expand "absdf2" [(set (match_operand:DF 0 "fp_arith_reg_operand") (abs:DF (match_operand:DF 1 "fp_arith_reg_operand")))] - "TARGET_FPU_DOUBLE") + "TARGET_FPU_DOUBLE" +{ + if (TARGET_FPU_SH4_300) + emit_insn (gen_absdf2_fpscr (operands[0], operands[1])); + else + emit_insn (gen_absdf2_no_fpscr (operands[0], operands[1])); + DONE; +}) -(define_insn "*absdf2_i" +(define_insn "absdf2_no_fpscr" [(set (match_operand:DF 0 "fp_arith_reg_operand" "=f") (abs:DF (match_operand:DF 1 "fp_arith_reg_operand" "0")))] - "TARGET_FPU_DOUBLE" + "TARGET_FPU_DOUBLE && !TARGET_FPU_SH4_300" "fabs %0" [(set_attr "type" "fmove")]) +(define_insn "absdf2_fpscr" + [(set (match_operand:DF 0 "fp_arith_reg_operand" "=f") + (abs:DF (match_operand:DF 1 "fp_arith_reg_operand" "0"))) + (use (reg:SI FPSCR_MODES_REG))] + "TARGET_FPU_SH4_300" + "fabs %0" + [(set_attr "type" "fmove") + (set_attr "fp_mode" "double")]) + (define_expand "extendsfdf2" [(set (match_operand:DF 0 "fp_arith_reg_operand" "") (float_extend:DF (match_operand:SF 1 "fpul_operand" "")))] Index: gcc/config/avr/avr.c =================================================================== --- a/src/gcc/config/avr/avr.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/avr/avr.c (.../branches/gcc-9-branch) @@ -3797,13 +3797,14 @@ gcc_unreachable(); case 1: - return avr_asm_len ("%4lpm %0,%a2", xop, plen, 1); + avr_asm_len ("%4lpm %0,%a2", xop, plen, 1); + break; case 2: if (REGNO (dest) == REG_Z) - return avr_asm_len ("%4lpm %5,%a2+" CR_TAB - "%4lpm %B0,%a2" CR_TAB - "mov %A0,%5", xop, plen, 3); + avr_asm_len ("%4lpm %5,%a2+" CR_TAB + "%4lpm %B0,%a2" CR_TAB + "mov %A0,%5", xop, plen, 3); else { avr_asm_len ("%4lpm %A0,%a2+" CR_TAB @@ -3832,9 +3833,9 @@ "%4lpm %B0,%a2+", xop, plen, 2); if (REGNO (dest) == REG_Z - 2) - return avr_asm_len ("%4lpm %5,%a2+" CR_TAB - "%4lpm %C0,%a2" CR_TAB - "mov %D0,%5", xop, plen, 3); + avr_asm_len ("%4lpm %5,%a2+" CR_TAB + "%4lpm %C0,%a2" CR_TAB + "mov %D0,%5", xop, plen, 3); else { avr_asm_len ("%4lpm %C0,%a2+" CR_TAB Index: gcc/config/xtensa/xtensa.c =================================================================== --- a/src/gcc/config/xtensa/xtensa.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/xtensa/xtensa.c (.../branches/gcc-9-branch) @@ -2865,7 +2865,8 @@ gen_rtx_SET (mem, reg)); } } - if (total_size > 1024) + if (total_size > 1024 + || (!callee_save_size && total_size > 128)) { rtx tmp_reg = gen_rtx_REG (Pmode, A9_REG); emit_move_insn (tmp_reg, GEN_INT (total_size - Index: gcc/config/riscv/riscv.md =================================================================== --- a/src/gcc/config/riscv/riscv.md (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/riscv/riscv.md (.../branches/gcc-9-branch) @@ -1051,7 +1051,9 @@ "@ # lwu\t%0,%1" - "&& reload_completed && REG_P (operands[1])" + "&& reload_completed + && REG_P (operands[1]) + && !paradoxical_subreg_p (operands[0])" [(set (match_dup 0) (ashift:DI (match_dup 1) (const_int 32))) (set (match_dup 0) @@ -1068,7 +1070,9 @@ "@ # lhu\t%0,%1" - "&& reload_completed && REG_P (operands[1])" + "&& reload_completed + && REG_P (operands[1]) + && !paradoxical_subreg_p (operands[0])" [(set (match_dup 0) (ashift:GPR (match_dup 1) (match_dup 2))) (set (match_dup 0) @@ -1117,7 +1121,9 @@ "@ # l\t%0,%1" - "&& reload_completed && REG_P (operands[1])" + "&& reload_completed + && REG_P (operands[1]) + && !paradoxical_subreg_p (operands[0])" [(set (match_dup 0) (ashift:SI (match_dup 1) (match_dup 2))) (set (match_dup 0) (ashiftrt:SI (match_dup 0) (match_dup 2)))] { @@ -1278,7 +1284,7 @@ "" [(const_int 0)] { - riscv_move_integer (operands[2], operands[0], INTVAL (operands[1])); + riscv_move_integer (operands[2], operands[0], INTVAL (operands[1]), TRUE); DONE; }) @@ -1287,11 +1293,11 @@ [(set (match_operand:P 0 "register_operand") (match_operand:P 1)) (clobber (match_operand:P 2 "register_operand"))] - "riscv_split_symbol (operands[2], operands[1], MAX_MACHINE_MODE, NULL)" + "riscv_split_symbol (operands[2], operands[1], MAX_MACHINE_MODE, NULL, TRUE)" [(set (match_dup 0) (match_dup 3))] { riscv_split_symbol (operands[2], operands[1], - MAX_MACHINE_MODE, &operands[3]); + MAX_MACHINE_MODE, &operands[3], TRUE); }) ;; 64-bit integer moves @@ -1765,15 +1771,20 @@ ;; Handle AND with 2^N-1 for N from 12 to XLEN. This can be split into ;; two logical shifts. Otherwise it requires 3 instructions: lui, ;; xor/addi/srli, and. + +;; Generating a temporary for the shift output gives better combiner results; +;; and also fixes a problem where op0 could be a paradoxical reg and shifting +;; by amounts larger than the size of the SUBREG_REG doesn't work. (define_split [(set (match_operand:GPR 0 "register_operand") (and:GPR (match_operand:GPR 1 "register_operand") - (match_operand:GPR 2 "p2m1_shift_operand")))] + (match_operand:GPR 2 "p2m1_shift_operand"))) + (clobber (match_operand:GPR 3 "register_operand"))] "" - [(set (match_dup 0) + [(set (match_dup 3) (ashift:GPR (match_dup 1) (match_dup 2))) (set (match_dup 0) - (lshiftrt:GPR (match_dup 0) (match_dup 2)))] + (lshiftrt:GPR (match_dup 3) (match_dup 2)))] { /* Op2 is a VOIDmode constant, so get the mode size from op1. */ operands[2] = GEN_INT (GET_MODE_BITSIZE (GET_MODE (operands[1])) @@ -1785,12 +1796,13 @@ (define_split [(set (match_operand:DI 0 "register_operand") (and:DI (match_operand:DI 1 "register_operand") - (match_operand:DI 2 "high_mask_shift_operand")))] + (match_operand:DI 2 "high_mask_shift_operand"))) + (clobber (match_operand:DI 3 "register_operand"))] "TARGET_64BIT" - [(set (match_dup 0) + [(set (match_dup 3) (lshiftrt:DI (match_dup 1) (match_dup 2))) (set (match_dup 0) - (ashift:DI (match_dup 0) (match_dup 2)))] + (ashift:DI (match_dup 3) (match_dup 2)))] { operands[2] = GEN_INT (ctz_hwi (INTVAL (operands[2]))); }) Index: gcc/config/riscv/riscv-protos.h =================================================================== --- a/src/gcc/config/riscv/riscv-protos.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/riscv/riscv-protos.h (.../branches/gcc-9-branch) @@ -44,10 +44,10 @@ extern int riscv_split_const_insns (rtx); extern int riscv_load_store_insns (rtx, rtx_insn *); extern rtx riscv_emit_move (rtx, rtx); -extern bool riscv_split_symbol (rtx, rtx, machine_mode, rtx *); +extern bool riscv_split_symbol (rtx, rtx, machine_mode, rtx *, bool); extern bool riscv_split_symbol_type (enum riscv_symbol_type); extern rtx riscv_unspec_address (rtx, enum riscv_symbol_type); -extern void riscv_move_integer (rtx, rtx, HOST_WIDE_INT); +extern void riscv_move_integer (rtx, rtx, HOST_WIDE_INT, bool); extern bool riscv_legitimize_move (machine_mode, rtx, rtx); extern rtx riscv_subword (rtx, bool); extern bool riscv_split_64bit_move_p (rtx, rtx); Index: gcc/config/riscv/riscv.c =================================================================== --- a/src/gcc/config/riscv/riscv.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/riscv/riscv.c (.../branches/gcc-9-branch) @@ -508,8 +508,8 @@ unsigned HOST_WIDE_INT hival = sext_hwi ((val - loval) >> 32, 32); rtx hi = gen_reg_rtx (mode), lo = gen_reg_rtx (mode); - riscv_move_integer (hi, hi, hival); - riscv_move_integer (lo, lo, loval); + riscv_move_integer (hi, hi, hival, FALSE); + riscv_move_integer (lo, lo, loval, FALSE); hi = gen_rtx_fmt_ee (ASHIFT, mode, hi, GEN_INT (32)); hi = force_reg (mode, hi); @@ -1021,9 +1021,12 @@ are allowed, copy it into a new register, otherwise use DEST. */ static rtx -riscv_force_temporary (rtx dest, rtx value) +riscv_force_temporary (rtx dest, rtx value, bool in_splitter) { - if (can_create_pseudo_p ()) + /* We can't call gen_reg_rtx from a splitter, because this might realloc + the regno_reg_rtx array, which would invalidate reg rtx pointers in the + combine undo buffer. */ + if (can_create_pseudo_p () && !in_splitter) return force_reg (Pmode, value); else { @@ -1082,7 +1085,7 @@ riscv_unspec_offset_high (rtx temp, rtx addr, enum riscv_symbol_type symbol_type) { addr = gen_rtx_HIGH (Pmode, riscv_unspec_address (addr, symbol_type)); - return riscv_force_temporary (temp, addr); + return riscv_force_temporary (temp, addr, FALSE); } /* Load an entry from the GOT for a TLS GD access. */ @@ -1130,7 +1133,8 @@ is guaranteed to be a legitimate address for mode MODE. */ bool -riscv_split_symbol (rtx temp, rtx addr, machine_mode mode, rtx *low_out) +riscv_split_symbol (rtx temp, rtx addr, machine_mode mode, rtx *low_out, + bool in_splitter) { enum riscv_symbol_type symbol_type; @@ -1146,7 +1150,7 @@ case SYMBOL_ABSOLUTE: { rtx high = gen_rtx_HIGH (Pmode, copy_rtx (addr)); - high = riscv_force_temporary (temp, high); + high = riscv_force_temporary (temp, high, in_splitter); *low_out = gen_rtx_LO_SUM (Pmode, high, addr); } break; @@ -1205,8 +1209,9 @@ overflow, so we need to force a sign-extension check. */ high = gen_int_mode (CONST_HIGH_PART (offset), Pmode); offset = CONST_LOW_PART (offset); - high = riscv_force_temporary (temp, high); - reg = riscv_force_temporary (temp, gen_rtx_PLUS (Pmode, high, reg)); + high = riscv_force_temporary (temp, high, FALSE); + reg = riscv_force_temporary (temp, gen_rtx_PLUS (Pmode, high, reg), + FALSE); } return plus_constant (Pmode, reg, offset); } @@ -1315,7 +1320,7 @@ return riscv_legitimize_tls_address (x); /* See if the address can split into a high part and a LO_SUM. */ - if (riscv_split_symbol (NULL, x, mode, &addr)) + if (riscv_split_symbol (NULL, x, mode, &addr, FALSE)) return riscv_force_address (addr, mode); /* Handle BASE + OFFSET using riscv_add_offset. */ @@ -1337,7 +1342,8 @@ /* Load VALUE into DEST. TEMP is as for riscv_force_temporary. */ void -riscv_move_integer (rtx temp, rtx dest, HOST_WIDE_INT value) +riscv_move_integer (rtx temp, rtx dest, HOST_WIDE_INT value, + bool in_splitter) { struct riscv_integer_op codes[RISCV_MAX_INTEGER_OPS]; machine_mode mode; @@ -1344,10 +1350,15 @@ int i, num_ops; rtx x; + /* We can't call gen_reg_rtx from a splitter, because this might realloc + the regno_reg_rtx array, which would invalidate reg rtx pointers in the + combine undo buffer. */ + bool can_create_pseudo = can_create_pseudo_p () && ! in_splitter; + mode = GET_MODE (dest); num_ops = riscv_build_integer (codes, value, mode); - if (can_create_pseudo_p () && num_ops > 2 /* not a simple constant */ + if (can_create_pseudo && num_ops > 2 /* not a simple constant */ && num_ops >= riscv_split_integer_cost (value)) x = riscv_split_integer (value, mode); else @@ -1357,7 +1368,7 @@ for (i = 1; i < num_ops; i++) { - if (!can_create_pseudo_p ()) + if (!can_create_pseudo) x = riscv_emit_set (temp, x); else x = force_reg (mode, x); @@ -1381,12 +1392,12 @@ /* Split moves of big integers into smaller pieces. */ if (splittable_const_int_operand (src, mode)) { - riscv_move_integer (dest, dest, INTVAL (src)); + riscv_move_integer (dest, dest, INTVAL (src), FALSE); return; } /* Split moves of symbolic constants into high/low pairs. */ - if (riscv_split_symbol (dest, src, MAX_MACHINE_MODE, &src)) + if (riscv_split_symbol (dest, src, MAX_MACHINE_MODE, &src, FALSE)) { riscv_emit_set (dest, src); return; @@ -1407,7 +1418,7 @@ if (offset != const0_rtx && (targetm.cannot_force_const_mem (mode, src) || can_create_pseudo_p ())) { - base = riscv_force_temporary (dest, base); + base = riscv_force_temporary (dest, base, FALSE); riscv_emit_move (dest, riscv_add_offset (NULL, base, INTVAL (offset))); return; } @@ -1416,7 +1427,7 @@ /* When using explicit relocs, constant pool references are sometimes not legitimate addresses. */ - riscv_split_symbol (dest, XEXP (src, 0), mode, &XEXP (src, 0)); + riscv_split_symbol (dest, XEXP (src, 0), mode, &XEXP (src, 0), FALSE); riscv_emit_move (dest, src); } Index: gcc/config/aarch64/aarch64.md =================================================================== --- a/src/gcc/config/aarch64/aarch64.md (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/aarch64/aarch64.md (.../branches/gcc-9-branch) @@ -1059,8 +1059,8 @@ (match_operand:GPI 1 "general_operand" ""))] "" " - if (MEM_P (operands[0]) && CONST_INT_P (operands[1]) - && mode == DImode + if (MEM_P (operands[0]) && !MEM_VOLATILE_P (operands[0]) + && CONST_INT_P (operands[1]) && mode == DImode && aarch64_split_dimode_const_store (operands[0], operands[1])) DONE; @@ -6304,7 +6304,7 @@ [(match_operand:GPI 0 "register_operand") (match_operand:GPF 1 "register_operand")] "TARGET_FLOAT - && ((GET_MODE_SIZE (mode) <= GET_MODE_SIZE (mode)) + && ((GET_MODE_BITSIZE (mode) <= LONG_TYPE_SIZE) || !flag_trapping_math || flag_fp_int_builtin_inexact)" { rtx cvt = gen_reg_rtx (mode); Index: gcc/config/aarch64/aarch64.opt =================================================================== --- a/src/gcc/config/aarch64/aarch64.opt (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/aarch64/aarch64.opt (.../branches/gcc-9-branch) @@ -119,15 +119,15 @@ Enum(aarch64_tls_size) String(48) Value(48) march= -Target RejectNegative ToLower Joined Var(aarch64_arch_string) +Target RejectNegative Negative(march=) ToLower Joined Var(aarch64_arch_string) Use features of architecture ARCH. mcpu= -Target RejectNegative ToLower Joined Var(aarch64_cpu_string) +Target RejectNegative Negative(mcpu=) ToLower Joined Var(aarch64_cpu_string) Use features of and optimize for CPU. mtune= -Target RejectNegative ToLower Joined Var(aarch64_tune_string) +Target RejectNegative Negative(mtune=) ToLower Joined Var(aarch64_tune_string) Optimize for CPU. mabi= Index: gcc/config/aarch64/aarch64.c =================================================================== --- a/src/gcc/config/aarch64/aarch64.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/aarch64/aarch64.c (.../branches/gcc-9-branch) @@ -18162,19 +18162,21 @@ /* Sort the operands. */ qsort (temp_operands, 4, 2 * sizeof (rtx *), aarch64_ldrstr_offset_compare); + /* Copy the memory operands so that if we have to bail for some + reason the original addresses are unchanged. */ if (load) { - mem_1 = temp_operands[1]; - mem_2 = temp_operands[3]; - mem_3 = temp_operands[5]; - mem_4 = temp_operands[7]; + mem_1 = copy_rtx (temp_operands[1]); + mem_2 = copy_rtx (temp_operands[3]); + mem_3 = copy_rtx (temp_operands[5]); + mem_4 = copy_rtx (temp_operands[7]); } else { - mem_1 = temp_operands[0]; - mem_2 = temp_operands[2]; - mem_3 = temp_operands[4]; - mem_4 = temp_operands[6]; + mem_1 = copy_rtx (temp_operands[0]); + mem_2 = copy_rtx (temp_operands[2]); + mem_3 = copy_rtx (temp_operands[4]); + mem_4 = copy_rtx (temp_operands[6]); gcc_assert (code == UNKNOWN); } Index: gcc/config/rs6000/darwin.md =================================================================== --- a/src/gcc/config/rs6000/darwin.md (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/rs6000/darwin.md (.../branches/gcc-9-branch) @@ -122,34 +122,7 @@ [(set_attr "type" "store")]) ;; 64-bit MachO load/store support -(define_insn "movdi_low" - [(set (match_operand:DI 0 "gpc_reg_operand" "=r,*!d") - (mem:DI (lo_sum:DI (match_operand:DI 1 "gpc_reg_operand" "b,b") - (match_operand 2 "" ""))))] - "TARGET_MACHO && TARGET_64BIT" - "@ - ld %0,lo16(%2)(%1) - lfd %0,lo16(%2)(%1)" - [(set_attr "type" "load")]) -(define_insn "movsi_low_st" - [(set (mem:SI (lo_sum:SI (match_operand:SI 1 "gpc_reg_operand" "b") - (match_operand 2 "" ""))) - (match_operand:SI 0 "gpc_reg_operand" "r"))] - "TARGET_MACHO && ! TARGET_64BIT" - "stw %0,lo16(%2)(%1)" - [(set_attr "type" "store")]) - -(define_insn "movdi_low_st" - [(set (mem:DI (lo_sum:DI (match_operand:DI 1 "gpc_reg_operand" "b,b") - (match_operand 2 "" ""))) - (match_operand:DI 0 "gpc_reg_operand" "r,*!d"))] - "TARGET_MACHO && TARGET_64BIT" - "@ - std %0,lo16(%2)(%1) - stfd %0,lo16(%2)(%1)" - [(set_attr "type" "store")]) - ;; Mach-O PIC trickery. (define_expand "macho_high" [(set (match_operand 0 "") Index: gcc/config/rs6000/rs6000-builtin.def =================================================================== --- a/src/gcc/config/rs6000/rs6000-builtin.def (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/rs6000/rs6000-builtin.def (.../branches/gcc-9-branch) @@ -1002,12 +1002,12 @@ BU_ALTIVEC_2 (VADDSWS, "vaddsws", CONST, altivec_vaddsws) BU_ALTIVEC_2 (VAND, "vand", CONST, andv4si3) BU_ALTIVEC_2 (VANDC, "vandc", CONST, andcv4si3) -BU_ALTIVEC_2 (VAVGUB, "vavgub", CONST, altivec_vavgub) -BU_ALTIVEC_2 (VAVGSB, "vavgsb", CONST, altivec_vavgsb) -BU_ALTIVEC_2 (VAVGUH, "vavguh", CONST, altivec_vavguh) -BU_ALTIVEC_2 (VAVGSH, "vavgsh", CONST, altivec_vavgsh) -BU_ALTIVEC_2 (VAVGUW, "vavguw", CONST, altivec_vavguw) -BU_ALTIVEC_2 (VAVGSW, "vavgsw", CONST, altivec_vavgsw) +BU_ALTIVEC_2 (VAVGUB, "vavgub", CONST, uavgv16qi3_ceil) +BU_ALTIVEC_2 (VAVGSB, "vavgsb", CONST, avgv16qi3_ceil) +BU_ALTIVEC_2 (VAVGUH, "vavguh", CONST, uavgv8hi3_ceil) +BU_ALTIVEC_2 (VAVGSH, "vavgsh", CONST, avgv8hi3_ceil) +BU_ALTIVEC_2 (VAVGUW, "vavguw", CONST, uavgv4si3_ceil) +BU_ALTIVEC_2 (VAVGSW, "vavgsw", CONST, avgv4si3_ceil) BU_ALTIVEC_2 (VCFUX, "vcfux", CONST, altivec_vcfux) BU_ALTIVEC_2 (VCFSX, "vcfsx", CONST, altivec_vcfsx) BU_ALTIVEC_2 (VCMPBFP, "vcmpbfp", CONST, altivec_vcmpbfp) @@ -1177,26 +1177,26 @@ BU_ALTIVEC_X (MFVSCR, "mfvscr", MISC) BU_ALTIVEC_X (DSSALL, "dssall", MISC) BU_ALTIVEC_X (DSS, "dss", MISC) -BU_ALTIVEC_X (LVSL, "lvsl", MEM) -BU_ALTIVEC_X (LVSR, "lvsr", MEM) -BU_ALTIVEC_X (LVEBX, "lvebx", MEM) -BU_ALTIVEC_X (LVEHX, "lvehx", MEM) -BU_ALTIVEC_X (LVEWX, "lvewx", MEM) -BU_ALTIVEC_X (LVXL, "lvxl", MEM) -BU_ALTIVEC_X (LVXL_V2DF, "lvxl_v2df", MEM) -BU_ALTIVEC_X (LVXL_V2DI, "lvxl_v2di", MEM) -BU_ALTIVEC_X (LVXL_V4SF, "lvxl_v4sf", MEM) -BU_ALTIVEC_X (LVXL_V4SI, "lvxl_v4si", MEM) -BU_ALTIVEC_X (LVXL_V8HI, "lvxl_v8hi", MEM) -BU_ALTIVEC_X (LVXL_V16QI, "lvxl_v16qi", MEM) -BU_ALTIVEC_X (LVX, "lvx", MEM) -BU_ALTIVEC_X (LVX_V1TI, "lvx_v1ti", MEM) -BU_ALTIVEC_X (LVX_V2DF, "lvx_v2df", MEM) -BU_ALTIVEC_X (LVX_V2DI, "lvx_v2di", MEM) -BU_ALTIVEC_X (LVX_V4SF, "lvx_v4sf", MEM) -BU_ALTIVEC_X (LVX_V4SI, "lvx_v4si", MEM) -BU_ALTIVEC_X (LVX_V8HI, "lvx_v8hi", MEM) -BU_ALTIVEC_X (LVX_V16QI, "lvx_v16qi", MEM) +BU_ALTIVEC_X (LVSL, "lvsl", PURE) +BU_ALTIVEC_X (LVSR, "lvsr", PURE) +BU_ALTIVEC_X (LVEBX, "lvebx", PURE) +BU_ALTIVEC_X (LVEHX, "lvehx", PURE) +BU_ALTIVEC_X (LVEWX, "lvewx", PURE) +BU_ALTIVEC_X (LVXL, "lvxl", PURE) +BU_ALTIVEC_X (LVXL_V2DF, "lvxl_v2df", PURE) +BU_ALTIVEC_X (LVXL_V2DI, "lvxl_v2di", PURE) +BU_ALTIVEC_X (LVXL_V4SF, "lvxl_v4sf", PURE) +BU_ALTIVEC_X (LVXL_V4SI, "lvxl_v4si", PURE) +BU_ALTIVEC_X (LVXL_V8HI, "lvxl_v8hi", PURE) +BU_ALTIVEC_X (LVXL_V16QI, "lvxl_v16qi", PURE) +BU_ALTIVEC_X (LVX, "lvx", PURE) +BU_ALTIVEC_X (LVX_V1TI, "lvx_v1ti", PURE) +BU_ALTIVEC_X (LVX_V2DF, "lvx_v2df", PURE) +BU_ALTIVEC_X (LVX_V2DI, "lvx_v2di", PURE) +BU_ALTIVEC_X (LVX_V4SF, "lvx_v4sf", PURE) +BU_ALTIVEC_X (LVX_V4SI, "lvx_v4si", PURE) +BU_ALTIVEC_X (LVX_V8HI, "lvx_v8hi", PURE) +BU_ALTIVEC_X (LVX_V16QI, "lvx_v16qi", PURE) BU_ALTIVEC_X (STVX, "stvx", MEM) BU_ALTIVEC_X (STVX_V2DF, "stvx_v2df", MEM) BU_ALTIVEC_X (STVX_V2DI, "stvx_v2di", MEM) @@ -1204,10 +1204,10 @@ BU_ALTIVEC_X (STVX_V4SI, "stvx_v4si", MEM) BU_ALTIVEC_X (STVX_V8HI, "stvx_v8hi", MEM) BU_ALTIVEC_X (STVX_V16QI, "stvx_v16qi", MEM) -BU_ALTIVEC_C (LVLX, "lvlx", MEM) -BU_ALTIVEC_C (LVLXL, "lvlxl", MEM) -BU_ALTIVEC_C (LVRX, "lvrx", MEM) -BU_ALTIVEC_C (LVRXL, "lvrxl", MEM) +BU_ALTIVEC_C (LVLX, "lvlx", PURE) +BU_ALTIVEC_C (LVLXL, "lvlxl", PURE) +BU_ALTIVEC_C (LVRX, "lvrx", PURE) +BU_ALTIVEC_C (LVRXL, "lvrxl", PURE) BU_ALTIVEC_X (STVEBX, "stvebx", MEM) BU_ALTIVEC_X (STVEHX, "stvehx", MEM) BU_ALTIVEC_X (STVEWX, "stvewx", MEM) @@ -1718,15 +1718,15 @@ BU_VSX_P (XVCMPGTDP_P, "xvcmpgtdp_p", CONST, vector_gt_v2df_p) /* VSX builtins that are handled as special cases. */ -BU_VSX_X (LXSDX, "lxsdx", MEM) -BU_VSX_X (LXVD2X_V1TI, "lxvd2x_v1ti", MEM) -BU_VSX_X (LXVD2X_V2DF, "lxvd2x_v2df", MEM) -BU_VSX_X (LXVD2X_V2DI, "lxvd2x_v2di", MEM) -BU_VSX_X (LXVDSX, "lxvdsx", MEM) -BU_VSX_X (LXVW4X_V4SF, "lxvw4x_v4sf", MEM) -BU_VSX_X (LXVW4X_V4SI, "lxvw4x_v4si", MEM) -BU_VSX_X (LXVW4X_V8HI, "lxvw4x_v8hi", MEM) -BU_VSX_X (LXVW4X_V16QI, "lxvw4x_v16qi", MEM) +BU_VSX_X (LXSDX, "lxsdx", PURE) +BU_VSX_X (LXVD2X_V1TI, "lxvd2x_v1ti", PURE) +BU_VSX_X (LXVD2X_V2DF, "lxvd2x_v2df", PURE) +BU_VSX_X (LXVD2X_V2DI, "lxvd2x_v2di", PURE) +BU_VSX_X (LXVDSX, "lxvdsx", PURE) +BU_VSX_X (LXVW4X_V4SF, "lxvw4x_v4sf", PURE) +BU_VSX_X (LXVW4X_V4SI, "lxvw4x_v4si", PURE) +BU_VSX_X (LXVW4X_V8HI, "lxvw4x_v8hi", PURE) +BU_VSX_X (LXVW4X_V16QI, "lxvw4x_v16qi", PURE) BU_VSX_X (STXSDX, "stxsdx", MEM) BU_VSX_X (STXVD2X_V1TI, "stxvd2x_v1ti", MEM) BU_VSX_X (STXVD2X_V2DF, "stxvd2x_v2df", MEM) @@ -1735,13 +1735,13 @@ BU_VSX_X (STXVW4X_V4SI, "stxvw4x_v4si", MEM) BU_VSX_X (STXVW4X_V8HI, "stxvw4x_v8hi", MEM) BU_VSX_X (STXVW4X_V16QI, "stxvw4x_v16qi", MEM) -BU_VSX_X (LD_ELEMREV_V1TI, "ld_elemrev_v1ti", MEM) -BU_VSX_X (LD_ELEMREV_V2DF, "ld_elemrev_v2df", MEM) -BU_VSX_X (LD_ELEMREV_V2DI, "ld_elemrev_v2di", MEM) -BU_VSX_X (LD_ELEMREV_V4SF, "ld_elemrev_v4sf", MEM) -BU_VSX_X (LD_ELEMREV_V4SI, "ld_elemrev_v4si", MEM) -BU_VSX_X (LD_ELEMREV_V8HI, "ld_elemrev_v8hi", MEM) -BU_VSX_X (LD_ELEMREV_V16QI, "ld_elemrev_v16qi", MEM) +BU_VSX_X (LD_ELEMREV_V1TI, "ld_elemrev_v1ti", PURE) +BU_VSX_X (LD_ELEMREV_V2DF, "ld_elemrev_v2df", PURE) +BU_VSX_X (LD_ELEMREV_V2DI, "ld_elemrev_v2di", PURE) +BU_VSX_X (LD_ELEMREV_V4SF, "ld_elemrev_v4sf", PURE) +BU_VSX_X (LD_ELEMREV_V4SI, "ld_elemrev_v4si", PURE) +BU_VSX_X (LD_ELEMREV_V8HI, "ld_elemrev_v8hi", PURE) +BU_VSX_X (LD_ELEMREV_V16QI, "ld_elemrev_v16qi", PURE) BU_VSX_X (ST_ELEMREV_V1TI, "st_elemrev_v1ti", MEM) BU_VSX_X (ST_ELEMREV_V2DF, "st_elemrev_v2df", MEM) BU_VSX_X (ST_ELEMREV_V2DI, "st_elemrev_v2di", MEM) Index: gcc/config/rs6000/rs6000-p8swap.c =================================================================== --- a/src/gcc/config/rs6000/rs6000-p8swap.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/rs6000/rs6000-p8swap.c (.../branches/gcc-9-branch) @@ -791,6 +791,11 @@ case UNSPEC_REDUC_PLUS: case UNSPEC_REDUC: return 1; + case UNSPEC_VPMSUM: + /* vpmsumd is not swappable, but vpmsum[bhw] are. */ + if (GET_MODE (op) == V2DImode) + return 0; + break; } } Index: gcc/config/rs6000/darwin.h =================================================================== --- a/src/gcc/config/rs6000/darwin.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/rs6000/darwin.h (.../branches/gcc-9-branch) @@ -53,19 +53,28 @@ #define TARGET_OS_CPP_BUILTINS() \ do \ { \ - if (!TARGET_64BIT) builtin_define ("__ppc__"); \ - if (!TARGET_64BIT) builtin_define ("__PPC__"); \ - if (TARGET_64BIT) builtin_define ("__ppc64__"); \ - if (TARGET_64BIT) builtin_define ("__PPC64__"); \ builtin_define ("__POWERPC__"); \ + builtin_define ("__PPC__"); \ + if (TARGET_64BIT) \ + { \ + builtin_define ("__ppc64__"); \ + builtin_define ("__PPC64__"); \ + builtin_define ("__powerpc64__"); \ + builtin_assert ("cpu=powerpc64"); \ + builtin_assert ("machine=powerpc64"); \ + } \ + else \ + { \ + builtin_define ("__ppc__"); \ + builtin_define_std ("PPC"); \ + builtin_assert ("cpu=powerpc"); \ + builtin_assert ("machine=powerpc"); \ + } \ builtin_define ("__NATURAL_ALIGNMENT__"); \ darwin_cpp_builtins (pfile); \ } \ while (0) -/* Generate branch islands stubs if this is true. */ -extern int darwin_emit_branch_islands; - #define SUBTARGET_OVERRIDE_OPTIONS darwin_rs6000_override_options () #define C_COMMON_OVERRIDE_OPTIONS do { \ @@ -127,10 +136,31 @@ %:version-compare(>< 10.5 10.7 mmacosx-version-min= -lcrt1.10.5.o) \ %{fgnu-tm: -lcrttms.o}" -/* crt2.o is at least partially required for 10.3.x and earlier. */ +/* crt2.o is at least partially required for 10.3.x and earlier. + It deals with registration of the unwind frames, where this is not + automatically provided by the system. So we need it for any case that + might use exceptions. */ +#undef DARWIN_CRT2_SPEC #define DARWIN_CRT2_SPEC \ - "%{!m64:%:version-compare(!> 10.4 mmacosx-version-min= crt2.o%s)}" +"%{!m64:%{shared-libgcc|static-libstdc++|fexceptions|fobjc-exceptions|fgnu-runtime: \ + %:version-compare(!> 10.4 mmacosx-version-min= crt2.o%s) \ + }}" +/* crt3 deals with providing cxa_atexit on earlier systems (or fixing it up, + for broken versions). It's only needed for c++ code, so we can make it + conditional on shared-libgcc since that's forced on for c++. */ +#undef DARWIN_CRT3_SPEC +#define DARWIN_CRT3_SPEC \ +"%{!m64:%{shared-libgcc|static-libstdc++: \ + %:version-compare(>< 10.4 10.5 mmacosx-version-min= crt3.o%s) \ + %:version-compare(!> 10.4 mmacosx-version-min= crt3_2.o%s) \ + }}" + +/* The PPC regs save/restore functions are leaves and could, conceivably + be used by the tm destructor. */ +#undef ENDFILE_SPEC +#define ENDFILE_SPEC TM_DESTRUCTOR " -lef_ppc" + #undef SUBTARGET_EXTRA_SPECS #define SUBTARGET_EXTRA_SPECS \ DARWIN_EXTRA_SPECS \ @@ -279,9 +309,9 @@ /* This is supported in cctools 465 and later. The macro test above prevents using it in earlier build environments. */ #define ASM_OUTPUT_MAX_SKIP_ALIGN(FILE,LOG,MAX_SKIP) \ - if ((LOG) != 0) \ + if ((LOG) > 0) \ { \ - if ((MAX_SKIP) == 0) \ + if ((MAX_SKIP) <= 0) \ fprintf ((FILE), "\t.p2align %d\n", (LOG)); \ else \ fprintf ((FILE), "\t.p2align %d,,%d\n", (LOG), (MAX_SKIP)); \ @@ -456,6 +486,9 @@ this will need to be modified similar to the x86 case. */ #define TARGET_FOLD_BUILTIN SUBTARGET_FOLD_BUILTIN +/* First available SYMBOL flag bit for use by subtargets. */ +#define SYMBOL_FLAG_SUBT_DEP (SYMBOL_FLAG_MACH_DEP) + /* Use standard DWARF numbering for DWARF debugging information. */ #define RS6000_USE_DWARF_NUMBERING Index: gcc/config/rs6000/rs6000.c =================================================================== --- a/src/gcc/config/rs6000/rs6000.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/rs6000/rs6000.c (.../branches/gcc-9-branch) @@ -7671,6 +7671,104 @@ return NULL_RTX; } +/* This tests that a lo_sum {constant, symbol, symbol+offset} is valid for + the mode. If we can't find (or don't know) the alignment of the symbol + we assume (optimistically) that it's sufficiently aligned [??? maybe we + should be pessimistic]. Offsets are validated in the same way as for + reg + offset. */ +static bool +darwin_rs6000_legitimate_lo_sum_const_p (rtx x, machine_mode mode) +{ + /* We should not get here with this. */ + gcc_checking_assert (! mode_supports_dq_form (mode)); + + if (GET_CODE (x) == CONST) + x = XEXP (x, 0); + + if (GET_CODE (x) == UNSPEC && XINT (x, 1) == UNSPEC_MACHOPIC_OFFSET) + x = XVECEXP (x, 0, 0); + + rtx sym = NULL_RTX; + unsigned HOST_WIDE_INT offset = 0; + + if (GET_CODE (x) == PLUS) + { + sym = XEXP (x, 0); + if (! SYMBOL_REF_P (sym)) + return false; + if (!CONST_INT_P (XEXP (x, 1))) + return false; + offset = INTVAL (XEXP (x, 1)); + } + else if (SYMBOL_REF_P (x)) + sym = x; + else if (CONST_INT_P (x)) + offset = INTVAL (x); + else if (GET_CODE (x) == LABEL_REF) + offset = 0; // We assume code labels are Pmode aligned + else + return false; // not sure what we have here. + + /* If we don't know the alignment of the thing to which the symbol refers, + we assume optimistically it is "enough". + ??? maybe we should be pessimistic instead. */ + unsigned align = 0; + + if (sym) + { + tree decl = SYMBOL_REF_DECL (sym); +#if TARGET_MACHO + if (MACHO_SYMBOL_INDIRECTION_P (sym)) + /* The decl in an indirection symbol is the original one, which might + be less aligned than the indirection. Our indirections are always + pointer-aligned. */ + ; + else +#endif + if (decl && DECL_ALIGN (decl)) + align = DECL_ALIGN_UNIT (decl); + } + + unsigned int extra = 0; + switch (mode) + { + case E_DFmode: + case E_DDmode: + case E_DImode: + /* If we are using VSX scalar loads, restrict ourselves to reg+reg + addressing. */ + if (VECTOR_MEM_VSX_P (mode)) + return false; + + if (!TARGET_POWERPC64) + extra = 4; + else if ((offset & 3) || (align & 3)) + return false; + break; + + case E_TFmode: + case E_IFmode: + case E_KFmode: + case E_TDmode: + case E_TImode: + case E_PTImode: + extra = 8; + if (!TARGET_POWERPC64) + extra = 12; + else if ((offset & 3) || (align & 3)) + return false; + break; + + default: + break; + } + + /* We only care if the access(es) would cause a change to the high part. */ + offset = ((offset & 0xffff) ^ 0x8000) - 0x8000; + return IN_RANGE (offset, -(HOST_WIDE_INT_1 << 15), + (HOST_WIDE_INT_1 << 15) - 1 - extra); +} + /* Return true if the MEM operand is a memory operand suitable for use with a (full width, possibly multiple) gpr load/store. On powerpc64 this means the offset must be divisible by 4. @@ -7705,7 +7803,13 @@ && legitimate_indirect_address_p (XEXP (addr, 0), false)) return true; - /* Don't allow non-offsettable addresses. See PRs 83969 and 84279. */ + /* We need to look through Mach-O PIC unspecs to determine if a lo_sum is + really OK. Doing this early avoids teaching all the other machinery + about them. */ + if (TARGET_MACHO && GET_CODE (addr) == LO_SUM) + return darwin_rs6000_legitimate_lo_sum_const_p (XEXP (addr, 1), mode); + + /* Only allow offsettable addresses. See PRs 83969 and 84279. */ if (!rs6000_offsettable_memref_p (op, mode, false)) return false; @@ -21330,7 +21434,7 @@ { const char *name = XSTR (x, 0); #if TARGET_MACHO - if (darwin_emit_branch_islands + if (darwin_symbol_stubs && MACHOPIC_INDIRECT && machopic_classify_symbol (x) == MACHOPIC_UNDEFINED_FUNCTION) name = machopic_indirection_name (x, /*stub_p=*/true); @@ -25729,10 +25833,14 @@ stack_limit_rtx, GEN_INT (size))); - emit_insn (gen_elf_high (tmp_reg, toload)); - emit_insn (gen_elf_low (tmp_reg, tmp_reg, toload)); - emit_insn (gen_cond_trap (LTU, stack_reg, tmp_reg, - const0_rtx)); + /* We cannot use r0 with elf_low. Lamely solve this problem by + moving registers around. */ + rtx r11_reg = gen_rtx_REG (Pmode, 11); + emit_move_insn (tmp_reg, r11_reg); + emit_insn (gen_elf_high (r11_reg, toload)); + emit_insn (gen_elf_low (r11_reg, r11_reg, toload)); + emit_insn (gen_cond_trap (LTU, stack_reg, r11_reg, const0_rtx)); + emit_move_insn (r11_reg, tmp_reg); } else warning (0, "stack limit expression is not supported"); @@ -37762,25 +37870,31 @@ tree caller_tree = DECL_FUNCTION_SPECIFIC_TARGET (caller); tree callee_tree = DECL_FUNCTION_SPECIFIC_TARGET (callee); - /* If callee has no option attributes, then it is ok to inline. */ + /* If the callee has no option attributes, then it is ok to inline. */ if (!callee_tree) ret = true; - /* If caller has no option attributes, but callee does then it is not ok to - inline. */ - else if (!caller_tree) - ret = false; - else { - struct cl_target_option *caller_opts = TREE_TARGET_OPTION (caller_tree); + HOST_WIDE_INT caller_isa; struct cl_target_option *callee_opts = TREE_TARGET_OPTION (callee_tree); + HOST_WIDE_INT callee_isa = callee_opts->x_rs6000_isa_flags; + HOST_WIDE_INT explicit_isa = callee_opts->x_rs6000_isa_flags_explicit; - /* Callee's options should a subset of the caller's, i.e. a vsx function - can inline an altivec function but a non-vsx function can't inline a - vsx function. */ - if ((caller_opts->x_rs6000_isa_flags & callee_opts->x_rs6000_isa_flags) - == callee_opts->x_rs6000_isa_flags) + /* If the caller has option attributes, then use them. + Otherwise, use the command line options. */ + if (caller_tree) + caller_isa = TREE_TARGET_OPTION (caller_tree)->x_rs6000_isa_flags; + else + caller_isa = rs6000_isa_flags; + + /* The callee's options must be a subset of the caller's options, i.e. + a vsx function may inline an altivec function, but a no-vsx function + must not inline a vsx function. However, for those options that the + callee has explicitly enabled or disabled, then we must enforce that + the callee's and caller's options match exactly; see PR70010. */ + if (((caller_isa & callee_isa) == callee_isa) + && (caller_isa & explicit_isa) == (callee_isa & explicit_isa)) ret = true; } @@ -38273,7 +38387,8 @@ if ((cookie_val & CALL_LONG) != 0 && GET_CODE (func_desc) == SYMBOL_REF) { - if (darwin_emit_branch_islands && TARGET_32BIT) + /* FIXME: the longcall opt should not hang off picsymbol stubs. */ + if (darwin_symbol_stubs && TARGET_32BIT) make_island = true; /* Do nothing yet, retain the CALL_LONG flag. */ else { Index: gcc/config/rs6000/altivec.md =================================================================== --- a/src/gcc/config/rs6000/altivec.md (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/rs6000/altivec.md (.../branches/gcc-9-branch) @@ -80,9 +80,6 @@ UNSPEC_VUPKHPX UNSPEC_VUPKLPX UNSPEC_CONVERT_4F32_8I16 - UNSPEC_DARN - UNSPEC_DARN_32 - UNSPEC_DARN_RAW UNSPEC_DST UNSPEC_DSTT UNSPEC_DSTST @@ -161,9 +158,6 @@ UNSPEC_BCDADD UNSPEC_BCDSUB UNSPEC_BCD_OVERFLOW - UNSPEC_CMPRB - UNSPEC_CMPRB2 - UNSPEC_CMPEQB UNSPEC_VRLMI UNSPEC_VRLNM ]) @@ -566,7 +560,7 @@ [(set_attr "type" "vecsimple")]) ;; -(define_insn "altivec_vavgu" +(define_insn "uavg3_ceil" [(set (match_operand:VI 0 "register_operand" "=v") (unspec:VI [(match_operand:VI 1 "register_operand" "v") (match_operand:VI 2 "register_operand" "v")] @@ -575,7 +569,7 @@ "vavgu %0,%1,%2" [(set_attr "type" "vecsimple")]) -(define_insn "altivec_vavgs" +(define_insn "avg3_ceil" [(set (match_operand:VI 0 "register_operand" "=v") (unspec:VI [(match_operand:VI 1 "register_operand" "v") (match_operand:VI 2 "register_operand" "v")] @@ -4101,223 +4095,6 @@ "bcd. %0,%1,%2,%3" [(set_attr "type" "vecsimple")]) -(define_insn "darn_32" - [(set (match_operand:SI 0 "register_operand" "=r") - (unspec:SI [(const_int 0)] UNSPEC_DARN_32))] - "TARGET_P9_MISC" - "darn %0,0" - [(set_attr "type" "integer")]) - -(define_insn "darn_raw" - [(set (match_operand:DI 0 "register_operand" "=r") - (unspec:DI [(const_int 0)] UNSPEC_DARN_RAW))] - "TARGET_P9_MISC && TARGET_64BIT" - "darn %0,2" - [(set_attr "type" "integer")]) - -(define_insn "darn" - [(set (match_operand:DI 0 "register_operand" "=r") - (unspec:DI [(const_int 0)] UNSPEC_DARN))] - "TARGET_P9_MISC && TARGET_64BIT" - "darn %0,1" - [(set_attr "type" "integer")]) - -;; Test byte within range. -;; -;; The bytes of operand 1 are organized as xx:xx:xx:vv, where xx -;; represents a byte whose value is ignored in this context and -;; vv, the least significant byte, holds the byte value that is to -;; be tested for membership within the range specified by operand 2. -;; The bytes of operand 2 are organized as xx:xx:hi:lo. -;; -;; Return in target register operand 0 a value of 1 if lo <= vv and -;; vv <= hi. Otherwise, set register operand 0 to 0. -;; -;; Though the instructions to which this expansion maps operate on -;; 64-bit registers, the current implementation only operates on -;; SI-mode operands as the high-order bits provide no information -;; that is not already available in the low-order bits. To avoid the -;; costs of data widening operations, future enhancements might allow -;; DI mode for operand 0 and/or might allow operand 1 to be QI mode. -(define_expand "cmprb" - [(set (match_dup 3) - (unspec:CC [(match_operand:SI 1 "gpc_reg_operand" "r") - (match_operand:SI 2 "gpc_reg_operand" "r")] - UNSPEC_CMPRB)) - (set (match_operand:SI 0 "gpc_reg_operand" "=r") - (if_then_else:SI (lt (match_dup 3) - (const_int 0)) - (const_int -1) - (if_then_else (gt (match_dup 3) - (const_int 0)) - (const_int 1) - (const_int 0))))] - "TARGET_P9_MISC" -{ - operands[3] = gen_reg_rtx (CCmode); -}) - -;; The bytes of operand 1 are organized as xx:xx:xx:vv, where xx -;; represents a byte whose value is ignored in this context and -;; vv, the least significant byte, holds the byte value that is to -;; be tested for membership within the range specified by operand 2. -;; The bytes of operand 2 are organized as xx:xx:hi:lo. -;; -;; Set bit 1 (the GT bit, 0x4) of CR register operand 0 to 1 if -;; lo <= vv and vv <= hi. Otherwise, set the GT bit to 0. The other -;; 3 bits of the target CR register are all set to 0. -(define_insn "*cmprb_internal" - [(set (match_operand:CC 0 "cc_reg_operand" "=y") - (unspec:CC [(match_operand:SI 1 "gpc_reg_operand" "r") - (match_operand:SI 2 "gpc_reg_operand" "r")] - UNSPEC_CMPRB))] - "TARGET_P9_MISC" - "cmprb %0,0,%1,%2" - [(set_attr "type" "logical")]) - -;; Set operand 0 register to -1 if the LT bit (0x8) of condition -;; register operand 1 is on. Otherwise, set operand 0 register to 1 -;; if the GT bit (0x4) of condition register operand 1 is on. -;; Otherwise, set operand 0 to 0. Note that the result stored into -;; register operand 0 is non-zero iff either the LT or GT bits are on -;; within condition register operand 1. -(define_insn "setb_signed" - [(set (match_operand:SI 0 "gpc_reg_operand" "=r") - (if_then_else:SI (lt (match_operand:CC 1 "cc_reg_operand" "y") - (const_int 0)) - (const_int -1) - (if_then_else (gt (match_dup 1) - (const_int 0)) - (const_int 1) - (const_int 0))))] - "TARGET_P9_MISC" - "setb %0,%1" - [(set_attr "type" "logical")]) - -(define_insn "setb_unsigned" - [(set (match_operand:SI 0 "gpc_reg_operand" "=r") - (if_then_else:SI (ltu (match_operand:CCUNS 1 "cc_reg_operand" "y") - (const_int 0)) - (const_int -1) - (if_then_else (gtu (match_dup 1) - (const_int 0)) - (const_int 1) - (const_int 0))))] - "TARGET_P9_MISC" - "setb %0,%1" - [(set_attr "type" "logical")]) - -;; Test byte within two ranges. -;; -;; The bytes of operand 1 are organized as xx:xx:xx:vv, where xx -;; represents a byte whose value is ignored in this context and -;; vv, the least significant byte, holds the byte value that is to -;; be tested for membership within the range specified by operand 2. -;; The bytes of operand 2 are organized as hi_1:lo_1:hi_2:lo_2. -;; -;; Return in target register operand 0 a value of 1 if (lo_1 <= vv and -;; vv <= hi_1) or if (lo_2 <= vv and vv <= hi_2). Otherwise, set register -;; operand 0 to 0. -;; -;; Though the instructions to which this expansion maps operate on -;; 64-bit registers, the current implementation only operates on -;; SI-mode operands as the high-order bits provide no information -;; that is not already available in the low-order bits. To avoid the -;; costs of data widening operations, future enhancements might allow -;; DI mode for operand 0 and/or might allow operand 1 to be QI mode. -(define_expand "cmprb2" - [(set (match_dup 3) - (unspec:CC [(match_operand:SI 1 "gpc_reg_operand" "r") - (match_operand:SI 2 "gpc_reg_operand" "r")] - UNSPEC_CMPRB2)) - (set (match_operand:SI 0 "gpc_reg_operand" "=r") - (if_then_else:SI (lt (match_dup 3) - (const_int 0)) - (const_int -1) - (if_then_else (gt (match_dup 3) - (const_int 0)) - (const_int 1) - (const_int 0))))] - "TARGET_P9_MISC" -{ - operands[3] = gen_reg_rtx (CCmode); -}) - -;; The bytes of operand 1 are organized as xx:xx:xx:vv, where xx -;; represents a byte whose value is ignored in this context and -;; vv, the least significant byte, holds the byte value that is to -;; be tested for membership within the ranges specified by operand 2. -;; The bytes of operand 2 are organized as hi_1:lo_1:hi_2:lo_2. -;; -;; Set bit 1 (the GT bit, 0x4) of CR register operand 0 to 1 if -;; (lo_1 <= vv and vv <= hi_1) or if (lo_2 <= vv and vv <= hi_2). -;; Otherwise, set the GT bit to 0. The other 3 bits of the target -;; CR register are all set to 0. -(define_insn "*cmprb2_internal" - [(set (match_operand:CC 0 "cc_reg_operand" "=y") - (unspec:CC [(match_operand:SI 1 "gpc_reg_operand" "r") - (match_operand:SI 2 "gpc_reg_operand" "r")] - UNSPEC_CMPRB2))] - "TARGET_P9_MISC" - "cmprb %0,1,%1,%2" - [(set_attr "type" "logical")]) - -;; Test byte membership within set of 8 bytes. -;; -;; The bytes of operand 1 are organized as xx:xx:xx:vv, where xx -;; represents a byte whose value is ignored in this context and -;; vv, the least significant byte, holds the byte value that is to -;; be tested for membership within the set specified by operand 2. -;; The bytes of operand 2 are organized as e0:e1:e2:e3:e4:e5:e6:e7. -;; -;; Return in target register operand 0 a value of 1 if vv equals one -;; of the values e0, e1, e2, e3, e4, e5, e6, or e7. Otherwise, set -;; register operand 0 to 0. Note that the 8 byte values held within -;; operand 2 need not be unique. -;; -;; Though the instructions to which this expansion maps operate on -;; 64-bit registers, the current implementation requires that operands -;; 0 and 1 have mode SI as the high-order bits provide no information -;; that is not already available in the low-order bits. To avoid the -;; costs of data widening operations, future enhancements might allow -;; DI mode for operand 0 and/or might allow operand 1 to be QI mode. -(define_expand "cmpeqb" - [(set (match_dup 3) - (unspec:CC [(match_operand:SI 1 "gpc_reg_operand" "r") - (match_operand:DI 2 "gpc_reg_operand" "r")] - UNSPEC_CMPEQB)) - (set (match_operand:SI 0 "gpc_reg_operand" "=r") - (if_then_else:SI (lt (match_dup 3) - (const_int 0)) - (const_int -1) - (if_then_else (gt (match_dup 3) - (const_int 0)) - (const_int 1) - (const_int 0))))] - "TARGET_P9_MISC && TARGET_64BIT" -{ - operands[3] = gen_reg_rtx (CCmode); -}) - -;; The bytes of operand 1 are organized as xx:xx:xx:vv, where xx -;; represents a byte whose value is ignored in this context and -;; vv, the least significant byte, holds the byte value that is to -;; be tested for membership within the set specified by operand 2. -;; The bytes of operand 2 are organized as e0:e1:e2:e3:e4:e5:e6:e7. -;; -;; Set bit 1 (the GT bit, 0x4) of CR register operand 0 to 1 if vv -;; equals one of the values e0, e1, e2, e3, e4, e5, e6, or e7. Otherwise, -;; set the GT bit to zero. The other 3 bits of the target CR register -;; are all set to 0. -(define_insn "*cmpeqb_internal" - [(set (match_operand:CC 0 "cc_reg_operand" "=y") - (unspec:CC [(match_operand:SI 1 "gpc_reg_operand" "r") - (match_operand:DI 2 "gpc_reg_operand" "r")] - UNSPEC_CMPEQB))] - "TARGET_P9_MISC && TARGET_64BIT" - "cmpeqb %0,%1,%2" - [(set_attr "type" "logical")]) - (define_expand "bcd_" [(parallel [(set (reg:CCFP CR6_REGNO) (compare:CCFP Index: gcc/config/rs6000/rs6000.md =================================================================== --- a/src/gcc/config/rs6000/rs6000.md (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/rs6000/rs6000.md (.../branches/gcc-9-branch) @@ -137,6 +137,9 @@ UNSPEC_LSQ UNSPEC_FUSION_GPR UNSPEC_STACK_CHECK + UNSPEC_CMPRB + UNSPEC_CMPRB2 + UNSPEC_CMPEQB UNSPEC_ADD_ROUND_TO_ODD UNSPEC_SUB_ROUND_TO_ODD UNSPEC_MUL_ROUND_TO_ODD @@ -164,6 +167,9 @@ UNSPECV_EH_RR ; eh_reg_restore UNSPECV_ISYNC ; isync instruction UNSPECV_MFTB ; move from time base + UNSPECV_DARN ; darn 1 (deliver a random number) + UNSPECV_DARN_32 ; darn 2 + UNSPECV_DARN_RAW ; darn 0 UNSPECV_NLGR ; non-local goto receiver UNSPECV_MFFS ; Move from FPSCR UNSPECV_MFFSL ; Move from FPSCR light instruction version @@ -6818,13 +6824,6 @@ ;; do the load 16-bits at a time. We could do this by loading from memory, ;; and this is even supposed to be faster, but it is simpler not to get ;; integers in the TOC. -(define_insn "movsi_low" - [(set (match_operand:SI 0 "gpc_reg_operand" "=r") - (mem:SI (lo_sum:SI (match_operand:SI 1 "gpc_reg_operand" "b") - (match_operand 2 "" ""))))] - "TARGET_MACHO && ! TARGET_64BIT" - "lwz %0,lo16(%2)(%1)" - [(set_attr "type" "load")]) ;; MR LA LWZ LFIWZX LXSIWZX ;; STW STFIWX STXSIWX LI LIS @@ -14322,7 +14321,225 @@ "xscmpuqp %0,%1,%2" [(set_attr "type" "veccmp") (set_attr "size" "128")]) + +;; Miscellaneous ISA 3.0 (power9) instructions +(define_insn "darn_32" + [(set (match_operand:SI 0 "register_operand" "=r") + (unspec_volatile:SI [(const_int 0)] UNSPECV_DARN_32))] + "TARGET_P9_MISC" + "darn %0,0" + [(set_attr "type" "integer")]) + +(define_insn "darn_raw" + [(set (match_operand:DI 0 "register_operand" "=r") + (unspec_volatile:DI [(const_int 0)] UNSPECV_DARN_RAW))] + "TARGET_P9_MISC && TARGET_64BIT" + "darn %0,2" + [(set_attr "type" "integer")]) + +(define_insn "darn" + [(set (match_operand:DI 0 "register_operand" "=r") + (unspec_volatile:DI [(const_int 0)] UNSPECV_DARN))] + "TARGET_P9_MISC && TARGET_64BIT" + "darn %0,1" + [(set_attr "type" "integer")]) + +;; Test byte within range. +;; +;; The bytes of operand 1 are organized as xx:xx:xx:vv, where xx +;; represents a byte whose value is ignored in this context and +;; vv, the least significant byte, holds the byte value that is to +;; be tested for membership within the range specified by operand 2. +;; The bytes of operand 2 are organized as xx:xx:hi:lo. +;; +;; Return in target register operand 0 a value of 1 if lo <= vv and +;; vv <= hi. Otherwise, set register operand 0 to 0. +;; +;; Though the instructions to which this expansion maps operate on +;; 64-bit registers, the current implementation only operates on +;; SI-mode operands as the high-order bits provide no information +;; that is not already available in the low-order bits. To avoid the +;; costs of data widening operations, future enhancements might allow +;; DI mode for operand 0 and/or might allow operand 1 to be QI mode. +(define_expand "cmprb" + [(set (match_dup 3) + (unspec:CC [(match_operand:SI 1 "gpc_reg_operand" "r") + (match_operand:SI 2 "gpc_reg_operand" "r")] + UNSPEC_CMPRB)) + (set (match_operand:SI 0 "gpc_reg_operand" "=r") + (if_then_else:SI (lt (match_dup 3) + (const_int 0)) + (const_int -1) + (if_then_else (gt (match_dup 3) + (const_int 0)) + (const_int 1) + (const_int 0))))] + "TARGET_P9_MISC" +{ + operands[3] = gen_reg_rtx (CCmode); +}) + +;; The bytes of operand 1 are organized as xx:xx:xx:vv, where xx +;; represents a byte whose value is ignored in this context and +;; vv, the least significant byte, holds the byte value that is to +;; be tested for membership within the range specified by operand 2. +;; The bytes of operand 2 are organized as xx:xx:hi:lo. +;; +;; Set bit 1 (the GT bit, 0x4) of CR register operand 0 to 1 if +;; lo <= vv and vv <= hi. Otherwise, set the GT bit to 0. The other +;; 3 bits of the target CR register are all set to 0. +(define_insn "*cmprb_internal" + [(set (match_operand:CC 0 "cc_reg_operand" "=y") + (unspec:CC [(match_operand:SI 1 "gpc_reg_operand" "r") + (match_operand:SI 2 "gpc_reg_operand" "r")] + UNSPEC_CMPRB))] + "TARGET_P9_MISC" + "cmprb %0,0,%1,%2" + [(set_attr "type" "logical")]) + +;; Set operand 0 register to -1 if the LT bit (0x8) of condition +;; register operand 1 is on. Otherwise, set operand 0 register to 1 +;; if the GT bit (0x4) of condition register operand 1 is on. +;; Otherwise, set operand 0 to 0. Note that the result stored into +;; register operand 0 is non-zero iff either the LT or GT bits are on +;; within condition register operand 1. +(define_insn "setb_signed" + [(set (match_operand:SI 0 "gpc_reg_operand" "=r") + (if_then_else:SI (lt (match_operand:CC 1 "cc_reg_operand" "y") + (const_int 0)) + (const_int -1) + (if_then_else (gt (match_dup 1) + (const_int 0)) + (const_int 1) + (const_int 0))))] + "TARGET_P9_MISC" + "setb %0,%1" + [(set_attr "type" "logical")]) + +(define_insn "setb_unsigned" + [(set (match_operand:SI 0 "gpc_reg_operand" "=r") + (if_then_else:SI (ltu (match_operand:CCUNS 1 "cc_reg_operand" "y") + (const_int 0)) + (const_int -1) + (if_then_else (gtu (match_dup 1) + (const_int 0)) + (const_int 1) + (const_int 0))))] + "TARGET_P9_MISC" + "setb %0,%1" + [(set_attr "type" "logical")]) + +;; Test byte within two ranges. +;; +;; The bytes of operand 1 are organized as xx:xx:xx:vv, where xx +;; represents a byte whose value is ignored in this context and +;; vv, the least significant byte, holds the byte value that is to +;; be tested for membership within the range specified by operand 2. +;; The bytes of operand 2 are organized as hi_1:lo_1:hi_2:lo_2. +;; +;; Return in target register operand 0 a value of 1 if (lo_1 <= vv and +;; vv <= hi_1) or if (lo_2 <= vv and vv <= hi_2). Otherwise, set register +;; operand 0 to 0. +;; +;; Though the instructions to which this expansion maps operate on +;; 64-bit registers, the current implementation only operates on +;; SI-mode operands as the high-order bits provide no information +;; that is not already available in the low-order bits. To avoid the +;; costs of data widening operations, future enhancements might allow +;; DI mode for operand 0 and/or might allow operand 1 to be QI mode. +(define_expand "cmprb2" + [(set (match_dup 3) + (unspec:CC [(match_operand:SI 1 "gpc_reg_operand" "r") + (match_operand:SI 2 "gpc_reg_operand" "r")] + UNSPEC_CMPRB2)) + (set (match_operand:SI 0 "gpc_reg_operand" "=r") + (if_then_else:SI (lt (match_dup 3) + (const_int 0)) + (const_int -1) + (if_then_else (gt (match_dup 3) + (const_int 0)) + (const_int 1) + (const_int 0))))] + "TARGET_P9_MISC" +{ + operands[3] = gen_reg_rtx (CCmode); +}) + +;; The bytes of operand 1 are organized as xx:xx:xx:vv, where xx +;; represents a byte whose value is ignored in this context and +;; vv, the least significant byte, holds the byte value that is to +;; be tested for membership within the ranges specified by operand 2. +;; The bytes of operand 2 are organized as hi_1:lo_1:hi_2:lo_2. +;; +;; Set bit 1 (the GT bit, 0x4) of CR register operand 0 to 1 if +;; (lo_1 <= vv and vv <= hi_1) or if (lo_2 <= vv and vv <= hi_2). +;; Otherwise, set the GT bit to 0. The other 3 bits of the target +;; CR register are all set to 0. +(define_insn "*cmprb2_internal" + [(set (match_operand:CC 0 "cc_reg_operand" "=y") + (unspec:CC [(match_operand:SI 1 "gpc_reg_operand" "r") + (match_operand:SI 2 "gpc_reg_operand" "r")] + UNSPEC_CMPRB2))] + "TARGET_P9_MISC" + "cmprb %0,1,%1,%2" + [(set_attr "type" "logical")]) + +;; Test byte membership within set of 8 bytes. +;; +;; The bytes of operand 1 are organized as xx:xx:xx:vv, where xx +;; represents a byte whose value is ignored in this context and +;; vv, the least significant byte, holds the byte value that is to +;; be tested for membership within the set specified by operand 2. +;; The bytes of operand 2 are organized as e0:e1:e2:e3:e4:e5:e6:e7. +;; +;; Return in target register operand 0 a value of 1 if vv equals one +;; of the values e0, e1, e2, e3, e4, e5, e6, or e7. Otherwise, set +;; register operand 0 to 0. Note that the 8 byte values held within +;; operand 2 need not be unique. +;; +;; Though the instructions to which this expansion maps operate on +;; 64-bit registers, the current implementation requires that operands +;; 0 and 1 have mode SI as the high-order bits provide no information +;; that is not already available in the low-order bits. To avoid the +;; costs of data widening operations, future enhancements might allow +;; DI mode for operand 0 and/or might allow operand 1 to be QI mode. +(define_expand "cmpeqb" + [(set (match_dup 3) + (unspec:CC [(match_operand:SI 1 "gpc_reg_operand" "r") + (match_operand:DI 2 "gpc_reg_operand" "r")] + UNSPEC_CMPEQB)) + (set (match_operand:SI 0 "gpc_reg_operand" "=r") + (if_then_else:SI (lt (match_dup 3) + (const_int 0)) + (const_int -1) + (if_then_else (gt (match_dup 3) + (const_int 0)) + (const_int 1) + (const_int 0))))] + "TARGET_P9_MISC && TARGET_64BIT" +{ + operands[3] = gen_reg_rtx (CCmode); +}) + +;; The bytes of operand 1 are organized as xx:xx:xx:vv, where xx +;; represents a byte whose value is ignored in this context and +;; vv, the least significant byte, holds the byte value that is to +;; be tested for membership within the set specified by operand 2. +;; The bytes of operand 2 are organized as e0:e1:e2:e3:e4:e5:e6:e7. +;; +;; Set bit 1 (the GT bit, 0x4) of CR register operand 0 to 1 if vv +;; equals one of the values e0, e1, e2, e3, e4, e5, e6, or e7. Otherwise, +;; set the GT bit to zero. The other 3 bits of the target CR register +;; are all set to 0. +(define_insn "*cmpeqb_internal" + [(set (match_operand:CC 0 "cc_reg_operand" "=y") + (unspec:CC [(match_operand:SI 1 "gpc_reg_operand" "r") + (match_operand:DI 2 "gpc_reg_operand" "r")] + UNSPEC_CMPEQB))] + "TARGET_P9_MISC && TARGET_64BIT" + "cmpeqb %0,%1,%2" + [(set_attr "type" "logical")]) (include "sync.md") Index: gcc/config/darwin.c =================================================================== --- a/src/gcc/config/darwin.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/darwin.c (.../branches/gcc-9-branch) @@ -75,15 +75,9 @@ setting the second word in the .non_lazy_symbol_pointer data structure to symbol. See indirect_data for the code that handles the extra indirection, and machopic_output_indirection and its use - of MACHO_SYMBOL_STATIC for the code that handles @code{static} + of MACHO_SYMBOL_FLAG_STATIC for the code that handles @code{static} symbol indirection. */ -/* For darwin >= 9 (OSX 10.5) the linker is capable of making the necessary - branch islands and we no longer need to emit darwin stubs. - However, if we are generating code for earlier systems (or for use in the - kernel) the stubs might still be required, and this will be set true. */ -int darwin_emit_branch_islands = false; - typedef struct GTY(()) cdtor_record { rtx symbol; int priority; /* [con/de]structor priority */ @@ -105,6 +99,10 @@ for weak or single-definition items. */ static bool ld_uses_coal_sects = false; +/* Very old (ld_classic) linkers need a symbol to mark the start of + each FDE. */ +static bool ld_needs_eh_markers = false; + /* Section names. */ section * darwin_sections[NUM_DARWIN_SECTIONS]; @@ -250,7 +248,7 @@ int machopic_symbol_defined_p (rtx sym_ref) { - if (SYMBOL_REF_FLAGS (sym_ref) & MACHO_SYMBOL_FLAG_DEFINED) + if (MACHO_SYMBOL_DEFINED_P (sym_ref)) return true; /* If a symbol references local and is not an extern to this @@ -259,7 +257,7 @@ { /* If the symbol references a variable and the variable is a common symbol, then this symbol is not defined. */ - if (SYMBOL_REF_FLAGS (sym_ref) & MACHO_SYMBOL_FLAG_VARIABLE) + if (MACHO_SYMBOL_VARIABLE_P (sym_ref)) { tree decl = SYMBOL_REF_DECL (sym_ref); if (!decl) @@ -455,6 +453,13 @@ bool stub_p; /* True iff this stub or pointer has been referenced. */ bool used; + /* True iff a non-lazy symbol pointer should be emitted into the .data + section, rather than the non-lazy symbol pointers section. The cases + for which this occurred seem to have been unintentional, and later + toolchains emit all of the indirections to the 'usual' section. We + are keeping this in case it is necessary to preserve compatibility with + older toolchains. */ + bool nlsp_in_data_section; } machopic_indirection; struct indirection_hasher : ggc_ptr_hash @@ -489,7 +494,7 @@ /* Return the name of the non-lazy pointer (if STUB_P is false) or stub (if STUB_B is true) corresponding to the given name. - If we have a situation like: + PR71767 - If we have a situation like: global_weak_symbol: .... @@ -498,36 +503,22 @@ ld64 will be unable to split this into two atoms (because the "L" makes the second symbol 'invisible'). This means that legitimate direct accesses - to the second symbol will appear to be non-allowed direct accesses to an - atom of type weak, global which are not allowed. + to the second symbol will appear to be direct accesses to an atom of type + weak, global which are not allowed. - To avoid this, we make the indirections have a leading 'l' (lower-case L) - which has a special meaning: linker can see this and use it to determine - atoms, but it is not placed into the final symbol table. + To avoid this, we make any data-section indirections have a leading 'l' + (lower-case L) which has a special meaning: linker can see this and use + it to determine atoms, but it is not placed into the final symbol table. - The implementation here is somewhat heavy-handed in that it will also mark - indirections to the __IMPORT,__pointers section the same way which is - really unnecessary, since ld64 _can_ split those into atoms as they are - fixed size. FIXME: determine if this is a penalty worth extra code to - fix. - + Symbols in the non-lazy symbol pointers section (or stubs) do not have this + problem because ld64 already knows the size of each entry. */ const char * machopic_indirection_name (rtx sym_ref, bool stub_p) { - char *buffer; const char *name = XSTR (sym_ref, 0); - size_t namelen = strlen (name); - machopic_indirection *p; - bool needs_quotes; - const char *suffix; - char L_or_l = 'L'; - const char *prefix = user_label_prefix; - const char *quote = ""; - tree id; - - id = maybe_get_identifier (name); + tree id = maybe_get_identifier (name); if (id) { tree id_orig = id; @@ -535,43 +526,47 @@ while (IDENTIFIER_TRANSPARENT_ALIAS (id)) id = TREE_CHAIN (id); if (id != id_orig) - { - name = IDENTIFIER_POINTER (id); - namelen = strlen (name); - } + name = IDENTIFIER_POINTER (id); } + const char *prefix = user_label_prefix; + /* If we are emitting the label 'verbatim' then omit the U_L_P and count + the name without the leading '*'. */ if (name[0] == '*') { prefix = ""; ++name; - --namelen; } - needs_quotes = name_needs_quotes (name); - if (needs_quotes) - { - quote = "\""; - } + /* Here we are undoing a number of causes that placed some indirections + (apparently erroneously) into the .data section. Specifically, some + symbols that are ABI mandated indirections and some hidden symbols + were being placed there - which cause difficulties with later + versions of ld64. Iff (after these checks) some symbol still gets an + indirection in the data section, we want to adjust the indirection + name to be linker visible to deal with PR71767 (notes above). */ + bool nlsp_in_data_section = + ! MACHO_SYMBOL_MUST_INDIRECT_P (sym_ref) + && ! MACHO_SYMBOL_HIDDEN_VIS_P (sym_ref) + && (machopic_symbol_defined_p (sym_ref) || SYMBOL_REF_LOCAL_P (sym_ref)) + && ! indirect_data (sym_ref); - if (stub_p) - suffix = STUB_SUFFIX; - else - { - suffix = NON_LAZY_POINTER_SUFFIX; - /* Let the linker see this. */ - L_or_l = 'l'; - } + const char *suffix = stub_p ? STUB_SUFFIX : NON_LAZY_POINTER_SUFFIX; + /* If the indirection is in the data section, let the linker see it. */ + char L_or_l = (!stub_p && nlsp_in_data_section) ? 'l' : 'L'; + /* We have mangled symbols with spaces and punctuation which typically + need surrounding in quotes for the assembler to consume them. */ + const char *quote = name_needs_quotes (name) ? "\"" : ""; + char *buffer = XALLOCAVEC (char, 2 /* strlen ("&L") or ("&l") */ + + strlen (prefix) + + strlen (name) + + strlen (suffix) + + 2 * strlen (quote) + + 1 /* '\0' */); - buffer = XALLOCAVEC (char, 2 /* strlen ("&L") or ("&l") */ - + strlen (prefix) - + namelen - + strlen (suffix) - + 2 * strlen (quote) - + 1 /* '\0' */); - /* Construct the name of the non-lazy pointer or stub. */ - sprintf (buffer, "&%s%c%s%s%s%s", quote, L_or_l, prefix, name, suffix, quote); + sprintf (buffer, "&%s%c%s%s%s%s", quote, L_or_l, prefix, name, + suffix, quote); if (!machopic_indirections) machopic_indirections = hash_table::create_ggc (37); @@ -580,10 +575,9 @@ = machopic_indirections->find_slot_with_hash (buffer, htab_hash_string (buffer), INSERT); + machopic_indirection *p; if (*slot) - { - p = *slot; - } + p = *slot; else { p = ggc_alloc (); @@ -591,6 +585,7 @@ p->ptr_name = xstrdup (buffer); p->stub_p = stub_p; p->used = false; + p->nlsp_in_data_section = nlsp_in_data_section; *slot = p; } @@ -666,7 +661,7 @@ /* some other cpu -- writeme! */ gcc_unreachable (); } - else if (defined) + else if (defined && ! MACHO_SYMBOL_MUST_INDIRECT_P (orig)) { rtx offset = NULL; if (DARWIN_PPC || HAVE_lo_sum) @@ -708,6 +703,7 @@ machopic_indirection_name (orig, /*stub_p=*/false))); SYMBOL_REF_DATA (ptr_ref) = SYMBOL_REF_DATA (orig); + SYMBOL_REF_FLAGS (ptr_ref) |= MACHO_SYMBOL_FLAG_INDIRECTION; ptr_ref = gen_const_mem (Pmode, ptr_ref); machopic_define_symbol (ptr_ref); @@ -790,7 +786,7 @@ rtx machopic_indirect_call_target (rtx target) { - if (! darwin_emit_branch_islands) + if (! darwin_symbol_stubs) return target; if (GET_CODE (target) != MEM) @@ -798,8 +794,7 @@ if (MACHOPIC_INDIRECT && GET_CODE (XEXP (target, 0)) == SYMBOL_REF - && !(SYMBOL_REF_FLAGS (XEXP (target, 0)) - & MACHO_SYMBOL_FLAG_DEFINED)) + && ! MACHO_SYMBOL_DEFINED_P (XEXP (target, 0))) { rtx sym_ref = XEXP (target, 0); const char *stub_name = machopic_indirection_name (sym_ref, @@ -808,6 +803,7 @@ XEXP (target, 0) = gen_rtx_SYMBOL_REF (mode, stub_name); SYMBOL_REF_DATA (XEXP (target, 0)) = SYMBOL_REF_DATA (sym_ref); + SYMBOL_REF_FLAGS (XEXP (target, 0)) |= MACHO_SYMBOL_FLAG_INDIRECTION; MEM_READONLY_P (target) = 1; MEM_NOTRAP_P (target) = 1; } @@ -844,7 +840,7 @@ { if (reg == 0) { - gcc_assert (!reload_in_progress); + gcc_assert (!lra_in_progress); reg = gen_reg_rtx (Pmode); } @@ -928,7 +924,7 @@ emit_use (gen_rtx_REG (Pmode, PIC_OFFSET_TABLE_REGNUM)); #endif - if (reload_in_progress) + if (lra_in_progress) df_set_regs_ever_live (REGNO (pic), true); pic_ref = gen_rtx_PLUS (Pmode, pic, machopic_gen_offset (XEXP (orig, 0))); @@ -952,7 +948,7 @@ if (reg == 0) { - gcc_assert (!reload_in_progress); + gcc_assert (!lra_in_progress); reg = gen_reg_rtx (Pmode); } @@ -998,7 +994,7 @@ #if 0 emit_use (pic_offset_table_rtx); #endif - if (reload_in_progress) + if (lra_in_progress) df_set_regs_ever_live (REGNO (pic), true); pic_ref = gen_rtx_PLUS (Pmode, pic, @@ -1069,129 +1065,160 @@ return pic_ref; } -/* Output the stub or non-lazy pointer in *SLOT, if it has been used. - DATA is the FILE* for assembly output. Called from - htab_traverse. */ +/* Callbacks to output the stub or non-lazy pointers. + Each works on the item in *SLOT,if it has been used. + DATA is the FILE* for assembly output. + Called from htab_traverses, invoked from machopic_finish(). */ int -machopic_output_indirection (machopic_indirection **slot, FILE *asm_out_file) +machopic_output_data_section_indirection (machopic_indirection **slot, + FILE *asm_out_file) { machopic_indirection *p = *slot; - rtx symbol; - const char *sym_name; - const char *ptr_name; - if (!p->used) + if (!p->used || !p->nlsp_in_data_section) return 1; - symbol = p->symbol; - sym_name = XSTR (symbol, 0); - ptr_name = p->ptr_name; + rtx symbol = p->symbol; + /* The original symbol name. */ + const char *sym_name = XSTR (symbol, 0); + /* The name of the indirection symbol. */ + const char *ptr_name = p->ptr_name; - if (p->stub_p) - { - char *sym; - char *stub; - tree id; + switch_to_section (data_section); + assemble_align (GET_MODE_ALIGNMENT (Pmode)); + assemble_label (asm_out_file, ptr_name); + assemble_integer (gen_rtx_SYMBOL_REF (Pmode, sym_name), + GET_MODE_SIZE (Pmode), + GET_MODE_ALIGNMENT (Pmode), 1); - id = maybe_get_identifier (sym_name); - if (id) - { - tree id_orig = id; + return 1; +} - while (IDENTIFIER_TRANSPARENT_ALIAS (id)) - id = TREE_CHAIN (id); - if (id != id_orig) - sym_name = IDENTIFIER_POINTER (id); - } +int +machopic_output_stub_indirection (machopic_indirection **slot, + FILE *asm_out_file) +{ + machopic_indirection *p = *slot; - sym = XALLOCAVEC (char, strlen (sym_name) + 2); - if (sym_name[0] == '*' || sym_name[0] == '&') - strcpy (sym, sym_name + 1); - else if (sym_name[0] == '-' || sym_name[0] == '+') - strcpy (sym, sym_name); - else - sprintf (sym, "%s%s", user_label_prefix, sym_name); + if (!p->used || !p->stub_p) + return 1; - stub = XALLOCAVEC (char, strlen (ptr_name) + 2); - if (ptr_name[0] == '*' || ptr_name[0] == '&') - strcpy (stub, ptr_name + 1); - else - sprintf (stub, "%s%s", user_label_prefix, ptr_name); + rtx symbol = p->symbol; + /* The original symbol name. */ + const char *sym_name = XSTR (symbol, 0); + /* The name of the stub symbol. */ + const char *ptr_name = p->ptr_name; - machopic_output_stub (asm_out_file, sym, stub); - } - else if (! indirect_data (symbol) - && (machopic_symbol_defined_p (symbol) - || SYMBOL_REF_LOCAL_P (symbol))) + tree id = maybe_get_identifier (sym_name); + if (id) { - switch_to_section (data_section); - assemble_align (GET_MODE_ALIGNMENT (Pmode)); - assemble_label (asm_out_file, ptr_name); - assemble_integer (gen_rtx_SYMBOL_REF (Pmode, sym_name), - GET_MODE_SIZE (Pmode), - GET_MODE_ALIGNMENT (Pmode), 1); + tree id_orig = id; + + while (IDENTIFIER_TRANSPARENT_ALIAS (id)) + id = TREE_CHAIN (id); + if (id != id_orig) + sym_name = IDENTIFIER_POINTER (id); } + + char *sym = XALLOCAVEC (char, strlen (sym_name) + 2); + if (sym_name[0] == '*' || sym_name[0] == '&') + strcpy (sym, sym_name + 1); + else if (sym_name[0] == '-' || sym_name[0] == '+') + strcpy (sym, sym_name); else - { - rtx init = const0_rtx; + sprintf (sym, "%s%s", user_label_prefix, sym_name); - switch_to_section (darwin_sections[machopic_nl_symbol_ptr_section]); + char *stub = XALLOCAVEC (char, strlen (ptr_name) + 2); + if (ptr_name[0] == '*' || ptr_name[0] == '&') + strcpy (stub, ptr_name + 1); + else + sprintf (stub, "%s%s", user_label_prefix, ptr_name); - /* Mach-O symbols are passed around in code through indirect - references and the original symbol_ref hasn't passed through - the generic handling and reference-catching in - output_operand, so we need to manually mark weak references - as such. */ - if (SYMBOL_REF_WEAK (symbol)) - { - tree decl = SYMBOL_REF_DECL (symbol); - gcc_assert (DECL_P (decl)); + machopic_output_stub (asm_out_file, sym, stub); - if (decl != NULL_TREE - && DECL_EXTERNAL (decl) && TREE_PUBLIC (decl) - /* Handle only actual external-only definitions, not - e.g. extern inline code or variables for which - storage has been allocated. */ - && !TREE_STATIC (decl)) - { - fputs ("\t.weak_reference ", asm_out_file); - assemble_name (asm_out_file, sym_name); - fputc ('\n', asm_out_file); - } - } + return 1; +} - assemble_name (asm_out_file, ptr_name); - fprintf (asm_out_file, ":\n"); +int +machopic_output_indirection (machopic_indirection **slot, FILE *asm_out_file) +{ + machopic_indirection *p = *slot; - fprintf (asm_out_file, "\t.indirect_symbol "); - assemble_name (asm_out_file, sym_name); - fprintf (asm_out_file, "\n"); + if (!p->used || p->stub_p || p->nlsp_in_data_section) + return 1; - /* Variables that are marked with MACHO_SYMBOL_STATIC need to - have their symbol name instead of 0 in the second entry of - the non-lazy symbol pointer data structure when they are - defined. This allows the runtime to rebind newer instances - of the translation unit with the original instance of the - symbol. */ + rtx symbol = p->symbol; + /* The original symbol name. */ + const char *sym_name = XSTR (symbol, 0); + /* The nonlazy-stub symbol name. */ + const char *ptr_name = p->ptr_name; - if ((SYMBOL_REF_FLAGS (symbol) & MACHO_SYMBOL_STATIC) - && machopic_symbol_defined_p (symbol)) - init = gen_rtx_SYMBOL_REF (Pmode, sym_name); + switch_to_section (darwin_sections[machopic_nl_symbol_ptr_section]); - assemble_integer (init, GET_MODE_SIZE (Pmode), - GET_MODE_ALIGNMENT (Pmode), 1); + /* Mach-O symbols are passed around in code through indirect references and + the original symbol_ref hasn't passed through the generic handling and + reference-catching in output_operand, so we need to manually mark weak + references as such. */ + + if (SYMBOL_REF_WEAK (symbol)) + { + tree decl = SYMBOL_REF_DECL (symbol); + gcc_checking_assert (DECL_P (decl)); + + if (decl != NULL_TREE + && DECL_EXTERNAL (decl) && TREE_PUBLIC (decl) + /* Handle only actual external-only definitions, not + e.g. extern inline code or variables for which + storage has been allocated. */ + && !TREE_STATIC (decl)) + { + fputs ("\t.weak_reference ", asm_out_file); + assemble_name (asm_out_file, sym_name); + fputc ('\n', asm_out_file); + } } + assemble_name (asm_out_file, ptr_name); + fprintf (asm_out_file, ":\n"); + + fprintf (asm_out_file, "\t.indirect_symbol "); + assemble_name (asm_out_file, sym_name); + fprintf (asm_out_file, "\n"); + + /* Variables that are marked with MACHO_SYMBOL_FLAG_STATIC need to + have their symbol name instead of 0 in the second entry of + the non-lazy symbol pointer data structure when they are + defined. This allows the runtime to rebind newer instances + of the translation unit with the original instance of the + symbol. */ + + rtx init = const0_rtx; + if (MACHO_SYMBOL_STATIC_P (symbol) && machopic_symbol_defined_p (symbol)) + init = gen_rtx_SYMBOL_REF (Pmode, sym_name); + + assemble_integer (init, GET_MODE_SIZE (Pmode), + GET_MODE_ALIGNMENT (Pmode), 1); + return 1; } -void +static void machopic_finish (FILE *asm_out_file) { - if (machopic_indirections) - machopic_indirections - ->traverse_noresize (asm_out_file); + if (!machopic_indirections) + return; + + /* First output an symbol indirections that have been placed into .data + (we don't expect these now). */ + machopic_indirections->traverse_noresize + (asm_out_file); + + machopic_indirections->traverse_noresize + (asm_out_file); + + machopic_indirections->traverse_noresize + (asm_out_file); } int @@ -1206,25 +1233,51 @@ && XINT (XEXP (op, 0), 1) == UNSPEC_MACHOPIC_OFFSET); } -/* This function records whether a given name corresponds to a defined - or undefined function or variable, for machopic_classify_ident to - use later. */ +/* This function: + computes and caches a series of flags that characterise the symbol's + properties that affect Mach-O code gen (including accidental cases + from older toolchains). + TODO: + Here we also need to do enough analysis to determine if a symbol's + name needs to be made linker-visible. This is more tricky - since + it depends on whether we've previously seen a global weak definition + in the same section. + */ + void -darwin_encode_section_info (tree decl, rtx rtl, int first ATTRIBUTE_UNUSED) +darwin_encode_section_info (tree decl, rtx rtl, int first) { - rtx sym_ref; + /* Careful not to prod global register variables. */ + if (!MEM_P (rtl)) + return; - /* Do the standard encoding things first. */ + /* Do the standard encoding things first; this sets: + SYMBOL_FLAG_FUNCTION, + SYMBOL_FLAG_LOCAL, (binds_local_p) + TLS_MODEL, SYMBOL_FLAG_SMALL + SYMBOL_FLAG_EXTERNAL. */ default_encode_section_info (decl, rtl, first); - if (TREE_CODE (decl) != FUNCTION_DECL && TREE_CODE (decl) != VAR_DECL) + if (! VAR_OR_FUNCTION_DECL_P (decl)) return; - sym_ref = XEXP (rtl, 0); - if (TREE_CODE (decl) == VAR_DECL) + rtx sym_ref = XEXP (rtl, 0); + if (VAR_P (decl)) SYMBOL_REF_FLAGS (sym_ref) |= MACHO_SYMBOL_FLAG_VARIABLE; + /* Only really common if there's no initialiser. */ + bool really_common_p = (DECL_COMMON (decl) + && (DECL_INITIAL (decl) == NULL + || (!in_lto_p + && DECL_INITIAL (decl) == error_mark_node))); + + /* For Darwin, if we have specified visibility and it's not the default + that's counted 'hidden'. */ + if (DECL_VISIBILITY_SPECIFIED (decl) + && DECL_VISIBILITY (decl) != VISIBILITY_DEFAULT) + SYMBOL_REF_FLAGS (sym_ref) |= MACHO_SYMBOL_FLAG_HIDDEN_VIS; + if (!DECL_EXTERNAL (decl) && (!TREE_PUBLIC (decl) || !DECL_WEAK (decl)) && ! lookup_attribute ("weakref", DECL_ATTRIBUTES (decl)) @@ -1235,7 +1288,13 @@ SYMBOL_REF_FLAGS (sym_ref) |= MACHO_SYMBOL_FLAG_DEFINED; if (! TREE_PUBLIC (decl)) - SYMBOL_REF_FLAGS (sym_ref) |= MACHO_SYMBOL_STATIC; + SYMBOL_REF_FLAGS (sym_ref) |= MACHO_SYMBOL_FLAG_STATIC; + + /* Short cut check for Darwin 'must indirect' rules. */ + if (really_common_p + || (DECL_WEAK (decl) && ! MACHO_SYMBOL_HIDDEN_VIS_P (sym_ref)) + || lookup_attribute ("weakref", DECL_ATTRIBUTES (decl))) + SYMBOL_REF_FLAGS (sym_ref) |= MACHO_SYMBOL_FLAG_MUST_INDIRECT; } void @@ -1252,12 +1311,13 @@ } static section * -darwin_rodata_section (int use_coal, bool zsize) +darwin_rodata_section (int use_coal, bool zsize, int reloc) { return (use_coal ? darwin_sections[const_coal_section] : (zsize ? darwin_sections[zobj_const_section] - : darwin_sections[const_section])); + : reloc ? darwin_sections[const_data_section] + : darwin_sections[const_section])); } static section * @@ -1550,7 +1610,7 @@ case SECCAT_RODATA: case SECCAT_SRODATA: - base_section = darwin_rodata_section (use_coal, zsize); + base_section = darwin_rodata_section (use_coal, zsize, reloc); break; case SECCAT_RODATA_MERGE_STR: @@ -2086,11 +2146,11 @@ static int invok_count = 0; static tree last_fun_decl = NULL_TREE; - /* We use the linker to emit the .eh labels for Darwin 9 and above. */ - if (! for_eh || generating_for_darwin_version >= 9) + /* Modern linkers can produce distinct FDEs without compiler support. */ + if (! for_eh || ! ld_needs_eh_markers) return; - /* FIXME: This only works when the eh for all sections of a function is + /* FIXME: This only works when the eh for all sections of a function are emitted at the same time. If that changes, we would need to use a lookup table of some form to determine what to do. Also, we should emit the unadorned label for the partition containing the public label for a @@ -3148,17 +3208,19 @@ : (generating_for_darwin_version >= 9) ? 1 : 0); - /* Objective-C family ABI 2 is only valid for next/m64 at present. */ if (global_options_set.x_flag_objc_abi && flag_next_runtime) { - if (TARGET_64BIT && global_options.x_flag_objc_abi < 2) - error_at (UNKNOWN_LOCATION, "%<-fobjc-abi-version%> >= 2 must be" - " used for %<-m64%> targets with" - " %<-fnext-runtime%>"); - if (!TARGET_64BIT && global_options.x_flag_objc_abi >= 2) - error_at (UNKNOWN_LOCATION, "%<-fobjc-abi-version%> >= 2 is not" - " supported on %<-m32%> targets with" - " %<-fnext-runtime%>"); + if (TARGET_64BIT && global_options.x_flag_objc_abi != 2) + /* The Objective-C family ABI 2 is the only valid version NeXT/m64. */ + error_at (UNKNOWN_LOCATION, + "%<-fobjc-abi-version%> 2 must be used for 64 bit targets" + " with %<-fnext-runtime%>"); + else if (!TARGET_64BIT && global_options.x_flag_objc_abi >= 2) + /* ABI versions 0 and 1 are the only valid versions NeXT/m32. */ + error_at (UNKNOWN_LOCATION, + "%<-fobjc-abi-version%> %d is not supported for 32 bit" + " targets with %<-fnext-runtime%>", + global_options.x_flag_objc_abi); } /* Don't emit DWARF3/4 unless specifically selected. This is a @@ -3261,12 +3323,45 @@ flag_pic = 2; } - /* It is assumed that branch island stubs are needed for earlier systems. */ - if (generating_for_darwin_version < 9) - darwin_emit_branch_islands = true; - else - emit_aligned_common = true; /* Later systems can support aligned common. */ + /* Linkers >= ld64-62.1 (at least) are capable of making the necessary PIC + indirections and we no longer need to emit pic symbol stubs. + However, if we are generating code for earlier ones (or for use in the + kernel) the stubs might still be required, and this will be set true. + If the user sets it on or off - then that takes precedence. + Linkers that don't need stubs, don't need the EH symbol markers either. + */ + + if (!global_options_set.x_darwin_symbol_stubs) + { + if (darwin_target_linker) + { + if (strverscmp (darwin_target_linker, MIN_LD64_OMIT_STUBS) < 0) + { + darwin_symbol_stubs = true; + ld_needs_eh_markers = true; + } + } + else if (generating_for_darwin_version < 9) + { + /* If we don't know the linker version and we're targeting an old + system, we know no better than to assume the use of an earlier + linker. */ + darwin_symbol_stubs = true; + ld_needs_eh_markers = true; + } + } + else if (DARWIN_X86 && darwin_symbol_stubs && TARGET_64BIT) + { + inform (input_location, + "%<-msymbol-stubs%> is not required for 64b code (ignored)"); + darwin_symbol_stubs = false; + } + + if (generating_for_darwin_version >= 9) + /* Later systems can support aligned common. */ + emit_aligned_common = true; + /* The c_dialect...() macros are not available to us here. */ darwin_running_cxx = (strstr (lang_hooks.name, "C++") != 0); } Index: gcc/config/darwin.h =================================================================== --- a/src/gcc/config/darwin.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/darwin.h (.../branches/gcc-9-branch) @@ -126,6 +126,24 @@ "%{gsplit-dwarf:%ngsplit-dwarf is not supported on this platform} \ %= 10.5 mmacosx-version-min= -pie) }} " + +#define DARWIN_NOPIE_SPEC \ +"%{no-pie|fno-pie|fno-PIE: \ + %:version-compare(>= 10.7 mmacosx-version-min= -no_pie) }" + #define DARWIN_CC1_SPEC \ "%{findirect-virtual-calls: -fapple-kext} %= 10.6 mmacosx-version-min= -no_compact_unwind) " + +/* In Darwin linker specs we can put -lcrt0.o and ld will search the library + path for crt0.o or -lcrtx.a and it will search for for libcrtx.a. As for + other ports, we can also put xxx.{o,a}%s and get the appropriate complete + startfile absolute directory. This latter point is important when we want + to override ld's rule of .dylib being found ahead of .a and the user wants + the convenience library to be linked. */ + +/* The LINK_COMMAND spec is mostly a clone of the standard LINK_COMMAND_SPEC, + plus precomp, libtool, and fat build additions. + In general, random Darwin linker flags should go into LINK_SPEC instead of LINK_COMMAND_SPEC. The command spec is better for specifying the handling of options understood by generic Unix linkers, and for positional arguments like libraries. */ -#if LD64_HAS_EXPORT_DYNAMIC -#define DARWIN_EXPORT_DYNAMIC " %{rdynamic:-export_dynamic}" -#else -#define DARWIN_EXPORT_DYNAMIC " %{rdynamic: %nrdynamic is not supported}" -#endif - #define LINK_COMMAND_SPEC_A \ "%{!fdump=*:%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\ %(linker)" \ @@ -190,10 +219,14 @@ %{%:sanitize(address): -lasan } \ %{%:sanitize(undefined): -lubsan } \ %(link_ssp) \ - " DARWIN_EXPORT_DYNAMIC " % 10.5 mmacosx-version-min= -lgcc_s.10.4) \ + shared-libgcc|fexceptions|fobjc-exceptions|fgnu-runtime: \ + %:version-compare(!> 10.3.9 mmacosx-version-min= -lgcc_eh) \ + %:version-compare(>< 10.3.9 10.5 mmacosx-version-min= -lgcc_s.10.4) \ %:version-compare(>< 10.5 10.6 mmacosx-version-min= -lgcc_s.10.5) \ - %:version-compare(!> 10.5 mmacosx-version-min= -lgcc_ext.10.4) \ + %:version-compare(>< 10.3.9 10.5 mmacosx-version-min= -lgcc_ext.10.4) \ %:version-compare(>= 10.5 mmacosx-version-min= -lgcc_ext.10.5) \ -lgcc ; \ :%:version-compare(>< 10.3.9 10.5 mmacosx-version-min= -lgcc_s.10.4) \ %:version-compare(>< 10.5 10.6 mmacosx-version-min= -lgcc_s.10.5) \ - %:version-compare(!> 10.5 mmacosx-version-min= -lgcc_ext.10.4) \ + %:version-compare(>< 10.3.9 10.5 mmacosx-version-min= -lgcc_ext.10.4) \ %:version-compare(>= 10.5 mmacosx-version-min= -lgcc_ext.10.5) \ -lgcc }" -/* We specify crt0.o as -lcrt0.o so that ld will search the library path. +/* We specify crt0.o as -lcrt0.o so that ld will search the library path. */ - crt3.o provides __cxa_atexit on systems that don't have it. Since - it's only used with C++, which requires passing -shared-libgcc, key - off that to avoid unnecessarily adding a destructor to every - powerpc program built. */ - #undef STARTFILE_SPEC #define STARTFILE_SPEC \ - "%{Zdynamiclib: %(darwin_dylib1) %{fgnu-tm: -lcrttms.o}} \ - %{!Zdynamiclib:%{Zbundle:%{!static: \ +"%{Zdynamiclib: %(darwin_dylib1) %{fgnu-tm: -lcrttms.o}} \ + %{!Zdynamiclib:%{Zbundle:%{!static: \ %:version-compare(< 10.6 mmacosx-version-min= -lbundle1.o) \ %{fgnu-tm: -lcrttms.o}}} \ %{!Zbundle:%{pg:%{static:-lgcrt0.o} \ @@ -377,7 +406,7 @@ %{!object:%{preload:-lcrt0.o} \ %{!preload: %(darwin_crt1) \ %(darwin_crt2)}}}}}} \ - %{shared-libgcc:%:version-compare(< 10.5 mmacosx-version-min= crt3.o%s)}" + %(darwin_crt3)" /* We want a destructor last in the list. */ #define TM_DESTRUCTOR "%{fgnu-tm: -lcrttme.o}" @@ -385,12 +414,10 @@ #define DARWIN_EXTRA_SPECS \ { "darwin_crt1", DARWIN_CRT1_SPEC }, \ + { "darwin_crt2", DARWIN_CRT2_SPEC }, \ + { "darwin_crt3", DARWIN_CRT3_SPEC }, \ { "darwin_dylib1", DARWIN_DYLIB1_SPEC }, -#define DARWIN_DYLIB1_SPEC \ - "%:version-compare(!> 10.5 mmacosx-version-min= -ldylib1.o) \ - %:version-compare(>< 10.5 10.6 mmacosx-version-min= -ldylib1.10.5.o)" - #define DARWIN_CRT1_SPEC \ "%:version-compare(!> 10.5 mmacosx-version-min= -lcrt1.o) \ %:version-compare(>< 10.5 10.6 mmacosx-version-min= -lcrt1.10.5.o) \ @@ -397,6 +424,20 @@ %:version-compare(>< 10.6 10.8 mmacosx-version-min= -lcrt1.10.6.o) \ %{fgnu-tm: -lcrttms.o}" +#define DARWIN_CRT2_SPEC "" + +/* crt3.o provides __cxa_atexit on systems that don't have it (and a fix + up for faulty versions on 10.4). Since it's only used with C++, which + requires passing -shared-libgcc, key off that to avoid unnecessarily + adding a destructor to every program built for 10.4 or earlier. */ + +#define DARWIN_CRT3_SPEC \ +"%{shared-libgcc:%:version-compare(< 10.5 mmacosx-version-min= crt3.o%s)}" + +#define DARWIN_DYLIB1_SPEC \ + "%:version-compare(!> 10.5 mmacosx-version-min= -ldylib1.o) \ + %:version-compare(>< 10.5 10.6 mmacosx-version-min= -ldylib1.10.5.o)" + #ifdef HAVE_AS_MMACOSX_VERSION_MIN_OPTION /* Emit macosx version (but only major). */ #define ASM_MMACOSX_VERSION_MIN_SPEC \ @@ -762,21 +803,52 @@ #undef TARGET_ASM_MARK_DECL_PRESERVED #define TARGET_ASM_MARK_DECL_PRESERVED darwin_mark_decl_preserved -/* Set on a symbol with SYMBOL_FLAG_FUNCTION or - MACHO_SYMBOL_FLAG_VARIABLE to indicate that the function or - variable has been defined in this translation unit. - When porting Mach-O to new architectures you need to make - sure these aren't clobbered by the backend. */ +/* Any port using this header needs to define the first available + subtarget symbol bit: SYMBOL_FLAG_SUBT_DEP. */ -#define MACHO_SYMBOL_FLAG_VARIABLE (SYMBOL_FLAG_MACH_DEP) -#define MACHO_SYMBOL_FLAG_DEFINED ((SYMBOL_FLAG_MACH_DEP) << 1) +/* Is a variable. */ +#define MACHO_SYMBOL_FLAG_VARIABLE (SYMBOL_FLAG_SUBT_DEP) +#define MACHO_SYMBOL_VARIABLE_P(RTX) \ + ((SYMBOL_REF_FLAGS (RTX) & MACHO_SYMBOL_FLAG_VARIABLE) != 0) +/* Set on a symbol that must be indirected, even when there is a + definition in the TU. The ABI mandates that common symbols are so + indirected, as are weak. If 'fix-and-continue' is operational then + data symbols might also be. */ + +#define MACHO_SYMBOL_FLAG_MUST_INDIRECT ((SYMBOL_FLAG_SUBT_DEP) << 1) +#define MACHO_SYMBOL_MUST_INDIRECT_P(RTX) \ + ((SYMBOL_REF_FLAGS (RTX) & MACHO_SYMBOL_FLAG_MUST_INDIRECT) != 0) + +/* Set on a symbol with SYMBOL_FLAG_FUNCTION or MACHO_SYMBOL_FLAG_VARIABLE + to indicate that the function or variable is considered defined in this + translation unit. */ + +#define MACHO_SYMBOL_FLAG_DEFINED ((SYMBOL_FLAG_SUBT_DEP) << 2) +#define MACHO_SYMBOL_DEFINED_P(RTX) \ + ((SYMBOL_REF_FLAGS (RTX) & MACHO_SYMBOL_FLAG_DEFINED) != 0) + +/* Set on a symbol that has specified non-default visibility. */ + +#define MACHO_SYMBOL_FLAG_HIDDEN_VIS ((SYMBOL_FLAG_SUBT_DEP) << 3) +#define MACHO_SYMBOL_HIDDEN_VIS_P(RTX) \ + ((SYMBOL_REF_FLAGS (RTX) & MACHO_SYMBOL_FLAG_HIDDEN_VIS) != 0) + +/* Set on a symbol that is a pic stub or symbol indirection (i.e. the + L_xxxxx${stub,non_lazy_ptr,lazy_ptr}. */ + +#define MACHO_SYMBOL_FLAG_INDIRECTION ((SYMBOL_FLAG_SUBT_DEP) << 5) +#define MACHO_SYMBOL_INDIRECTION_P(RTX) \ + ((SYMBOL_REF_FLAGS (RTX) & MACHO_SYMBOL_FLAG_INDIRECTION) != 0) + /* Set on a symbol to indicate when fix-and-continue style code generation is being used and the symbol refers to a static symbol that should be rebound from new instances of a translation unit to the original instance of the data. */ -#define MACHO_SYMBOL_STATIC ((SYMBOL_FLAG_MACH_DEP) << 2) +#define MACHO_SYMBOL_FLAG_STATIC ((SYMBOL_FLAG_SUBT_DEP) << 6) +#define MACHO_SYMBOL_STATIC_P(RTX) \ + ((SYMBOL_REF_FLAGS (RTX) & MACHO_SYMBOL_FLAG_STATIC) != 0) /* Symbolic names for various things we might know about a symbol. */ @@ -969,8 +1041,12 @@ _tested_ version known to support this so far. */ #define MIN_LD64_NO_COAL_SECTS "236.4" +/* From at least version 62.1, ld64 can build symbol indirection stubs as + needed, and there is no need for the compiler to emit them. */ +#define MIN_LD64_OMIT_STUBS "85.2" + #ifndef LD64_VERSION -#define LD64_VERSION "85.2" +#define LD64_VERSION "62.1" #else #define DEF_LD64 LD64_VERSION #endif Index: gcc/config/darwin10.h =================================================================== --- a/src/gcc/config/darwin10.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/darwin10.h (.../branches/gcc-9-branch) @@ -18,17 +18,12 @@ along with GCC; see the file COPYING3. If not see . */ -/* Fix PR41260 by passing -no_compact_unwind on darwin10 and later until - unwinder in libSystem is fixed to digest new epilog unwinding notes. +/* Fix PR47558 by linking against libSystem ahead of libgcc_ext. */ - Fix PR47558 by linking against libSystem ahead of libgcc_ext. */ #undef LINK_GCC_C_SEQUENCE_SPEC #define LINK_GCC_C_SEQUENCE_SPEC \ -"%:version-compare(>= 10.6 mmacosx-version-min= -no_compact_unwind) \ - %{!static:%{!static-libgcc: \ +"%{!static:%{!static-libgcc: \ %:version-compare(>= 10.6 mmacosx-version-min= -lSystem) } } \ - %{fno-pic|fno-PIC|fno-pie|fno-PIE|fapple-kext|mkernel|static|mdynamic-no-pic: \ - %:version-compare(>= 10.7 mmacosx-version-min= -no_pie) } \ %{!nostdlib:%:version-compare(>< 10.6 10.7 mmacosx-version-min= -ld10-uwfef.o)} \ %G %{!nolibc:%L}" Index: gcc/config/arm/arm.c =================================================================== --- a/src/gcc/config/arm/arm.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/arm/arm.c (.../branches/gcc-9-branch) @@ -19670,6 +19670,35 @@ return save_reg_mask; } +/* Return a mask for the call-clobbered low registers that are unused + at the end of the prologue. */ +static unsigned long +thumb1_prologue_unused_call_clobbered_lo_regs (void) +{ + unsigned long mask = 0; + + for (int reg = 0; reg <= LAST_LO_REGNUM; reg++) + if (!callee_saved_reg_p (reg) + && !REGNO_REG_SET_P (df_get_live_out (ENTRY_BLOCK_PTR_FOR_FN (cfun)), + reg)) + mask |= 1 << reg; + return mask; +} + +/* Similarly for the start of the epilogue. */ +static unsigned long +thumb1_epilogue_unused_call_clobbered_lo_regs (void) +{ + unsigned long mask = 0; + + for (int reg = 0; reg <= LAST_LO_REGNUM; reg++) + if (!callee_saved_reg_p (reg) + && !REGNO_REG_SET_P (df_get_live_in (EXIT_BLOCK_PTR_FOR_FN (cfun)), + reg)) + mask |= 1 << reg; + return mask; +} + /* Compute a bit mask of which core registers need to be saved on the stack for the current function. */ static unsigned long @@ -19701,10 +19730,19 @@ if (mask & 0xff || thumb_force_lr_save ()) mask |= (1 << LR_REGNUM); - /* Make sure we have a low work register if we need one. - We will need one if we are going to push a high register, - but we are not currently intending to push a low register. */ + bool call_clobbered_scratch + = (thumb1_prologue_unused_call_clobbered_lo_regs () + && thumb1_epilogue_unused_call_clobbered_lo_regs ()); + + /* Make sure we have a low work register if we need one. We will + need one if we are going to push a high register, but we are not + currently intending to push a low register. However if both the + prologue and epilogue have a spare call-clobbered low register, + then we won't need to find an additional work register. It does + not need to be the same register in the prologue and + epilogue. */ if ((mask & 0xff) == 0 + && !call_clobbered_scratch && ((mask & 0x0f00) || TARGET_BACKTRACE)) { /* Use thumb_find_work_register to choose which register @@ -24930,12 +24968,7 @@ unsigned long mask = live_regs_mask & 0xff; int next_hi_reg; - /* The available low registers depend on the size of the value we are - returning. */ - if (size <= 12) - mask |= 1 << 3; - if (size <= 8) - mask |= 1 << 2; + mask |= thumb1_epilogue_unused_call_clobbered_lo_regs (); if (mask == 0) /* Oh dear! We have no low registers into which we can pop @@ -24943,7 +24976,7 @@ internal_error ("no low registers available for popping high registers"); - for (next_hi_reg = 8; next_hi_reg < 13; next_hi_reg++) + for (next_hi_reg = 12; next_hi_reg > LAST_LO_REGNUM; next_hi_reg--) if (live_regs_mask & (1 << next_hi_reg)) break; @@ -24951,7 +24984,7 @@ { /* Find lo register(s) into which the high register(s) can be popped. */ - for (regno = 0; regno <= LAST_LO_REGNUM; regno++) + for (regno = LAST_LO_REGNUM; regno >= 0; regno--) { if (mask & (1 << regno)) high_regs_pushed--; @@ -24959,13 +24992,14 @@ break; } - mask &= (2 << regno) - 1; /* A noop if regno == 8 */ + if (high_regs_pushed == 0 && regno >= 0) + mask &= ~((1 << regno) - 1); /* Pop the values into the low register(s). */ thumb_pop (asm_out_file, mask); /* Move the value(s) into the high registers. */ - for (regno = 0; regno <= LAST_LO_REGNUM; regno++) + for (regno = LAST_LO_REGNUM; regno >= 0; regno--) { if (mask & (1 << regno)) { @@ -24972,7 +25006,8 @@ asm_fprintf (asm_out_file, "\tmov\t%r, %r\n", next_hi_reg, regno); - for (next_hi_reg++; next_hi_reg < 13; next_hi_reg++) + for (next_hi_reg--; next_hi_reg > LAST_LO_REGNUM; + next_hi_reg--) if (live_regs_mask & (1 << next_hi_reg)) break; } @@ -25354,10 +25389,20 @@ break; /* Here we need to mask out registers used for passing arguments - even if they can be pushed. This is to avoid using them to stash the high - registers. Such kind of stash may clobber the use of arguments. */ + even if they can be pushed. This is to avoid using them to + stash the high registers. Such kind of stash may clobber the + use of arguments. */ pushable_regs = l_mask & (~arg_regs_mask); - if (lr_needs_saving) + pushable_regs |= thumb1_prologue_unused_call_clobbered_lo_regs (); + + /* Normally, LR can be used as a scratch register once it has been + saved; but if the function examines its own return address then + the value is still live and we need to avoid using it. */ + bool return_addr_live + = REGNO_REG_SET_P (df_get_live_out (ENTRY_BLOCK_PTR_FOR_FN (cfun)), + LR_REGNUM); + + if (lr_needs_saving || return_addr_live) pushable_regs &= ~(1 << LR_REGNUM); if (pushable_regs == 0) @@ -25398,6 +25443,11 @@ push_mask |= 1 << LR_REGNUM; real_regs_mask |= 1 << LR_REGNUM; lr_needs_saving = false; + /* If the return address is not live at this point, we + can add LR to the list of registers that we can use + for pushes. */ + if (!return_addr_live) + pushable_regs |= 1 << LR_REGNUM; } insn = thumb1_emit_multi_reg_push (push_mask, real_regs_mask); Index: gcc/config/arm/t-multilib =================================================================== --- a/src/gcc/config/arm/t-multilib (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/arm/t-multilib (.../branches/gcc-9-branch) @@ -24,6 +24,8 @@ # values during the configure step. We enforce this during the # top-level configury. +s-mlib: $(srcdir)/config/arm/t-multilib $(srcdir)/config/arm/t-aprofile $(srcdir)/config/arm/t-rmprofile + MULTILIB_OPTIONS = MULTILIB_DIRNAMES = MULTILIB_EXCEPTIONS = @@ -63,6 +65,8 @@ v7_a_arch_variants := $(call all_feat_combs, mp sec) v7_a_nosimd_variants := +fp +vfpv3 +vfpv3-d16-fp16 +vfpv3-fp16 +vfpv4-d16 +vfpv4 v7_a_simd_variants := +simd +neon-fp16 +neon-vfpv4 +v7_r_sp_variants := +fp.sp +fp.sp+idiv +vfpv3xd-fp16 +vfpv3xd-fp16+idiv +v7_r_dp_variants := +fp +fp+idiv +vfpv3-d16-fp16 +vfpv3-d16-fp16+idiv v7ve_nosimd_variants := +vfpv3-d16 +vfpv3 +vfpv3-d16-fp16 +vfpv3-fp16 +fp +vfpv4 v7ve_vfpv3_simd_variants := +neon +neon-fp16 v7ve_vfpv4_simd_variants := +simd @@ -86,8 +90,8 @@ MULTILIB_OPTIONS += marm/mthumb MULTILIB_DIRNAMES += arm thumb -MULTILIB_OPTIONS += march=armv5te+fp/march=armv7/march=armv7+fp/$(MULTI_ARCH_OPTS_A)$(SEP)$(MULTI_ARCH_OPTS_RM) -MULTILIB_DIRNAMES += v5te v7 v7+fp $(MULTI_ARCH_DIRS_A) $(MULTI_ARCH_DIRS_RM) +MULTILIB_OPTIONS += march=armv5te+fp/march=armv7/march=armv7+fp/march=armv7-r+fp.sp/$(MULTI_ARCH_OPTS_A)$(SEP)$(MULTI_ARCH_OPTS_RM) +MULTILIB_DIRNAMES += v5te v7 v7+fp v7-r+fp.sp $(MULTI_ARCH_DIRS_A) $(MULTI_ARCH_DIRS_RM) MULTILIB_OPTIONS += mfloat-abi=soft/mfloat-abi=softfp/mfloat-abi=hard MULTILIB_DIRNAMES += nofp softfp hard @@ -100,15 +104,23 @@ MULTILIB_REQUIRED += mthumb/march=armv7+fp/mfloat-abi=softfp MULTILIB_REQUIRED += mthumb/march=armv7+fp/mfloat-abi=hard -# Map v7-r down onto common v7 code. +MULTILIB_REQUIRED += mthumb/march=armv7-r+fp.sp/mfloat-abi=softfp +MULTILIB_REQUIRED += mthumb/march=armv7-r+fp.sp/mfloat-abi=hard + +# Map v7-r with double precision down onto common v7 code. MULTILIB_MATCHES += march?armv7=march?armv7-r MULTILIB_MATCHES += march?armv7=march?armv7-r+idiv -MULTILIB_MATCHES += march?armv7+fp=march?armv7-r+fp -MULTILIB_MATCHES += march?armv7+fp=march?armv7-r+fp+idiv +MULTILIB_MATCHES += $(foreach ARCH, $(v7_r_dp_variants), \ + march?armv7+fp=march?armv7-r$(ARCH)) +# Map v7-r single precision variants to v7-r with single precision. +MULTILIB_MATCHES += $(foreach ARCH, \ + $(filter-out +fp.sp, $(v7_r_sp_variants)), \ + march?armv7-r+fp.sp=march?armv7-r$(ARCH)) + MULTILIB_MATCHES += $(foreach ARCH, $(all_early_arch), \ march?armv5te+fp=march?$(ARCH)+fp) -# Map v8-r down onto common v7 code. +# Map v8-r down onto common v7 code or v7-r sp. MULTILIB_MATCHES += march?armv7=march?armv8-r MULTILIB_MATCHES += $(foreach ARCH, $(v8_r_nosimd_variants), \ march?armv7=march?armv8-r$(ARCH)) @@ -115,8 +127,9 @@ MULTILIB_MATCHES += $(foreach ARCH,+simd +crypto, \ march?armv7+fp=march?armv8-r$(ARCH) \ march?armv7+fp=march?armv8-r+crc$(ARCH)) +MULTILIB_MATCHES += march?armv7-r+fp.sp=march?armv8-r+fp.sp +MULTILIB_MATCHES += march?armv7-r+fp.sp=march?armv8-r+crc+fp.sp - ifeq (,$(HAS_APROFILE)) # Map all v7-a MULTILIB_MATCHES += march?armv7=march?armv7-a @@ -177,7 +190,7 @@ MULTILIB_REUSE += mthumb/march.armv7/mfloat-abi.soft=marm/march.armv7/mfloat-abi.soft MULTILIB_REUSE += $(foreach ABI, hard softfp, \ - $(foreach ARCH, armv7+fp, \ + $(foreach ARCH, armv7+fp armv7-r+fp\.sp, \ mthumb/march.$(ARCH)/mfloat-abi.$(ABI)=marm/march.$(ARCH)/mfloat-abi.$(ABI))) # Softfp but no FP, use the soft-float libraries. Index: gcc/config/arm/arm_acle.h =================================================================== --- a/src/gcc/config/arm/arm_acle.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/arm/arm_acle.h (.../branches/gcc-9-branch) @@ -174,8 +174,12 @@ #endif /* (!__thumb__ || __thumb2__) && __ARM_ARCH >= 4. */ #pragma GCC push_options -#if __ARM_ARCH >= 8 +#ifdef __ARM_FEATURE_CRC32 +#ifdef __ARM_FP +#pragma GCC target ("arch=armv8-a+crc+simd") +#else #pragma GCC target ("arch=armv8-a+crc") +#endif __extension__ static __inline uint32_t __attribute__ ((__always_inline__)) __crc32b (uint32_t __a, uint8_t __b) @@ -235,7 +239,7 @@ } #endif -#endif /* __ARM_ARCH >= 8. */ +#endif /* __ARM_FEATURE_CRC32 */ #pragma GCC pop_options #ifdef __cplusplus Index: gcc/config/arm/arm.opt =================================================================== --- a/src/gcc/config/arm/arm.opt (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/arm/arm.opt (.../branches/gcc-9-branch) @@ -82,7 +82,7 @@ Target Report Mask(APCS_STACK) Undocumented march= -Target RejectNegative ToLower Joined Var(arm_arch_string) +Target RejectNegative Negative(march=) ToLower Joined Var(arm_arch_string) Specify the name of the target architecture. ; Other arm_arch values are loaded from arm-tables.opt @@ -107,7 +107,7 @@ Thumb: Assume function pointers may go to non-Thumb aware code. mcpu= -Target RejectNegative ToLower Joined Var(arm_cpu_string) +Target RejectNegative Negative(mcpu=) ToLower Joined Var(arm_cpu_string) Specify the name of the target CPU. mfloat-abi= @@ -232,7 +232,7 @@ Thumb: Generate (leaf) stack frames even if not needed. mtune= -Target RejectNegative ToLower Joined Var(arm_tune_string) +Target RejectNegative Negative(mtune=) ToLower Joined Var(arm_tune_string) Tune code for the given processor. mprint-tune-info Index: gcc/config/arm/arm.md =================================================================== --- a/src/gcc/config/arm/arm.md (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/arm/arm.md (.../branches/gcc-9-branch) @@ -4483,62 +4483,78 @@ ; ARMv6+ unaligned load/store instructions (used for packed structure accesses). (define_insn "unaligned_loadsi" - [(set (match_operand:SI 0 "s_register_operand" "=l,r") - (unspec:SI [(match_operand:SI 1 "memory_operand" "Uw,m")] + [(set (match_operand:SI 0 "s_register_operand" "=l,l,r") + (unspec:SI [(match_operand:SI 1 "memory_operand" "m,Uw,m")] UNSPEC_UNALIGNED_LOAD))] "unaligned_access" - "ldr%?\t%0, %1\t@ unaligned" - [(set_attr "arch" "t2,any") - (set_attr "length" "2,4") - (set_attr "predicable" "yes") - (set_attr "predicable_short_it" "yes,no") + "@ + ldr\t%0, %1\t@ unaligned + ldr%?\t%0, %1\t@ unaligned + ldr%?\t%0, %1\t@ unaligned" + [(set_attr "arch" "t1,t2,32") + (set_attr "length" "2,2,4") + (set_attr "predicable" "no,yes,yes") + (set_attr "predicable_short_it" "no,yes,no") (set_attr "type" "load_4")]) +;; The 16-bit Thumb1 variant of ldrsh requires two registers in the +;; address (there's no immediate format). That's tricky to support +;; here and we don't really need this pattern for that case, so only +;; enable for 32-bit ISAs. (define_insn "unaligned_loadhis" [(set (match_operand:SI 0 "s_register_operand" "=r") (sign_extend:SI (unspec:HI [(match_operand:HI 1 "memory_operand" "Uh")] UNSPEC_UNALIGNED_LOAD)))] - "unaligned_access" + "unaligned_access && TARGET_32BIT" "ldrsh%?\t%0, %1\t@ unaligned" [(set_attr "predicable" "yes") (set_attr "type" "load_byte")]) (define_insn "unaligned_loadhiu" - [(set (match_operand:SI 0 "s_register_operand" "=l,r") + [(set (match_operand:SI 0 "s_register_operand" "=l,l,r") (zero_extend:SI - (unspec:HI [(match_operand:HI 1 "memory_operand" "Uw,m")] + (unspec:HI [(match_operand:HI 1 "memory_operand" "m,Uw,m")] UNSPEC_UNALIGNED_LOAD)))] "unaligned_access" - "ldrh%?\t%0, %1\t@ unaligned" - [(set_attr "arch" "t2,any") - (set_attr "length" "2,4") - (set_attr "predicable" "yes") - (set_attr "predicable_short_it" "yes,no") + "@ + ldrh\t%0, %1\t@ unaligned + ldrh%?\t%0, %1\t@ unaligned + ldrh%?\t%0, %1\t@ unaligned" + [(set_attr "arch" "t1,t2,32") + (set_attr "length" "2,2,4") + (set_attr "predicable" "no,yes,yes") + (set_attr "predicable_short_it" "no,yes,no") (set_attr "type" "load_byte")]) (define_insn "unaligned_storesi" - [(set (match_operand:SI 0 "memory_operand" "=Uw,m") - (unspec:SI [(match_operand:SI 1 "s_register_operand" "l,r")] + [(set (match_operand:SI 0 "memory_operand" "=m,Uw,m") + (unspec:SI [(match_operand:SI 1 "s_register_operand" "l,l,r")] UNSPEC_UNALIGNED_STORE))] "unaligned_access" - "str%?\t%1, %0\t@ unaligned" - [(set_attr "arch" "t2,any") - (set_attr "length" "2,4") - (set_attr "predicable" "yes") - (set_attr "predicable_short_it" "yes,no") + "@ + str\t%1, %0\t@ unaligned + str%?\t%1, %0\t@ unaligned + str%?\t%1, %0\t@ unaligned" + [(set_attr "arch" "t1,t2,32") + (set_attr "length" "2,2,4") + (set_attr "predicable" "no,yes,yes") + (set_attr "predicable_short_it" "no,yes,no") (set_attr "type" "store_4")]) (define_insn "unaligned_storehi" - [(set (match_operand:HI 0 "memory_operand" "=Uw,m") - (unspec:HI [(match_operand:HI 1 "s_register_operand" "l,r")] + [(set (match_operand:HI 0 "memory_operand" "=m,Uw,m") + (unspec:HI [(match_operand:HI 1 "s_register_operand" "l,l,r")] UNSPEC_UNALIGNED_STORE))] "unaligned_access" - "strh%?\t%1, %0\t@ unaligned" - [(set_attr "arch" "t2,any") - (set_attr "length" "2,4") - (set_attr "predicable" "yes") - (set_attr "predicable_short_it" "yes,no") + "@ + strh\t%1, %0\t@ unaligned + strh%?\t%1, %0\t@ unaligned + strh%?\t%1, %0\t@ unaligned" + [(set_attr "arch" "t1,t2,32") + (set_attr "length" "2,2,4") + (set_attr "predicable" "no,yes,yes") + (set_attr "predicable_short_it" "no,yes,no") (set_attr "type" "store_4")]) Index: gcc/config/darwin-driver.c =================================================================== --- a/src/gcc/config/darwin-driver.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/darwin-driver.c (.../branches/gcc-9-branch) @@ -210,6 +210,28 @@ return new_flag; } +/* See if we can find the sysroot from the SDKROOT environment variable. */ + +static const char * +maybe_get_sysroot_from_sdkroot () +{ + const char *maybe_sysroot = getenv ("SDKROOT"); + + /* We'll use the same rules as the clang driver, for compatibility. + 1) The path must be absolute + 2) Ignore "/", that is the default anyway and we do not want the + sysroot semantics to be applied to it. + 3) It must exist (actually, we'll check it's readable too). */ + + if (maybe_sysroot == NULL + || *maybe_sysroot != '/' + || strlen (maybe_sysroot) == 1 + || access (maybe_sysroot, R_OK) == -1) + return NULL; + + return xstrndup (maybe_sysroot, strlen (maybe_sysroot)); +} + /* Translate -filelist and -framework options in *DECODED_OPTIONS (size *DECODED_OPTIONS_COUNT) to use -Xlinker so that they are considered to be linker inputs in the case that no other inputs are @@ -234,6 +256,7 @@ bool appendM64 = false; const char *vers_string = NULL; bool seen_version_min = false; + bool seen_sysroot_p = false; for (i = 1; i < *decoded_options_count; i++) { @@ -314,6 +337,11 @@ --*decoded_options_count; break; + case OPT__sysroot_: + case OPT_isysroot: + seen_sysroot_p = true; + break; + default: break; } @@ -375,6 +403,22 @@ &(*decoded_options)[*decoded_options_count - 1]); } + if (! seen_sysroot_p) + { + /* We will pick up an SDKROOT if we didn't specify a sysroot and treat + it as overriding any configure-time --with-sysroot. */ + const char *sdkroot = maybe_get_sysroot_from_sdkroot (); + if (sdkroot) + { + ++*decoded_options_count; + *decoded_options = XRESIZEVEC (struct cl_decoded_option, + *decoded_options, + *decoded_options_count); + generate_option (OPT__sysroot_, sdkroot, 1, CL_DRIVER, + &(*decoded_options)[*decoded_options_count - 1]); + } + } + /* We will need to know the OS X version we're trying to build for here so that we can figure out the mechanism and source for the sysroot to be used. */ Index: gcc/config/pa/pa.md =================================================================== --- a/src/gcc/config/pa/pa.md (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/pa/pa.md (.../branches/gcc-9-branch) @@ -10091,23 +10091,55 @@ (set_attr "length" "4,16")]) ;; PA 2.0 hardware supports out-of-order execution of loads and stores, so -;; we need a memory barrier to enforce program order for memory references. -;; Since we want PA 1.x code to be PA 2.0 compatible, we also need the -;; barrier when generating PA 1.x code. +;; we need memory barriers to enforce program order for memory references +;; when the TLB and PSW O bits are not set. We assume all PA 2.0 systems +;; are weakly ordered since neither HP-UX or Linux set the PSW O bit. Since +;; we want PA 1.x code to be PA 2.0 compatible, we also need barriers when +;; generating PA 1.x code even though all PA 1.x systems are strongly ordered. +;; When barriers are needed, we use a strongly ordered ldcw instruction as +;; the barrier. Most PA 2.0 targets are cache coherent. In that case, we +;; can use the coherent cache control hint and avoid aligning the ldcw +;; address. In spite of its description, it is not clear that the sync +;; instruction works as a barrier. + (define_expand "memory_barrier" - [(set (match_dup 0) - (unspec:BLK [(match_dup 0)] UNSPEC_MEMORY_BARRIER))] + [(parallel + [(set (match_dup 0) (unspec:BLK [(match_dup 0)] UNSPEC_MEMORY_BARRIER)) + (clobber (match_dup 1))])] "" { - operands[0] = gen_rtx_MEM (BLKmode, gen_rtx_SCRATCH (Pmode)); + /* We don't need a barrier if the target uses ordered memory references. */ + if (TARGET_ORDERED) + FAIL; + operands[1] = gen_reg_rtx (Pmode); + operands[0] = gen_rtx_MEM (BLKmode, operands[1]); MEM_VOLATILE_P (operands[0]) = 1; }) -(define_insn "*memory_barrier" +(define_insn "*memory_barrier_coherent" [(set (match_operand:BLK 0 "" "") - (unspec:BLK [(match_dup 0)] UNSPEC_MEMORY_BARRIER))] + (unspec:BLK [(match_dup 0)] UNSPEC_MEMORY_BARRIER)) + (clobber (match_operand 1 "pmode_register_operand" "=r"))] + "TARGET_PA_20 && TARGET_COHERENT_LDCW" + "ldcw,co 0(%%sp),%1" + [(set_attr "type" "binary") + (set_attr "length" "4")]) + +(define_insn "*memory_barrier_64" + [(set (match_operand:BLK 0 "" "") + (unspec:BLK [(match_dup 0)] UNSPEC_MEMORY_BARRIER)) + (clobber (match_operand 1 "pmode_register_operand" "=&r"))] + "TARGET_64BIT" + "ldo 15(%%sp),%1\n\tdepd %%r0,63,3,%1\n\tldcw 0(%1),%1" + [(set_attr "type" "binary") + (set_attr "length" "12")]) + +(define_insn "*memory_barrier_32" + [(set (match_operand:BLK 0 "" "") + (unspec:BLK [(match_dup 0)] UNSPEC_MEMORY_BARRIER)) + (clobber (match_operand 1 "pmode_register_operand" "=&r"))] "" - "sync" + "ldo 15(%%sp),%1\n\t{dep|depw} %%r0,31,3,%1\n\tldcw 0(%1),%1" [(set_attr "type" "binary") - (set_attr "length" "4")]) + (set_attr "length" "12")]) Index: gcc/config/pa/pa.opt =================================================================== --- a/src/gcc/config/pa/pa.opt (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/pa/pa.opt (.../branches/gcc-9-branch) @@ -45,6 +45,10 @@ Target Report Mask(CALLER_COPIES) Caller copies function arguments passed by hidden reference. +mcoherent-ldcw +Target Report Var(TARGET_COHERENT_LDCW) Init(1) +Use ldcw/ldcd coherent cache-control hint. + mdisable-fpregs Target Report Mask(DISABLE_FPREGS) Disable FP regs. @@ -90,6 +94,10 @@ Target RejectNegative Report Mask(NO_SPACE_REGS) Disable space regs. +mordered +Target Report Var(TARGET_ORDERED) Init(0) +Assume memory references are ordered and barriers are not needed. + mpa-risc-1-0 Target RejectNegative Generate PA1.0 code. Index: gcc/config/pa/pa.c =================================================================== --- a/src/gcc/config/pa/pa.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/pa/pa.c (.../branches/gcc-9-branch) @@ -7856,7 +7856,7 @@ /* 64-bit plabel sequence. */ else if (TARGET_64BIT && !local_call) - length += sibcall ? 28 : 24; + length += 24; /* non-pic long absolute branch sequence. */ else if ((TARGET_LONG_ABS_CALL || local_call) && !flag_pic) @@ -7928,12 +7928,9 @@ xoperands[0] = pa_get_deferred_plabel (call_dest); xoperands[1] = gen_label_rtx (); - /* If this isn't a sibcall, we put the load of %r27 into the - delay slot. We can't do this in a sibcall as we don't - have a second call-clobbered scratch register available. - We don't need to do anything when generating fast indirect - calls. */ - if (seq_length != 0 && !sibcall) + /* Put the load of %r27 into the delay slot. We don't need to + do anything when generating fast indirect calls. */ + if (seq_length != 0) { final_scan_insn (NEXT_INSN (insn), asm_out_file, optimize, 0, NULL); @@ -7940,26 +7937,15 @@ /* Now delete the delay insn. */ SET_INSN_DELETED (NEXT_INSN (insn)); - seq_length = 0; } output_asm_insn ("addil LT'%0,%%r27", xoperands); output_asm_insn ("ldd RT'%0(%%r1),%%r1", xoperands); output_asm_insn ("ldd 0(%%r1),%%r1", xoperands); - - if (sibcall) - { - output_asm_insn ("ldd 24(%%r1),%%r27", xoperands); - output_asm_insn ("ldd 16(%%r1),%%r1", xoperands); - output_asm_insn ("bve (%%r1)", xoperands); - } - else - { - output_asm_insn ("ldd 16(%%r1),%%r2", xoperands); - output_asm_insn ("bve,l (%%r2),%%r2", xoperands); - output_asm_insn ("ldd 24(%%r1),%%r27", xoperands); - seq_length = 1; - } + output_asm_insn ("ldd 16(%%r1),%%r2", xoperands); + output_asm_insn ("bve,l (%%r2),%%r2", xoperands); + output_asm_insn ("ldd 24(%%r1),%%r27", xoperands); + seq_length = 1; } else { @@ -8052,20 +8038,22 @@ { output_asm_insn ("addil LT'%0,%%r19", xoperands); output_asm_insn ("ldw RT'%0(%%r1),%%r1", xoperands); - output_asm_insn ("ldw 0(%%r1),%%r1", xoperands); + output_asm_insn ("ldw 0(%%r1),%%r22", xoperands); } else { output_asm_insn ("addil LR'%0-$global$,%%r27", xoperands); - output_asm_insn ("ldw RR'%0-$global$(%%r1),%%r1", + output_asm_insn ("ldw RR'%0-$global$(%%r1),%%r22", xoperands); } - output_asm_insn ("bb,>=,n %%r1,30,.+16", xoperands); - output_asm_insn ("depi 0,31,2,%%r1", xoperands); - output_asm_insn ("ldw 4(%%sr0,%%r1),%%r19", xoperands); - output_asm_insn ("ldw 0(%%sr0,%%r1),%%r1", xoperands); + output_asm_insn ("bb,>=,n %%r22,30,.+16", xoperands); + output_asm_insn ("depi 0,31,2,%%r22", xoperands); + /* Should this be an ordered load to ensure the target + address is loaded before the global pointer? */ + output_asm_insn ("ldw 0(%%r22),%%r1", xoperands); + output_asm_insn ("ldw 4(%%r22),%%r19", xoperands); if (!sibcall && !TARGET_PA_20) { @@ -8158,10 +8146,6 @@ if (TARGET_PORTABLE_RUNTIME) return 16; - /* Inline version of $$dyncall. */ - if ((TARGET_NO_SPACE_REGS || TARGET_PA_20) && !optimize_size) - return 20; - if (!TARGET_LONG_CALLS && ((TARGET_PA_20 && !TARGET_SOM && distance < 7600000) || distance < MAX_PCREL17F_OFFSET)) @@ -8171,13 +8155,16 @@ if (!flag_pic) return 12; - /* Inline version of $$dyncall. */ - if (TARGET_NO_SPACE_REGS || TARGET_PA_20) - return 20; - + /* Inline versions of $$dyncall. */ if (!optimize_size) - return 36; + { + if (TARGET_NO_SPACE_REGS) + return 28; + if (TARGET_PA_20) + return 32; + } + /* Long PIC pc-relative call. */ return 20; } @@ -8214,22 +8201,6 @@ return "blr %%r0,%%r2\n\tbv,n %%r0(%%r31)"; } - /* Maybe emit a fast inline version of $$dyncall. */ - if ((TARGET_NO_SPACE_REGS || TARGET_PA_20) && !optimize_size) - { - output_asm_insn ("bb,>=,n %%r22,30,.+12\n\t" - "ldw 2(%%r22),%%r19\n\t" - "ldw -2(%%r22),%%r22", xoperands); - pa_output_arg_descriptor (insn); - if (TARGET_NO_SPACE_REGS) - { - if (TARGET_PA_20) - return "bve,l,n (%%r22),%%r2\n\tnop"; - return "ble 0(%%sr4,%%r22)\n\tcopy %%r31,%%r2"; - } - return "bve,l (%%r22),%%r2\n\tstw %%r2,-24(%%sp)"; - } - /* Now the normal case -- we can reach $$dyncall directly or we're sure that we can get there via a long-branch stub. @@ -8258,35 +8229,40 @@ return "ble R'$$dyncall(%%sr4,%%r2)\n\tcopy %%r31,%%r2"; } - /* Maybe emit a fast inline version of $$dyncall. The long PIC - pc-relative call sequence is five instructions. The inline PA 2.0 - version of $$dyncall is also five instructions. The PA 1.X versions - are longer but still an overall win. */ - if (TARGET_NO_SPACE_REGS || TARGET_PA_20 || !optimize_size) + /* The long PIC pc-relative call sequence is five instructions. So, + let's use an inline version of $$dyncall when the calling sequence + has a roughly similar number of instructions and we are not optimizing + for size. We need two instructions to load the return pointer plus + the $$dyncall implementation. */ + if (!optimize_size) { - output_asm_insn ("bb,>=,n %%r22,30,.+12\n\t" - "ldw 2(%%r22),%%r19\n\t" - "ldw -2(%%r22),%%r22", xoperands); if (TARGET_NO_SPACE_REGS) { pa_output_arg_descriptor (insn); - if (TARGET_PA_20) - return "bve,l,n (%%r22),%%r2\n\tnop"; - return "ble 0(%%sr4,%%r22)\n\tcopy %%r31,%%r2"; + output_asm_insn ("bl .+8,%%r2\n\t" + "ldo 20(%%r2),%%r2\n\t" + "extru,<> %%r22,30,1,%%r0\n\t" + "bv,n %%r0(%%r22)\n\t" + "ldw -2(%%r22),%%r21\n\t" + "bv %%r0(%%r21)\n\t" + "ldw 2(%%r22),%%r19", xoperands); + return ""; } if (TARGET_PA_20) { pa_output_arg_descriptor (insn); - return "bve,l (%%r22),%%r2\n\tstw %%r2,-24(%%sp)"; + output_asm_insn ("bl .+8,%%r2\n\t" + "ldo 24(%%r2),%%r2\n\t" + "stw %%r2,-24(%%sp)\n\t" + "extru,<> %r22,30,1,%%r0\n\t" + "bve,n (%%r22)\n\t" + "ldw -2(%%r22),%%r21\n\t" + "bve (%%r21)\n\t" + "ldw 2(%%r22),%%r19", xoperands); + return ""; } - output_asm_insn ("bl .+8,%%r2\n\t" - "ldo 16(%%r2),%%r2\n\t" - "ldsid (%%r22),%%r1\n\t" - "mtsp %%r1,%%sr0", xoperands); - pa_output_arg_descriptor (insn); - return "be 0(%%sr0,%%r22)\n\tstw %%r2,-24(%%sp)"; } - + /* We need a long PIC call to $$dyncall. */ xoperands[0] = gen_rtx_SYMBOL_REF (Pmode, "$$dyncall"); xoperands[1] = gen_rtx_REG (Pmode, 2); @@ -10048,7 +10024,7 @@ /* Length in units of the trampoline instruction code. */ -#define TRAMPOLINE_CODE_SIZE (TARGET_64BIT ? 24 : (TARGET_PA_20 ? 32 : 40)) +#define TRAMPOLINE_CODE_SIZE (TARGET_64BIT ? 24 : (TARGET_PA_20 ? 36 : 48)) /* Output assembler code for a block containing the constant parts @@ -10069,27 +10045,46 @@ { if (!TARGET_64BIT) { - fputs ("\tldw 36(%r22),%r21\n", f); - fputs ("\tbb,>=,n %r21,30,.+16\n", f); - if (ASSEMBLER_DIALECT == 0) - fputs ("\tdepi 0,31,2,%r21\n", f); - else - fputs ("\tdepwi 0,31,2,%r21\n", f); - fputs ("\tldw 4(%r21),%r19\n", f); - fputs ("\tldw 0(%r21),%r21\n", f); if (TARGET_PA_20) { - fputs ("\tbve (%r21)\n", f); - fputs ("\tldw 40(%r22),%r29\n", f); + fputs ("\tmfia %r20\n", f); + fputs ("\tldw 48(%r20),%r22\n", f); + fputs ("\tcopy %r22,%r21\n", f); + fputs ("\tbb,>=,n %r22,30,.+16\n", f); + fputs ("\tdepwi 0,31,2,%r22\n", f); + fputs ("\tldw 0(%r22),%r21\n", f); + fputs ("\tldw 4(%r22),%r19\n", f); + fputs ("\tbve (%r21)\n", f); + fputs ("\tldw 52(%r1),%r29\n", f); fputs ("\t.word 0\n", f); fputs ("\t.word 0\n", f); + fputs ("\t.word 0\n", f); } else { + if (ASSEMBLER_DIALECT == 0) + { + fputs ("\tbl .+8,%r20\n", f); + fputs ("\tdepi 0,31,2,%r20\n", f); + } + else + { + fputs ("\tb,l .+8,%r20\n", f); + fputs ("\tdepwi 0,31,2,%r20\n", f); + } + fputs ("\tldw 40(%r20),%r22\n", f); + fputs ("\tcopy %r22,%r21\n", f); + fputs ("\tbb,>=,n %r22,30,.+16\n", f); + if (ASSEMBLER_DIALECT == 0) + fputs ("\tdepi 0,31,2,%r22\n", f); + else + fputs ("\tdepwi 0,31,2,%r22\n", f); + fputs ("\tldw 0(%r22),%r21\n", f); + fputs ("\tldw 4(%r22),%r19\n", f); fputs ("\tldsid (%r21),%r1\n", f); fputs ("\tmtsp %r1,%sr0\n", f); - fputs ("\tbe 0(%sr0,%r21)\n", f); - fputs ("\tldw 40(%r22),%r29\n", f); + fputs ("\tbe 0(%sr0,%r21)\n", f); + fputs ("\tldw 44(%r20),%r29\n", f); } fputs ("\t.word 0\n", f); fputs ("\t.word 0\n", f); @@ -10103,11 +10098,11 @@ fputs ("\t.dword 0\n", f); fputs ("\t.dword 0\n", f); fputs ("\tmfia %r31\n", f); - fputs ("\tldd 24(%r31),%r1\n", f); - fputs ("\tldd 24(%r1),%r27\n", f); - fputs ("\tldd 16(%r1),%r1\n", f); + fputs ("\tldd 24(%r31),%r27\n", f); + fputs ("\tldd 32(%r31),%r31\n", f); + fputs ("\tldd 16(%r27),%r1\n", f); fputs ("\tbve (%r1)\n", f); - fputs ("\tldd 32(%r31),%r31\n", f); + fputs ("\tldd 24(%r27),%r27\n", f); fputs ("\t.dword 0 ; fptr\n", f); fputs ("\t.dword 0 ; static link\n", f); } @@ -10117,10 +10112,10 @@ FNADDR is an RTX for the address of the function's pure code. CXT is an RTX for the static chain value for the function. - Move the function address to the trampoline template at offset 36. - Move the static chain value to trampoline template at offset 40. - Move the trampoline address to trampoline template at offset 44. - Move r19 to trampoline template at offset 48. The latter two + Move the function address to the trampoline template at offset 48. + Move the static chain value to trampoline template at offset 52. + Move the trampoline address to trampoline template at offset 56. + Move r19 to trampoline template at offset 60. The latter two words create a plabel for the indirect call to the trampoline. A similar sequence is used for the 64-bit port but the plabel is @@ -10146,15 +10141,15 @@ if (!TARGET_64BIT) { - tmp = adjust_address (m_tramp, Pmode, 36); + tmp = adjust_address (m_tramp, Pmode, 48); emit_move_insn (tmp, fnaddr); - tmp = adjust_address (m_tramp, Pmode, 40); + tmp = adjust_address (m_tramp, Pmode, 52); emit_move_insn (tmp, chain_value); /* Create a fat pointer for the trampoline. */ - tmp = adjust_address (m_tramp, Pmode, 44); + tmp = adjust_address (m_tramp, Pmode, 56); emit_move_insn (tmp, r_tramp); - tmp = adjust_address (m_tramp, Pmode, 48); + tmp = adjust_address (m_tramp, Pmode, 60); emit_move_insn (tmp, gen_rtx_REG (Pmode, 19)); /* fdc and fic only use registers for the address to flush, @@ -10206,7 +10201,7 @@ } #ifdef HAVE_ENABLE_EXECUTE_STACK -  emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__enable_execute_stack"), + emit_library_call (gen_rtx_SYMBOL_REF (Pmode, "__enable_execute_stack"), LCT_NORMAL, VOIDmode, XEXP (m_tramp, 0), Pmode); #endif } @@ -10213,13 +10208,13 @@ /* Perform any machine-specific adjustment in the address of the trampoline. ADDR contains the address that was passed to pa_trampoline_init. - Adjust the trampoline address to point to the plabel at offset 44. */ + Adjust the trampoline address to point to the plabel at offset 56. */ static rtx pa_trampoline_adjust_address (rtx addr) { if (!TARGET_64BIT) - addr = memory_address (Pmode, plus_constant (Pmode, addr, 46)); + addr = memory_address (Pmode, plus_constant (Pmode, addr, 58)); return addr; } Index: gcc/config/pa/pa.h =================================================================== --- a/src/gcc/config/pa/pa.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/pa/pa.h (.../branches/gcc-9-branch) @@ -689,7 +689,7 @@ /* Length in units of the trampoline for entering a nested function. */ -#define TRAMPOLINE_SIZE (TARGET_64BIT ? 72 : 52) +#define TRAMPOLINE_SIZE (TARGET_64BIT ? 72 : 64) /* Alignment required by the trampoline. */ @@ -1293,13 +1293,12 @@ #endif /* The maximum offset in bytes for a PA 1.X pc-relative call to the - head of the preceding stub table. The selected offsets have been - chosen so that approximately one call stub is allocated for every - 86.7 instructions. A long branch stub is two instructions when - not generating PIC code. For HP-UX and ELF targets, PIC stubs are - seven and four instructions, respectively. */ -#define MAX_PCREL17F_OFFSET \ - (flag_pic ? (TARGET_HPUX ? 198164 : 221312) : 240000) + head of the preceding stub table. A long branch stub is two or three + instructions for non-PIC and PIC, respectively. Import stubs are + seven and five instructions for HP-UX and ELF targets, respectively. + The default stub group size for ELF targets is 217856 bytes. + FIXME: We need an option to set the maximum offset. */ +#define MAX_PCREL17F_OFFSET (TARGET_HPUX ? 198164 : 217856) #define NEED_INDICATE_EXEC_STACK 0 Index: gcc/config/darwin9.h =================================================================== --- a/src/gcc/config/darwin9.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/darwin9.h (.../branches/gcc-9-branch) @@ -35,12 +35,6 @@ /* Tell collect2 to run dsymutil for us as necessary. */ #define COLLECT_RUN_DSYMUTIL 1 -#undef DARWIN_PIE_SPEC -#define DARWIN_PIE_SPEC \ - "%{fpie|pie|fPIE: \ - %{mdynamic-no-pic: %n'-mdynamic-no-pic' overrides '-pie', '-fpie' or '-fPIE'; \ - :-pie}}" - /* Only ask as for debug data if the debug style is stabs (since as doesn't yet generate dwarf.) */ Index: gcc/config/mips/mips.md =================================================================== --- a/src/gcc/config/mips/mips.md (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/mips/mips.md (.../branches/gcc-9-branch) @@ -7588,7 +7588,7 @@ ;; __builtin_mips_get_fcsr: move the FCSR into operand 0. (define_expand "mips_get_fcsr" [(set (match_operand:SI 0 "register_operand") - (unspec_volatile [(const_int 0)] UNSPEC_GET_FCSR))] + (unspec_volatile:SI [(const_int 0)] UNSPEC_GET_FCSR))] "TARGET_HARD_FLOAT_ABI" { if (TARGET_MIPS16) @@ -7600,7 +7600,7 @@ (define_insn "*mips_get_fcsr" [(set (match_operand:SI 0 "register_operand" "=d") - (unspec_volatile [(const_int 0)] UNSPEC_GET_FCSR))] + (unspec_volatile:SI [(const_int 0)] UNSPEC_GET_FCSR))] "TARGET_HARD_FLOAT" "cfc1\t%0,$31") Index: gcc/config/mips/mips.c =================================================================== --- a/src/gcc/config/mips/mips.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/config/mips/mips.c (.../branches/gcc-9-branch) @@ -4849,7 +4849,7 @@ can forward SRC for DEST. This is most useful if the next insn is a simple store. */ rtx_insn *insn = (rtx_insn *)insn_; - struct mips_address_info addr; + struct mips_address_info addr = {}; if (insn) { rtx_insn *next = next_nonnote_nondebug_insn_bb (insn); @@ -4862,7 +4862,7 @@ { rtx tmp = XEXP (src, 0); mips_classify_address (&addr, tmp, GET_MODE (tmp), true); - if (REGNO (addr.reg) != REGNO (dest)) + if (addr.reg && !reg_overlap_mentioned_p (dest, addr.reg)) validate_change (next, &SET_SRC (set), src, false); } else Index: gcc/tree-vect-slp.c =================================================================== --- a/src/gcc/tree-vect-slp.c (.../tags/gcc_9_2_0_release) +++ b/src/gcc/tree-vect-slp.c (.../branches/gcc-9-branch) @@ -129,6 +129,7 @@ SLP_TREE_TWO_OPERATORS (node) = false; SLP_TREE_DEF_TYPE (node) = vect_internal_def; node->refcnt = 1; + node->max_nunits = 1; unsigned i; FOR_EACH_VEC_ELT (scalar_stmts, i, stmt_info) @@ -1051,15 +1052,24 @@ dump_printf_loc (MSG_NOTE, vect_location, "re-using %sSLP tree %p\n", *leader ? "" : "failed ", *leader); if (*leader) - (*leader)->refcnt++; + { + (*leader)->refcnt++; + vect_update_max_nunits (max_nunits, (*leader)->max_nunits); + } return *leader; } - slp_tree res = vect_build_slp_tree_2 (vinfo, stmts, group_size, max_nunits, + poly_uint64 this_max_nunits = 1; + slp_tree res = vect_build_slp_tree_2 (vinfo, stmts, group_size, + &this_max_nunits, matches, npermutes, tree_size, max_tree_size, bst_map); - /* Keep a reference for the bst_map use. */ if (res) - res->refcnt++; + { + res->max_nunits = this_max_nunits; + vect_update_max_nunits (max_nunits, this_max_nunits); + /* Keep a reference for the bst_map use. */ + res->refcnt++; + } bst_map->put (stmts.copy (), res); return res; } @@ -1463,9 +1473,10 @@ dump_metadata_t metadata (dump_kind, loc.get_impl_location ()); dump_user_location_t user_loc = loc.get_user_location (); - dump_printf_loc (metadata, user_loc, "node%s %p\n", + dump_printf_loc (metadata, user_loc, "node%s %p (max_nunits=%u)\n", SLP_TREE_DEF_TYPE (node) != vect_internal_def - ? " (external)" : "", node); + ? " (external)" : "", node, + estimated_poly_value (node->max_nunits)); FOR_EACH_VEC_ELT (SLP_TREE_SCALAR_STMTS (node), i, stmt_info) dump_printf_loc (metadata, user_loc, "\tstmt %d %G", i, stmt_info->stmt); if (SLP_TREE_CHILDREN (node).is_empty ()) Index: gcc/lto-streamer.h =================================================================== --- a/src/gcc/lto-streamer.h (.../tags/gcc_9_2_0_release) +++ b/src/gcc/lto-streamer.h (.../branches/gcc-9-branch) @@ -879,6 +879,7 @@ struct lto_out_decl_state *); void lto_output_location (struct output_block *, struct bitpack_d *, location_t); void lto_output_init_mode_table (void); +void lto_prepare_function_for_streaming (cgraph_node *); /* In lto-cgraph.c */ Index: libgo/mksysinfo.sh =================================================================== --- a/src/libgo/mksysinfo.sh (.../tags/gcc_9_2_0_release) +++ b/src/libgo/mksysinfo.sh (.../branches/gcc-9-branch) @@ -1127,7 +1127,7 @@ # Prefer largefile variant if available. # CentOS 5 does not have f_flags, so pull from f_spare. statfs=`grep '^type _statfs64 ' gen-sysinfo.go || true` -if test "$statfs" == ""; then +if test "$statfs" = ""; then statfs=`grep '^type _statfs ' gen-sysinfo.go || true` fi if ! echo "$statfs" | grep f_flags; then Index: libgo/go/go/internal/gccgoimporter/parser.go =================================================================== --- a/src/libgo/go/go/internal/gccgoimporter/parser.go (.../tags/gcc_9_2_0_release) +++ b/src/libgo/go/go/internal/gccgoimporter/parser.go (.../branches/gcc-9-branch) @@ -248,7 +248,7 @@ case *types.Named: name = typ.Obj().Name() default: - p.error("anonymous field expected") + p.error("embedded field expected") } } field = types.NewField(token.NoPos, pkg, name, typ, anon) @@ -451,8 +451,12 @@ } } -// update sets the type map entries for the given type numbers nlist to t. -func (p *parser) update(t types.Type, nlist []int) { +// update sets the type map entries for the entries in nlist to t. +// An entry in nlist can be a type number in p.typeList, +// used to resolve named types, or it can be a *types.Pointer, +// used to resolve pointers to named types in case they are referenced +// by embedded fields. +func (p *parser) update(t types.Type, nlist []interface{}) { if len(nlist) != 0 { if t == reserved { p.errorf("internal error: update(%v) invoked on reserved", nlist) @@ -462,13 +466,27 @@ } } for _, n := range nlist { - if p.typeList[n] == t { - continue + switch n := n.(type) { + case int: + if p.typeList[n] == t { + continue + } + if p.typeList[n] != reserved { + p.errorf("internal error: update(%v): %d not reserved", nlist, n) + } + p.typeList[n] = t + case *types.Pointer: + if *n != (types.Pointer{}) { + elem := n.Elem() + if elem == t { + continue + } + p.errorf("internal error: update: pointer already set to %v, expected %v", elem, t) + } + *n = *types.NewPointer(t) + default: + p.errorf("internal error: %T on nlist", n) } - if p.typeList[n] != reserved { - p.errorf("internal error: update(%v): %d not reserved", nlist, n) - } - p.typeList[n] = t } } @@ -475,7 +493,7 @@ // NamedType = TypeName [ "=" ] Type { Method } . // TypeName = ExportedName . // Method = "func" "(" Param ")" Name ParamList ResultList [InlineBody] ";" . -func (p *parser) parseNamedType(nlist []int) types.Type { +func (p *parser) parseNamedType(nlist []interface{}) types.Type { pkg, name := p.parseExportedName() scope := pkg.Scope() obj := scope.Lookup(name) @@ -582,7 +600,7 @@ } // ArrayOrSliceType = "[" [ int ] "]" Type . -func (p *parser) parseArrayOrSliceType(pkg *types.Package, nlist []int) types.Type { +func (p *parser) parseArrayOrSliceType(pkg *types.Package, nlist []interface{}) types.Type { p.expect('[') if p.tok == ']' { p.next() @@ -605,7 +623,7 @@ } // MapType = "map" "[" Type "]" Type . -func (p *parser) parseMapType(pkg *types.Package, nlist []int) types.Type { +func (p *parser) parseMapType(pkg *types.Package, nlist []interface{}) types.Type { p.expectKeyword("map") t := new(types.Map) @@ -621,7 +639,7 @@ } // ChanType = "chan" ["<-" | "-<"] Type . -func (p *parser) parseChanType(pkg *types.Package, nlist []int) types.Type { +func (p *parser) parseChanType(pkg *types.Package, nlist []interface{}) types.Type { p.expectKeyword("chan") t := new(types.Chan) @@ -648,7 +666,7 @@ } // StructType = "struct" "{" { Field } "}" . -func (p *parser) parseStructType(pkg *types.Package, nlist []int) types.Type { +func (p *parser) parseStructType(pkg *types.Package, nlist []interface{}) types.Type { p.expectKeyword("struct") t := new(types.Struct) @@ -714,7 +732,7 @@ } // FunctionType = ParamList ResultList . -func (p *parser) parseFunctionType(pkg *types.Package, nlist []int) *types.Signature { +func (p *parser) parseFunctionType(pkg *types.Package, nlist []interface{}) *types.Signature { t := new(types.Signature) p.update(t, nlist) @@ -740,7 +758,7 @@ } // InterfaceType = "interface" "{" { ("?" Type | Func) ";" } "}" . -func (p *parser) parseInterfaceType(pkg *types.Package, nlist []int) types.Type { +func (p *parser) parseInterfaceType(pkg *types.Package, nlist []interface{}) types.Type { p.expectKeyword("interface") t := new(types.Interface) @@ -767,7 +785,7 @@ } // PointerType = "*" ("any" | Type) . -func (p *parser) parsePointerType(pkg *types.Package, nlist []int) types.Type { +func (p *parser) parsePointerType(pkg *types.Package, nlist []interface{}) types.Type { p.expect('*') if p.tok == scanner.Ident { p.expectKeyword("any") @@ -779,13 +797,13 @@ t := new(types.Pointer) p.update(t, nlist) - *t = *types.NewPointer(p.parseType(pkg)) + *t = *types.NewPointer(p.parseType(pkg, t)) return t } // TypeSpec = NamedType | MapType | ChanType | StructType | InterfaceType | PointerType | ArrayOrSliceType | FunctionType . -func (p *parser) parseTypeSpec(pkg *types.Package, nlist []int) types.Type { +func (p *parser) parseTypeSpec(pkg *types.Package, nlist []interface{}) types.Type { switch p.tok { case scanner.String: return p.parseNamedType(nlist) @@ -874,13 +892,13 @@ // // parseType updates the type map to t for all type numbers n. // -func (p *parser) parseType(pkg *types.Package, n ...int) types.Type { +func (p *parser) parseType(pkg *types.Package, n ...interface{}) types.Type { p.expect('<') return p.parseTypeAfterAngle(pkg, n...) } // (*parser).Type after reading the "<". -func (p *parser) parseTypeAfterAngle(pkg *types.Package, n ...int) (t types.Type) { +func (p *parser) parseTypeAfterAngle(pkg *types.Package, n ...interface{}) (t types.Type) { p.expectKeyword("type") switch p.tok { @@ -995,12 +1013,12 @@ } for i := 1; i < int(exportedp1); i++ { - p.parseSavedType(pkg, i, []int{}) + p.parseSavedType(pkg, i, nil) } } // parseSavedType parses one saved type definition. -func (p *parser) parseSavedType(pkg *types.Package, i int, nlist []int) { +func (p *parser) parseSavedType(pkg *types.Package, i int, nlist []interface{}) { defer func(s *scanner.Scanner, tok rune, lit string) { p.scanner = s p.tok = tok Index: libgo/go/go/internal/gccgoimporter/importer_test.go =================================================================== --- a/src/libgo/go/go/internal/gccgoimporter/importer_test.go (.../tags/gcc_9_2_0_release) +++ b/src/libgo/go/go/internal/gccgoimporter/importer_test.go (.../branches/gcc-9-branch) @@ -91,6 +91,7 @@ {pkgpath: "v1reflect", name: "Type", want: "type Type interface{Align() int; AssignableTo(u Type) bool; Bits() int; ChanDir() ChanDir; Elem() Type; Field(i int) StructField; FieldAlign() int; FieldByIndex(index []int) StructField; FieldByName(name string) (StructField, bool); FieldByNameFunc(match func(string) bool) (StructField, bool); Implements(u Type) bool; In(i int) Type; IsVariadic() bool; Key() Type; Kind() Kind; Len() int; Method(int) Method; MethodByName(string) (Method, bool); Name() string; NumField() int; NumIn() int; NumMethod() int; NumOut() int; Out(i int) Type; PkgPath() string; Size() uintptr; String() string; common() *commonType; rawString() string; runtimeType() *runtimeType; uncommon() *uncommonType}"}, {pkgpath: "nointerface", name: "I", want: "type I int"}, {pkgpath: "issue29198", name: "FooServer", want: "type FooServer struct{FooServer *FooServer; user string; ctx context.Context}"}, + {pkgpath: "issue34182", name: "T1", want: "type T1 struct{f *T2}"}, } func TestGoxImporter(t *testing.T) { Index: libgo/go/go/internal/gccgoimporter/testdata/issue34182.gox =================================================================== --- a/src/libgo/go/go/internal/gccgoimporter/testdata/issue34182.gox (.../tags/gcc_9_2_0_release) +++ b/src/libgo/go/go/internal/gccgoimporter/testdata/issue34182.gox (.../branches/gcc-9-branch) @@ -0,0 +1,13 @@ +v3; +package issue34182 +pkgpath issue34182 +init issue34182 ~go.issue34182 +types 8 4 21 21 21 17 30 45 45 +type 1 "T1" +type 2 "T2" +type 3 "T3" +type 4 * +type 5 struct { ? ; } +type 6 struct { .go.issue34182.f ; } +type 7 struct { .go.issue34182.f ; } +checksum FF02C49BAF44B06C087ED4E573F7CC880C79C208 Index: libgo/go/go/internal/gccgoimporter/testdata/issue34182.go =================================================================== --- a/src/libgo/go/go/internal/gccgoimporter/testdata/issue34182.go (.../tags/gcc_9_2_0_release) +++ b/src/libgo/go/go/internal/gccgoimporter/testdata/issue34182.go (.../branches/gcc-9-branch) @@ -0,0 +1,17 @@ +// Copyright 2019 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package issue34182 + +type T1 struct { + f *T2 +} + +type T2 struct { + f T3 +} + +type T3 struct { + *T2 +} Index: libgfortran/runtime/ISO_Fortran_binding.c =================================================================== --- a/src/libgfortran/runtime/ISO_Fortran_binding.c (.../tags/gcc_9_2_0_release) +++ b/src/libgfortran/runtime/ISO_Fortran_binding.c (.../branches/gcc-9-branch) @@ -119,24 +119,25 @@ d->type = (CFI_type_t)(d->type + ((CFI_type_t)d->elem_len << CFI_type_kind_shift)); - /* Full pointer or allocatable arrays retain their lower_bounds. */ - for (n = 0; n < GFC_DESCRIPTOR_RANK (s); n++) - { - if (d->attribute != CFI_attribute_other) - d->dim[n].lower_bound = (CFI_index_t)GFC_DESCRIPTOR_LBOUND(s, n); - else - d->dim[n].lower_bound = 0; + if (d->base_addr) + /* Full pointer or allocatable arrays retain their lower_bounds. */ + for (n = 0; n < GFC_DESCRIPTOR_RANK (s); n++) + { + if (d->attribute != CFI_attribute_other) + d->dim[n].lower_bound = (CFI_index_t)GFC_DESCRIPTOR_LBOUND(s, n); + else + d->dim[n].lower_bound = 0; - /* Assumed size arrays have gfc ubound == 0 and CFI extent = -1. */ - if ((n == GFC_DESCRIPTOR_RANK (s) - 1) - && GFC_DESCRIPTOR_LBOUND(s, n) == 1 - && GFC_DESCRIPTOR_UBOUND(s, n) == 0) - d->dim[n].extent = -1; - else - d->dim[n].extent = (CFI_index_t)GFC_DESCRIPTOR_UBOUND(s, n) - - (CFI_index_t)GFC_DESCRIPTOR_LBOUND(s, n) + 1; - d->dim[n].sm = (CFI_index_t)(GFC_DESCRIPTOR_STRIDE(s, n) * s->span); - } + /* Assumed size arrays have gfc ubound == 0 and CFI extent = -1. */ + if (n == GFC_DESCRIPTOR_RANK (s) - 1 + && GFC_DESCRIPTOR_LBOUND(s, n) == 1 + && GFC_DESCRIPTOR_UBOUND(s, n) == 0) + d->dim[n].extent = -1; + else + d->dim[n].extent = (CFI_index_t)GFC_DESCRIPTOR_UBOUND(s, n) + - (CFI_index_t)GFC_DESCRIPTOR_LBOUND(s, n) + 1; + d->dim[n].sm = (CFI_index_t)(GFC_DESCRIPTOR_STRIDE(s, n) * s->span); + } if (*d_ptr == NULL) *d_ptr = d; Index: libgfortran/intrinsics/random.c =================================================================== --- a/src/libgfortran/intrinsics/random.c (.../tags/gcc_9_2_0_release) +++ b/src/libgfortran/intrinsics/random.c (.../branches/gcc-9-branch) @@ -275,31 +275,20 @@ } -/* Super-simple LCG generator used in getosrandom () if /dev/urandom - doesn't exist. */ +/* Splitmix64 recommended by xorshift author for initializing. After + getting one uint64_t value from the OS, this is used to fill in the + rest of the state. */ -#define M 2147483647 /* 2^31 - 1 (A large prime number) */ -#define A 16807 /* Prime root of M, passes statistical tests and produces a full cycle */ -#define Q 127773 /* M / A (To avoid overflow on A * seed) */ -#define R 2836 /* M % A (To avoid overflow on A * seed) */ - -__attribute__((unused)) static uint32_t -lcg_parkmiller(uint32_t seed) +static uint64_t +splitmix64 (uint64_t x) { - uint32_t hi = seed / Q; - uint32_t lo = seed % Q; - int32_t test = A * lo - R * hi; - if (test <= 0) - test += M; - return test; + uint64_t z = (x += 0x9e3779b97f4a7c15); + z = (z ^ (z >> 30)) * 0xbf58476d1ce4e5b9; + z = (z ^ (z >> 27)) * 0x94d049bb133111eb; + return z ^ (z >> 31); } -#undef M -#undef A -#undef Q -#undef R - /* Get some random bytes from the operating system in order to seed the PRNG. */ @@ -315,7 +304,7 @@ #else #ifdef HAVE_GETENTROPY if (getentropy (buf, buflen) == 0) - return 0; + return buflen; #endif int flags = O_RDONLY; #ifdef O_CLOEXEC @@ -328,7 +317,7 @@ close (fd); return res; } - uint32_t seed = 1234567890; + uint64_t seed = 0x047f7684e9fc949dULL; time_t secs; long usecs; if (gf_gettime (&secs, &usecs) == 0) @@ -340,13 +329,9 @@ pid_t pid = getpid(); seed ^= pid; #endif - uint32_t* ub = buf; - for (size_t i = 0; i < buflen / sizeof (uint32_t); i++) - { - ub[i] = seed; - seed = lcg_parkmiller (seed); - } - return buflen; + size_t size = buflen < sizeof (uint64_t) ? buflen : sizeof (uint64_t); + memcpy (buf, &seed, size); + return size; #endif /* __MINGW64_VERSION_MAJOR */ } @@ -361,7 +346,13 @@ __gthread_mutex_lock (&random_lock); if (!master_init) { - getosrandom (master_state, sizeof (master_state)); + uint64_t os_seed; + getosrandom (&os_seed, sizeof (os_seed)); + for (uint64_t i = 0; i < sizeof (master_state) / sizeof (uint64_t); i++) + { + os_seed = splitmix64 (os_seed); + master_state[i] = os_seed; + } njumps = 0; master_init = true; } Index: libgfortran/ChangeLog =================================================================== --- a/src/libgfortran/ChangeLog (.../tags/gcc_9_2_0_release) +++ b/src/libgfortran/ChangeLog (.../branches/gcc-9-branch) @@ -1,3 +1,13 @@ +2019-08-13 Janne Blomqvist + + Partial backport from trunk + PR fortran/91414 + * intrinsics/random.c (lcg_parkmiller): Replace with splitmix64. + (splitmix64): New function. + (getosrandom): Fix return value, simplify. + (init_rand_state): Use getosrandom only to get 8 bytes, splitmix64 + to fill rest of state. + 2019-08-12 Release Manager * GCC 9.2.0 released. Index: libcpp/directives.c =================================================================== --- a/src/libcpp/directives.c (.../tags/gcc_9_2_0_release) +++ b/src/libcpp/directives.c (.../branches/gcc-9-branch) @@ -1564,6 +1564,8 @@ node = _cpp_lex_identifier (pfile, c->name); if (node->type == NT_VOID) c->is_undef = 1; + else if (node->type == NT_BUILTIN_MACRO) + c->is_builtin = 1; else { defn = cpp_macro_definition (pfile, node); @@ -2452,6 +2454,11 @@ if (c->is_undef) return; + if (c->is_builtin) + { + _cpp_restore_special_builtin (pfile, c); + return; + } { size_t namelen; Index: libcpp/init.c =================================================================== --- a/src/libcpp/init.c (.../tags/gcc_9_2_0_release) +++ b/src/libcpp/init.c (.../branches/gcc-9-branch) @@ -489,6 +489,25 @@ } } +/* Restore macro C to builtin macro definition. */ + +void +_cpp_restore_special_builtin (cpp_reader *pfile, struct def_pragma_macro *c) +{ + size_t len = strlen (c->name); + + for (const struct builtin_macro *b = builtin_array; + b < builtin_array + ARRAY_SIZE (builtin_array); b++) + if (b->len == len && memcmp (c->name, b->name, len + 1) == 0) + { + cpp_hashnode *hp = cpp_lookup (pfile, b->name, b->len); + hp->type = NT_BUILTIN_MACRO; + if (b->always_warn_if_redefined) + hp->flags |= NODE_WARN; + hp->value.builtin = (enum cpp_builtin_type) b->value; + } +} + /* Read the builtins table above and enter them, and language-specific macros, into the hash table. HOSTED is true if this is a hosted environment. */ Index: libcpp/ChangeLog =================================================================== --- a/src/libcpp/ChangeLog (.../tags/gcc_9_2_0_release) +++ b/src/libcpp/ChangeLog (.../branches/gcc-9-branch) @@ -1,3 +1,17 @@ +2019-11-08 Jakub Jelinek + + Backported from mainline + 2019-10-31 Jakub Jelinek + + PR preprocessor/92296 + * internal.h (struct def_pragma_macro): Add is_builtin bitfield. + (_cpp_restore_special_builtin): Declare. + * init.c (_cpp_restore_special_builtin): New function. + * directives.c (do_pragma_push_macro): For NT_BUILTIN_MACRO + set is_builtin and don't try to grab definition. + (cpp_pop_definition): Use _cpp_restore_special_builtin to restore + builtin macros. + 2019-08-12 Release Manager * GCC 9.2.0 released. Index: libcpp/internal.h =================================================================== --- a/src/libcpp/internal.h (.../tags/gcc_9_2_0_release) +++ b/src/libcpp/internal.h (.../branches/gcc-9-branch) @@ -380,6 +380,8 @@ /* Mark if we save an undefined macro. */ unsigned int is_undef : 1; + /* Nonzero if it was a builtin macro. */ + unsigned int is_builtin : 1; }; /* A cpp_reader encapsulates the "state" of a pre-processor run. @@ -712,6 +714,8 @@ /* In init.c. */ extern void _cpp_maybe_push_include_file (cpp_reader *); extern const char *cpp_named_operator2name (enum cpp_ttype type); +extern void _cpp_restore_special_builtin (cpp_reader *pfile, + struct def_pragma_macro *); /* In directives.c */ extern int _cpp_test_assertion (cpp_reader *, unsigned int *); Index: fixincludes/ChangeLog =================================================================== --- a/src/fixincludes/ChangeLog (.../tags/gcc_9_2_0_release) +++ b/src/fixincludes/ChangeLog (.../branches/gcc-9-branch) @@ -1,3 +1,15 @@ +2019-08-21 Iain Sandoe + + Backport from mainline. + 2019-08-18 C.G. Dogan + Iain Sandoe + + PR target/83531 + * inclhack.def (darwin_api_availability): New; strip leading + underscores from API_XXXX defines. + * fixincl.x: Regenerate. + * tests/base/os/availability.h: New file. + 2019-08-12 Release Manager * GCC 9.2.0 released. Index: fixincludes/tests/base/os/availability.h =================================================================== --- a/src/fixincludes/tests/base/os/availability.h (.../tags/gcc_9_2_0_release) +++ b/src/fixincludes/tests/base/os/availability.h (.../branches/gcc-9-branch) @@ -0,0 +1,18 @@ +/* DO NOT EDIT THIS FILE. + + It has been auto-edited by fixincludes from: + + "fixinc/tests/inc/os/availability.h" + + This had to be done to correct non-standard usages in the + original, manufacturer supplied header file. */ + + + +#if defined( DARWIN_API_AVAILABILITY_CHECK ) + #define API_AVAILABLE(...) + #define API_DEPRECATED(...) + #define API_DEPRECATED_WITH_REPLACEMENT(...) + #define API_UNAVAILABLE(...) + +#endif /* DARWIN_API_AVAILABILITY_CHECK */ Index: fixincludes/fixincl.x =================================================================== --- a/src/fixincludes/fixincl.x (.../tags/gcc_9_2_0_release) +++ b/src/fixincludes/fixincl.x (.../branches/gcc-9-branch) @@ -2,11 +2,11 @@ * * DO NOT EDIT THIS FILE (fixincl.x) * - * It has been AutoGen-ed July 7, 2019 at 11:43:37 AM by AutoGen 5.17.4 + * It has been AutoGen-ed August 21, 2019 at 07:47:23 PM by AutoGen 5.17.4 * From the definitions inclhack.def * and the template file fixincl */ -/* DO NOT SVN-MERGE THIS FILE, EITHER Sun Jul 7 11:43:37 BST 2019 +/* DO NOT SVN-MERGE THIS FILE, EITHER Wed Aug 21 19:47:23 BST 2019 * * You must regenerate it. Use the ./genfixes script. * @@ -15,7 +15,7 @@ * certain ANSI-incompatible system header files which are fixed to work * correctly with ANSI C and placed in a directory that GNU C will search. * - * This file contains 255 fixup descriptions. + * This file contains 256 fixup descriptions. * * See README for more information. * @@ -269,6 +269,56 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * + * Description of Darwin_Api_Availability fix + */ +tSCC zDarwin_Api_AvailabilityName[] = + "darwin_api_availability"; + +/* + * File name selection pattern + */ +tSCC zDarwin_Api_AvailabilityList[] = + "os/availability.h\0"; +/* + * Machine/OS name selection pattern + */ +tSCC* apzDarwin_Api_AvailabilityMachs[] = { + "*-*-darwin*", + (const char*)NULL }; + +/* + * content selection pattern - do fix if pattern found + */ +tSCC zDarwin_Api_AvailabilitySelect0[] = + " *#define __API_AVAILABLE.*\n\ + *#define __API_DEPRECATED.*\n\ + *#define __API_DEPRECATED_WITH_REPLACEMENT.*\n\ + *#define __API_UNAVAILABLE.*\n"; + +/* + * content bypass pattern - skip fix if pattern found + */ +tSCC zDarwin_Api_AvailabilityBypass0[] = + "__IPHONE_OS_VERSION_MIN_REQUIRED"; + +#define DARWIN_API_AVAILABILITY_TEST_CT 2 +static tTestDesc aDarwin_Api_AvailabilityTests[] = { + { TT_NEGREP, zDarwin_Api_AvailabilityBypass0, (regex_t*)NULL }, + { TT_EGREP, zDarwin_Api_AvailabilitySelect0, (regex_t*)NULL }, }; + +/* + * Fix Command Arguments for Darwin_Api_Availability + */ +static const char* apzDarwin_Api_AvailabilityPatch[] = { + "format", + " #define API_AVAILABLE(...)\n\ + #define API_DEPRECATED(...)\n\ + #define API_DEPRECATED_WITH_REPLACEMENT(...)\n\ + #define API_UNAVAILABLE(...)\n", + (char*)NULL }; + +/* * * * * * * * * * * * * * * * * * * * * * * * * * + * * Description of Aab_Fd_Zero_Asm_Posix_Types_H fix */ tSCC zAab_Fd_Zero_Asm_Posix_Types_HName[] = @@ -10346,9 +10396,9 @@ * * List of all fixes */ -#define REGEX_COUNT 293 +#define REGEX_COUNT 295 #define MACH_LIST_SIZE_LIMIT 187 -#define FIX_COUNT 255 +#define FIX_COUNT 256 /* * Enumerate the fixes @@ -10357,6 +10407,7 @@ AAB_AIX_STDIO_FIXIDX, AAB_AIX_FCNTL_FIXIDX, AAB_DARWIN7_9_LONG_DOUBLE_FUNCS_FIXIDX, + DARWIN_API_AVAILABILITY_FIXIDX, AAB_FD_ZERO_ASM_POSIX_TYPES_H_FIXIDX, AAB_FD_ZERO_GNU_TYPES_H_FIXIDX, AAB_FD_ZERO_SELECTBITS_H_FIXIDX, @@ -10627,6 +10678,11 @@ AAB_DARWIN7_9_LONG_DOUBLE_FUNCS_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT, aAab_Darwin7_9_Long_Double_FuncsTests, apzAab_Darwin7_9_Long_Double_FuncsPatch, 0 }, + { zDarwin_Api_AvailabilityName, zDarwin_Api_AvailabilityList, + apzDarwin_Api_AvailabilityMachs, + DARWIN_API_AVAILABILITY_TEST_CT, FD_MACH_ONLY | FD_SUBROUTINE, + aDarwin_Api_AvailabilityTests, apzDarwin_Api_AvailabilityPatch, 0 }, + { zAab_Fd_Zero_Asm_Posix_Types_HName, zAab_Fd_Zero_Asm_Posix_Types_HList, apzAab_Fd_Zero_Asm_Posix_Types_HMachs, AAB_FD_ZERO_ASM_POSIX_TYPES_H_TEST_CT, FD_MACH_ONLY | FD_REPLACEMENT, Index: fixincludes/inclhack.def =================================================================== --- a/src/fixincludes/inclhack.def (.../tags/gcc_9_2_0_release) +++ b/src/fixincludes/inclhack.def (.../branches/gcc-9-branch) @@ -195,6 +195,33 @@ }; /* + * SDKs for 10.13 and 10.14 omit the definitions for API_AVAILABLE where + * __attribute__((availability)) is not supported. + */ +fix = { + hackname = darwin_api_availability; + mach = "*-*-darwin*"; + files = os/availability.h; + bypass = "__IPHONE_OS_VERSION_MIN_REQUIRED"; + select = + " *#define __API_AVAILABLE.*\n" + " *#define __API_DEPRECATED.*\n" + " *#define __API_DEPRECATED_WITH_REPLACEMENT.*\n" + " *#define __API_UNAVAILABLE.*\n"; + c_fix = format; + c_fix_arg = + " #define API_AVAILABLE(...)\n" + " #define API_DEPRECATED(...)\n" + " #define API_DEPRECATED_WITH_REPLACEMENT(...)\n" + " #define API_UNAVAILABLE(...)\n"; + test_text = + "#define __API_AVAILABLE(...)\n" + "#define __API_DEPRECATED(...)\n" + "#define __API_DEPRECATED_WITH_REPLACEMENT(...)\n" + "#define __API_UNAVAILABLE(...)\n"; +}; + +/* * This fixes __FD_ZERO bug for linux 2.x.y (x <= 2 && y <= some n) */ fix = {