Skip to content
Snippets Groups Projects
  1. Dec 20, 2020
    • Jakub Jelinek's avatar
      doc: Fix a typo [PR98400] · 8b01af02
      Jakub Jelinek authored
      Fix a typo in an option name in documentation.
      
      2020-12-20  Jakub Jelinek  <jakub@redhat.com>
      
      	PR other/98400
      	* doc/invoke.texi (-mbackchain): Fix a typo - -mmo-backchain ->
      	-mno-backchain.
      8b01af02
    • Thomas Koenig's avatar
      Set DECL_ARTIFICIAL on gfortran internal variables. · 8d76c007
      Thomas Koenig authored
      It seems we sometimes use DECL_ARTIFICIAL as choosing between
      different code paths.  In order not to make -fdebug-aux-vars
      do different things, set DECL_ARTIFICIAL on the variables to
      avoid these different code paths (and the corresponding
      regressions).
      
      gcc/fortran/ChangeLog:
      
      	* trans.c (create_var_debug_raw): Set DECL_ARTIFICIAL
      	on variables.
      8d76c007
    • Thomas Koenig's avatar
      Correct coarray indices for test case. · bebf930d
      Thomas Koenig authored
      gcc/testsuite/ChangeLog:
      
      	* gfortran.dg/coarray/send_char_array_1.f90: Correct coarray
      	indces.
      bebf930d
    • GCC Administrator's avatar
      Daily bump. · eb460c59
      GCC Administrator authored
      eb460c59
  2. Dec 19, 2020
    • Jakub Jelinek's avatar
      expr: Fix up constant_byte_string bitfield handling [PR98366] · 69165332
      Jakub Jelinek authored
      constant_byte_string now uses a convert_to_bytes function, which doesn't
      handle bitfields at all (don't punt on them, just puts them into wrong bits
      or bytes).  Furthermore, I don't see a reason why that function should exist
      at all, it duplicates native_encode_initializer functionality.
      Except that native_encode_initializer punted on flexible array members and 2
      tests in the testsuite relied on constant_byte_string handling those.
      So, this patch throws away convert_to_bytes, uses native_encode_initializer
      instead, but teaches it to handle flexible array members (only in the
      non-mask mode with off == -1 for now), furthermore, it adds various corner
      case checks that the old implementation was missing (like that STRING_CSTs
      use int as length and therefore we shouldn't try to build larger than that
      strings, or that native_encode*/native_interpret* APIs require sane
      host and target bytes (8-bit on both).
      
      2020-12-19  Jakub Jelinek  <jakub@redhat.com>
      
      	PR middle-end/98366
      	* fold-const.c (native_encode_initializer): Don't try to
      	memset more than total_bytes with off == -1 even if len is large.
      	Handle flexible array member initializers if off == -1 and mask is
      	NULL.
      	* expr.c (convert_to_bytes): Remove.
      	(constant_byte_string): Use native_encode_initializer instead of
      	convert_to_bytes.  Remove extraneous semicolon.  Punt on various
      	corner-cases the APIs don't handle, like sizes > INT_MAX,
      	BITS_PER_UNIT != 8, CHAR_BIT != 8.
      
      	* gcc.c-torture/execute/pr98366.c: New test.
      69165332
    • Iain Buclaw's avatar
      d: Fix ICE in in force_decl_die, at dwarf2out.c with -gdwarf-2 -gstrict-dwarf [PR98067] · e9e4ddfc
      Iain Buclaw authored
      Manifest constants in D are represented as CONST_DECLs, which can be
      imported from one module to another.  However, when compiling on strict
      dwarf2 targets such as *-*-darwin10, importing CONST_DECLs cannot be
      represented in debug as D did not exist as an AT_language until dwarf3,
      and the only available fallback being DW_LANG_C.  As CONST_DECLs are
      treated as enumerators in C, and not outputted individually in
      gen_decl_die, this causes an internal error in force_decl_die to occur.
      
      To handle this, similar to other places in dwarf2out, if a CONST_DECL is
      seen in dwarf2out_imported_module_or_decl_1, then we simply return early
      if the language is not one of Ada, D, or Fortran.
      
      gcc/ChangeLog:
      
      	PR d/98067
      	* dwarf2out.c (dwarf2out_imported_module_or_decl_1): Handle
      	  CONST_DECL only if is_fortran, is_ada, or is_dlang.
      
      gcc/testsuite/ChangeLog:
      
      	PR d/98067
      	* gdc.dg/debug/debug.exp: New test.
      	* gdc.dg/debug/dwarf2/dwarf2.exp: New test.
      	* gdc.dg/debug/dwarf2/imports/pr98067.d: New test.
      	* gdc.dg/debug/dwarf2/langdw2.d: New test.
      	* gdc.dg/debug/dwarf2/langdw3.d: New test.
      	* gdc.dg/debug/dwarf2/pr98067.d: New test.
      	* gdc.dg/debug/trivial.d: New test.
      e9e4ddfc
    • Jakub Jelinek's avatar
      bswap: Fix up a thinko with empty CONSTRUCTORs [PR98378] · 9032d2b2
      Jakub Jelinek authored
      The code I've added recently in find_bswap_or_nop for VECTOR CONSTRUCTORs
      is missing punt on an important case - namely empty CONSTRUCTORs, because in that
      case the loop will not initialize *n and the code after the loop will then
      use the uninitialized structure.
      
      2020-12-19  Jakub Jelinek  <jakub@redhat.com>
      
      	PR tree-optimization/98378
      	* gimple-ssa-store-merging.c (find_bswap_or_nop): Punt if CONSTRUCTOR
      	has no elements.
      9032d2b2
    • GCC Administrator's avatar
      Daily bump. · b1a2242e
      GCC Administrator authored
      b1a2242e
  3. Dec 18, 2020
    • Ian Lance Taylor's avatar
      compiler: check for floating-point exponent overflow · 5128f8d0
      Ian Lance Taylor authored
      Adjust mksysinfo and mkrsysinfo to strip out floating-point max numbers,
      as they can trigger this error.
      
      Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/278476
      5128f8d0
    • Andrew MacLeod's avatar
      Re: [r11-6232 Regression] FAIL: gcc.dg/pr97750.c · 0e9f2b2d
      Andrew MacLeod authored
      Adjust testcase to not actually check for an undefined warning since we
      don't really care about it, or what line it is issued on.
      
      	gcc/testsuite/
      	* gcc.dg/pr97750.c: Remove check for warning.
      0e9f2b2d
    • Jakub Jelinek's avatar
      openmp: Don't optimize shared to firstprivate on task with depend clause · 8b604594
      Jakub Jelinek authored
      The attached testcase is miscompiled, because we optimize shared clauses
      to firstprivate when task body can't modify the variable even when the
      task has depend clause.  That is wrong, because firstprivate means the
      variable will be copied immediately when the task is created, while with
      depend clause some other task might change it later before the dependencies
      are satisfied and the task should observe the value only after the change.
      
      2020-12-18  Jakub Jelinek  <jakub@redhat.com>
      
      	* gimplify.c (struct gimplify_omp_ctx): Add has_depend member.
      	(gimplify_scan_omp_clauses): Set it to true if OMP_CLAUSE_DEPEND
      	appears on OMP_TASK.
      	(gimplify_adjust_omp_clauses_1, gimplify_adjust_omp_clauses): Force
      	GOVD_WRITTEN on shared variables if task construct has depend clause.
      
      	* testsuite/libgomp.c/task-6.c: New test.
      8b604594
    • Kwok Cheung Yeung's avatar
      openmp: Fix g++.dg/gomp/declare-target-3.C testcase when offloading is disabled · bfb37fa4
      Kwok Cheung Yeung authored
      2020-12-18  Kwok Cheung Yeung  <kcy@codesourcery.com>
      
      	gcc/testsuite/
      	* g++.dg/gomp/declare-target-3.C: Only check .offload_var_table
      	entries if offloading is enabled.
      bfb37fa4
    • Jakub Jelinek's avatar
      libcc1: Fix up libcc1 configure [PR98330] · 5dc99893
      Jakub Jelinek authored
      Either we should write test x$darwin_dynamic_lookup = xyes
      or we should make sure the variable is always defined to non-empty string.
      
      2020-12-18  Jakub Jelinek  <jakub@redhat.com>
      
      	PR bootstrap/98380
      	* configure.ac: Set darwin_dynamic_lookup=no instead to empty
      	string.
      	* configure: Regenerated.
      5dc99893
    • Przemyslaw Wirkus's avatar
      aarch64: SVE: ICE in expand_direct_optab_fn [PR98177] · d44d47b4
      Przemyslaw Wirkus authored
      Problem comes from using the wrong interface to get the index type for a
      COND_REDUCTION. For fixed-length SVE we get a V2SI (a 64-bit Advanced
      SIMD vector) instead of a VNx2SI (an SVE vector that stores SI elements
      in DI containers).
      
      Credits to Richard Sandiford for pointing out the issue's root cause.
      
      Original PR snippet proposed to reproduce issue was only causing ICE for C++
      compiler (see pr98177-1 test cases). I've slightly modified original
      snippet in order to reproduce issue on both C and C++ compilers. These
      are pr98177-2 test cases.
      
      gcc/ChangeLog:
      
      	PR target/98177
      	* tree-vect-loop.c (vect_create_epilog_for_reduction): Use
      	get_same_sized_vectype to obtain index type.
      	(vectorizable_reduction): Likewise.
      
      gcc/testsuite/ChangeLog:
      
      	PR target/98177
      	* g++.target/aarch64/sve/pr98177-1.C: New test.
      	* g++.target/aarch64/sve/pr98177-2.C: New test.
      	* gcc.target/aarch64/sve/pr98177-1.c: New test.
      	* gcc.target/aarch64/sve/pr98177-2.c: New test.
      d44d47b4
    • Patrick Palka's avatar
      libstdc++: Fix mistake in PR98374 change [PR98377] · 60cecb2b
      Patrick Palka authored
      The #ifdef RADIXCHAR directive should be moved one line up so that it
      also guards the outer if statement, or else when RADIXCHAR is not
      defined the outer if statement will end up nonsensically guarding the
      declaration of output_length_upper_bound a few lines below it.
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/98377
      	* src/c++17/floating_to_chars.cc (__floating_to_chars_precision):
      	Fix mistake.
      60cecb2b
    • Patrick Palka's avatar
      libstdc++: Fix build failure on AArch64 ILP32 [PR98370] · 22a7e82c
      Patrick Palka authored
      This should fix a build failure on AArch64 ILP32 due to int32_t mapping
      to long int instead of int on this platform, which causes type deduction
      to fail in the below call to std::max as reported in the PR.
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/98370
      	* src/c++17/floating_to_chars.cc (__floating_to_chars_shortest):
      	Provide explicit template arguments to the call to std::max.
      22a7e82c
    • Patrick Palka's avatar
      libstdc++: Fix build failure due to missing <langinfo.h> [PR98374] · d7bab388
      Patrick Palka authored
      This should fix a build failure on Windows which lacks <langinfo.h>,
      from which we use nl_langinfo() to obtain the radix character of the
      current locale.  (We can't use the more portable localeconv() from
      <clocale> to obtain the radix character of the current locale here
      because it's not thread-safe, unfortunately.)
      
      This change means that on Windows and other such platforms, we'll just
      always assume the radix character used by printf is '.' when formatting
      a long double through it.
      
      libstdc++-v3/ChangeLog:
      
      	PR libstdc++/98374
      	* src/c++17/floating_to_chars.cc: Guard include of <langinfo.h>
      	with __has_include.
      	(__floating_to_chars_precision) [!defined(RADIXCHAR)]: Don't
      	attempt to obtain the radix character of the current locale,
      	just assume it's '.'.
      d7bab388
    • Patrick Palka's avatar
      libstdc++: Check FE_TONEAREST is defined before using it · 266d7464
      Patrick Palka authored
      We need to test that FE_TONEAREST is defined before we may use it along
      with fegetround/fesetround to adjust the floating-point rounding mode.
      This fixes a build failure with older versions of newlib.
      
      libstdc++-v3/ChangeLog:
      
      	* src/c++17/floating_from_chars.cc (from_chars_impl)
      	[!defined(FE_TONEAREST)]: Don't adjust the rounding mode.
      	* src/c++17/floating_to_chars.cc (__floating_to_chars_precision):
      	Likewise.
      266d7464
    • Kwok Cheung Yeung's avatar
      openmp: Implicitly add 'declare target' directives for dynamic initializers in C++ · 3af02d32
      Kwok Cheung Yeung authored
      2020-12-18  Kwok Cheung Yeung  <kcy@codesourcery.com>
      
      	gcc/
      	* langhooks-def.h (lhd_get_decl_init): New.
      	(lhd_finish_decl_inits): New.
      	(LANG_HOOKS_GET_DECL_INIT): New.
      	(LANG_HOOKS_OMP_FINISH_DECL_INITS): New.
      	(LANG_HOOKS_DECLS): Add LANG_HOOKS_GET_DECL_INIT and
      	LANG_HOOKS_OMP_FINISH_DECL_INITS.
      	* langhooks.c (lhd_omp_get_decl_init): New.
      	(lhd_omp_finish_decl_inits): New.
      	* langhooks.h (struct lang_hooks_for_decls): Add omp_get_decl_init
      	and omp_finish_decl_inits.
      	* omp-offload.c (omp_discover_declare_target_var_r): Use
      	get_decl_init langhook in place of DECL_INITIAL.  Call
      	omp_finish_decl_inits langhook at end of function.
      
      	gcc/cp/
      	* cp-lang.c (cxx_get_decl_init): New.
      	(cxx_omp_finish_decl_inits): New.
      	(LANG_HOOKS_GET_DECL_INIT): New.
      	(LANG_HOOKS_OMP_FINISH_DECL_INITS): New.
      	* cp-tree.h (dynamic_initializers): New.
      	* decl.c (dynamic_initializers): New.
      	* decl2.c (c_parse_final_cleanups): Add initializer entries
      	from vars to dynamic_initializers.
      
      	gcc/testsuite/
      	* g++.dg/gomp/declare-target-3.C: New.
      3af02d32
    • Richard Sandiford's avatar
      aarch64: Extend aarch64-autovec-preference==2 to 128-bit SVE · 7ff5706f
      Richard Sandiford authored
      When compiling with -msve-vector-bits=128, aarch64_preferred_simd_mode
      would pass the same vector width to aarch64_simd_container_mode for
      both SVE and Advanced SIMD, and so Advanced SIMD would always “win”.
      This patch instead makes it choose directly between SVE and Advanced
      SIMD modes, so that aarch64-autovec-preference==2 and
      aarch64-autovec-preference==4 work for this configuration.
      
      (aarch64-autovec-preference shouldn't affect aarch64_simd_container_mode
      because that would have an ABI impact for things like GNU vectors.)
      
      gcc/
      	* config/aarch64/aarch64.c (aarch64_preferred_simd_mode): Use
      	aarch64_full_sve_mode and aarch64_vq_mode directly, instead of
      	going via aarch64_simd_container_mode.
      7ff5706f
    • Tamar Christina's avatar
      Arm: MVE: Add missing complex mul iterators · bcac2871
      Tamar Christina authored
      Seems when I split the patch I forgot to include these into the rot iterator..
      The uncommitted hunks were still in my local tree so didn't notice.
      
      gcc/ChangeLog:
      
      	* config/arm/iterators.md (rot): Add UNSPEC_VCMUL, UNSPEC_VCMUL90,
      	UNSPEC_VCMUL180, UNSPEC_VCMUL270.
      bcac2871
    • Nathan Sidwell's avatar
      c++: Fix windows binary files [PR 98362] · 785b4943
      Nathan Sidwell authored
      Windows has unique and special needs for open(2).
      
      	gcc/cp/
      	* module.cc (O_CLOEXEC, O_BINARY): Add window's support.
      	(elf_in::defrost, module_state::do_import)
      	(finish_module_processing): Use O_BINARY.
      785b4943
    • Paul Thomas's avatar
      As well as the PR this patch fixes problems in handling class objects · ce8dcc91
      Paul Thomas authored
      2020-12-18  Paul Thomas  <pault@gcc.gnu.org>
      
      gcc/fortran
      	PR fortran/83118
      	PR fortran/96012
      	* resolve.c (resolve_ordinary_assign): Generate a vtable if
      	necessary for scalar non-polymorphic rhs's to unlimited lhs's.
      	* trans-array.c (get_class_info_from_ss): New function.
      	(gfc_trans_allocate_array_storage): Defer obtaining class
      	element type until all sources of class exprs are tried. Use
      	class API rather than TREE_OPERAND. Look for class expressions
      	in ss->info by calling get_class_info_from_ss. After, obtain
      	the element size for class descriptors. Where the element type
      	is unknown, cast the data as character(len=size) to overcome
      	unlimited polymorphic problems.
      	(gfc_conv_ss_descriptor): Do not fix class variable refs.
      	(build_class_array_ref, structure_alloc_comps): Replace code
      	replicating the new function gfc_resize_class_size_with_len.
      	(gfc_alloc_allocatable_for_assignment): Obtain element size
      	for lhs in cases of deferred characters and class enitities.
      	Move code for the element size of rhs to start of block. Clean
      	up extraction of class parameters throughout this function.
      	After the shape check test whether or not the lhs and rhs
      	element sizes are the same. Use earlier evaluation of
      	'cond_null'. Reallocation of lhs only to happen if size changes
      	or element size changes.
      	* trans-expr.c (gfc_resize_class_size_with_len): New function.
      	(gfc_get_class_from_expr): If a constant expression is
      	encountered, return NULL_TREE;
      	(trans_scalar_class_assign): New function.
      	(gfc_conv_procedure_call): Ensure the vtable is present for
      	passing a non-class actual to an unlimited formal.
      	(trans_class_vptr_len_assignment): For expressions of type
      	BT_CLASS, extract the class expression if necessary. Use a
      	statement block outside the loop body. Ensure that 'rhs' is
      	of the correct type. Obtain rhs vptr in all circumstances.
      	(gfc_trans_scalar_assign): Call trans_scalar_class_assign to
      	make maximum use of the vptr copy in place of assignment.
      	(trans_class_assignment): Actually do reallocation if needed.
      	(gfc_trans_assignment_1): Simplify some of the logic with
      	'realloc_flag'. Set 'vptr_copy' for all array assignments to
      	unlimited polymorphic lhs.
      	* trans.c (gfc_build_array_ref): Call gfc_resize_class_size_
      	with_len to correct span for unlimited polymorphic decls.
      	* trans.h : Add prototype for gfc_resize_class_size_with_len.
      
      gcc/testsuite/
      	PR fortran/83118
      	PR fortran/96012
      	* gfortran.dg/dependency_60.f90: New test.
      	* gfortran.dg/class_allocate_25.f90: New test.
      	* gfortran.dg/class_assign_4.f90: New test.
      	* gfortran.dg/unlimited_polymorphic_32.f03: New test.
      ce8dcc91
    • Jakub Jelinek's avatar
      c++: Fix PCH ICE with __builtin_source_location [PR98343] · 11f07ef3
      Jakub Jelinek authored
      Seems the ggc_remove ppc_nx 3 operand member relies on the hash tables to
      contain pointers in the first element, which is not the case for
      source_location_table* hash table, which has location_t and unsigned as
      first two members and pointer somewhere else.
      I've tried to change:
         static void
         pch_nx (T &p, gt_pointer_operator op, void *cookie)
         {
      -    op (&p, cookie);
      +    extern void gt_pch_nx (T *, gt_pointer_operator, void *);
      +    gt_pch_nx (&p, op, cookie);
         }
      in hash-traits.h, but that failed miserably.
      So, this patch instead overrides the two pch_nx overloads (only the second
      one is needed, the former one is identical to the ggc_remove one) but I need
      to override both.
      
      2020-12-18  Jakub Jelinek  <jakub@redhat.com>
      
      	PR c++/98343
      	* cp-gimplify.c (source_location_table_entry_hash::pch_nx): Override
      	static member functions from ggc_remove.
      
      	* g++.dg/pch/pr98343.C: New test.
      	* g++.dg/pch/pr98343.Hs: New file.
      11f07ef3
    • Ian Lance Taylor's avatar
      Go testsuite: handle +build lines correctly · dc006893
      Ian Lance Taylor authored
      Update the Go testsuite driver to handle +build lines as is done in
      the upstream repo, and update some tests to the upstream repo copy
      using +build lines with "gc" and "!gccgo" as appropriate.
      
      	* go.test/go-test.exp (go-set-goos): New procedure.
      	(go-gc-match): New procedure.
      	(go-gc-tests): Call go-set-goos.  Use go-gc-match to handle +build
      	lines.  Look for +build lines beyond first line of file.
      dc006893
    • Patrick Palka's avatar
      libstdc++: Import MSVC floating-point std::to_chars testcases · ddb9c661
      Patrick Palka authored
      The testcases are imported almost verbatim, with the only change being
      to the -double_nan and -float_nan testcases.  We expect these values to
      be formatted as "-nan" instead of "-nan(ind)".
      
      libstdc++-v3/ChangeLog:
      
      	* testsuite/20_util/to_chars/double.cc: New test, consisting of
      	testcases imported from the MSVC STL testsuite.
      	* testsuite/20_util/to_chars/float.cc: Likewise.
      ddb9c661
    • Patrick Palka's avatar
      libstdc++: Add floating-point std::to_chars implementation · 3c57e692
      Patrick Palka authored
      This implements the floating-point std::to_chars overloads for float,
      double and long double.  We use the Ryu library to compute the shortest
      round-trippable fixed and scientific forms for float, double and long
      double.  We also use Ryu for performing explicit-precision fixed and
      scientific formatting for float and double. For explicit-precision
      formatting for long double we fall back to using printf.  Hexadecimal
      formatting for float, double and long double is implemented from
      scratch.
      
      The supported long double binary formats are binary64, binary80 (x86
      80-bit extended precision), binary128 and ibm128.
      
      Much of the complexity of the implementation is in computing the exact
      output length before handing it off to Ryu (which doesn't do bounds
      checking).  In some cases it's hard to compute the output length
      beforehand, so in these cases we instead compute an upper bound on the
      output length and use a sufficiently-sized intermediate buffer only if
      necessary.
      
      Another source of complexity is in the general-with-precision formatting
      mode, where we need to do zero-trimming of the string returned by Ryu,
      and where we also take care to avoid having to format the number through
      Ryu a second time when the general formatting mode resolves to fixed
      (which we determine by doing a scientific formatting first and
      inspecting the scientific exponent).  We avoid going through Ryu twice
      by instead transforming the scientific form to the corresponding fixed
      form via in-place string manipulation.
      
      This implementation is non-conforming in a couple of ways:
      
      1. For the shortest hexadecimal formatting, we currently follow the
         Microsoft implementation's decision to be consistent with the
         output of printf's '%a' specifier at the expense of sometimes not
         printing the shortest representation.  For example, the shortest hex
         form for the number 1.08p+0 is 2.1p-1, but we output the former
         instead of the latter, as does printf.
      
      2. The Ryu routine generic_binary_to_decimal that we use for performing
         shortest formatting for large floating point types is implemented
         using the __int128 type, but some targets with a large long double
         type lack __int128 (e.g. i686), so we can't perform shortest
         formatting of long double on such targets through Ryu.  As a
         temporary stopgap this patch makes the long double to_chars overloads
         just dispatch to the double overloads on these targets, which means
         we lose precision in the output.  (We could potentially fix this by
         writing a specialized version of Ryu's generic_binary_to_decimal
         routine that uses uint64_t instead of __int128.)  [Though I wonder if
         there's a better way to work around the lack of __int128 on i686
         specifically?]
      
      3. Our shortest formatting for __ibm128 doesn't guarantee the round-trip
         property if the difference between the high- and low-order exponent
         is large.  This is because we treat __ibm128 as if it has a
         contiguous 105-bit mantissa by merging the mantissas of the high-
         and low-order parts (using code extracted from glibc), so we
         potentially lose precision from the low-order part.  This seems to be
         consistent with how glibc printf formats __ibm128.
      
      libstdc++-v3/ChangeLog:
      
      	* config/abi/pre/gnu.ver: Add new exports.
      	* include/std/charconv (to_chars): Declare the floating-point
      	overloads for float, double and long double.
      	* src/c++17/Makefile.am (sources): Add floating_to_chars.cc.
      	* src/c++17/Makefile.in: Regenerate.
      	* src/c++17/floating_to_chars.cc: New file.
      	(to_chars): Define for float, double and long double.
      	* testsuite/20_util/to_chars/long_double.cc: New test.
      3c57e692
    • Patrick Palka's avatar
      libstdc++: Apply modifications to our local copy of Ryu · 50335069
      Patrick Palka authored
      This performs the following modifications to our local copy of Ryu in
      order to make it more readily usable for our std::to_chars
      implementation:
      
        * Remove all #includes
        * Remove copy_special_str routines
        * Adjust the exponent formatting to match printf
        * Remove some functions we're not going to use
        * Add an out-parameter to d2exp_buffered_n for the scientific exponent
        * Store the sign bit inside struct floating_decimal_[32|64]
        * Rename [df]2s_buffered_n and change their return type
        * Make generic_binary_to_decimal take the bit representation in parts
      
      libstdc++-v3/ChangeLog:
      
      	* src/c++17/ryu/common.h, src/c++17/ryu/d2fixed.c,
      	src/c++17/ryu/d2fixed_full_table.h, src/c++17/ryu/d2s.c,
      	src/c++17/ryu/d2s_intrinsics.h, src/c++17/ryu/f2s.c,
      	src/c++17/ryu/f2s_intrinsics.h, src/c++17/ryu/generic_128.c:
      	Apply local modifications.
      50335069
    • Patrick Palka's avatar
      libstdc++: Import parts of the Ryu library · e3f0eaa2
      Patrick Palka authored
      This imports the source files from the Ryu library that define
      d2s_buffered_n, f2s_buffered_n, d2fixed_buffered_n, d2exp_buffered_n and
      generic_binary_to_decimal, which we're going to use as the base of our
      std::to_chars implementation.
      
      libstdc++-v3/ChangeLog:
      
      	* src/c++17/ryu/MERGE: New file.
      	* src/c++17/ryu/common.h, src/c++17/ryu/d2fixed.c,
      	src/c++17/ryu/d2fixed_full_table.h, src/c++17/ryu/d2s.c,
      	src/c++17/ryu/d2s_full_table.h, src/c++17/ryu/d2s_intrinsics.h,
      	src/c++17/ryu/digit_table.h, src/c++17/ryu/f2s.c,
      	src/c++17/ryu/f2s_intrinsics.h, src/c++17/ryu/generic_128.c,
      	src/c++17/ryu/generic_128.h, src/c++17/ryu/ryu_generic_128.h:
      	Import these files from the Ryu library.
      e3f0eaa2
    • Patrick Palka's avatar
      c++: More precise tracking of potentially unstable satisfaction · 731a32b3
      Patrick Palka authored
      This makes tracking of potentially unstable satisfaction results more
      precise by recording the specific types for which completion failed
      during satisfaction.  We now recompute a satisfaction result only if one
      of these types has been completed since the last time we computed the
      satisfaction result.  Thus the number of times that we recompute a
      satisfaction result is now bounded by the number of such incomplete
      types, rather than being effectively unbounded.  This allows us to
      remove the invalid assumption in note_ftc_for_satisfaction that was
      added to avoid a compile time performance regression in cmcstl2 due to
      repeated recomputation of a satisfaction result that depended on
      completion of a permanently incomplete class template specialization.
      
      In order to continue to detect the instability in concepts-complete3.C,
      we also need to explicitly keep track of return type deduction failure
      alongside type completion failure.  So this patch also adds a call to
      note_ftc_for_satisfaction in require_deduced_type.
      
      gcc/cp/ChangeLog:
      
      	* constraint.cc (satisfying_constraint): Move up definition
      	and give it bool type.
      	(failed_type_completion_count): Replace with ...
      	(failed_type_completions): ... this.
      	(note_failed_type_completion_for_satisfaction): Append the
      	supplied argument to failed_type_completions.
      	(some_type_complete_p): Define.
      	(sat_entry::maybe_unstable): Replace with ...
      	(sat_entry::ftc_begin, sat_entry::ftc_end): ... these.
      	(satisfaction_cache::ftc_count): Replace with ...
      	(satisfaction_cache::ftc_begin): ... this.
      	(satisfaction_cache::satisfaction_cache): Adjust accordingly.
      	(satisfaction_cache::get): Adjust accordingly, using
      	some_type_complete_p.
      	(satisfaction_cache::save): Adjust accordingly.
      	(satisfying_constraint_p): Remove unused function.
      	(satisfy_constraint): Set satisfying_constraint.
      	(satisfy_declaration_constraints): Likewise.
      	* decl.c (require_deduced_type): Call
      	note_failed_type_completion_for_satisfaction.
      731a32b3
    • Patrick Palka's avatar
      c++: Diagnose self-recursive satisfaction · 79f57d5c
      Patrick Palka authored
      This patch further extends the satisfaction_cache class to diagnose
      self-recursive satisfaction.
      
      gcc/cp/ChangeLog:
      
      	* constraint.cc (sat_entry::evaluating): New member.
      	(satisfaction_cache::get): If entry->evaluating, diagnose
      	self-recursive satisfaction.  Otherwise, set entry->evaluating
      	if we're not reusing a cached satisfaction result.
      	(satisfaction_cache::save): Clear entry->evaluating.
      	(satisfy_atom): Set up diagnosing_failed_constraint before the
      	first call to get().
      
      gcc/testsuite/ChangeLog:
      
      	PR c++/96840
      	* g++.dg/cpp2a/concepts-pr88395.C: Adjust to expect the
      	self-recursive satisfaction to get directly diagnosed.
      	* g++.dg/cpp2a/concepts-recursive-sat2.C: Likewise.
      	* g++.dg/cpp2a/concepts-recursive-sat4.C: New test.
      79f57d5c
    • Patrick Palka's avatar
      c++: Diagnose unstable satisfaction · 20f29286
      Patrick Palka authored
      This implements lightweight heuristical detection and diagnosing of
      satisfaction whose result changes at different points in the program,
      which renders the program ill-formed NDR as of P2104.  We've recently
      started to more aggressively cache satisfaction results, and so the goal
      with this patch is to make this caching behavior more transparent to
      the user.
      
      A satisfaction result is flagged as "potentially unstable" (at the atom
      granularity) if during its computation, some type completion failure
      occurs.  This is detected by making complete_type_or_maybe_complain
      increment a counter upon failure and comparing the value of the counter
      before and after satisfaction.  (We don't instrument complete_type
      directly because it's used "opportunistically" in many spots where type
      completion failure doesn't necessary lead to substitution failure.)
      
      Such flagged satisfaction results are always recomputed from scratch,
      even when performing satisfaction quietly.  When saving a satisfaction
      result, we now compare the computed result with the cached result, and
      if they differ, proceed with diagnosing the instability.
      
      Most of the implementation is confined to the satisfaction_cache class,
      which has been completely rewritten.
      
      gcc/cp/ChangeLog:
      
      	* constraint.cc (failed_type_completion_count): New.
      	(note_failed_type_completion_for_satisfaction): New.
      	(sat_entry::constr): Rename to ...
      	(sat_entry::atom): ... this.
      	(sat_entry::location): New member.
      	(sat_entry::maybe_unstable): New member.
      	(sat_entry::diagnose_instability): New member.
      	(struct sat_hasher): Adjust after the above renaming.
      	(get_satisfaction, save_satisfaction): Remove.
      	(satisfaction_cache): Rewrite completely.
      	(satisfy_atom): When instantiation of the parameter mapping
      	fails, set diagnose_instability.  Propagate location from
      	inst_cache.entry to cache.entry if the secondary lookup
      	succeeded.
      	(satisfy_declaration_constraints): When
      	failed_type_completion_count differs before and after
      	satisfaction, then don't cache the satisfaction result.
      	* cp-tree.h (note_failed_type_completion_for_satisfaction):
      	Declare.
      	* pt.c (tsubst) <case TYPENAME_TYPE>: Use
      	complete_type_or_maybe_complain instead of open-coding it.
      	* typeck.c (complete_type_or_maybe_complain): Call
      	note_failed_type_completion_for_satisfaction when type
      	completion fails.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.dg/cpp2a/concepts-complete1.C: New test.
      	* g++.dg/cpp2a/concepts-complete2.C: New test.
      	* g++.dg/cpp2a/concepts-complete3.C: New test.
      20f29286
    • GCC Administrator's avatar
      Daily bump. · cd69e3d5
      GCC Administrator authored
      cd69e3d5
  4. Dec 17, 2020
    • Przemyslaw Wirkus's avatar
      arm: Add support for Cortex-A78C · 35b8d268
      Przemyslaw Wirkus authored
      This patch adds support for -mcpu=cortex-a78c command line option.
      For more information about this processor, see [0]:
      
      [0] https://developer.arm.com/ip-products/processors/cortex-a/cortex-a78c
      
      gcc/ChangeLog:
      
      	* config/arm/arm-cpus.in: Add Cortex-A78C core.
      	* config/arm/arm-tables.opt: Regenerate.
      	* config/arm/arm-tune.md: Regenerate.
      	* doc/invoke.texi: Update docs.
      35b8d268
    • Richard Sandiford's avatar
      rtl-ssa: Fix reg_raw_mode thinko [PR98347] · 00bad763
      Richard Sandiford authored
      I'd used reg_raw_mode[regno] for general registers, even though
      the array is only valid for hard registers.  This patch uses
      regno_reg_rtx instead.
      
      gcc/
      	PR rtl-optimization/98347
      	* rtl-ssa/access-utils.h (full_register): Use regno_reg_rtx
      	instead of reg_raw_mode.
      00bad763
    • H.J. Lu's avatar
      Update default_estimated_poly_value prototype in targhooks.h · 4a7a3110
      H.J. Lu authored
      commit 64432b68
      Author: Kyrylo Tkachov <kyrylo.tkachov@arm.com>
      Date:   Thu Dec 17 18:02:37 2020 +0000
      
          vect, aarch64: Extend SVE vs Advanced SIMD costing decisions in vect_better_loop_vinfo_p
      
      changed default_estimated_poly_value to
      
      HOST_WIDE_INT
      default_estimated_poly_value (poly_int64 x, poly_value_estimate_kind)
      {
        return x.coeffs[0];
      }
      
      Update default_estimated_poly_value prototype in targhooks.h to match it.
      
      	* targhooks.h (default_estimated_poly_value): Updated.
      4a7a3110
    • Nathan Sidwell's avatar
      doc: Standard library header units · b79ce6e1
      Nathan Sidwell authored
      It seems users are confused by the lack of standard library header
      units.
      
      	gcc/
      	* doc/invoke.texi (C++ Modules): Document lack of std
      	library header units.
      b79ce6e1
    • Kyrylo Tkachov's avatar
      vect, aarch64: Extend SVE vs Advanced SIMD costing decisions in vect_better_loop_vinfo_p · 64432b68
      Kyrylo Tkachov authored
      While experimenting with some backend costs for Advanced SIMD and SVE I
      hit many cases where GCC would pick SVE for VLA auto-vectorisation even when
      the backend very clearly presented cheaper costs for Advanced SIMD.
      For a simple float addition loop the SVE costs were:
      
      vec.c:9:21: note:  Cost model analysis:
        Vector inside of loop cost: 28
        Vector prologue cost: 2
        Vector epilogue cost: 0
        Scalar iteration cost: 10
        Scalar outside cost: 0
        Vector outside cost: 2
        prologue iterations: 0
        epilogue iterations: 0
        Minimum number of vector iterations: 1
        Calculated minimum iters for profitability: 4
      
      and for Advanced SIMD (Neon) they're:
      
      vec.c:9:21: note:  Cost model analysis:
        Vector inside of loop cost: 11
        Vector prologue cost: 0
        Vector epilogue cost: 0
        Scalar iteration cost: 10
        Scalar outside cost: 0
        Vector outside cost: 0
        prologue iterations: 0
        epilogue iterations: 0
        Calculated minimum iters for profitability: 0
      vec.c:9:21: note:    Runtime profitability threshold = 4
      
      yet the SVE one was always picked. With guidance from Richard this seems
      to be due to the vinfo comparisons in vect_better_loop_vinfo_p, in
      particular the part with the big comment explaining the
      estimated_rel_new * 2 <= estimated_rel_old heuristic.
      
      This patch extends the comparisons by introducing a three-way estimate
      kind for poly_int values that the backend can distinguish.
      This allows vect_better_loop_vinfo_p to ask for minimum, maximum and
      likely estimates and pick Advanced SIMD overs SVE when it is clearly cheaper.
      
      gcc/
      	* target.h (enum poly_value_estimate_kind): Define.
      	(estimated_poly_value): Take an estimate kind argument.
      	* target.def (estimated_poly_value): Update definition for the
      	above.
      	* doc/tm.texi: Regenerate.
      	* targhooks.c (estimated_poly_value): Update prototype.
      	* tree-vect-loop.c (vect_better_loop_vinfo_p): Use min, max and
      	likely estimates of VF to pick between vinfos.
      	* config/aarch64/aarch64.c (aarch64_cmp_autovec_modes): Use
      	estimated_poly_value instead of aarch64_estimated_poly_value.
      	(aarch64_estimated_poly_value): Take a kind argument and handle
      	it.
      64432b68
    • Nathan Sidwell's avatar
      c++: Fix clang problem [PR 98340] · 2d7a40fa
      Nathan Sidwell authored
      Clang didn't like sizeot (uintset::value) in a templated context.  Not sure
      where the problem lies -- ambiguous std, gcc erroneous accept or clang erroneous
      reject.  Anyway, this avoids that construct.
      
      	PR c++/98340
      	gcc/cp/
      	* module.cc (uintset<T>::hash::add): Use uintset (0u).MEMBER,
      	rather than uintset::MEMBER.
      2d7a40fa
    • Nathan Sidwell's avatar
      libcody: Allow PIC [PR 98324] · d1ad55c4
      Nathan Sidwell authored
      While this doesn't fix 98324, it was an omission.  Cribbed code from
      libcpp to build libcody as PIC.
      
      	libcody/
      	* configure.ac: Add --enable-host-shared.
      	* Makefile.in: Add FLAGPIC.
      	* configure: Regenerated.
      d1ad55c4
Loading