Skip to content
Snippets Groups Projects
  1. Dec 16, 2020
    • Jonathan Wakely's avatar
      libstdc++: Add C++ runtime support for new 128-bit long double format · 7c1e7eed
      Jonathan Wakely authored
      This adds support for the new __ieee128 long double format on
      powerpc64le targets.
      
      Most of the complexity comes from wanting a single libstdc++.so library
      that contains the symbols needed by code compiled with both
      -mabi=ibmlongdouble and -mabi=ieeelongdouble (and not forgetting
      -mlong-double-64 as well!)
      
      In a few places this just requires an extra overload, for example
      std::from_chars has to be overloaded for both forms of long double.
      That can be done in a single translation unit that defines overloads
      for 'long double' and also '__ieee128', so that user code including
      <charconv> will be able to link to a definition for either type of long
      double. Those are the easy cases.
      
      The difficult parts are (as for the std::string ABI transition) the I/O
      and locale facets. In order to be able to write either form of long
      double to an ostream such as std::cout we need the locale to contain a
      std::num_put facet that can handle both forms. The same approach is
      taken as was already done for supporting 64-bit long double and 128-bit
      long double: adding extra overloads of do_put to the facet class. On
      targets where the new long double code is enabled, the facets that are
      registered in the locale at program startup have additional overloads so
      that they can work with any long double type. Where this fails to work
      is if user code installs its own facet, which will probably not have the
      additional overloads and so will only be able to output one or the other
      type. In practice the number of users expecting to be able to use their
      own locale facets in code using a mix of -mabi=ibmlongdouble and
      -mabi=ieeelongdouble is probably close to zero.
      
      libstdc++-v3/ChangeLog:
      
      	* Makefile.in: Regenerate.
      	* config.h.in: Regenerate.
      	* config/abi/pre/gnu.ver: Make patterns less greedy.
      	* config/os/gnu-linux/ldbl-ieee128-extra.ver: New file with patterns
      	for IEEE128 long double symbols.
      	* configure: Regenerate.
      	* configure.ac: Enable alternative 128-bit long double format on
      	powerpc64*-*-linux*.
      	* doc/Makefile.in: Regenerate.
      	* fragment.am: Regenerate.
      	* include/Makefile.am: Set _GLIBCXX_LONG_DOUBLE_ALT128_COMPAT.
      	* include/Makefile.in: Regenerate.
      	* include/bits/c++config: Define inline namespace for new long
      	double symbols. Don't define _GLIBCXX_USE_FLOAT128 when it's the
      	same type as long double.
      	* include/bits/locale_classes.h [_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT]
      	(locale::_Impl::_M_init_extra_ldbl128): Declare new member function.
      	* include/bits/locale_facets.h (_GLIBCXX_NUM_FACETS): Simplify by
      	only counting narrow character facets.
      	(_GLIBCXX_NUM_CXX11_FACETS): Likewise.
      	(_GLIBCXX_NUM_LBDL_ALT128_FACETS): New.
      	[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT] (num_get::__do_get): Define
      	vtable placeholder for __ibm128 long double type.
      	[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
      	(num_get::__do_get): Declare vtable placeholder for __ibm128 long
      	double type.
      	[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
      	(num_put::__do_put): Likewise.
      	* include/bits/locale_facets.tcc
      	[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
      	(num_get::__do_get, num_put::__do_put): Define.
      	* include/bits/locale_facets_nonio.h
      	[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
      	(money_get::__do_get): Declare vtable placeholder for __ibm128 long
      	double type.
      	[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
      	(money_put::__do_put): Likewise.
      	* include/bits/locale_facets_nonio.tcc
      	[_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT && __LONG_DOUBLE_IEEE128__]
      	(money_get::__do_get, money_put::__do_put): Define.
      	* include/ext/numeric_traits.h [_GLIBCXX_LONG_DOUBLE_ALT128_COMPAT]
      	(__numeric_traits<__ibm128>, __numeric_traits<__ieee128>): Define.
      	* libsupc++/Makefile.in: Regenerate.
      	* po/Makefile.in: Regenerate.
      	* python/Makefile.in: Regenerate.
      	* src/Makefile.am: Add compatibility-ldbl-alt128.cc and
      	compatibility-ldbl-alt128-cxx11.cc sources and recipes for objects.
      	* src/Makefile.in: Regenerate.
      	* src/c++11/Makefile.in: Regenerate.
      	* src/c++11/compatibility-ldbl-alt128-cxx11.cc: New file defining
      	symbols using the old 128-bit long double format, for the cxx11 ABI.
      	* src/c++11/compatibility-ldbl-alt128.cc: Likewise, for the
      	gcc4-compatible ABI.
      	* src/c++11/compatibility-ldbl-facets-aliases.h: New header for long
      	double compat aliases.
      	* src/c++11/cow-locale_init.cc: Add comment.
      	* src/c++11/cxx11-locale-inst.cc: Define C and C_is_char
      	unconditionally.
      	* src/c++11/cxx11-wlocale-inst.cc: Add sanity check. Include
      	locale-inst.cc directly, not via cxx11-locale-inst.cc.
      	* src/c++11/locale-inst-monetary.h: New header for monetary
      	category instantiations.
      	* src/c++11/locale-inst-numeric.h: New header for numeric category
      	instantiations.
      	* src/c++11/locale-inst.cc: Include new headers for monetary,
      	numeric, and long double definitions.
      	* src/c++11/wlocale-inst.cc: Remove long double compat aliases that
      	are defined in new header now.
      	* src/c++17/Makefile.am: Use -mabi=ibmlongdouble for
      	floating_from_chars.cc.
      	* src/c++17/Makefile.in: Regenerate.
      	* src/c++17/floating_from_chars.cc (from_chars_impl): Add
      	if-constexpr branch for __ieee128.
      	(from_chars): Overload for __ieee128.
      	* src/c++20/Makefile.in: Regenerate.
      	* src/c++98/Makefile.in: Regenerate.
      	* src/c++98/locale_init.cc (num_facets): Adjust calculation.
      	(locale::_Impl::_Impl(size_t)): Call _M_init_extra_ldbl128.
      	* src/c++98/localename.cc (num_facets): Adjust calculation.
      	(locale::_Impl::_Impl(const char*, size_t)): Call
      	_M_init_extra_ldbl128.
      	* src/filesystem/Makefile.in: Regenerate.
      	* testsuite/Makefile.in: Regenerate.
      	* testsuite/util/testsuite_abi.cc: Add new symbol versions.
      	Allow new symbols to be added to GLIBCXX_IEEE128_3.4.29 and
      	CXXABI_IEEE128_1.3.13 too.
      	* testsuite/26_numerics/complex/abi_tag.cc: Add u9__ieee128 to
      	regex matching expected symbols.
      7c1e7eed
    • Jakub Jelinek's avatar
      maintainer-scripts: Use /sourceware/snapshot-tmp/gcc as temp directory if possible · f4ae1f2c
      Jakub Jelinek authored
      > https://gcc.gnu.org/pipermail/gccadmin/2020q4/017037.html
      >
      > OSError: [Errno 28] No space left on device:
      > '/tmp/tmp.Zq3p6D4MxS/gcc/.git/objects/objn31xpefh' ->
      > '/tmp/tmp.Zq3p6D4MxS/gcc/.git/objects/db/ffb02a4bcdd4ec04af3db75d86b8cc2e52bdff'
      >
      > Maybe change the script to use /sourceware/snapshot-tmp/gcc (which has
      > rather more space) instead of /tmp?
      
      This patch implements that.
      
      2020-12-17  Jakub Jelinek  <jakub@redhat.com>
      
      	* update_version_git: Put BASEDIR into /sourceware/snapshot-tmp/gcc
      	if it exist.
      f4ae1f2c
    • Piotr Kubaj's avatar
      rs6000: Add support for powerpc64le-unknown-freebsd · 2a418323
      Piotr Kubaj authored
      This implements support for powerpc64le architecture on FreeBSD.  Since
      we don't have powerpcle (32-bit), I did not add support for powerpcle
      here. This remains to be changed if there is powerpcle support in the
      future.
      
      2020-12-15  Piotr Kubaj  <pkubaj@FreeBSD.org>
      
      gcc/
      	* config.gcc (powerpc*le-*-freebsd*): Add.
      	* configure.ac (powerpc*le-*-freebsd*): Ditto.
      	* configure: Regenerate.
      	* config/rs6000/freebsd64.h (ASM_SPEC_COMMON): Use ENDIAN_SELECT.
      	(DEFAULT_ASM_ENDIAN): Add little endian support.
      	(LINK_OS_FREEBSD_SPEC64): Ditto.
      2a418323
    • Ian Lance Taylor's avatar
      e38c9127
    • Martin Uecker's avatar
      C: Drop qualifiers of assignment expressions. [PR98047] · 58a45ce4
      Martin Uecker authored
      ISO C17 6.5.15.1 specifies that the result is the
      type the LHS would have after lvalue conversion.
      
      2020-12-16  Martin Uecker  <muecker@gwdg.de>
      
      gcc/c/
      	PR c/98047
      	* c-typeck.c (build_modify_expr): Drop qualifiers.
      
      gcc/testsuite/
      	PR c/98047
      	* gcc.dg/qual-assign-7.c: New test.
      58a45ce4
    • Martin Uecker's avatar
      C: Avoid incorrect warning for volatile in compound expressions [PR98260] · ec13758e
      Martin Uecker authored
      2020-12-16  Martin Uecker  <muecker@gwdg.de>
      
      gcc/c/
      	PR c/98260
      	* c-parser.c (c_parser_expression): Look into
      	nop expression when marking expressions as read.
      
      gcc/testsuite/
      	PR c/98260
      	* gcc.dg/unused-9.c: New test.
      ec13758e
    • Takayuki 'January June' Suwa's avatar
      gcc: xtensa: rearrange DI mode constant loading · 64a54505
      Takayuki 'January June' Suwa authored
      2020-12-16  Takayuki 'January June' Suwa  <jjsuwa_sys3175@yahoo.co.jp>
      gcc/
      	* config/xtensa/xtensa.c (xtensa_emit_move_sequence): Try to
      	replace 'l32r' with 'movi' + 'slli' when optimizing for size.
      	* config/xtensa/xtensa.md (movdi): Split loading DI mode constant
      	into register pair into two loads of SI mode constants.
      64a54505
    • Tamar Christina's avatar
      Arm: MVE: Split refactoring of remaining complex instrinsics · db253e8b
      Tamar Christina authored
      This refactors the complex numbers bits of MVE to go through the same unspecs
      as the NEON variant.
      
      This is pre-work to allow code to be shared between NEON and MVE for the complex
      vectorization patches.
      
      gcc/ChangeLog:
      
      	* config/arm/arm_mve.h (__arm_vcmulq_rot90_f16):
      	(__arm_vcmulq_rot270_f16, _arm_vcmulq_rot180_f16, __arm_vcmulq_f16,
      	__arm_vcmulq_rot90_f32, __arm_vcmulq_rot270_f32,
      	__arm_vcmulq_rot180_f32, __arm_vcmulq_f32, __arm_vcmlaq_f16,
      	__arm_vcmlaq_rot180_f16, __arm_vcmlaq_rot270_f16,
      	__arm_vcmlaq_rot90_f16, __arm_vcmlaq_f32, __arm_vcmlaq_rot180_f32,
      	__arm_vcmlaq_rot270_f32, __arm_vcmlaq_rot90_f32): Update builtin calls.
      	* config/arm/arm_mve_builtins.def (vcmulq_f, vcmulq_rot90_f,
      	vcmulq_rot180_f, vcmulq_rot270_f, vcmlaq_f, vcmlaq_rot90_f,
      	vcmlaq_rot180_f, vcmlaq_rot270_f): Removed.
      	(vcmulq, vcmulq_rot90, vcmulq_rot180, vcmulq_rot270, vcmlaq,
      	vcmlaq_rot90, vcmlaq_rot180, vcmlaq_rot270): New.
      	* config/arm/iterators.md (mve_rot): Add UNSPEC_VCMLA, UNSPEC_VCMLA90,
      	UNSPEC_VCMLA180, UNSPEC_VCMLA270, UNSPEC_VCMUL, UNSPEC_VCMUL90,
      	UNSPEC_VCMUL180, UNSPEC_VCMUL270.
      	(VCMUL): New.
      	* config/arm/mve.md (mve_vcmulq_f<mode, mve_vcmulq_rot180_f<mode>,
      	mve_vcmulq_rot270_f<mode>, mve_vcmulq_rot90_f<mode>, mve_vcmlaq_f<mode>,
      	mve_vcmlaq_rot180_f<mode>, mve_vcmlaq_rot270_f<mode>,
      	mve_vcmlaq_rot90_f<mode>): Removed.
      	(mve_vcmlaq<mve_rot><mode>, mve_vcmulq<mve_rot><mode>,
      	mve_vcaddq<mve_rot><mode>, cadd<rot><mode>3, mve_vcaddq<mve_rot><mode>):
      	New.
      	* config/arm/unspecs.md (UNSPEC_VCMUL90, UNSPEC_VCMUL270, UNSPEC_VCMUL,
      	UNSPEC_VCMUL180): New.
      	(VCMULQ_F, VCMULQ_ROT180_F, VCMULQ_ROT270_F, VCMULQ_ROT90_F,
      	VCMLAQ_F, VCMLAQ_ROT180_F, VCMLAQ_ROT90_F, VCMLAQ_ROT270_F): Removed.
      db253e8b
    • Tamar Christina's avatar
      Arm: Add NEON and MVE RTL patterns for Complex Addition. · 9732dc85
      Tamar Christina authored
      This adds implementation for the optabs for complex additions.  With this the
      following C code:
      
        void f90 (float complex a[restrict N], float complex b[restrict N],
      	    float complex c[restrict N])
        {
          for (int i=0; i < N; i++)
            c[i] = a[i] + (b[i] * I);
        }
      
      generates
      
        f90:
      	  add     r3, r2, #1600
        .L2:
      	  vld1.32 {q8}, [r0]!
      	  vld1.32 {q9}, [r1]!
      	  vcadd.f32       q8, q8, q9, #90
      	  vst1.32 {q8}, [r2]!
      	  cmp     r3, r2
      	  bne     .L2
      	  bx      lr
      
      instead of
      
        f90:
      	  add     r3, r2, #1600
        .L2:
      	  vld2.32 {d24-d27}, [r0]!
      	  vld2.32 {d20-d23}, [r1]!
      	  vsub.f32	q8, q12, q11
      	  vadd.f32	q9, q13, q10
      	  vst2.32 {d16-d19}, [r2]!
      	  cmp     r3, r2
      	  bne     .L2
      	  bx      lr
      
      gcc/ChangeLog:
      
      	* config/arm/arm_mve.h (__arm_vcaddq_rot90_u8, __arm_vcaddq_rot270_u8,
      	__arm_vcaddq_rot90_s8, __arm_vcaddq_rot270_s8,
      	__arm_vcaddq_rot90_u16, __arm_vcaddq_rot270_u16,
      	__arm_vcaddq_rot90_s16, __arm_vcaddq_rot270_s16,
      	__arm_vcaddq_rot90_u32, __arm_vcaddq_rot270_u32,
      	__arm_vcaddq_rot90_s32, __arm_vcaddq_rot270_s32,
      	__arm_vcaddq_rot90_f16, __arm_vcaddq_rot270_f16,
      	__arm_vcaddq_rot90_f32, __arm_vcaddq_rot270_f32):  Update builtin calls.
      	* config/arm/arm_mve_builtins.def (vcaddq_rot90_u, vcaddq_rot270_u,
      	vcaddq_rot90_s, vcaddq_rot270_s, vcaddq_rot90_f, vcaddq_rot270_f):
      	Removed.
      	(vcaddq_rot90, vcaddq_rot270): New.
      	* config/arm/constraints.md (Dz): Include MVE.
      	* config/arm/iterators.md (mve_rot): New.
      	(supf): Remove VCADDQ_ROT270_S, VCADDQ_ROT270_U, VCADDQ_ROT90_S,
      	VCADDQ_ROT90_U.
      	(VCADDQ_ROT270, VCADDQ_ROT90): Removed.
      	* config/arm/mve.md (mve_vcaddq_rot270_<supf><mode,
      	mve_vcaddq_rot90_<supf><mode>, mve_vcaddq_rot270_f<mode>,
      	mve_vcaddq_rot90_f<mode>): Removed.
      	(mve_vcaddq<mve_rot><mode>, mve_vcaddq<mve_rot><mode>): New.
      	* config/arm/unspecs.md (VCADDQ_ROT270_S, VCADDQ_ROT90_S,
      	VCADDQ_ROT270_U, VCADDQ_ROT90_U, VCADDQ_ROT270_F,
      	VCADDQ_ROT90_F): Removed.
      	* config/arm/vec-common.md (cadd<rot><mode>3): New.
      9732dc85
    • Tamar Christina's avatar
      AArch64: Add NEON, SVE and SVE2 RTL patterns for Complex Addition. · 84747acf
      Tamar Christina authored
      This adds implementation for the optabs for add complex operations.  With this
      the following C code:
      
        void f90 (float complex a[restrict N], float complex b[restrict N],
      	    float complex c[restrict N])
        {
          for (int i=0; i < N; i++)
            c[i] = a[i] + (b[i] * I);
        }
      
      generates
      
        f90:
      	  mov     x3, 0
      	  .p2align 3,,7
        .L2:
      	  ldr     q0, [x0, x3]
      	  ldr     q1, [x1, x3]
      	  fcadd   v0.4s, v0.4s, v1.4s, #90
      	  str     q0, [x2, x3]
      	  add     x3, x3, 16
      	  cmp     x3, 1600
      	  bne     .L2
      	  ret
      
      instead of
      
        f90:
      	  add     x3, x1, 1600
      	  .p2align 3,,7
        .L2:
      	  ld2     {v4.4s - v5.4s}, [x0], 32
      	  ld2     {v2.4s - v3.4s}, [x1], 32
      	  fsub    v0.4s, v4.4s, v3.4s
      	  fadd    v1.4s, v5.4s, v2.4s
      	  st2     {v0.4s - v1.4s}, [x2], 32
      	  cmp     x3, x1
      	  bne     .L2
      	  ret
      
      gcc/ChangeLog:
      
      	* config/aarch64/aarch64-simd.md (cadd<rot><mode>3): New.
      	* config/aarch64/iterators.md (SVE2_INT_CADD_OP): New.
      	* config/aarch64/aarch64-sve.md (cadd<rot><mode>3): New.
      	* config/aarch64/aarch64-sve2.md (cadd<rot><mode>3): New.
      84747acf
    • David Edelsohn's avatar
      testsuite: Adjust expected instruction count for PPC fold testcases. · cdb1c276
      David Edelsohn authored
      commit r11-5958 changed the code generation for the vector logical fold
      tests.  This patch updates the expected instruction counts for different
      instructions.
      
      gcc/testsuite/ChangeLog:
      
      2020-12-16  David Edelsohn  <dje.gcc@gmail.com>
      
      	PR target/98280
      	* gcc.target/powerpc/fold-vec-logical-ors-char.c: Adjust count.
      	* gcc.target/powerpc/fold-vec-logical-ors-int.c: Adjust count.
      	* gcc.target/powerpc/fold-vec-logical-ors-longlong.c: Adjust count.
      	* gcc.target/powerpc/fold-vec-logical-ors-short.c: Adjust count.
      	* gcc.target/powerpc/fold-vec-logical-other-char.c: Adjust count.
      	* gcc.target/powerpc/fold-vec-logical-other-int.c: Adjust count.
      	* gcc.target/powerpc/fold-vec-logical-other-longlong.c: Adjust count.
      	* gcc.target/powerpc/fold-vec-logical-other-short.c: Adjust count.
      cdb1c276
    • Nathan Sidwell's avatar
      c++: Another solaris header use [PR 98315] · b7b6879f
      Nathan Sidwell authored
      Rather than early-include sys/socket.h, let's allow the includer to
      tell cody no networking.
      
      	libcody/
      	* cody.hh: Allow user to set CODY_NETWORKING.
      	gcc/cp/
      	* mapper-resolver.cc: Remove early include of
      	sys/socket.h.  Specify no CODY_NETWORKING instead.
      	* module.cc: Specify no CODY_NETWORKING.
      b7b6879f
    • Nathan Sidwell's avatar
      c++: Fix template parm ICE [PR 98297] · 8d8bb85b
      Nathan Sidwell authored
      I think this is nonsense code, we seem to be naming an instantiation
      of a template template parm.  But this fixes the ICE.  Perhaps we
      should diagnose the issue earlier?
      
      	gcc/cp/
      	* parser.c (cp_parser_elaborated_type_specifier): Test
      	BOUND_TEMPLATE_TEMPLATE_PARM before checking for instantiation.
      	gcc/testsuite/
      	* g++.dg/template/pr98297.C: New.
      8d8bb85b
    • Nathan Sidwell's avatar
      c++tools: fix install-strip [PR 98328] · 3f78c8cb
      Nathan Sidwell authored
      I'd missed an install-strip rule in c++tools.  Here it is, cribbed
      from gcc/ subdir.
      
      	c++tools/
      	* Makefile.in (INSTALL): Replace with ...
      	(INSTALL_PROGRAM): ... this.
      	(INSTALL_STRIP_PROGRAM): New.
      	(install-strip): New target.
      	(install): Use INSTALL_PROGRAM.
      	* configure.ac: Add INSTALL_PROGRAM.
      	* configure: Regenerated.
      3f78c8cb
    • Jonathan Wakely's avatar
      libstdc++: Simplify built-in detection in <utility> · 4d4f8295
      Jonathan Wakely authored
      Now that GCC supports __has_builtin there is no need to test whether
      it's defined, we can just use it unconditionally.
      
      libstdc++-v3/ChangeLog:
      
      	* include/std/utility: Use __has_builtin without checking if
      	it's defined.
      4d4f8295
    • Jonathan Wakely's avatar
      libstdc++: Warn if __STRICT_ANSI has been undefined · 767537a8
      Jonathan Wakely authored
      Recent changes to use __int128 as an integer-like type in <ranges> and
      to optimize std::uniform_int_distribution mean that the library relies
      on __int128 more heavily than in the past.
      
      The library expects that if __int128 is supported then either
      __GLIBCXX_TYPE_INT_N_0 is defined (and we treat is like the standard
      integer types), or __STRICT_ANSI__ is defined (and we need to add
      special handling for __int128 as a non-standard integer type).
      
      If users compile with -std=c++NN -U__STRICT_ANSI__ then it puts the
      library into a broken and inconsistent state, where the compiler doesn't
      define the __GLIBCXX_TYPE_INT_N_0 macro, but the library thinks it
      doesn't need special handling for __int128. What the user should do is
      compile with -std=gnu++NN instead.
      
      This adds a warning if it appears that __int128 is supported but neither
      __GLIBCXX_TYPE_INT_N_0 nor __STRICT_ANSI__ is defined.
      
      libstdc++-v3/ChangeLog:
      
      	* include/bits/c++config: Warn if __STRICT_ANSI__ state is
      	inconsistent with __GLIBCXX_TYPE_INT_N_0.
      767537a8
    • Pat Haugen's avatar
      Fix instruction length for MMA insns. · e128aaa6
      Pat Haugen authored
      Prefixed instructions should not have their length explicitly set to '8'. The function get_attr_length() will adjust the length appropriately based on the value of the "prefixed" attribute.
      
      2020-12-16  Pat Haugen  <pthaugen@linux.ibm.com>
      
      gcc/
      	* config/rs6000/mma.md (*movxo, mma_<vvi4i4i8>, mma_<avvi4i4i8>,
      	mma_<vvi4i4i2>, mma_<avvi4i4i2>, mma_<vvi4i4>, mma_<avvi4i4>,
      	mma_<pvi4i2>, mma_<apvi4i2>, mma_<vvi4i4i4>, mma_<avvi4i4i4>):
      	Remove explicit setting of length attribute.
      e128aaa6
    • Nathan Sidwell's avatar
      c++: Fix offsetof use [PR 98232] · 8379916b
      Nathan Sidwell authored
      offsetof is underspecified.  GCC happened to accept an unneeded
      explicit scoping, clang does not.
      
      	gcc/cp/
      	* module.cc (dumper::push): Clangify offsetof use.
      8379916b
    • Nathan Sidwell's avatar
      C++: Fix solaris header use (mk 2) · 269e82d4
      Nathan Sidwell authored
      There is another path to get to a poisoned bcopy.  Fixed thusly.
      
      	gcc/cp/
      	* mapper-resolver.cc: #include sys/socket before system.h
      	due to poisoned bcopy use.
      269e82d4
    • Jakub Jelinek's avatar
      libcody: fix --enable-checking=... follow-up [PR98311] · 652702b0
      Jakub Jelinek authored
      > The -enable-checking configure code in libcody didn't play well with
      > us.  This just uses libcpp's configurey for that piece.
      
      This doesn't set is_release anywhere, which means when --enable-checking*
      or --disable-checking isn't specified, it always treats it as
      --enable-checking=yes, while the normal gcc behavior is treat only trunk
      as --enable-checking=yes and treat release branches as
      --enable-checking=release by default.
      
      On the other side, nothing uses those ac_assert_checking and
      ac_valgrind_checking variables, so it is a waste to compute those.
      
      2020-12-16  Jakub Jelinek  <jakub@redhat.com>
      
      	* configure.ac: Compute is_release.
      	(NMS_ENABLE_CHECKING): Simplify but not computing ac_assert_checking
      	and ac_valgrind_checking the code doesn't use.
      	* configure: Regenerated.
      652702b0
    • Harald Anlauf's avatar
      PR fortran/98284 - ICE in get_array_index · 5098d35f
      Harald Anlauf authored
      Reject DATA elements with the ALLOCATABLE attribute also when they are
      components of a derived type.
      
      gcc/fortran/ChangeLog:
      
      	PR fortran/98284
      	* resolve.c (check_data_variable): Reject DATA elements with the
      	ALLOCATABLE attribute.
      
      gcc/testsuite/ChangeLog:
      
      	PR fortran/98284
      	* gfortran.dg/pr98284.f90: New test.
      5098d35f
    • Jakub Jelinek's avatar
      varasm: Fix up __patchable_function_entries handling · 134afa38
      Jakub Jelinek authored
      The SECTION_LINK_ORDER changes don't seem to work properly.
      
      If I compile:
      static inline __attribute__((__gnu_inline__)) __attribute__((__unused__)) __attribute__((patchable_function_entry(0, 0))) int foo (int x)
      {
        return x + 1;
      }
      
      static inline __attribute__((__gnu_inline__)) __attribute__((__unused__)) __attribute__((patchable_function_entry(0, 0))) int bar (int x)
      {
        return x + 2;
      }
      
      int
      baz (int x)
      {
        return foo (x) + 1;
      }
      
      int
      qux (int x)
      {
        return bar (x) + 2;
      }
      (distilled from aarch64 Linux kernel) with
      -O2 -fpatchable-function-entry=2 on aarch64 compiler configured against
      latest binutils, I get:
      ...
      	.section	__patchable_function_entries,"awo",@progbits,baz
      ...
      	.section	__patchable_function_entries
      ...
      in the assembly, but when it is assembled, one gets:
        [ 4] __patchable_function_entries PROGBITS        0000000000000000 000060 000008 00 WAL  1   0  8
        [ 5] .rela__patchable_function_entries RELA            0000000000000000 000280 000018 18   I 12   4  8
        [ 6] __patchable_function_entries PROGBITS        0000000000000000 000068 000008 00      0   0  8
        [ 7] .rela__patchable_function_entries RELA            0000000000000000 000298 000018 18   I 12   6  8
      i.e. one writable allocated section with SHF_LINK_ORDER and another
      non-allocated non-writable without link order.  In the kernel case there is
      always one entry in the WAL section and then dozens or more in the
      non-allocated one.
      The kernel then fails to link:
      WARNING: modpost: vmlinux.o (__patchable_function_entries): unexpected non-allocatable section.
      Did you forget to use "ax"/"aw" in a .S file?
      Note that for example <linux/init.h> contains
      section definitions for use in .S files.
      ld: .init.data has both ordered [`__patchable_function_entries' in init/main.o] and unordered [`.init.data' in
      +./drivers/firmware/efi/libstub/vsprintf.stub.o] sections
      ld: final link failed: bad value
      make: *** [Makefile:1175: vmlinux] Error 1
      
      The following patch fixes it by always forcing full section flags for
      SECTION_LINK_ORDER sections.
      
      2020-12-16  Jakub Jelinek  <jakub@redhat.com>
      
      	* varasm.c (default_elf_asm_named_section): Always force
      	section flags even for sections with SECTION_LINK_ORDER flag.
      134afa38
    • Jonathan Wakely's avatar
      libcody: Fix build for older GCC versions · 4e42f6eb
      Jonathan Wakely authored
      Before CWG DR 1955 the controlling expression for an #elif must be
      syntactically correct, meaning this won't compile with C++11 compilers
      such as gcc 4.8:
      
      The solution is to define __has_include(X) as 0 for compilers that don't
      support it.
      
      The second problem is that when <source_location> is found, it is used
      without the std:: qualification.
      
      libcody/ChangeLog:
      
      	* internal.hh: Define fallback macros for __has_builtin and
      	__has_include. Use __has_builtin for __builtin_FILE and
      	__builtin_LINE. Define alias for std::source_location.
      4e42f6eb
    • Jonathan Wakely's avatar
      libstdc++: Only use __builtin_sprintf if supported [PR 96083] · 96d9670e
      Jonathan Wakely authored
      Clang doesn't support __builtin_sprintf, so use std::sprintf instead.
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/96083
      	* include/ext/throw_allocator.h: Use __has_builtin to check for
      	__builtin_sprintf support, and use std::sprtinf if necessary.
      96d9670e
    • Nathan Sidwell's avatar
      libcody: fix --enable-checking=... [PR 98311] · 4be6c4e2
      Nathan Sidwell authored
      The -enable-checking configure code in libcody didn't play well with
      us.  This just uses libcpp's configurey for that piece.
      
      	libcody/
      	* configure.ac: Use libcpp's enable-checking code.
      	* configure: Rebuilt.
      4be6c4e2
    • Nathan Sidwell's avatar
      libcody: More dashism · 6d972f51
      Nathan Sidwell authored
      There were still some dash-killing uses of +=.  Fixed thusly.
      
      	* config.m4: Replace V+="..." with V="$V..."
      	* configure: Rebuilt.
      6d972f51
    • Nathan Sidwell's avatar
      c++: Fix detailed-mem-stat breakage · c1ea7c68
      Nathan Sidwell authored
      module.cc has a static initializer that ends up in a circular
      dependency when detailed mem stats are enabled.  This removes the need
      for that initializer to be dynamic, and we punt to the lazy
      initializing we already had inside the object in question anyway.  At
      the cost of an additional indirection.
      
      	gcc/cp/
      	* module.cc (loc_spans): Make spans a pointer, not inline.
      	Adjust all accesses.
      c1ea7c68
    • H.J. Lu's avatar
      Require .init_array/.fini_array support for SHF_GNU_RETAIN · 151d1347
      H.J. Lu authored
      Since SHF_GNU_RETAIN support doesn't work for crtstuff.c which switches
      the output section directly with asm statement:
      
      ---
      static void __attribute__((used))
      __do_global_dtors_aux (void)
      {
        static _Bool completed;
      
        if (__builtin_expect (completed, 0))
          return;
        completed = 1;
      }
      
      static void __attribute__((__used__))
      call___do_global_dtors_aux (void)
      {
        asm ("\t.section\t.fini");
        __do_global_dtors_aux ();
        asm ("\t.section\t.text");
      }
      ---
      
      use SHF_GNU_RETAIN only if .init_array/.fini_array section is supported.
      
      gcc/
      
      	PR target/98146
      	* defaults.h (SUPPORTS_SHF_GNU_RETAIN): New.
      	* varasm.c (get_section): Replace HAVE_GAS_SHF_GNU_RETAIN with
      	SUPPORTS_SHF_GNU_RETAIN.
      	(resolve_unique_section): Likewise.
      	(get_variable_section): Likewise.
      	(switch_to_section): Likewise.
      
      gcc/testsuite/
      
      	PR target/98146
      	* lib/target-supports.exp
      	(check_effective_target_R_flag_in_section): Also check
      	HAVE_INITFINI_ARRAY_SUPPORT != 0.
      151d1347
    • H.J. Lu's avatar
      Warn used and not used symbols in section with the same name · 2a976020
      H.J. Lu authored
      When SECTION_RETAIN is used, issue a warning when a symbol without used
      attribute and a symbol with used attribute are placed in the section with
      the same name, like
      
      int __attribute__((used,section(".data.foo"))) foo2 = 2;
      int __attribute__((section(".data.foo"))) foo1 = 1;
      
      since assembler will put them in different sections with the same section
      name.
      
      gcc/
      
      	PR target/98146
      	* varasm.c (switch_to_section): Warn when a symbol without used
      	attribute and a symbol with used attribute are placed in the
      	section with the same name.
      
      gcc/testsuite/
      
      	PR target/98146
      	* c-c++-common/attr-used-5.c: Updated.
      	* c-c++-common/attr-used-6.c: Likewise.
      	* c-c++-common/attr-used-7.c: Likewise.
      	* c-c++-common/attr-used-8.c: Likewise.
      2a976020
    • H.J. Lu's avatar
      Switch to a new section if the SECTION_RETAIN bit doesn't match · 61753832
      H.J. Lu authored
      When definitions marked with used attribute and unmarked definitions are
      placed in the section with the same name, switch to a new section if the
      SECTION_RETAIN bit doesn't match.
      
      gcc/
      
      	PR target/98146
      	* output.h (switch_to_section): Add a tree argument, default to
      	nullptr.
      	* varasm.c (get_section): If the SECTION_RETAIN bit doesn't match,
      	return and switch to a new section later.
      	(assemble_start_function): Pass decl to switch_to_section.
      	(assemble_variable): Likewise.
      	(switch_to_section): If the SECTION_RETAIN bit doesn't match,
      	switch to a new section.
      
      gcc/testsuite/
      
      	PR target/98146
      	* c-c++-common/attr-used-5.c: New test.
      	* c-c++-common/attr-used-6.c: Likewise.
      	* c-c++-common/attr-used-7.c: Likewise.
      	* c-c++-common/attr-used-8.c: Likewise.
      	* c-c++-common/attr-used-9.c: Likewise.
      61753832
    • Jonathan Wakely's avatar
      libstdc++: Fix errors from Library Fundamentals TS headers in C++11 [PR 98319] · ab9bd932
      Jonathan Wakely authored
      Currently the <experimental/random>, <experimental/source_location> and
      <experimental/utility> headers can be included in C++98 and C++11 modes,
      but gives errors. With this change they can be included, but define
      nothing.
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/98319
      	* include/experimental/random: Only define contents for C++14
      	and later.
      	* include/experimental/source_location: Likewise.
      	* include/experimental/utility: Likewise.
      	* testsuite/experimental/feat-lib-fund.cc: Include all LFTS
      	headers that are present. Allow test to run for all modes.
      ab9bd932
    • Jonathan Wakely's avatar
      libstdc++: Add performance test for atomic_flag [PR 46447] · 3cee0c65
      Jonathan Wakely authored
      This adds a test to compare the performance of std::atomic_flag with
      similar operations on std::atomic_uchar and std::atomic_int.
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/46447
      	* testsuite/performance/29_atomics/atomic_flag.cc: New test.
      3cee0c65
    • Jonathan Wakely's avatar
      libstdc++: Test errno macros directly, not via autoconf [PR 93151] · a2c2eec1
      Jonathan Wakely authored
      This fixes a bug caused by a mismatch between the macros defined by
      <errno.h> when GCC is built and the macros defined by <errno.h> when
      users include <system_error>. If the user code is compiled with
      _XOPEN_SOURCE defined to 500 or 600, Darwin suppresses the
      ENOTRECOVERABLE and EOWNERDEAD macros, which are not defined by SUSv3
      (aka POSIX.1-2001).
      
      Since POSIX requires the errno macros to be macros (and not variables or
      enumerators) we can just test for them directly using the preprocessor.
      That means that <system_error> will match what is actuallydefined when
      it's included, not what was defined when GCC was built. With that change
      there is no need for the GLIBCXX_CHECK_SYSTEM_ERROR configure checks and
      they can be removed.
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/93151
      	* acinclude.m4 (GLIBCXX_CHECK_SYSTEM_ERROR): Remove.
      	* configure.ac: Regenerate.
      	* config/os/generic/error_constants.h: Test POSIX errno macros
      	directly, instead of corresponding _GLIBCXX_HAVE_EXXX macros.
      	* testsuite/19_diagnostics/headers/system_error/errc_std_c++0x.cc:
      	Likewise.
      	* testsuite/19_diagnostics/headers/system_error/93151.cc: New
      	test.
      a2c2eec1
    • Nathan Sidwell's avatar
      c++tools: Fix (an) install issue · 4d8476b0
      Nathan Sidwell authored
      This fixes installers that don't understand -p.
      
      	c++tools/
      	* Makefile.in (install): Do not use -p, use mkinstalldirs.
      	(clean): Fix typo.
      4d8476b0
    • Nathan Sidwell's avatar
      c++: Fix (some) solaris breakage · 6ff747f0
      Nathan Sidwell authored
      Solaris' sys/socket uses the poisoned bcopy identifier, so we must
      preemptively copy a bit of cody's inclusion logic to get it earlier.
      
      	gcc/cp/
      	* mapper-client.cc: Include sys/socket.h before system.h.
      6ff747f0
    • Arnaud Charlet's avatar
      [Ada] Code cleanup: rename ALI.Scope · 1c4aefb6
      Arnaud Charlet authored
      gcc/ada/
      
      	* ali.ads, ali.adb, bindo-writers.adb, lib-writ.adb (Scope):
      	Renamed to IS_Scope.
      1c4aefb6
    • Joffrey Huguet's avatar
      [Ada] Add contracts to Ada.Strings.Fixed · 571d3fb1
      Joffrey Huguet authored
      gcc/ada/
      
      	* libgnat/a-strfix.ads: Add postconditions and contract cases to
      	subprograms.
      571d3fb1
    • Ed Schonberg's avatar
      [Ada] Handle iterator filters on loop specifications over containers · d1d0c4c8
      Ed Schonberg authored
      gcc/ada/
      
      	* sem_ch5.adb (Analyze_Iterator_Specification): If iterator
      	filter is present, preanalyze filter without expansion.
      	(Analyze_Loop_Parameter_Specification): When
      	loop_Parameter_Specification is rewritten as
      	Iterator_Specification, transfer Iterator_Filter if present.
      d1d0c4c8
    • Doug Rupp's avatar
      [Ada] armhf-linux: symbolic tracebacks · aa44eaca
      Doug Rupp authored
      gcc/ada/
      
      	* libgnat/s-objrea.ads (Object_Arch): Add ARM enum
      	* libgnat/s-objrea.adb (Initialize): Add EM_ARM case.
      	(Read_Address): Add ARM case to 32bit read.
      	* Makefile.rtl: Add trasym units to the runtime for armhf-linux.
      aa44eaca
    • Dmitriy Anisimkov's avatar
      [Ada] Fix memory leak in GNAT.Expect.Non_Blocking_Spawn on Windows · 29cd42e0
      Dmitriy Anisimkov authored
      gcc/ada/
      
      	* libgnat/g-expect.adb (Non_Blocking_Spawn): Deallocate elements
      	on Arg_List after calling Set_Up_Child_Communications.
      29cd42e0
Loading