1. Sep 02, 2022
    • Kito Cheng's avatar
      RISC-V: Implement TARGET_COMPUTE_MULTILIB · d72ca12b
      Kito Cheng authored
      Use TARGET_COMPUTE_MULTILIB to search the multi-lib reuse for riscv*-*-elf*,
      according following rules:
      
       1. Check ABI is same.
       2. Check both has atomic extension or both don't have atomic extension.
          - Because mix soft and hard atomic operation doesn't make sense and
            won't work as expect.
       3. Check current arch is superset of the target multi-lib arch.
          - It might result slower performance or larger code size, but it
            safe to run.
       4. Pick most match multi-lib set if more than one multi-lib are pass
          the above checking.
      
      Example for how to select multi-lib:
        We build code with -march=rv32imaf and -mabi=ilp32, and we have
        following 5 multi-lib set:
      
          1. rv32ia/ilp32
          2. rv32ima/ilp32
          3. rv32imf/ilp32
          4. rv32imaf/ilp32f
          5. rv32imafd/ilp32
      
        The first and second multi-lib is safe to like, 3rd multi-lib can't
        re-use becasue it don't have atomic extension, which is mismatch according
        rule 2, and the 4th multi-lib can't re-use too due to the ABI mismatch,
        the last multi-lib can't use since current arch is not superset of the
        arch of multi-lib.
      
      And emit error if not found suitable multi-lib set, the error message
      only emit when link with standard libraries.
      
      Example for when error will be emitted:
      
        $ riscv64-unknown-elf-gcc -print-multi-lib
        .;
        rv32i/ilp32;@march=rv32i@mabi=ilp32
        rv32im/ilp32;@march=rv32im@mabi=ilp32
        rv32iac/ilp32;@march=rv32iac@mabi=ilp32
        rv32imac/ilp32;@march=rv32imac@mabi=ilp32
        rv32imafc/ilp32f;@march=rv32imafc@mabi=ilp32f
        rv64imac/lp64;@march=rv64imac@mabi=lp64
      
        // No actual linking, so no error emitted.
        $ riscv64-unknown-elf-gcc -print-multi-directory -march=rv32ia -mabi=ilp32
        .
      
        // Link to default libc and libgcc, so check the multi-lib, and emit
        // error because not found suitable multilib.
        $ riscv64-unknown-elf-gcc -march=rv32ia -mabi=ilp32 ~/hello.c
        riscv64-unknown-elf-gcc: fatal error: can't found suitable multilib set for '-march=rv32ia'/'-mabi=ilp32'
        compilation terminated.
      
        // No error emitted, because not link to stdlib.
        $ riscv64-unknown-elf-gcc -march=rv32ia -mabi=ilp32 ~/hello.c -nostdlib
      
        // No error emitted, because compile only.
        $ riscv64-unknown-elf-gcc -march=rv32ia -mabi=ilp32 ~/hello.c -c
      
      gcc/ChangeLog:
      
      	* common/config/riscv/riscv-common.cc: Include <vector>.
      	(struct riscv_multi_lib_info_t): New.
      	(riscv_subset_list::match_score): Ditto.
      	(find_last_appear_switch): Ditto.
      	(prefixed_with): Ditto.
      	(struct multi_lib_info_t): Ditto.
      	(riscv_current_arch_str): Ditto.
      	(riscv_current_abi_str): Ditto.
      	(riscv_multi_lib_info_t::parse): Ditto.
      	(riscv_check_cond): Ditto.
      	(riscv_check_conds): Ditto.
      	(riscv_compute_multilib): Ditto.
      	(TARGET_COMPUTE_MULTILIB): Defined.
      	* config/riscv/elf.h (LIB_SPEC): Call riscv_multi_lib_check if
      	doing link.
      	(RISCV_USE_CUSTOMISED_MULTI_LIB): New.
      	* config/riscv/riscv.h (riscv_multi_lib_check): New.
      	(EXTRA_SPEC_FUNCTIONS): Add riscv_multi_lib_check.
      	* config/riscv/riscv-subset.h (riscv_subset_list::match_score): New.
      d72ca12b
    • Kito Cheng's avatar
      Add TARGET_COMPUTE_MULTILIB hook to override multi-lib result. · 5ca9980f
      Kito Cheng authored
      Create a new hook to let target could override the multi-lib result,
      the motivation is RISC-V might have very complicated multi-lib re-use
      rule*, which is hard to maintain and use current multi-lib scripts,
      we even hit the "argument list too long" error when we tried to add more
      multi-lib reuse rule.
      
      So I think it would be great to have a target specific way to determine
      the multi-lib re-use rule, then we could write those rule in C, instead
      of expand every possible case in MULTILIB_REUSE.
      
      * Here is an example for RISC-V multi-lib rules:
      https://gist.github.com/kito-cheng/0289cd42d9a756382e5afeb77b42b73b
      
      gcc/ChangeLog:
      
      	* common/common-target.def (compute_multilib): New.
      	* common/common-targhooks.h (default_compute_multilib): New.
      	* common/common-targhooks.cc (default_compute_multilib): New.
      	* doc/tm.texi.in (TARGET_COMPUTE_MULTILIB): New.
      	* doc/tm.texi: Regen.
      	* gcc.cc: Include common/common-target.h.
      	(set_multilib_dir) Call targetm_common.compute_multilib.
      	(SWITCH_LIVE): Move to opts.h.
      	(SWITCH_FALSE): Ditto.
      	(SWITCH_IGNORE): Ditto.
      	(SWITCH_IGNORE_PERMANENTLY): Ditto.
      	(SWITCH_KEEP_FOR_GCC): Ditto.
      	(struct switchstr): Ditto.
      	* opts.h (SWITCH_LIVE): Move from gcc.c.
      	(SWITCH_FALSE): Ditto.
      	(SWITCH_IGNORE): Ditto.
      	(SWITCH_IGNORE_PERMANENTLY): Ditto.
      	(SWITCH_KEEP_FOR_GCC): Ditto.
      	(struct switchstr): Ditto.
      5ca9980f
    • Eric Botcazou's avatar
      [Ada] Adjust previous change to Expand_Subtype_From_Expr · 347dec12
      Eric Botcazou authored
      An aggregate may have been rewritten before being seen by the procedure.
      
      gcc/ada/
      
      	* exp_util.adb (Expand_Subtype_From_Expr): Be prepared for
      	rewritten aggregates as expressions.
      347dec12
    • Gary Dismukes's avatar
      [Ada] Error on return of object whose full view has undefaulted discriminants · 34d054d1
      Gary Dismukes authored
      The compiler wrongly reports an error about the expected type not
      matching the same-named found type in a return statement for a function
      whose result type has unknown discriminants when the full type is tagged
      and has an undefaulted discriminant, and the return expression is an object
      initialized by a function call. The processing for return statements that
      creates an actual subtype based on the return expression type's underlying
      type when that type has discriminants, and converts the expression to
      the actual subtype, should only be done when the underlying discriminated
      type is mutable (i.e., has defaulted discriminants). Otherwise the
      unchecked conversion to the actual subtype (of the underlying full type)
      can lead to a resolution problem later within Expand_Simple_Function_Return
      in the expansion of tag assignments (because the target type of the
      conversion is a full view and does not match the partial view of
      the function's result type).
      
      gcc/ada/
      
      	* exp_ch6.adb (Expand_Simple_Function_Return) Bypass creation of an actual
      	subtype and unchecked conversion to that subtype when the underlying type
      	of the expression has discriminants without defaults.
      34d054d1
    • Eric Botcazou's avatar
      [Ada] Fix crash on declaration of overaligned array with constraints · 7f64e37c
      Eric Botcazou authored
      The semantic analyzer was setting the Is_Constr_Subt_For_UN_Aliased flag on
      the actual subtype of the object, which is incorrect because the nominal
      subtype is constrained.  This also adjusts a recent related change.
      
      gcc/ada/
      
      	* exp_util.adb (Expand_Subtype_From_Expr): Check for the presence
      	of the Is_Constr_Subt_For_U_Nominal flag instead of the absence
      	of the Is_Constr_Subt_For_UN_Aliased flag on the subtype of the
      	expression of an object declaration before reusing this subtype.
      	* sem_ch3.adb (Analyze_Object_Declaration): Do not incorrectly
      	set the Is_Constr_Subt_For_UN_Aliased flag on the actual subtype
      	of an array with definite nominal subtype.  Remove useless test.
      7f64e37c
    • Eric Botcazou's avatar
      [Ada] Extend No_Dependence restriction to code generation (continued) · 08a897d4
      Eric Botcazou authored
      gcc/ada/
      
      	* doc/gnat_rm/standard_and_implementation_defined_restrictions.rst
      	(No_Dependence): Cite implicit dependences on the runtime library.
      	* gnat_rm.texi, gnat_ugn.texi: Regenerate.
      08a897d4
    • Claire Dross's avatar
      [Ada] Add loop variants to Ada.Strings.Search and Ada.Strings.Maps · 3a4c933f
      Claire Dross authored
      Add loop variants to verify that loops terminate in string handling.
      
      gcc/ada/
      
      	* libgnat/a-strmap.adb: Add variants to simple and while loops.
      	* libgnat/a-strsea.adb: Idem.
      3a4c933f
    • Claire Dross's avatar
      [Ada] Fix proof of runtime unit System.Exp_Mod · e973ea01
      Claire Dross authored
      Regain the proof of System.Exp_Mod after changes in provers and Why3.
      
      gcc/ada/
      
      	* libgnat/s-expmod.adb (Lemma_Add_Mod): Add new lemma to factor
      	out a complex sub-proof.
      	(Exp_Modular): Add assertion to help proof.
      e973ea01
    • Claire Dross's avatar
      [Ada] Fix proof of runtime unit System.Wid_* · bf52ee6a
      Claire Dross authored
      Regain the proof of System.Wid_* after changes in provers and Why3.
      
      gcc/ada/
      
      	* libgnat/s-widthu.adb (Lemma_Euclidean): Lemma to prove the
      	relation between the quotient/remainder of a division.
      bf52ee6a
    • Yannick Moy's avatar
      [Ada] Recover proof of Scaled_Divide in System.Arith_64 · 7c339b3b
      Yannick Moy authored
      Proof of Scaled_Divide was impacted by changes in provers and Why3.
      Recover it partially, leaving some unproved basic inferences to be
      further investigated.
      
      gcc/ada/
      
      	* libgnat/s-aridou.adb: Add or rework ghost code.
      	* libgnat/s-aridou.ads: Add Big_Positive subtype.
      7c339b3b
    • Eric Botcazou's avatar
      [Ada] Update documentation about non-symbolic traceback · 66643a9f
      Eric Botcazou authored
      This documents the limitation of addr2line with Position-Independent Code,
      introduces the replacement tool gnatsymbolize and adjusts obsolete stuff.
      
      gcc/ada/
      
      	* doc/gnat_ugn/gnat_and_program_execution.rst
      	(Non-Symbolic Traceback): Update section.
      	* gnat_rm.texi, gnat_ugn.texi, gnat-style.texi: Regenerate.
      66643a9f
    • Claire Dross's avatar
      [Ada] Fix proof of runtime unit System.Value* and System.Image* · b3ae28dc
      Claire Dross authored
      Refactor specification of the Value* and Image* units and fix proofs.
      
      gcc/ada/
      
      	* libgnat/a-nbnbig.ads: Add Always_Return annotation.
      	* libgnat/s-vaispe.ads: New ghost unit for the specification of
      	System.Value_I. Restore proofs.
      	* libgnat/s-vauspe.ads: New ghost unit for the specification of
      	System.Value_U. Restore proofs.
      	* libgnat/s-valuei.adb: The specification only subprograms are
      	moved to System.Value_I_Spec. Restore proofs.
      	* libgnat/s-valueu.adb: The specification only subprograms are
      	moved to System.Value_U_Spec. Restore proofs.
      	* libgnat/s-valuti.ads
      	(Uns_Params): Generic unit used to bundle together the
      	specification functions of System.Value_U_Spec.
      	(Int_Params): Generic unit used to bundle together the
      	specification functions of System.Value_I_Spec.
      	* libgnat/s-imagef.adb: It is now possible to instantiate the
      	appropriate specification units instead of creating imported ghost
      	subprograms.
      	* libgnat/s-imagei.adb: Update to refactoring of specifications
      	and fix proofs.
      	* libgnat/s-imageu.adb: Likewise.
      	* libgnat/s-imgint.ads: Ghost parameters are grouped together in a
      	package now.
      	* libgnat/s-imglli.ads: Likewise.
      	* libgnat/s-imgllu.ads: Likewise.
      	* libgnat/s-imgllli.ads: Likewise.
      	* libgnat/s-imglllu.ads: Likewise.
      	* libgnat/s-imguns.ads: Likewise.
      	* libgnat/s-vallli.ads: Likewise.
      	* libgnat/s-valllli.ads: Likewise.
      	* libgnat/s-imagei.ads: Likewise.
      	* libgnat/s-imageu.ads: Likewise.
      	* libgnat/s-vaispe.adb: Likewise.
      	* libgnat/s-valint.ads: Likewise.
      	* libgnat/s-valuei.ads: Likewise.
      	* libgnat/s-valueu.ads: Likewise.
      	* libgnat/s-vauspe.adb: Likewise.
      b3ae28dc
    • Martin Liska's avatar
      pdp11: no debugging info · 6713cc70
      Martin Liska authored
      gcc/ChangeLog:
      
      	* config/pdp11/pdp11.h (PREFERRED_DEBUGGING_TYPE): Disable
      	debugging format.
      6713cc70
    • Martin Liska's avatar
      STABS: remove -gstabs and -gxcoff functionality · 7e0db0cd
      Martin Liska authored
      gcc/ChangeLog:
      
      	* Makefile.in: Remove -gstabs option support, DBX-related
      	  macros and DBX debugging info support.
      	* collect2.cc (scan_prog_file): Likewise.
      	* common.opt: Likewise.
      	* config.gcc: Likewise.
      	* config.in: Likewise.
      	* config/aarch64/aarch64-elf.h (DBX_DEBUGGING_INFO): Likewise.
      	* config/alpha/alpha.cc: Likewise.
      	* config/alpha/elf.h (ASM_SPEC): Likewise.
      	* config/arc/arc.h (DBX_DEBUGGING_INFO): Likewise.
      	(DBX_CONTIN_LENGTH): Likewise.
      	* config/arm/aout.h (DBX_DEBUGGING_INFO): Likewise.
      	(DBX_CONTIN_LENGTH): Likewise.
      	* config/arm/netbsd-elf.h (DBX_CONTIN_LENGTH): Likewise.
      	* config/darwin.h (DSYMUTIL_SPEC): Likewise.
      	(ASM_DEBUG_SPEC): Likewise.
      	(DBX_DEBUGGING_INFO): Likewise.
      	(DBX_USE_BINCL): Likewise.
      	(DBX_CONTIN_LENGTH): Likewise.
      	(DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END): Likewise.
      	* config/epiphany/epiphany.h (DBX_DEBUGGING_INFO): Likewise.
      	(DBX_CONTIN_LENGTH): Likewise.
      	* config/i386/bsd.h (DBX_NO_XREFS): Likewise.
      	(DBX_CONTIN_LENGTH): Likewise.
      	* config/i386/gas.h (DBX_NO_XREFS): Likewise.
      	(DBX_CONTIN_LENGTH): Likewise.
      	* config/ia64/ia64.h: Likewise.
      	* config/ia64/sysv4.h (DBX_DEBUGGING_INFO): Likewise.
      	* config/m68k/linux.h (DBX_CONTIN_LENGTH): Likewise.
      	* config/m68k/openbsd.h (DBX_DEBUGGING_INFO): Likewise.
      	(DBX_CONTIN_LENGTH): Likewise.
      	(DBX_CONTIN_CHAR): Likewise.
      	* config/mips/mips.cc (mips_output_filename): Likewise.
      	(mips_option_override): Likewise.
      	* config/mips/mips.h (SUBTARGET_ASM_DEBUGGING_SPEC): Likewise.
      	(DBX_DEBUGGING_INFO): Likewise.
      	(DBX_CONTIN_LENGTH): Likewise.
      	(DBX_REGISTER_NUMBER): Likewise.
      	(GP_DBX_FIRST): Likewise.
      	(FP_DBX_FIRST): Likewise.
      	(MD_DBX_FIRST): Likewise.
      	* config/nvptx/nvptx.cc: Likewise.
      	* config/openbsd.h (DBX_NO_XREFS): Likewise.
      	* config/pa/pa-64.h (DBX_DEBUGGING_INFO): Likewise.
      	* config/pa/pa.h (ASSEMBLER_DIALECT): Likewise.
      	(DBX_CONTIN_LENGTH): Likewise.
      	* config/pa/som.h (PREFERRED_DEBUGGING_TYPE): Likewise.
      	(DBX_USE_BINCL): Likewise.
      	(DBX_LINES_FUNCTION_RELATIVE): Likewise.
      	(DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END): Likewise.
      	* config/pdp11/pdp11.cc: Likewise.
      	* config/pdp11/pdp11.h (DBX_DEBUGGING_INFO): Likewise.
      	(PREFERRED_DEBUGGING_TYPE): Likewise.
      	(DBX_CONTIN_LENGTH): Likewise.
      	* config/rs6000/rs6000-builtin.cc: Likewise.
      	* config/rs6000/rs6000-call.cc: Likewise.
      	* config/rs6000/rs6000-logue.cc (defined): Likewise.
      	* config/rs6000/rs6000.cc (rs6000_option_override_internal): Likewise.
      	(HAVE_XCOFF_DWARF_EXTRAS): Likewise.
      	(rs6000_xcoff_declare_function_name): Likewise.
      	* config/rs6000/sysv4.h (DBX_DEBUGGING_INFO): Likewise.
      	(DBX_FUNCTION_FIRST): Likewise.
      	* config/rs6000/xcoff.h (XCOFF_DEBUGGING_INFO): Likewise.
      	* config/rx/rx.h (DBX_DEBUGGING_INFO): Likewise.
      	* config/sh/elf.h (DBX_LINES_FUNCTION_RELATIVE): Likewise.
      	(DBX_OUTPUT_NULL_N_SO_AT_MAIN_SOURCE_FILE_END): Likewise.
      	* config/sol2.h (NO_DBX_BNSYM_ENSYM): Likewise.
      	* config/sparc/freebsd.h (DBX_CONTIN_CHAR): Likewise.
      	* config/sparc/netbsd-elf.h (DBX_CONTIN_CHAR): Likewise.
      	* config/sparc/sparc.h (DBX_CONTIN_LENGTH): Likewise.
      	* config/vax/vax.cc (vax_file_start): Likewise.
      	* config/vax/vax.h (DBX_DEBUGGING_INFO): Likewise.
      	(DBX_CONTIN_LENGTH): Likewise.
      	(DBX_CONTIN_CHAR): Likewise.
      	(DBX_NO_XREFS): Likewise.
      	(DBX_STATIC_STAB_DATA_SECTION): Likewise.
      	* config/vx-common.h (DBX_DEBUGGING_INFO): Likewise.
      	(XCOFF_DEBUGGING_INFO): Likewise.
      	* configure: Regenerate. Likewise.
      	* configure.ac: Likewise.
      	* debug.h: Likewise.
      	* doc/install.texi: Likewise.
      	* doc/invoke.texi: Likewise.
      	* doc/passes.texi: Likewise.
      	* doc/tm.texi: Likewise.
      	* doc/tm.texi.in: Likewise.
      	* dwarf2asm.cc (XCOFF_DEBUGGING_INFO): Likewise.
      	(dw2_asm_output_nstring): Likewise.
      	(USE_LINKONCE_INDIRECT): Likewise.
      	* dwarf2out.cc (XCOFF_DEBUGGING_INFO): Likewise.
      	(HAVE_XCOFF_DWARF_EXTRAS): Likewise.
      	(output_fde): Likewise.
      	(output_call_frame_info): Likewise.
      	(have_macinfo): Likewise.
      	(add_AT_loc_list): Likewise.
      	(add_AT_view_list): Likewise.
      	(output_compilation_unit_header): Likewise.
      	(output_pubnames): Likewise.
      	(output_aranges): Likewise.
      	(output_line_info): Likewise.
      	(output_macinfo): Likewise.
      	(dwarf2out_finish): Likewise.
      	(dwarf2out_early_finish): Likewise.
      	* final.cc (final_scan_insn_1): Likewise.
      	(rest_of_handle_final): Likewise.
      	* flag-types.h (enum debug_info_type): Likewise.
      	(DBX_DEBUG): Likewise.
      	(XCOFF_DEBUG): Likewise.
      	* function.cc (defined): Likewise.
      	* gcc.cc (defined): Likewise.
      	(ASM_DEBUG_SPEC): Likewise.
      	(ASM_DEBUG_OPTION_SPEC): Likewise.
      	* opts.cc (common_handle_option): Likewise.
      	(set_debug_level): Likewise.
      	* system.h (fancy_abort): Likewise.
      	* target-def.h (TARGET_ASM_CONSTRUCTOR): Likewise.
      	(TARGET_ASM_DESTRUCTOR): Likewise.
      	* toplev.cc (defined): Likewise.
      	* varasm.cc: Likewise.
      	* config/dbxcoff.h: Removed.
      	* config/dbxelf.h: Removed.
      	* dbxout.cc: Removed.
      	* dbxout.h: Removed.
      	* gstab.h: Removed.
      	* stab.def: Removed.
      	* xcoffout.cc: Removed.
      	* xcoffout.h: Removed.
      
      gcc/go/ChangeLog:
      
      	* go-lang.cc (go_langhook_pushdecl): Remove -gstabs option support, DBX-related
      	  macros and DBX debugging info support.
      	* gospec.cc (lang_specific_driver): Likewise.
      
      gcc/testsuite/ChangeLog:
      
      	* lib/gcc-dg.exp: Remove -gstabs option support, DBX-related
      	  macros and DBX debugging info support.
      	* lib/gfortran-dg.exp: Likewise.
      	* lib/target-supports.exp: Likewise.
      	* g++.dg/cpp0x/alias-decl-debug-0.C: Removed.
      	* g++.dg/other/PR23205.C: Removed.
      	* g++.dg/other/pr23205-2.C: Removed.
      	* gcc.dg/20040813-1.c: Removed.
      	* gcc.dg/darwin-20040809-2.c: Removed.
      	* gcc.dg/debug/pr35154.c: Removed.
      	* gcc.dg/pr69471-2.c: Removed.
      	* gcc.target/powerpc/stabs-attrib-vect-darwin.c: Removed.
      	* gcc.target/s390/20041216-1.c: Removed.
      	* gfortran.dg/debug/pr35154-stabs.f: Removed.
      	* objc.dg/stabs-1.m: Removed.
      7e0db0cd
    • Simon Rainer's avatar
      ipa: Fix throw in multi-versioned functions [PR106627] · 0b0a3cdb
      Simon Rainer authored
      Any multi-versioned function was implicitly declared as noexcept, which
      leads to an abort if an exception is thrown inside the function.
      The reason for this is that the function declaration is replaced by a
      newly created dispatcher declaration, which has TREE_NOTHROW always set
      to 1. Instead we need to set TREE_NOTHROW to the value of the original
      declaration.
      
      	PR ipa/106627
      
      gcc/ChangeLog:
      
      	* config/i386/i386-features.cc (ix86_get_function_versions_dispatcher):
      	Set TREE_NOTHROW correctly for dispatcher declaration.
      	* config/rs6000/rs6000.cc (rs6000_get_function_versions_dispatcher):
      	Likewise.
      
      gcc/testsuite/ChangeLog:
      
      	* g++.target/i386/pr106627.C: New test.
      0b0a3cdb
    • GCC Administrator's avatar
      Daily bump. · bb0a1556
      GCC Administrator authored
      bb0a1556
    • H.J. Lu's avatar
      i386: Replace long with long long for 64-bit integer · 6761d362
      H.J. Lu authored
      Replace long with long long for 64-bit integer since long may be 32
      bits.
      
      	PR target/106707
      	* gcc.target/i386/pr106707.c (foo): Replace long with long long.
      6761d362
    • Tamar Christina's avatar
      AArch64: Fix bootstrap failure due to dump_printf_loc format attribute uses [PR106782] · b98c5262
      Tamar Christina authored
      This fixes the bootstrap failure on AArch64 following -Werror=format by
      correcting the print format modifiers in the backend.
      
      gcc/ChangeLog:
      
      	PR other/106782
      	* config/aarch64/aarch64.cc
      	(aarch64_vector_costs::prefer_unrolled_loop): Replace %u with
      	HOST_WIDE_INT_PRINT_UNSIGNED.
      b98c5262
    • Marek Polacek's avatar
      c++: Remove unused declaration · 8f8b9de6
      Marek Polacek authored
      This declaration was added in r260905 but the function was never
      defined.
      
      gcc/cp/ChangeLog:
      
      	* cp-tree.h (maybe_strip_ref_conversion): Remove.
      8f8b9de6
    • Jonathan Wakely's avatar
      libstdc++: Add 'typename' for Clang compatibility · 42e48908
      Jonathan Wakely authored
      Clang doesn't yet implement the C++20 change that makes 'typename'
      optional here.
      
      libstdc++-v3/ChangeLog:
      
      	* include/std/ranges (adjacent_transform_view::_Iterator): Add
      	typename keyword before dependent qualified-id.
      42e48908
    • Jonathan Wakely's avatar
      libstdc++: Remove __is_referenceable helper · 56bb34e3
      Jonathan Wakely authored
      We only use the __is_referenceable helper in three places now:
      add_pointer, add_lvalue_reference, and add_rvalue_reference. But lots of
      other traits depend on add_[lr]value_reference, and decay depends on
      add_pointer, so removing the instantiation of __is_referenceable helps
      compile all those other traits slightly faster.
      
      We can just use void_t<T&> to check for a referenceable type in the
      add_[lr]value_reference traits.
      
      Then we can specialize add_pointer for reference types, so that we don't
      need to use remove_reference, and then use void_t<T*> for all
      non-reference types to detect when we can form a pointer to the type.
      
      libstdc++-v3/ChangeLog:
      
      	* include/std/type_traits (__is_referenceable): Remove.
      	(__add_lvalue_reference_helper, __add_rvalue_reference_helper):
      	Use __void_t instead of __is_referenceable.
      	(__add_pointer_helper): Likewise.
      	(add_pointer): Add partial specializations for reference types.
      56bb34e3
    • Jonathan Wakely's avatar
      libstdc++: Optimize is_constructible traits · 9bcedbbf
      Jonathan Wakely authored
      We can replace some class template helpers with alias templates, which
      are cheaper to instantiate.
      
      For example, replace the __is_copy_constructible_impl class template
      with an alias template that uses just evaluates the __is_constructible
      built-in, using add_lvalue_reference<const T> to get the argument type
      in a way that works for non-referenceable types. For a given
      specialization of is_copy_constructible this results in the same number
      of class templates being instantiated (for the common case of non-void,
      non-function types), but the add_lvalue_reference instantiations are not
      specific to the is_copy_constructible specialization and so can be
      reused by other traits. Previously __is_copy_constructible_impl was a
      distinct class template and its specializations were never used for
      anything except is_copy_constructible.
      
      With the new definitions of these traits that don't depend on helper
      classes, it becomes more practical to optimize the
      is_xxx_constructible_v variable templates to avoid instantiations.
      Previously doing so would have meant two entirely separate
      implementation strategies for these traits.
      
      libstdc++-v3/ChangeLog:
      
      	* include/std/type_traits (__is_constructible_impl): Replace
      	class template with alias template.
      	(is_default_constructible, is_nothrow_constructible)
      	(is_nothrow_constructible): Simplify base-specifier.
      	(__is_copy_constructible_impl, __is_move_constructible_impl)
      	(__is_nothrow_copy_constructible_impl)
      	(__is_nothrow_move_constructible_impl): Remove class templates.
      	(is_copy_constructible, is_move_constructible)
      	(is_nothrow_constructible, is_nothrow_default_constructible)
      	(is_nothrow_copy_constructible, is_nothrow_move_constructible):
      	Adjust base-specifiers to use __is_constructible_impl.
      	(__is_copy_assignable_impl, __is_move_assignable_impl)
      	(__is_nt_copy_assignable_impl, __is_nt_move_assignable_impl):
      	Remove class templates.
      	(__is_assignable_impl): New alias template.
      	(is_assignable, is_copy_assignable, is_move_assignable):
      	Adjust base-specifiers to use new alias template.
      	(is_nothrow_copy_assignable, is_nothrow_move_assignable):
      	Adjust base-specifiers to use existing alias template.
      	(__is_trivially_constructible_impl): New alias template.
      	(is_trivially_constructible, is_trivially_default_constructible)
      	(is_trivially_copy_constructible)
      	(is_trivially_move_constructible): Adjust base-specifiers to use
      	new alias template.
      	(__is_trivially_assignable_impl): New alias template.
      	(is_trivially_assignable, is_trivially_copy_assignable)
      	(is_trivially_move_assignable): Adjust base-specifier to use
      	new alias template.
      	(__add_lval_ref_t, __add_rval_ref_t): New alias templates.
      	(add_lvalue_reference, add_rvalue_reference): Use new alias
      	templates.
      9bcedbbf
    • Jonathan Wakely's avatar
      libstdc++: Optimize std::decay · 775fe01b
      Jonathan Wakely authored
      Define partial specializations of std::decay and its __decay_selector
      helper so that remove_reference, is_array and is_function are not
      instantiated for every type, and remove_extent is not instantiated for
      arrays.
      
      libstdc++-v3/ChangeLog:
      
      	* include/std/type_traits (__decay_selector): Add partial
      	specializations for array types. Only check for function types
      	when not dealing with an array.
      	(decay): Add partial specializations for reference types.
      775fe01b
    • Jonathan Wakely's avatar
      libstdc++: Add specializations for some variable templates · 33005a4b
      Jonathan Wakely authored
      This avoids having to instantiate a class template when we can detect
      the true cases easily with a partial specialization.
      
      libstdc++-v3/ChangeLog:
      
      	* include/std/type_traits (is_lvalue_reference_v)
      	(is_rvalue_reference_v, is_reference_v, is_const_v)
      	(is_volatile_v): Define using partial specializations instead
      	of instantiating class templates.
      33005a4b
    • Jonathan Wakely's avatar
      libstdc++: Use built-ins for some variable templates · cd20d948
      Jonathan Wakely authored
      This avoids having to instantiate a class template that just uses the
      same built-in anyway.
      
      None of the corresponding class templates have any type-completeness
      static assertions, so we're not losing any diagnostics by using the
      built-ins directly.
      
      libstdc++-v3/ChangeLog:
      
      	* include/std/type_traits (is_enum_v, is_class_v, is_union_v)
      	(is_empty_v, is_polymoprhic_v, is_abstract_v, is_final_v)
      	(is_base_of_v, is_aggregate_v): Use built-in directly instead of
      	instantiating class template.
      cd20d948
    • Joseph Myers's avatar
      c: C2x removal of unprototyped functions · 0a4b219d
      Joseph Myers authored
      C2x has completely removed unprototyped functions, so that () now
      means the same as (void) in both function declarations and
      definitions, where previously that change had been made for
      definitions only.  Implement this accordingly.
      
      This is a change where GNU/Linux distribution builders might wish to
      try builds with a -std=gnu2x default to start early on getting old
      code fixed that still has () declarations for functions taking
      arguments, in advance of GCC moving to -std=gnu2x as default maybe in
      GCC 14 or 15; I don't know how much such code is likely to be in
      current use.
      
      Bootstrapped with no regressions for x86_64-pc-linux-gnu.
      
      gcc/c/
      	* c-decl.cc (grokparms): Handle () in a function declaration the
      	same as (void) for C2X.
      
      gcc/testsuite/
      	* gcc.dg/c11-unproto-3.c, gcc.dg/c2x-unproto-3.c,
      	gcc.dg/c2x-unproto-4.c: New tests.
      	* gcc.dg/c2x-old-style-definition-6.c, gcc.dg/c2x-unproto-1.c,
      	gcc.dg/c2x-unproto-2.c: Update for removal of unprototyped
      	functions.
      0a4b219d
    • Richard Sandiford's avatar
      vect: Try to remove single-vector permutes from SLP graph · d2694766
      Richard Sandiford authored
      This patch extends the SLP layout optimisation pass so that it
      tries to remove layout changes that are brought about by permutes
      of existing vectors.  This fixes the bb-slp-pr54400.c regression on
      x86_64 and also means that we can remove the permutes in cases like:
      
      typedef float v4sf __attribute__((vector_size(sizeof(float)*4)));
      
      float __attribute__((noipa))
      f(v4sf v0, v4sf v1)
      {
        return v0[0]*v1[0]+v0[1]*v1[1]+v0[2]*v1[2]+v0[3]*v1[3];
      }
      
      The new test is a simple adaption of bb-slp-pr54400.c, with the
      same style of markup.
      
      gcc/
      	* tree-vect-slp.cc (vect_build_slp_tree_2): When building a
      	VEC_PERM_EXPR of an existing vector, set the SLP_TREE_LANES
      	to the number of vector elements, if that's a known constant.
      	(vect_optimize_slp_pass::is_compatible_layout): Remove associated
      	comment about zero SLP_TREE_LANES.
      	(vect_optimize_slp_pass::start_choosing_layouts): Iterate over
      	all partition members when looking for potential layouts.
      	Handle existing permutes of fixed-length vectors.
      
      gcc/testsuite/
      	* gcc.dg/vect/bb-slp-pr54400.c: Extend to aarch64.
      	* gcc.dg/vect/bb-slp-layout-18.c: New test.
      d2694766
    • Uros Bizjak's avatar
      i386: Fix conversion of move to/from AX_REG into xchg [PR106707] · 5205f5b5
      Uros Bizjak authored
      The conversion of a move pattern where both operands are AX_REG
      should be prevented.
      
      2022-09-01  Uroš Bizjak  <ubizjak@gmail.com>
      
      gcc/ChangeLog:
      
      	PR target/106707
      	* config/i386/i386.md (moves to/from AX_REG into xchg peephole2):
      	Do not convert a move pattern where both operands are AX_REG.
      
      gcc/testsuite/ChangeLog:
      
      	PR target/106707
      	* gcc.target/i386/pr106707.c: New test.
      5205f5b5
    • Aldy Hernandez's avatar
      Convert ranger uses of real_inf to dconst[n]inf. · bb17c503
      Aldy Hernandez authored
      gcc/ChangeLog:
      
      	* range-op-float.cc (build_le): Convert to dconst*inf.
      	(build_ge): Same.
      	* value-range.cc (frange::set_signbit): Same.
      	(frange::normalize_kind): Same.
      	(range_tests_floats): Same.
      	* value-range.h (vrp_val_max): Same.
      	(vrp_val_min): Same.
      	(frange::set_varying): Same.
      bb17c503
    • Aldy Hernandez's avatar
      Add global REAL_VALUE_TYPE infinities to real.*. · 5924b6b2
      Aldy Hernandez authored
      We're starting to abuse the infinity endpoints in the frange code and
      the associated range operators.  Building infinities are rather cheap,
      and we could even inline them, but I think it's best to just not
      recalculate them all the time.
      
      I see about 20 uses of real_inf in the source code, not including the
      backends.  And I'm about to add more :).
      
      gcc/ChangeLog:
      
      	* emit-rtl.cc (init_emit_once): Initialize dconstinf and
      	dconstninf.
      	* real.h: Add dconstinf and dconstninf.
      5924b6b2
  2. Sep 01, 2022
    • Jonathan Wakely's avatar
      libstdc++: Remove FIXME for ICE with remove_cvref_t in requires-expression · 37ff51a9
      Jonathan Wakely authored
      PR c++/99968 is fixed since GCC 12.1 so we can remove the workaround.
      
      libstdc++-v3/ChangeLog:
      
      	* include/std/type_traits (is_scoped_enum): Remove workaround.
      37ff51a9
    • Patrick Palka's avatar
      libstdc++: Implement ranges::adjacent_transform_view from P2321R2 · 0cb8d961
      Patrick Palka authored
      libstdc++-v3/ChangeLog:
      
      	* include/std/ranges (__detail::__unarize): Define.
      	(adjacent_view::_Iterator): Befriend adjacent_transform_view.
      	(adjacent_transform_view): Define.
      	(adjacent_transform_view::_Iterator): Define.
      	(adjacent_transform_view::_Sentinel): Define.
      	(views::__detail::__can_adjacent_transform_view): Define.
      	(views::_AdjacentTransform): Define.
      	(views::adjacent_transform): Define.
      	(views::pairwise_transform): Define.
      	* testsuite/std/ranges/adaptors/adjacent_transform/1.cc: New test.
      0cb8d961
    • Richard Biener's avatar
      Remove cycle checking from compute_control_dep_chain · 47e15513
      Richard Biener authored
      Now that we have DFS_BACK_EDGE marks we can simply avoid walking
      those instead of repeatedly looking for a cycle on the current chain.
      
      	* gimple-predicate-analysis.cc (compute_control_dep_chain):
      	Remove cycle detection, instead avoid walking backedges.
      47e15513
    • Richard Biener's avatar
      Some predicate analysis TLC · e75398ac
      Richard Biener authored
      The following hides some internal details of compute_control_dep_chain.
      
      	* gimple-predicate-analysis.cc (compute_control_dep_chain):
      	New wrapping overload.
      	(uninit_analysis::init_use_preds): Simplify.
      	(uninit_analysis::init_from_phi_def): Likewise.
      e75398ac
    • Jason Merrill's avatar
      c++: set TYPE_STRING_FLAG for char8_t · c5699dd8
      Jason Merrill authored
      While looking at the DWARF handling of char8_t I wondered why we weren't
      setting TREE_STRING_FLAG on it.  I hoped that setting that flag would be an
      easy fix for PR102958, but it doesn't seem to be sufficicent.  But it still
      seems correct.
      
      I also tried setting the flag on char16_t and char32_t, but that broke
      because braced_list_to_string assumes char-sized elements.  Since we don't
      set the flag on wchar_t, I abandoned that idea.
      
      gcc/c-family/ChangeLog:
      
      	* c-common.cc (c_common_nodes_and_builtins): Set TREE_STRING_FLAG on
      	char8_t.
      	(braced_list_to_string): Check for char-sized elements.
      c5699dd8
    • Aldy Hernandez's avatar
      Implement ranger folder for __builtin_signbit. · 0550e306
      Aldy Hernandez authored
      Now that we keep track of the signbit, we can use it to fold __builtin_signbit.
      
      I am assuming I don't have try too hard to get the actual signbit
      number and 1 will do.  Especially, since we're inconsistent in trunk whether
      we fold the builtin or whether we calculate it at runtime.
      
      abulafia:~$ cat a.c
      float nzero = -0.0;
      
      main(){
          printf("0x%x\n", __builtin_signbit(-0.0));
          printf("0x%x\n", __builtin_signbit(nzero));
      }
      abulafia:~$ gcc a.c -w && ./a.out
      0x1
      0x80000000
      
      It is amazing that we've been failing to fold something as simple as
      this:
      
      	if (x > 5.0)
      	  num = __builtin_signbit (x);
      
      It does the right thing now :-P.
      
      gcc/ChangeLog:
      
      	* gimple-range-fold.cc
      	(fold_using_range::range_of_builtin_int_call): Add case for
      	CFN_BUILT_IN_SIGNBIT.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.dg/tree-ssa/vrp-float-signbit-1.c: New test.
      0550e306
    • Aldy Hernandez's avatar
      Add signbit property to frange to better model signed zeros. · e9b0dd2a
      Aldy Hernandez authored
      As discussed here:
      
      	https://gcc.gnu.org/pipermail/gcc-patches/2022-August/600656.html
      
      This adds an frange property to keep track of the sign bit.  We keep
      it updated at all times, but we don't use it make any decisions when
      !HONOR_SIGNED_ZEROS.
      
      With this property we can now query the range for the appropriate sign
      with frange::get_signbit ().  Possible values are yes, no, and unknown.
      
      gcc/ChangeLog:
      
      	* range-op-float.cc (foperator_equal::op1_range): Do not copy sign
      	bit.
      	(foperator_not_equal::op1_range): Same.
      	* value-query.cc (range_query::get_tree_range): Set sign bit.
      	* value-range-pretty-print.cc (vrange_printer::visit): Dump sign bit.
      	* value-range.cc (frange::set_signbit): New.
      	(frange::set): Adjust for sign bit.
      	(frange::normalize_kind): Same.
      	(frange::union_): Remove useless comment.
      	(frange::intersect): Same.
      	(frange::contains_p): Adjust for sign bit.
      	(frange::singleton_p): Same.
      	(frange::verify_range): Same.
      	(range_tests_signbit): New tests.
      	(range_tests_floats): Call range_tests_signbit.
      	* value-range.h (class frange_props): Add signbit
      	(class frange): Same.
      e9b0dd2a
    • Jonathan Wakely's avatar
      libstdc++: Optimize array traits · 0e1b1222
      Jonathan Wakely authored
      Improve compile times by avoiding unnecessary class template
      instantiations.
      
      __is_array_known_bounds and __is_array_unknown_bounds can be defined
      without instantiating extent, by providing partial specializations for
      the true cases.
      
      std::extent can avoid recursing down through a multidimensional array,
      so it stops after providing the result. Previously extent<T[n][m], 0>
      would instantiate extent<T[n], -1u> and extent<T, -2u> as well.
      
      std::is_array_v can use partial specializations to avoid instantiating
      std::is_array, and similarly for std::rank_v and std::extent_v.
      
      std::is_bounded_array_v and std::is_unbounded_array_v can also use
      partial specializations, and then the class templates can be defined in
      terms of the variable templates. This makes sense for these traits,
      because they are new in C++20 and so the variable templates are always
      available, which isn't true in general for C++11 and C++14 traits.
      
      libstdc++-v3/ChangeLog:
      
      	* include/std/type_traits (__is_array_known_bounds): Add partial
      	specialization instead of using std::extent.
      	(__is_array_unknown_bounds): Likewise.
      	(extent): Add partial specializations to stop recursion after
      	the result is found.
      	(is_array_v): Add partial specializations instead of
      	instantiating the class template.
      	(rank_v, extent_v): Likewise.
      	(is_bounded_array_v, is_unbounded_array_v): Likewise.
      	(is_bounded_array, is_unbounded_array): Define in terms of the
      	variable templates.
      0e1b1222
    • Jakub Jelinek's avatar
      Fix up dump_printf_loc format attribute and adjust uses [PR106782] · 953e08fd
      Jakub Jelinek authored
      As discussed on IRC, the r13-2299-g68c61c2d bug only got missed
      because dump_printf_loc had incorrect format attribute and therefore
      almost no -Wformat=* checking was performed on it.
      3, 0 are suitable for function with (whatever, whatever, const char *, va_list)
      arguments, not for (whatever, whatever, const char *, ...), that one should
      use 3, 4.
      
      The following patch fixes that and adjusts all spots to fix warnings.
      In many cases it is just through an ugly cast (for %G casts to gimple *
      from gassign */gphi * and the like and for %p casts to void * from slp_node
      etc.).
      There are 3 spots where the mismatch was worse though, two using %u or %d
      for unsigned HOST_WIDE_INT argument and one %T for enum argument (promoted
      to int).
      
      2022-09-01  Jakub Jelinek  <jakub@redhat.com>
      
      	PR other/106782
      	* dumpfile.h (dump_printf_loc): Use ATTRIBUTE_GCC_DUMP_PRINTF (3, 4)
      	instead of ATTRIBUTE_GCC_DUMP_PRINTF (3, 0).
      	* tree-parloops.cc (parloops_is_slp_reduction): Cast pointers to
      	derived types of gimple to gimple * to avoid -Wformat warnings.
      	* tree-vect-loop-manip.cc (vect_set_loop_condition,
      	vect_update_ivs_after_vectorizer): Likewise.
      	* tree-vect-stmts.cc (vectorizable_load): Likewise.
      	* tree-vect-patterns.cc (vect_split_statement,
      	vect_recog_mulhs_pattern, vect_recog_average_pattern,
      	vect_determine_precisions_from_range,
      	vect_determine_precisions_from_users): Likewise.
      	* gimple-loop-versioning.cc
      	(loop_versioning::analyze_term_using_scevs): Likewise.
      	* tree-vect-slp.cc (vect_build_slp_tree_1): Likewise.
      	(vect_build_slp_tree): Cast slp_tree to void * to avoid
      	-Wformat warnings.
      	(optimize_load_redistribution_1, vect_match_slp_patterns,
      	vect_build_slp_instance, vect_optimize_slp_pass::materialize,
      	vect_optimize_slp_pass::dump, vect_slp_convert_to_external,
      	vect_slp_analyze_node_operations, vect_bb_partition_graph): Likewise.
      	(vect_print_slp_tree): Likewise.  Also use
      	HOST_WIDE_INT_PRINT_UNSIGNED instead of %u.
      	* tree-vect-loop.cc (vect_determine_vectorization_factor,
      	vect_analyze_scalar_cycles_1, vect_analyze_loop_operations,
      	vectorizable_induction, vect_transform_loop): Cast pointers to derived
      	types of gimple to gimple * to avoid -Wformat warnings.
      	(vect_analyze_loop_2): Cast slp_tree to void * to avoid
      	-Wformat warnings.
      	(vect_estimate_min_profitable_iters): Use HOST_WIDE_INT_PRINT_UNSIGNED
      	instead of %d.
      	* tree-vect-slp-patterns.cc (vect_pattern_validate_optab): Use %G
      	instead of %T and STMT_VINFO_STMT (SLP_TREE_REPRESENTATIVE (node))
      	instead of SLP_TREE_DEF_TYPE (node).
      953e08fd
    • Jakub Jelinek's avatar
      libcpp: Add -Winvalid-utf8 warning [PR106655] · 0b8c57ed
      Jakub Jelinek authored
      The following patch introduces a new warning - -Winvalid-utf8 similarly
      to what clang now has - to diagnose invalid UTF-8 byte sequences in
      comments, but not just in those, but also in string/character literals
      and outside of them.
      
      The warning is on by default when explicit -finput-charset=UTF-8 is
      used and C++23 compilation is requested and if -{,W}pedantic or
      -pedantic-errors it is actually a pedwarn.
      
      The reason it is on by default only for -finput-charset=UTF-8 is
      that the sources often are UTF-8, but sometimes could be some ASCII
      compatible single byte encoding where non-ASCII characters only
      appear in comments.  So having the warning off by default
      is IMO desirable.  The C++23 pedantic mode for when the source code
      is UTF-8 is -std=c++23 -pedantic-errors -finput-charset=UTF-8.
      
      2022-09-01  Jakub Jelinek  <jakub@redhat.com>
      
      	PR c++/106655
      libcpp/
      	* include/cpplib.h (struct cpp_options): Implement C++23
      	P2295R6 - Support for UTF-8 as a portable source ...
      0b8c57ed