gcc.git
4 years agoRISC-V: Fix compilation failed for frflags builtin in C++ mode
Kito Cheng [Fri, 19 Jun 2020 06:07:39 +0000 (14:07 +0800)]
RISC-V: Fix compilation failed for frflags builtin in C++ mode

  - g++ will complain too few arguments for frflags builtin like bellow
    message:

    error: too few arguments to function 'unsigned int __builtin_riscv_frflags(void)'

  - However it's no arguments needed, it because we declare the function
    type with VOID arguments, that seems like require a VOID argument
    in the c++ front-end when GCC tried to resolve the function.

gcc/ChangeLog

* config/riscv/riscv-builtins.c (RISCV_FTYPE_NAME0): New.
(RISCV_FTYPE_ATYPES0): New.
(riscv_builtins): Using RISCV_USI_FTYPE for frflags.
* config/riscv/riscv-ftypes.def: Remove VOID argument.

gcc/testsuite/ChangeLog

* g++.target/riscv/frflags.C: New.

4 years agoDaily bump.
GCC Administrator [Mon, 22 Jun 2020 00:16:23 +0000 (00:16 +0000)]
Daily bump.

4 years agoaix: Add GCC64 configuration and FAT target libraries.
David Edelsohn [Fri, 15 May 2020 21:46:08 +0000 (17:46 -0400)]
aix: Add GCC64 configuration and FAT target libraries.

This patch adds the ability to configure GCC on AIX to build as a
64 bit application and to build target libraries "FAT" libraries in both
32 bit and 64 bit mode.

The patch adds makefile fragment hooks to target libraries that allows
them to include target-specific rules.  The target specific rules for
AIX place both 32 bit and 64 bit objects and shared objects
in archives at the top-level, not multilib subdirectories.  The
multilibs are built in subdirectories, but must be combined during the
last parts of the target library build process.  Because of the way
that GCC bootstrap works, the libraries must be combined during the
multiple stages of GCC bootstrap, not solely when installed in the
final destination, so the libraries are correct at the end of
each target library build stage, not solely an install recipe.

gcc/ChangeLog

2020-06-21  David Edelsohn  <dje.gcc@gmail.com>

* config.gcc: Use t-aix64, biarch64 and default64 for cpu_is_64bit.
* config/rs6000/aix72.h (ASM_SPEC): Remove aix64 option.
(ASM_SPEC32): New.
(ASM_SPEC64): New.
(ASM_CPU_SPEC): Remove vsx and altivec options.
(CPP_SPEC_COMMON): Rename from CPP_SPEC.
(CPP_SPEC32): New.
(CPP_SPEC64): New.
(CPLUSPLUS_CPP_SPEC): Rename to CPLUSPLUS_CPP_SPEC_COMMON..
(TARGET_DEFAULT): Only define if not BIARCH.
(LIB_SPEC_COMMON): Rename from LIB_SPEC.
(LIB_SPEC32): New.
(LIB_SPEC64): New.
(LINK_SPEC_COMMON): Rename from LINK_SPEC.
(LINK_SPEC32): New.
(LINK_SPEC64): New.
(STARTFILE_SPEC): Add 64 bit version of crtcxa and crtdbase.
(ASM_SPEC): Define 32 and 64 bit alternatives using DEFAULT_ARCH64_P.
(CPP_SPEC): Same.
(CPLUSPLUS_CPP_SPEC): Same.
(LIB_SPEC): Same.
(LINK_SPEC): Same.
(SUBTARGET_EXTRA_SPECS): Add new 32/64 specs.
* config/rs6000/defaultaix64.h: New file.
* config/rs6000/t-aix64: New file.

libgcc/ChangeLog

2020-06-21  David Edelsohn  <dje.gcc@gmail.com>

* config.host (extra_parts): Add crtcxa_64 and crtdbase_64.
* config/rs6000/t-aix-cxa: Explicitly compile 32 bit with -maix32
and 64 bit with -maix64.
* config/rs6000/t-slibgcc-aix: Remove extra @multilib_dir@ level.
Build and install AIX-style FAT libraries.

libgomp/ChangeLog

2020-06-21  David Edelsohn  <dje.gcc@gmail.com>

* Makefile.am (tmake_file): Build and install AIX-style FAT libraries.
* Makefile.in: Regenerate
* configure.ac (tmake_file): Substitute.
* configure: Regenerate.
* configure.tgt (powerpc-ibm-aix*): Define tmake_file.
* config/t-aix: New file.

libstdc++-v3/ChangeLog

2020-06-21  David Edelsohn  <dje.gcc@gmail.com>

* Makefile.am (tmake_file): Build and install AIX-style FAT libraries.
* Makefile.in: Regenerate.
* configure.ac (tmake_file): Substitute.
* configure: Regenerate.
* configure.host (aix*): Define tmake_file.
* config/os/aix/t-aix: New file.

libatomic/ChangeLog

2020-06-21  David Edelsohn  <dje.gcc@gmail.com>

* Makefile.am (tmake_file): Build and install AIX-style FAT libraries.
* Makefile.in: Regenerate.
* configure.ac (tmake_file): Substitute.
* configure: Regenerate.
* configure.tgt (powerpc-ibm-aix*): Define tmake_file.
* config/t-aix: New file.

libgfortran/ChangeLog

2020-06-21  David Edelsohn  <dje.gcc@gmail.com>

* Makefile.am (tmake_file): Build and install AIX-style FAT libraries.
* Makefile.in: Regenerate.
* configure.ac (tmake_file): Substitute.
* configure: Regenerate.
* configure.host: Add system configury stanza. Define tmake_file.
* config/t-aix: New file.

4 years agors6000: Add MMA built-in function definitions and test cases.
Peter Bergner [Sun, 21 Jun 2020 04:23:02 +0000 (23:23 -0500)]
rs6000: Add MMA built-in function definitions and test cases.

Add the Matrix-Multiply Assist (MMA) built-ins.  The MMA accumulators are
INOUT operands for most MMA instructions, but they are also very expensive
to move around.  For this reason, we have implemented a built-in API where
the accumulators are passed using pass-by-reference/pointers, so the user
won't use one accumulator as input and another as output, which wouldentail
a lot of copies.  However, using pointers gives us poor code generation
when we expand the built-ins at normal expand time.  We therefore expand
the MMA built-ins early into gimple, converting the pass-by-reference calls
to an internal built-in that uses pass-by-value calling convention, where
we can enforce the input and output accumulators are the same.  This gives
us much better code generation.

2020-06-20  Peter Bergner  <bergner@linux.ibm.com>

gcc/
* config/rs6000/predicates.md (mma_assemble_input_operand): New.
* config/rs6000/rs6000-builtin.def (BU_MMA_1, BU_MMA_V2, BU_MMA_3,
BU_MMA_5, BU_MMA_6, BU_VSX_1): Add support macros for defining MMA
built-in functions.
(ASSEMBLE_ACC, ASSEMBLE_PAIR, DISASSEMBLE_ACC, DISASSEMBLE_PAIR,
PMXVBF16GER2, PMXVBF16GER2NN, PMXVBF16GER2NP, PMXVBF16GER2PN,
PMXVBF16GER2PP, PMXVF16GER2, PMXVF16GER2NN, PMXVF16GER2NP,
PMXVF16GER2PN, PMXVF16GER2PP, PMXVF32GER, PMXVF32GERNN,
PMXVF32GERNP, PMXVF32GERPN, PMXVF32GERPP, PMXVF64GER, PMXVF64GERNN,
PMXVF64GERNP, PMXVF64GERPN, PMXVF64GERPP, PMXVI16GER2, PMXVI16GER2PP,
PMXVI16GER2S, PMXVI16GER2SPP, PMXVI4GER8, PMXVI4GER8PP, PMXVI8GER4,
PMXVI8GER4PP, PMXVI8GER4SPP, XVBF16GER2, XVBF16GER2NN, XVBF16GER2NP,
XVBF16GER2PN, XVBF16GER2PP, XVCVBF16SP, XVCVSPBF16, XVF16GER2,
XVF16GER2NN, XVF16GER2NP, XVF16GER2PN, XVF16GER2PP, XVF32GER,
XVF32GERNN, XVF32GERNP, XVF32GERPN, XVF32GERPP, XVF64GER, XVF64GERNN,
XVF64GERNP, XVF64GERPN, XVF64GERPP, XVI16GER2, XVI16GER2PP, XVI16GER2S,
XVI16GER2SPP, XVI4GER8, XVI4GER8PP, XVI8GER4, XVI8GER4PP, XVI8GER4SPP,
XXMFACC, XXMTACC, XXSETACCZ): Add MMA built-ins.
* config/rs6000/rs6000.c (rs6000_emit_move): Use CONST_INT_P.
Allow zero constants.
(print_operand) <case 'A'>: New output modifier.
(rs6000_split_multireg_move): Add support for inserting accumulator
priming and depriming instructions.  Add support for splitting an
assemble accumulator pattern.
* config/rs6000/rs6000-call.c (mma_init_builtins, mma_expand_builtin,
rs6000_gimple_fold_mma_builtin): New functions.
(RS6000_BUILTIN_M): New macro.
(def_builtin): Handle RS6000_BTC_QUAD and RS6000_BTC_PAIR attributes.
(bdesc_mma): Add new MMA built-in support.
(htm_expand_builtin): Use RS6000_BTC_OPND_MASK.
(rs6000_invalid_builtin): Add handling of RS6000_BTM_FUTURE and
RS6000_BTM_MMA.
(rs6000_builtin_valid_without_lhs): Handle RS6000_BTC_VOID attribute.
(rs6000_gimple_fold_builtin): Call rs6000_builtin_is_supported_p
and rs6000_gimple_fold_mma_builtin.
(rs6000_expand_builtin): Call mma_expand_builtin.
Use RS6000_BTC_OPND_MASK.
(rs6000_init_builtins): Adjust comment.  Call mma_init_builtins.
(htm_init_builtins): Use RS6000_BTC_OPND_MASK.
(builtin_function_type): Handle VSX_BUILTIN_XVCVSPBF16 and
VSX_BUILTIN_XVCVBF16SP.
* config/rs6000/rs6000.h (RS6000_BTC_QUINARY, RS6000_BTC_SENARY,
RS6000_BTC_OPND_MASK, RS6000_BTC_QUAD, RS6000_BTC_PAIR,
RS6000_BTC_QUADPAIR, RS6000_BTC_GIMPLE): New defines.
(RS6000_BTC_PREDICATE, RS6000_BTC_ABS, RS6000_BTC_DST,
RS6000_BTC_TYPE_MASK, RS6000_BTC_ATTR_MASK): Adjust values.
* config/rs6000/mma.md (MAX_MMA_OPERANDS): New define_constant.
(UNSPEC_MMA_ASSEMBLE_ACC, UNSPEC_MMA_PMXVBF16GER2,
UNSPEC_MMA_PMXVBF16GER2NN, UNSPEC_MMA_PMXVBF16GER2NP,
UNSPEC_MMA_PMXVBF16GER2PN, UNSPEC_MMA_PMXVBF16GER2PP,
UNSPEC_MMA_PMXVF16GER2, UNSPEC_MMA_PMXVF16GER2NN,
UNSPEC_MMA_PMXVF16GER2NP, UNSPEC_MMA_PMXVF16GER2PN,
UNSPEC_MMA_PMXVF16GER2PP, UNSPEC_MMA_PMXVF32GER,
UNSPEC_MMA_PMXVF32GERNN, UNSPEC_MMA_PMXVF32GERNP,
UNSPEC_MMA_PMXVF32GERPN, UNSPEC_MMA_PMXVF32GERPP,
UNSPEC_MMA_PMXVF64GER, UNSPEC_MMA_PMXVF64GERNN,
UNSPEC_MMA_PMXVF64GERNP, UNSPEC_MMA_PMXVF64GERPN,
UNSPEC_MMA_PMXVF64GERPP, UNSPEC_MMA_PMXVI16GER2,
UNSPEC_MMA_PMXVI16GER2PP, UNSPEC_MMA_PMXVI16GER2S,
UNSPEC_MMA_PMXVI16GER2SPP, UNSPEC_MMA_PMXVI4GER8,
UNSPEC_MMA_PMXVI4GER8PP, UNSPEC_MMA_PMXVI8GER4,
UNSPEC_MMA_PMXVI8GER4PP, UNSPEC_MMA_PMXVI8GER4SPP,
UNSPEC_MMA_XVBF16GER2, UNSPEC_MMA_XVBF16GER2NN,
UNSPEC_MMA_XVBF16GER2NP, UNSPEC_MMA_XVBF16GER2PN,
UNSPEC_MMA_XVBF16GER2PP, UNSPEC_MMA_XVF16GER2, UNSPEC_MMA_XVF16GER2NN,
UNSPEC_MMA_XVF16GER2NP, UNSPEC_MMA_XVF16GER2PN, UNSPEC_MMA_XVF16GER2PP,
UNSPEC_MMA_XVF32GER, UNSPEC_MMA_XVF32GERNN, UNSPEC_MMA_XVF32GERNP,
UNSPEC_MMA_XVF32GERPN, UNSPEC_MMA_XVF32GERPP, UNSPEC_MMA_XVF64GER,
UNSPEC_MMA_XVF64GERNN, UNSPEC_MMA_XVF64GERNP, UNSPEC_MMA_XVF64GERPN,
UNSPEC_MMA_XVF64GERPP, UNSPEC_MMA_XVI16GER2, UNSPEC_MMA_XVI16GER2PP,
UNSPEC_MMA_XVI16GER2S, UNSPEC_MMA_XVI16GER2SPP, UNSPEC_MMA_XVI4GER8,
UNSPEC_MMA_XVI4GER8PP, UNSPEC_MMA_XVI8GER4, UNSPEC_MMA_XVI8GER4PP,
UNSPEC_MMA_XVI8GER4SPP, UNSPEC_MMA_XXMFACC, UNSPEC_MMA_XXMTACC): New.
(MMA_ACC, MMA_VV, MMA_AVV, MMA_PV, MMA_APV, MMA_VVI4I4I8,
MMA_AVVI4I4I8, MMA_VVI4I4I2, MMA_AVVI4I4I2, MMA_VVI4I4,
MMA_AVVI4I4, MMA_PVI4I2, MMA_APVI4I2, MMA_VVI4I4I4,
MMA_AVVI4I4I4): New define_int_iterator.
(acc, vv, avv, pv, apv, vvi4i4i8, avvi4i4i8, vvi4i4i2,
avvi4i4i2, vvi4i4, avvi4i4, pvi4i2, apvi4i2, vvi4i4i4,
avvi4i4i4): New define_int_attr.
(*movpxi): Add zero constant alternative.
(mma_assemble_pair, mma_assemble_acc): New define_expand.
(*mma_assemble_acc): New define_insn_and_split.
(mma_<acc>, mma_xxsetaccz, mma_<vv>, mma_<avv>, mma_<pv>, mma_<apv>,
mma_<vvi4i4i8>, mma_<avvi4i4i8>, mma_<vvi4i4i2>, mma_<avvi4i4i2>,
mma_<vvi4i4>, mma_<avvi4i4>, mma_<pvi4i2>, mma_<apvi4i2>,
mma_<vvi4i4i4>, mma_<avvi4i4i4>): New define_insn.
* config/rs6000/rs6000.md (define_attr "type"): New type mma.
* config/rs6000/vsx.md (UNSPEC_VSX_XVCVBF16SP): New.
(UNSPEC_VSX_XVCVSPBF16): Likewise.
(XVCVBF16): New define_int_iterator.
(xvcvbf16): New define_int_attr.
(vsx_<xvcvbf16>): New define_insn.
* doc/extend.texi: Document the mma built-ins.

4 years agors6000: Add base support and types for defining MMA built-ins.
Peter Bergner [Sun, 21 Jun 2020 03:00:15 +0000 (22:00 -0500)]
rs6000: Add base support and types for defining MMA built-ins.

Add the new -mmma option as well as the initial MMA support, which includes
the target specific __vector_pair and __vector_quad types, the POImode and
PXImode partial integer modes they are mapped to, and their associated
move patterns.  Support for the restrictions on the registers these modes
can be assigned to as also been added.

2020-06-20  Peter Bergner  <bergner@linux.ibm.com>
    Michael Meissner  <meissner@linux.ibm.com>

gcc/
* config/rs6000/mma.md: New file.
* config/rs6000/rs6000-c.c (rs6000_target_modify_macros): Define
__MMA__ for mma.
* config/rs6000/rs6000-call.c (rs6000_init_builtins): Add support
for __vector_pair and __vector_quad types.
* config/rs6000/rs6000-cpus.def (OTHER_FUTURE_MASKS): Add
OPTION_MASK_MMA.
(POWERPC_MASKS): Likewise.
* config/rs6000/rs6000-modes.def (OI, XI): New integer modes.
(POI, PXI): New partial integer modes.
* config/rs6000/rs6000.c (TARGET_INVALID_CONVERSION): Define.
(rs6000_hard_regno_nregs_internal): Use VECTOR_ALIGNMENT_P.
(rs6000_hard_regno_mode_ok_uncached): Likewise.
Add support for POImode being allowed in VSX registers and PXImode
being allowed in FP registers.
(rs6000_modes_tieable_p): Adjust comment.
Add support for POImode and PXImode.
(rs6000_debug_reg_global) <print_tieable_modes>: Add OImode, POImode
XImode, PXImode, V2SImode, V2SFmode and CCFPmode..
(rs6000_setup_reg_addr_masks): Use VECTOR_ALIGNMENT_P.
Set up appropriate addr_masks for vector pair and vector quad addresses.
(rs6000_init_hard_regno_mode_ok): Add support for vector pair and
vector quad registers.  Setup reload handlers for POImode and PXImode.
(rs6000_builtin_mask_calculate): Add support for RS6000_BTM_MMA.
(rs6000_option_override_internal): Error if -mmma is specified
without -mcpu=future.
(rs6000_slow_unaligned_access): Use VECTOR_ALIGNMENT_P.
(quad_address_p): Change size test to less than 16 bytes.
(reg_offset_addressing_ok_p): Add support for ISA 3.1 vector pair
and vector quad instructions.
(avoiding_indexed_address_p): Likewise.
(rs6000_emit_move): Disallow POImode and PXImode moves involving
constants.
(rs6000_preferred_reload_class): Prefer VSX registers for POImode
and FP registers for PXImode.
(rs6000_split_multireg_move): Support splitting POImode and PXImode
move instructions.
(rs6000_mangle_type): Adjust comment.  Add support for mangling
__vector_pair and __vector_quad types.
(rs6000_opt_masks): Add entry for mma.
(rs6000_builtin_mask_names): Add RS6000_BTM_MMA and RS6000_BTM_FUTURE.
(rs6000_function_value): Use VECTOR_ALIGNMENT_P.
(address_to_insn_form): Likewise.
(reg_to_non_prefixed): Likewise.
(rs6000_invalid_conversion): New function.
* config/rs6000/rs6000.h (MASK_MMA): Define.
(BIGGEST_ALIGNMENT): Set to 512 if MMA support is enabled.
(VECTOR_ALIGNMENT_P): New helper macro.
(ALTIVEC_VECTOR_MODE): Use VECTOR_ALIGNMENT_P.
(RS6000_BTM_MMA): Define.
(RS6000_BTM_COMMON): Add RS6000_BTM_MMA and RS6000_BTM_FUTURE.
(rs6000_builtin_type_index): Add RS6000_BTI_vector_pair and
RS6000_BTI_vector_quad.
(vector_pair_type_node): New.
(vector_quad_type_node): New.
* config/rs6000/rs6000.md: Include mma.md.
(define_mode_iterator RELOAD): Add POI and PXI.
* config/rs6000/t-rs6000 (MD_INCLUDES): Add mma.md.
* config/rs6000/rs6000.opt (-mmma): New.
* doc/invoke.texi: Document -mmma.

4 years agoDaily bump.
GCC Administrator [Sun, 21 Jun 2020 00:16:21 +0000 (00:16 +0000)]
Daily bump.

4 years agocoroutines: Update handling and failure for g-r-o-o-a-f [PR95505]
Iain Sandoe [Sat, 20 Jun 2020 13:01:21 +0000 (14:01 +0100)]
coroutines: Update handling and failure for g-r-o-o-a-f [PR95505]

The actual issue is that (in the testcase) std::nothrow is not
available.  So update the handling of the get-return-on-alloc-fail
to include the possibility that std::nothrow might not be
available.

gcc/cp/ChangeLog:

PR c++/95505
* coroutines.cc (morph_fn_to_coro): Update handling of
get-return-object-on-allocation-fail and diagnose missing
std::nothrow.

gcc/testsuite/ChangeLog:

PR c++/95505
* g++.dg/coroutines/pr95505.C: New test.

4 years agoc++: Refinements to "more constrained".
Jason Merrill [Fri, 12 Jun 2020 03:58:54 +0000 (23:58 -0400)]
c++: Refinements to "more constrained".

P2113 from the last C++ meeting clarified that we only compare constraints
on functions or function templates that have equivalent template parameters
and function parameters.

I'm not currently implementing the complicated handling of reversed
comparison operators here; thinking about it now, it seems like a lot of
complexity to support a very weird usage.  If I write two similar comparison
operators to be distinguished by their constraints, why would I write one
reversed?  If they're two unrelated operators, they're very unlikely to be
similar enough for the complexity to help.  I've started a discussion on the
committee reflector about changing these rules.

This change breaks some greedy_ops tests in libstdc++ that were relying on
comparing constraints on unrelated templates, which seems pretty clearly
wrong, so I'm removing those tests for now.

gcc/cp/ChangeLog:

* call.c (joust): Only compare constraints for non-template
candidates with matching parameters.
* pt.c (tsubst_pack_expansion): Fix getting a type parameter
pack.
(more_specialized_fn): Only compare constraints for candidates with
matching parameters.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/concepts-return-req1.C: Expect error.
* g++.dg/cpp2a/concepts-p2113a.C: New test.
* g++.dg/cpp2a/concepts-p2113b.C: New test.

libstdc++-v3/ChangeLog:

* testsuite/24_iterators/move_iterator/rel_ops_c++20.cc:
Remove greedy_ops tests.
* testsuite/24_iterators/reverse_iterator/rel_ops_c++20.cc:
Remove greedy_ops tests.

4 years agoPR fortran/95707 - ICE in finish_equivalences, at fortran/trans-common.c:1319
Harald Anlauf [Sat, 20 Jun 2020 14:15:16 +0000 (16:15 +0200)]
PR fortran/95707 - ICE in finish_equivalences, at fortran/trans-common.c:1319

With submodules and equivalence declarations, name mangling may result in
long internal symbols overflowing internal buffers.  We now check that
we do not exceed the enlarged buffer sizes.

gcc/fortran/
PR fortran/95707
* gfortran.h (gfc_common_head): Enlarge buffer.
* trans-common.c (gfc_sym_mangled_common_id): Enlarge temporary
buffers, and add check on length on mangled name to prevent
overflow.

4 years agoPR fortran/95688 - ICE in gfc_get_string, at fortran/iresolve.c:70
Harald Anlauf [Sat, 20 Jun 2020 14:14:00 +0000 (16:14 +0200)]
PR fortran/95688 - ICE in gfc_get_string, at fortran/iresolve.c:70

With submodules, name mangling of character pointer declarations produces long
internal symbols that overflowed a static internal buffer.  Adjust the buffer
size.

gcc/fortran/
PR fortran/95688
* iresolve.c (gfc_get_string): Enlarge static buffer size.

4 years agoPR fortran/95687 - ICE in get_unique_hashed_string, at fortran/class.c:508
Harald Anlauf [Sat, 20 Jun 2020 14:11:48 +0000 (16:11 +0200)]
PR fortran/95687 - ICE in get_unique_hashed_string, at fortran/class.c:508

With submodules and PDTs, name mangling of interfaces may result in long
internal symbols overflowing a previously static internal buffer.  We now
set the buffer size dynamically.

gcc/fortran/
PR fortran/95687
* class.c (get_unique_type_string): Return a string with dynamic
length.
(get_unique_hashed_string, gfc_hash_value): Use dynamic result
from get_unique_type_string instead of static buffer.

4 years agoPR fortran/95689 - ICE in check_sym_interfaces, at fortran/interface.c:2015
Harald Anlauf [Sat, 20 Jun 2020 14:09:45 +0000 (16:09 +0200)]
PR fortran/95689 - ICE in check_sym_interfaces, at fortran/interface.c:2015

With submodules, name mangling of interfaces may result in long internal
symbols overflowing an internal buffer.  We now check that we do not
exceed the enlarged buffer size.

gcc/fortran/
PR fortran/95689
* interface.c (check_sym_interfaces): Enlarge temporary buffer,
and add check on length on mangled name to prevent overflow.

4 years agoPR fortran/95587 - ICE in gfc_target_encode_expr, at fortran/target-memory.c:362
Harald Anlauf [Sat, 20 Jun 2020 14:05:13 +0000 (16:05 +0200)]
PR fortran/95587 - ICE in gfc_target_encode_expr, at fortran/target-memory.c:362

EQUIVALENCE objects are subject to constraints listed in the Fortran 2018
standard, section 8.10.1.1.  These constraints are to be checked
also for CLASS variables.

gcc/fortran/
PR fortran/95587
* match.c (gfc_match_equivalence): Check constraints on
EQUIVALENCE objects also for CLASS variables.

4 years agoRecord and restore postorder information in breaking alias sccs.
Bin Cheng [Sat, 20 Jun 2020 07:42:12 +0000 (15:42 +0800)]
Record and restore postorder information in breaking alias sccs.

gcc/
PR tree-optimization/95638
* tree-loop-distribution.c (pg_edge_callback_data): New field.
(loop_distribution::break_alias_scc_partitions): Record and restore
postorder information.  Fix memory leak.

gcc/testsuite/
PR tree-optimization/95638
* g++.dg/tree-ssa/pr95638.C: New test.

4 years agoDaily bump.
GCC Administrator [Sat, 20 Jun 2020 00:16:27 +0000 (00:16 +0000)]
Daily bump.

4 years agotestsuite: popcount[45]ll require lp64
David Edelsohn [Fri, 19 Jun 2020 20:15:21 +0000 (16:15 -0400)]
testsuite: popcount[45]ll require lp64

popcount[45]ll require __builtin_popcountll, but the test can succeed
without libcall through expand_doubleword_popcount.  However the Tree-SSA
optiization requires recognition of POPCOUNT.  This patch limits the test
to lp64 for the targets that fall through the cracks and were not
caught by the dg-require-effective-target popcountll.

gcc/testsuite/ChangeLog

2020-06-19  David Edelsohn  <dje.gcc@gmail.com>

* gcc.dg/tree-ssa/popcount4ll.c: Add target lp64.
* gcc.dg/tree-ssa/popcount5ll.c: Same.

4 years agolibstdc++: Fix some -Wsystem-headers warnings (PR 95765)
Jonathan Wakely [Fri, 19 Jun 2020 17:15:15 +0000 (18:15 +0100)]
libstdc++: Fix some -Wsystem-headers warnings (PR 95765)

PR libstdc++/95765
* include/bits/stl_algobase.h (__size_to_integer(float))
(__size_to_integer(double), __size_to_integer(long double))
(__size_to_integer(__float128)): Cast return type explicitly.
* include/bits/stl_uninitialized.h (__uninitialized_default_1<true>):
Remove unused typedef.

4 years agoc++: Allow defaulted comparison outside class.
Jason Merrill [Thu, 18 Jun 2020 21:41:43 +0000 (17:41 -0400)]
c++: Allow defaulted comparison outside class.

Implementing P2085, another refinement to the operator<=> specification from
the Prague meeting.  It was deemed desirable to be able to have a non-inline
defaulted definition of a comparison operator just like you can with other
defaulted functions.

gcc/cp/ChangeLog:

* method.c (early_check_defaulted_comparison): Allow defaulting
comparison outside class.  Complain if non-member operator isn't a
friend.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/spaceship-friend1.C: New test.
* g++.dg/cpp2a/spaceship-err4.C: Adjust diagnostic.

4 years agors6000: apply -mbig option to vec-extract[hl] testcases conditionally.
David Edelsohn [Fri, 19 Jun 2020 15:53:52 +0000 (11:53 -0400)]
rs6000: apply -mbig option to vec-extract[hl] testcases conditionally.

gcc/testsuite/ChangeLog

2020-06-19  David Edelsohn  <dje.gcc@gmail.com>

* gcc.target/powerpc/vec-extracth-be-0.c: Apply -mbig
conditionally for powerpc64le*-*-*.
* gcc.target/powerpc/vec-extracth-be-1.c: Same.
* gcc.target/powerpc/vec-extracth-be-2.c: Same.
* gcc.target/powerpc/vec-extracth-be-3.c: Same.
* gcc.target/powerpc/vec-extractl-be-0.c: Same.
* gcc.target/powerpc/vec-extractl-be-1.c: Same.
* gcc.target/powerpc/vec-extractl-be-2.c: Same.
* gcc.target/powerpc/vec-extractl-be-3.c: Same.

4 years agoamdgcn: Silence compile warnings
Tobias Burnus [Fri, 19 Jun 2020 16:12:11 +0000 (18:12 +0200)]
amdgcn: Silence compile warnings

gcc/ChangeLog:

* config/gcn/gcn.c (gcn_related_vector_mode): Add ARG_UNUSED.
(output_file_start): Use const 'char *'.

4 years agoFix PR94880: Failure to recognize andn pattern
Przemyslaw Wirkus [Fri, 19 Jun 2020 15:48:55 +0000 (16:48 +0100)]
Fix PR94880: Failure to recognize andn pattern

Pattern "(x | y) - y" can be optimized to simple "(x & ~y)" andn
pattern.

Bootstrapped and tested on aarch64-none-linux-gnu.

gcc/ChangeLog:

PR tree-optimization/94880
* match.pd (A | B) - B -> (A & ~B): New simplification.

gcc/testsuite/ChangeLog:

PR tree-optimization/94880
* gcc.dg/tree-ssa/pr94880.c: New Test.

4 years agoHandle SLP_TREE_LANE_PERMUTATION in scalar costing
Richard Biener [Mon, 20 Apr 2020 08:05:06 +0000 (10:05 +0200)]
Handle SLP_TREE_LANE_PERMUTATION in scalar costing

This properly handles a lane permutation in scalar costing.
For the current only use this doesn't matter much but with
permutes that change the number of lanes it will eventually
ICE.

2020-06-19  Richard Biener  <rguenther@suse.de>

* tree-vect-slp.c (vect_bb_slp_scalar_cost): Adjust
for lane permutations.

4 years agolibstdc++: Remove redundant std:: qualification
Jonathan Wakely [Fri, 19 Jun 2020 14:02:54 +0000 (15:02 +0100)]
libstdc++: Remove redundant std:: qualification

* include/bits/stl_pair.h (_Index_tuple): Remove redundant
namespace qualification.
(pair::pair(tuple<>&, tuple<>&, _Index_tuple, _Index_tuple)):
Likewise.
* include/std/tuple (_Head_base, _Tuple_impl, tuple_size)
(tuple_element, __get_helper, get, __make_tuple_impl)
(__make_1st_indices, __tuple_concater)
(pair::pair(tuple<>&, tuple<>&, _Index_tuple, _Index_tuple)):
Likewise.
* include/std/utility (tuple_element, __is_tuple_like_impl)
(tuple_size, __pair_get, get): Likewise.

4 years agolibstdc++: Define all std::function members inline
Jonathan Wakely [Fri, 19 Jun 2020 13:37:52 +0000 (14:37 +0100)]
libstdc++: Define all std::function members inline

* include/bits/std_function.h (function): Define all member
functions inline.

4 years agolibstdc++: std::includes performance tweak
Marc Glisse [Fri, 19 Jun 2020 12:03:45 +0000 (13:03 +0100)]
libstdc++: std::includes performance tweak

A small tweak to the implementation of __includes, which in my
application saves 20% of the running time. I noticed it because using
range-v3 was giving unexpected performance gains.

Some of the gain comes from pulling the 2 calls ++__first1 out of the
condition so there is just one call. And most of the gain comes from
replacing the resulting

if (__comp(__first1, __first2))
  ;
else
  ++__first2;

with

if (!__comp(__first1, __first2))
  ++__first2;

I was very surprised that the code ended up being so different for such
a change, and I still don't really understand where the extra time is
going...

Anyway, while I blame the compiler for not generating very good code
with the current implementation, I believe the change can be seen as a
simplification.

libstdc++-v3/ChangeLog:

* include/bits/stl_algo.h (__includes): Simplify the code.

4 years agotree-optimization/95761 - fix vector insertion place compute
Richard Biener [Fri, 19 Jun 2020 08:03:46 +0000 (10:03 +0200)]
tree-optimization/95761 - fix vector insertion place compute

I missed that indeed SLP permutation code generation can end up
refering to a non-last vectorized stmt in the last SLP_TREE_VEC_STMTS
element as optimization.  So walk them all.

2020-06-19  Richard Biener  <rguenther@suse.de>

PR tree-optimization/95761
* tree-vect-slp.c (vect_schedule_slp_instance): Walk all
vectorized stmts for finding the last one.

* gcc.dg/torture/pr95761.c: New testcase.

4 years agolibstdc++: Optimize std::optional default constructor
Marc Glisse [Fri, 19 Jun 2020 11:07:33 +0000 (12:07 +0100)]
libstdc++: Optimize std::optional default constructor

The attached patch changes the code generated for

std::optional<std::array<int,1024>>f(){return{};}

from

        movq    $0, (%rdi)
        movq    %rdi, %r8
        leaq    8(%rdi), %rdi
        xorl    %eax, %eax
        movq    $0, 4084(%rdi)
        movq    %r8, %rcx
        andq    $-8, %rdi
        subq    %rdi, %rcx
        addl    $4100, %ecx
        shrl    $3, %ecx
        rep stosq
        movq    %r8, %rax

or with different tuning

        subq    $8, %rsp
        movl    $4100, %edx
        xorl    %esi, %esi
        call    memset
        addq    $8, %rsp

to the much shorter

        movb    $0, 4096(%rdi)
        movq    %rdi, %rax

i.e. the same as the nullopt constructor.

The constructor was already non-trivial, so we don't lose that. It passes the
testsuite without regression, but there is no new testcase to verify the
better codegen.

libstdc++-v3/ChangeLog:

* include/std/optional (optional()): Explicitly define it.

4 years ago[Ada] Remove handling of 'Pos and 'Val attributes from gigi
Eric Botcazou [Fri, 10 Apr 2020 09:19:22 +0000 (09:19 +0000)]
[Ada] Remove handling of 'Pos and 'Val attributes from gigi

2020-06-19  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* gcc-interface/trans.c (lvalue_required_for_attribute_p): Do not deal
with 'Pos or 'Val.
(Attribute_to_gnu): Likewise.
* gcc-interface/utils.c (create_field_decl): Small formatting fix.

4 years ago[Ada] Consolidate handling of implicit dereferences
Eric Botcazou [Mon, 9 Mar 2020 17:20:59 +0000 (17:20 +0000)]
[Ada] Consolidate handling of implicit dereferences

2020-06-19  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* gcc-interface/trans.c (adjust_for_implicit_deref): Delete.
(maybe_implicit_deref): Likewise.
(Attribute_to_gnu): Replace calls to maybe_implicit_deref by calls
to maybe_padded_object.
(Call_to_gnu): Likewise.
(gnat_to_gnu) <N_Indexed_Component>: Likewise.
<N_Slice>: Likewise.
<N_Selected_Component>: Likewise.
<N_Free_Statement>: Remove call to adjust_for_implicit_deref and
manually make sure that the designated type is complete.
* gcc-interface/utils2.c (build_simple_component_ref): Add comment.

4 years ago[Ada] AI12-0028-1 Import of variadic C functions
Eric Botcazou [Tue, 3 Mar 2020 17:57:51 +0000 (17:57 +0000)]
[Ada] AI12-0028-1 Import of variadic C functions

2020-06-19  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* gcc-interface/decl.c (gnat_to_gnu_param): Tidy up.
(gnat_to_gnu_subprog_type): For a variadic C function, do not
build unnamed parameters and do not add final void node.
* gcc-interface/misc.c: Include snames.h.
* gcc-interface/trans.c (Attribute_to_gnu): Tidy up.
(Call_to_gnu): Implement support for unnamed parameters in a
variadic C function.
* gcc-interface/utils.c: Include snames.h.
(copy_type): Tidy up.

4 years ago[Ada] Further cleanup in constraint checking code for allocators
Eric Botcazou [Sun, 3 May 2020 21:26:11 +0000 (23:26 +0200)]
[Ada] Further cleanup in constraint checking code for allocators

2020-06-19  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* exp_ch5.adb (Expand_N_Assignment_Statement): Do not apply
range checks to allocators here.

4 years ago[Ada] Crash on compiling project with multiple subunits per file
Justin Squirek [Sat, 2 May 2020 21:17:24 +0000 (17:17 -0400)]
[Ada] Crash on compiling project with multiple subunits per file

2020-06-19  Justin Squirek  <squirek@adacore.com>

gcc/ada/

* lib.adb (Check_Same_Extended_Unit): Add check to determine if
the body for the subunits exist in the same file as their
specifications.

4 years ago[Ada] Fix check for bounds in aggregate expansion of allocator
Eric Botcazou [Sat, 2 May 2020 15:45:21 +0000 (17:45 +0200)]
[Ada] Fix check for bounds in aggregate expansion of allocator

2020-06-19  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* exp_aggr.adb (In_Place_Assign_OK): In an allocator context,
check the bounds of an array aggregate against those of the
designated type, except if the latter is unconstrained.

4 years ago[Ada] Fix small fallout of previous change for Analyze_Selected_Component
Eric Botcazou [Sat, 2 May 2020 15:35:02 +0000 (17:35 +0200)]
[Ada] Fix small fallout of previous change for Analyze_Selected_Component

2020-06-19  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* sem_ch3.adb (Is_Visible_Component): Reason only on the private
status of the original type in an instance body.

4 years ago[Ada] Fix small fallout of previous change for allocator
Eric Botcazou [Sat, 2 May 2020 09:35:42 +0000 (11:35 +0200)]
[Ada] Fix small fallout of previous change for allocator

2020-06-19  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* sem_res.adb (Resolve_Qualified_Expression): Do not override the
type of the node when it is unconstrained if it is for an allocator.

4 years ago[Ada] Plug small loophole in implementation of AI12-0100
Eric Botcazou [Fri, 1 May 2020 13:26:08 +0000 (15:26 +0200)]
[Ada] Plug small loophole in implementation of AI12-0100

2020-06-19  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* sem_res.adb (Resolve_Allocator): Call Resolve_Qualified_Expression
on the qualified expression, if any, instead of doing an incomplete
type resolution manually.
(Resolve_Qualified_Expression): Apply predicate check to operand.

4 years ago[Ada] Fix internal error on component of class-wide parameter in instance body
Eric Botcazou [Thu, 30 Apr 2020 22:27:12 +0000 (00:27 +0200)]
[Ada] Fix internal error on component of class-wide parameter in instance body

2020-06-19  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* sem_ch4.adb (Analyze_Selected_Component): In an instance body,
also invoke Find_Component_In_Instance on the parent subtype of
a derived tagged type immediately visible.  Remove obsolete case.

4 years ago[Ada] Deal with enumeration types with very large size
Eric Botcazou [Wed, 29 Apr 2020 19:42:22 +0000 (21:42 +0200)]
[Ada] Deal with enumeration types with very large size

2020-06-19  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* exp_attr.adb (Get_Integer_Type): Return the largest supported
unsigned integer type if need be.

4 years ago[Ada] Spurious condition warning on type conversion in return
Justin Squirek [Thu, 30 Apr 2020 20:04:26 +0000 (16:04 -0400)]
[Ada] Spurious condition warning on type conversion in return

2020-06-19  Justin Squirek  <squirek@adacore.com>

gcc/ada/

* sem_warn.adb (Warn_On_Known_Condition): Add general sanity
check that asserts the original source node being checked
contains an entity. If not, it could be the result of special
case expansion for type conversions.

4 years ago[Ada] Spurious error on private type in ghost expression function
Ed Schonberg [Thu, 30 Apr 2020 19:19:16 +0000 (15:19 -0400)]
[Ada] Spurious error on private type in ghost expression function

2020-06-19  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch6.adb (Analyze_Expression_Function): Do not indicate
that the function has a completion if it appears within a Ghost
generic package.

4 years ago[Ada] AI12-0293-1 Remove pragma Assert
Bob Duff [Thu, 30 Apr 2020 18:40:26 +0000 (14:40 -0400)]
[Ada] AI12-0293-1 Remove pragma Assert

2020-06-19  Bob Duff  <duff@adacore.com>

gcc/ada/

* libgnat/a-ststbo.adb (Write): Replace pragma Assert with "if
... raise Constraint_Error".

4 years ago[Ada] Style checks on invalid UTF character cause crash
Justin Squirek [Thu, 30 Apr 2020 12:55:33 +0000 (08:55 -0400)]
[Ada] Style checks on invalid UTF character cause crash

2020-06-19  Justin Squirek  <squirek@adacore.com>

gcc/ada/

* widechar.adb, widechar.ads (Skip_Wide): Catch validity check
failure when skipping over characters, and update comment to
reflect Skip_Wide's usage in error printing.

4 years ago[Ada] ACATS 4.1G - C760A02 - Near infinite finalization
Javier Miranda [Thu, 30 Apr 2020 15:55:42 +0000 (11:55 -0400)]
[Ada] ACATS 4.1G - C760A02 - Near infinite finalization

2020-06-19  Javier Miranda  <miranda@adacore.com>

gcc/ada/

* exp_ch3.ads (Ensure_Activation_Chain_And_Master): New
subprogram.
* exp_ch3.adb (Ensure_Activation_Chain_And_Master): New
subprogram that factorizes code.
(Expand_N_Object_Declaration): Call new subprogram.
* sem_ch6.adb (Analyze_Function_Return): Returning a
build-in-place unconstrained array type defer the full analysis
of the returned object to avoid generating the corresponding
constrained subtype; otherwise the bounds would be created in
the stack and a dangling reference would be returned pointing to
the bounds.

4 years ago[Ada] AI12-0366 Changes to Big_Integer and Big_Real
Arnaud Charlet [Wed, 29 Apr 2020 16:38:22 +0000 (12:38 -0400)]
[Ada] AI12-0366 Changes to Big_Integer and Big_Real

2020-06-19  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* libgnat/a-nbnbin.adb, libgnat/a-nbnbin.ads,
libgnat/a-nbnbin__gmp.adb, libgnat/a-nbnbre.adb,
libgnat/a-nbnbre.ads: Update spec according to AI12-0366.

4 years ago[Ada] Minor remove extra whitespace in check suppression functions
Piotr Trojanek [Wed, 29 Apr 2020 16:52:22 +0000 (18:52 +0200)]
[Ada] Minor remove extra whitespace in check suppression functions

2020-06-19  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* checks.ads: Remove excessive whitespace in declarations of
functions for check suppression.

4 years ago[Ada] Attempt to hide public entities in nested instance bodies
Eric Botcazou [Tue, 28 Apr 2020 20:19:17 +0000 (22:19 +0200)]
[Ada] Attempt to hide public entities in nested instance bodies

2020-06-19  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* sem_ch7.adb (Hide_Public_Entities): Split handling of objects
and subprograms, and do not reject the latter upfront in nested
instance specs if there are no referencer subprograms at all.
(Analyze_Package_Body_Helper): Also call Hide_Public_Entities on
nested generic instances.

4 years ago[Ada] Reject junk expressions in attribute Update
Piotr Trojanek [Wed, 29 Apr 2020 09:30:46 +0000 (11:30 +0200)]
[Ada] Reject junk expressions in attribute Update

2020-06-19  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* sem_attr.adb (Analyze_Attribute): Reject illegal positional
component associations; fix syntax in comment about named
component associations.

4 years ago[Ada] Decorate record delta aggregate for GNATprove
Piotr Trojanek [Tue, 28 Apr 2020 16:10:10 +0000 (18:10 +0200)]
[Ada] Decorate record delta aggregate for GNATprove

2020-06-19  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* sem_aggr.adb (Resolve_Delta_Record_Aggregate): Modify a nested
Get_Component_Type routine to return a component and not just
its type; use this routine to decorate the identifier within the
delta aggregate.

4 years ago[Ada] universal_access equality and 'Access attributes
Arnaud Charlet [Sun, 26 Apr 2020 10:08:29 +0000 (06:08 -0400)]
[Ada] universal_access equality and 'Access attributes

2020-06-19  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* sem_ch4.adb (Find_Equality_Types.Check_Access_Attribute): New.
(Find_Equality_Types): Move universal_access related checks at
the end of the processing and add call to
Check_Access_Attribute.

4 years ago[Ada] Remove second warning for convention C_Variadic_n
Eric Botcazou [Tue, 28 Apr 2020 18:51:51 +0000 (20:51 +0200)]
[Ada] Remove second warning for convention C_Variadic_n

2020-06-19  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* sem_prag.adb (Process_Convention): Revert previous change.

4 years ago[Ada] Small cleanup in Apply_Range_Check implementation
Eric Botcazou [Sat, 25 Apr 2020 15:10:43 +0000 (17:10 +0200)]
[Ada] Small cleanup in Apply_Range_Check implementation

2020-06-19  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* checks.ads (Apply_Static_Length_Check): Move up.
(Apply_Range_Check): Add parameter Insert_Node.
* checks.adb (Apply_Selected_Range_Checks): Merge into...
(Apply_Range_Check): ...this.  Add parameter Insert_Node,
pass it as Warn_Node to Selected_Range_Checks and use it
as insertion point for the checks.
* sem_ch3.adb (Analyze_Subtype_Declaration): Rewrite block
dealing with the range checks for the subtype indication.
Use local variable and call Apply_Range_Check in both cases.

4 years ago[Ada] Fix validity checks on attribute 'Old prefix
Piotr Trojanek [Mon, 27 Apr 2020 12:22:53 +0000 (14:22 +0200)]
[Ada] Fix validity checks on attribute 'Old prefix

2020-06-19  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* exp_attr.adb (Expand_N_Attribute_Reference): Call Ensure_Valid
on the expression of an object declaration that captures the
value of 'Old prefix.

4 years ago[Ada] Add comments about attribute 'Valid_Scalars on private tagged types
Piotr Trojanek [Mon, 27 Apr 2020 09:30:06 +0000 (11:30 +0200)]
[Ada] Add comments about attribute 'Valid_Scalars on private tagged types

2020-06-19  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* exp_attr.adb (Expand_N_Attribute_Reference): Add comment.
* sem_attr.adb (Analyze_Attribute): Add ??? comment.
* sem_util.ads (Valid_Scalars): This routine is only used for
'Valid_Scalars and not for 'Valid.

4 years ago[Ada] Simplify processing of 'Valid_Scalars on array types
Piotr Trojanek [Mon, 27 Apr 2020 09:14:31 +0000 (11:14 +0200)]
[Ada] Simplify processing of 'Valid_Scalars on array types

2020-06-19  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* exp_attr.adb (Expand_N_Attribute_Reference): Do not call
Scalar_Part_Present on the array component's type.
(Build_Array_VS_Func): Remove Comp_Typ parameter, because it can
be easily computed from the Array_Top parameter *and redundant
parameters are confusing and error-prone).

4 years ago[Ada] Fix validity checking for class-wide objects
Piotr Trojanek [Mon, 27 Apr 2020 07:56:17 +0000 (09:56 +0200)]
[Ada] Fix validity checking for class-wide objects

2020-06-19  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* exp_attr.adb (Build_Record_VS_Func): Strip privacy and type
derivation from the root type when 'Valid_Scalars is applied to
a class-wide type.

4 years ago[Ada] Remove repeated testing of Check_Validity_Of_Parameters
Piotr Trojanek [Fri, 24 Apr 2020 15:36:24 +0000 (17:36 +0200)]
[Ada] Remove repeated testing of Check_Validity_Of_Parameters

2020-06-19  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* checks.adb (Apply_Parameter_Validity_Checks): Remove testing
of Check_Validity_Of_Parameters for every formal parameter and
function result.

4 years ago[Ada] Add missing warning tag for some overlapping actuals warnings
Arnaud Charlet [Fri, 24 Apr 2020 16:17:51 +0000 (12:17 -0400)]
[Ada] Add missing warning tag for some overlapping actuals warnings

2020-06-19  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* sem_warn.adb (Warn_On_Overlapping_Actuals): Add missing
warning tag.

4 years agoDaily bump.
GCC Administrator [Fri, 19 Jun 2020 00:16:32 +0000 (00:16 +0000)]
Daily bump.

4 years agoc++: More P2002 operator<=> refinements.
Jason Merrill [Wed, 17 Jun 2020 20:22:33 +0000 (16:22 -0400)]
c++: More P2002 operator<=> refinements.

* Disallow && references.
* Allow empty unions.
* Improve diagnostics for a subobject comparison with
  non-comparison-category type.

gcc/cp/ChangeLog:

* method.c (early_check_defaulted_comparison): Check for &&.
(build_comparison_op): Allow empty union.  Diagnose non-category
type.
(common_comparison_type): Remove handling for non-category type.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/spaceship-ref1.C: New test.
* g++.dg/cpp2a/spaceship-synth-neg4.C: New test.
* g++.dg/cpp2a/spaceship-union1.C: New test.

4 years agovect: Use vect_relevant_for_alignment_p consistently
Fei Yang [Thu, 18 Jun 2020 19:11:09 +0000 (20:11 +0100)]
vect: Use vect_relevant_for_alignment_p consistently

Minor code refactorings in tree-vect-data-refs.c.  When trying loop peeling
to force alignment, call vect_relevant_for_alignment_p to filter out data
references in the loop whose alignment is irrelevant.

2020-06-18  Felix Yang  <felix.yang@huawei.com>

gcc/
* tree-vect-data-refs.c (vect_enhance_data_refs_alignment): Call
vect_relevant_for_alignment_p to filter out data references in
the loop whose alignment is irrelevant when trying loop peeling
to force alignment.

4 years agoi386: Fix mode of ZERO_EXTRACT RTXes, remove ext_register_operand predicate.
Uros Bizjak [Thu, 18 Jun 2020 18:12:48 +0000 (20:12 +0200)]
i386: Fix mode of ZERO_EXTRACT RTXes, remove ext_register_operand predicate.

The mode of ZERO_EXTRACT RTX should match the mode of its LOC register
operand.  The mode should be HI, SI or DImode to enable combine to synthesize
extractions from HImode and DImode operands, in addition to existing SImode.
Further, these changes tighten allowed modes for extv, extzv and insv
named patterns and finally enable removal of ext_register_operand
special predicate.

2020-18-06  UroÅ¡ Bizjak  <ubizjak@gmail.com>

gcc/ChangeLog:

* config/i386/i386.md (*cmpqi_ext<mode>_1): Use SWI248 mode
iterator instead of SImode for ZERO_EXTRACT RTX.  Use SWI248
mode iterator for the first operand of ZERO_EXTRACT RTX.
Change ext_register_operand predicate to register_operand.
Rename from *cmpqi_ext_1.
(*cmpqi_ext<mode>_2): Ditto.  Rename from *cmpqi_ext_2.
(*cmpqi_ext<mode>_3): Ditto.  Rename from *cmpqi_ext_3.
(*cmpqi_ext<mode>_4): Ditto.  Rename from *cmpqi_ext_4.
(cmpi_ext_3): Use HImode instead of SImode for ZERO_EXTRACT RTX.
(*extv<mode>): Use SWI24 mode iterator for the first operand
of ZERO_EXTRACT RTX.  Change ext_register_operand predicate
to register_operand.
(*extzv<mode>): Use SWI248 mode iterator for the first operand
of ZERO_EXTRACT RTX.  Change ext_register_operand predicate
to register_operand.
(*extzvqi): Use SWI248 mode iterator instead of SImode for
ZERO_EXTRACT RTX.  Use SWI248 mode iterator for the first operand
of ZERO_EXTRACT RTX.  Change ext_register_operand predicate to
register_operand.
(*extzvqi_mem_rex64 and corresponding peephole2):  Use SWI248 mode
iterator instead of SImode for ZERO_EXTRACT RTX.  Use SWI248
mode iterator for the first operand of ZERO_EXTRACT RTX.
Change ext_register_operand predicate to register_operand.
(@insv<mode>_1): Use SWI248 mode iterator for the first operand
of ZERO_EXTRACT RTX.  Change ext_register_operand predicate to
register_operand.
(*insvqi_1): Use SWI248 mode iterator instead of SImode
for ZERO_EXTRACT RTX.  Use SWI248 mode iterator for the
first operand of ZERO_EXTRACT RTX.  Change ext_register_operand
predicate to register_operand.
(*insvqi_2): Ditto.
(*insvqi_3): Ditto.
(*insvqi_1_mem_rex64 and corresponding peephole2):  Use SWI248 mode
iterator instead of SImode for ZERO_EXTRACT RTX.  Use SWI248
mode iterator for the first operand of ZERO_EXTRACT RTX.
Change ext_register_operand predicate to register_operand.
(addqi_ext_1): New expander.
(*addqi_ext<mode>_1): Use SWI248 mode iterator instead of SImode
for ZERO_EXTRACT RTX.  Use SWI248 mode iterator for the first
operand of ZERO_EXTRACT RTX.  Change ext_register_operand predicate
to register_operand.  Rename from *addqi_ext_1.
(*addqi_ext<mode>_2): Ditto. Rename from *addqi_ext_2.
(divmodqi4): Use HImode instead of SImode for ZERO_EXTRACT RTX.
(udivmodqi4): Ditto.
(testqi_ext_1): Use HImode instead of SImode for ZERO_EXTRACT RTX.
(*testqi_ext<mode>_1): Use SWI248 mode iterator instead of SImode
for ZERO_EXTRACT RTX.  Use SWI248 mode iterator for the first
operand of ZERO_EXTRACT RTX.  Change ext_register_operand predicate
to register_operand.  Rename from *testqi_ext_1.
(*testqi_ext<mode>_2): Ditto.  Rename from *testqi_ext_2.
(andqi_ext_1): New expander.
(*andqi_ext<mode>_1): Use SWI248 mode iterator instead of SImode
for ZERO_EXTRACT RTX.  Use SWI248 mode iterator for the first
operand of ZERO_EXTRACT RTX.  Change ext_register_operand predicate
to register_operand.  Rename from andqi_ext_1.
(*andqi_ext<mode>_1_cc): Ditto.  Rename from *andqi_ext_1_cc.
(*andqi_ext<mode>_2): Ditto.  Rename from *andqi_ext_2.
(*<code>qi_ext<mode>_1): Ditto.  Rename from *<code>qi_ext_1.
(*<code>qi_ext<mode>_2): Ditto.  Rename from *<code>qi_ext_2.
(xorqi_ext_1_cc): Use HImode instead of SImode for ZERO_EXTRACT RTX.
(*xorqi_ext<mode>_1_cc):  Use SWI248 mode iterator instead of SImode
for ZERO_EXTRACT RTX.  Use SWI248 mode iterator for the first
operand of ZERO_EXTRACT RTX.  Change ext_register_operand predicate
to register_operand.  Rename from *xorqi_ext_1_cc.
* config/i386/i386-expand.c (ix86_split_idivmod): Emit ZERO_EXTRACT
in mode, matching its first operand.
(promote_duplicated_reg): Update for renamed insv<mode>_1.
* config/i386/predicates.md (ext_register_operand): Remove predicate.

gcc/testsuite/ChangeLog:

* gcc.target/i386/pr78904-1a.c: New test.
* gcc.target/i386/pr78904-1b.c: Ditto.
* gcc.target/i386/pr78904-2a.c: Ditto.
* gcc.target/i386/pr78904-2b.c: Ditto.
* gcc.target/i386/pr78904-3a.c: Ditto.
* gcc.target/i386/pr78904-3b.c: Ditto.
* gcc.target/i386/pr78904-4a.c: Ditto.
* gcc.target/i386/pr78904-4b.c: Ditto.
* gcc.target/i386/pr78904-5a.c: Ditto.
* gcc.target/i386/pr78904-5b.c: Ditto.
* gcc.target/i386/pr78904-6a.c: Ditto.
* gcc.target/i386/pr78904-6b.c: Ditto.
* gcc.target/i386/pr78967-1a.c: Ditto.
* gcc.target/i386/pr78967-1b.c: Ditto.
* gcc.target/i386/pr78967-2a.c: Ditto.
* gcc.target/i386/pr78967-2b.c: Ditto.

4 years agoAvoid warning for memset writing over multiple members.
Martin Sebor [Thu, 18 Jun 2020 18:00:36 +0000 (12:00 -0600)]
Avoid warning for memset writing over multiple members.

Resolves:
PR middle-end/95667 - unintended warning for memset writing across multiple members
PR middle-end/92814 - missing -Wstringop-overflow writing into a dynamically allocated flexible array member

gcc/ChangeLog:

PR middle-end/95667
PR middle-end/92814
* builtins.c (compute_objsize): Remove call to
compute_builtin_object_size and instead compute conservative sizes
directly here.

gcc/testsuite/ChangeLog:

PR middle-end/95667
PR middle-end/92814
* gcc.dg/Wstringop-overflow-25.c: Remove xfails.
* gcc.dg/Wstringop-overflow-39.c: New test.

4 years agoc++: ICE in requires-expressions with invalid args [PR95735]
Marek Polacek [Thu, 18 Jun 2020 13:38:42 +0000 (09:38 -0400)]
c++: ICE in requires-expressions with invalid args [PR95735]

This ICE-on-invalid goes back to GCC 6.  In finish_template_variable,
if coerce_innermost_template_parms returns error_mark_node, we pass
it down to constraints_satisfied_p and that error_mark_node flows
down to various satisfy_* functions and then to various tsubst_*
functions, where we crash.  diagnose_constraints also doesn't cope
with error arglist, so I think we should just return as in the
patch below.

gcc/cp/ChangeLog:

PR c++/95735
* pt.c (finish_template_variable): Return if
coerce_innermost_template_parms return error_mark_node.

gcc/testsuite/ChangeLog:

PR c++/95735
* g++.dg/cpp2a/concepts-err2.C: New test.

4 years agoFix use of inaccessible member in pr94052.C
Christophe Lyon [Thu, 18 Jun 2020 15:25:18 +0000 (15:25 +0000)]
Fix use of inaccessible member in pr94052.C

The recent PR41437 fix exposed a latent use of an inaccessible member in
the below testcase.

gcc/testsuite/ChangeLog:

* g++.target/aarch64/pr94052.C: Give z::ad public access.

4 years agovectorizer: add _bb_vec_info::region_stmts and reverse_region_stmts
Martin Liska [Thu, 11 Jun 2020 11:25:40 +0000 (13:25 +0200)]
vectorizer: add _bb_vec_info::region_stmts and reverse_region_stmts

gcc/ChangeLog:

* coretypes.h (struct iterator_range): New type.
* tree-vect-patterns.c (vect_determine_precisions): Use
range-based iterator.
(vect_pattern_recog): Likewise.
* tree-vect-slp.c (_bb_vec_info):  Likewise.
(_bb_vec_info::~_bb_vec_info): Likewise.
(vect_slp_check_for_constructors): Likewise.
* tree-vectorizer.h:Add new iterators
and functions that use it.

4 years agoAdd missing PR number to ChangeLog (PR 95378)
Jonathan Wakely [Thu, 18 Jun 2020 14:34:51 +0000 (15:34 +0100)]
Add missing PR number to ChangeLog (PR 95378)

gcc/c-family/ChangeLog:

* ChangeLog:

4 years agors6000: Fix creation of VEC_COND_EXPR
Martin Liska [Thu, 18 Jun 2020 07:25:32 +0000 (09:25 +0200)]
rs6000: Fix creation of VEC_COND_EXPR

gcc/ChangeLog:

* config/rs6000/rs6000-call.c (fold_build_vec_cmp):
Since 502d63b6d6141597bb18fd23c87736a1b384cf8f, first argument
of a VEC_COND_EXPR cannot be tcc_comparison and so that
a SSA_NAME needs to be created before we use it for the first
argument of the VEC_COND_EXPR.
(fold_compare_helper): Pass gsi to fold_build_vec_cmp.

4 years agoOpenMP/Fortran: Reject allocatable components in map clause
Tobias Burnus [Thu, 18 Jun 2020 13:27:30 +0000 (15:27 +0200)]
OpenMP/Fortran: Reject allocatable components in map clause

gcc/fortran/ChangeLog:

* openmp.c (resolve_omp_clauses): Reject vars with
allocatable components in OpenMP map clauses.

gcc/testsuite/ChangeLog:

* gfortran.dg/gomp/map-alloc-comp-1.f90: New test.

4 years agomiddle-end/95739 - fix vector condition IFN expansion
Richard Biener [Thu, 18 Jun 2020 12:45:03 +0000 (14:45 +0200)]
middle-end/95739 - fix vector condition IFN expansion

This fixes the omission of moving the expansion result to the
target.

2020-06-18  Richard Biener  <rguenther@suse.de>

PR middle-end/95739
* internal-fn.c (expand_vect_cond_optab_fn): Move the result
to the target if necessary.
(expand_vect_cond_mask_optab_fn): Likewise.

4 years agoFix typo in tree-ssa-reassoc.c.
Martin Liska [Thu, 18 Jun 2020 12:46:02 +0000 (14:46 +0200)]
Fix typo in tree-ssa-reassoc.c.

gcc/ChangeLog:

* tree-ssa-reassoc.c (ovce_extract_ops): Replace *vcond with
vcond as we check for NULL pointer.

4 years agogcc-changelog: checkout & pull order
Martin Liska [Thu, 18 Jun 2020 12:44:04 +0000 (14:44 +0200)]
gcc-changelog: checkout & pull order

contrib/ChangeLog:

* gcc-changelog/git_update_version.py: First checkout and then
run git pull ---rebase.

4 years agoc++: Fix tsubst ICE with invalid static_cast [PR95728]
Marek Polacek [Wed, 17 Jun 2020 23:23:10 +0000 (19:23 -0400)]
c++: Fix tsubst ICE with invalid static_cast [PR95728]

Since r11-423 tsubst_copy_and_build/TREE_LIST uses tsubst_tree_list
instead of open coding it.  While the latter could return an error
node wrapped in a TREE_LIST, the former can return a naked error node.

That broke in tsubst_copy_and_build/NEW_EXPR:
  tree placement = RECUR (TREE_OPERAND (t, 0));
  // placement is now error_mark_node, so...
  for (; placement != NULL_TREE; placement = TREE_CHAIN (placement))
  // ... this crashes

If we just return, we avoid the ICE and improve the diagnostic a bit.

gcc/cp/ChangeLog:

PR c++/95728
* pt.c (tsubst_copy_and_build) <case NEW_EXPR>: Return error_mark_node
if placement is erroneous.

gcc/testsuite/ChangeLog:

PR c++/95728
* g++.dg/template/cast6.C: New test.

4 years agogcc-changelog: support merge commits in git_update_version
Martin Liska [Thu, 18 Jun 2020 12:14:24 +0000 (14:14 +0200)]
gcc-changelog: support merge commits in git_update_version

contrib/ChangeLog:

* gcc-changelog/git_update_version.py: Support merge commits
and walk only on the branch that is being merged and generate
missing ChangeLog entries.

4 years agosilence empty-body warning
Tobias Burnus [Thu, 18 Jun 2020 11:19:03 +0000 (13:19 +0200)]
silence empty-body warning

gcc/ChangeLog:

* gimple-pretty-print.c (dump_binary_rhs): Use braces to
silence empty-body warning with gcc_fallthrough.

4 years agophiopt: Improve minmax optimization [PR95699]
Jakub Jelinek [Thu, 18 Jun 2020 10:11:09 +0000 (12:11 +0200)]
phiopt: Improve minmax optimization [PR95699]

As discussed in the PR, the
x < 0x80000000U to (int) x >= 0
optimization stands in the way of minmax_replacement optimization,
so for comparisons with most of the constants it works well, but when the
above mentioned optimization triggers, it is unable to do it.
The match.pd (cond (cmp (convert? x) c1) (op x c2) c3) -> (op (minmax x c1) c2)
optimization is able to look through that and this patch
teaches minmax_replacement about it too.

2020-06-18  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/95699
* tree-ssa-phiopt.c (minmax_replacement): Treat (signed int)x < 0
as x > INT_MAX and (signed int)x >= 0 as x <= INT_MAX.  Move variable
declarations to the statements that set them where possible.

* gcc.dg/tree-ssa/pr95699.c: New test.

4 years agoforwprop: simplify_vector_constructor follow-up fix [PR95713]
Jakub Jelinek [Thu, 18 Jun 2020 10:08:06 +0000 (12:08 +0200)]
forwprop: simplify_vector_constructor follow-up fix [PR95713]

As the following testcase shows, the exception for the aarch64
vec_pack_trunc_di is not sufficient on x86, the halfvectype
"vectors" have SImode but the x86 vec_pack_trunc_si meant for
the bool bitmasks combines 2x SImode into DImode, while in the
testcase the halfvectype is 1x SImode "vector" with SImode and
result is 2x HImode "vector" with SImode.

Richard Sandiford's reply:
FWIW, since the aarch64 case was only found by inspection and might
not be useful, personally I'd prefer to drop that case after all.

2020-06-18  Jakub Jelinek  <jakub@redhat.com>

PR target/95713
* tree-ssa-forwprop.c (simplify_vector_constructor): Don't allow
scalar mode halfvectype other than vector boolean for
VEC_PACK_TRUNC_EXPR.

* gcc.dg/pr95713.c: New test.

4 years agoavoid early asm output
Richard Biener [Thu, 18 Jun 2020 09:02:26 +0000 (11:02 +0200)]
avoid early asm output

This avoids early assembler output via the gimplifier creating
new static CTORs.  The output machinery seems to be prepared to
output constants recursively and it's just a matter of
appropriately defering or not defering output.

This also has the advantage of not outputting .string for
optimized away local aggregate initializers containing string
references.

2020-06-18  Richard Biener  <rguenther@suse.de>

* varasm.c (assemble_variable): Make sure to not
defer output when outputting addressed constants.
(output_constant_def_contents): Likewise.
(add_constant_to_table): Take and pass on whether to
defer output.
(output_addressed_constants): Likewise.
(output_constant_def): Pass on whether to defer output
to add_constant_to_table.
(tree_output_constant_def): Defer output of constants.

4 years agoremove SLP_TREE_TWO_OPERATORS, add SLP permutation node
Richard Biener [Wed, 25 Mar 2020 13:42:49 +0000 (14:42 +0100)]
remove SLP_TREE_TWO_OPERATORS, add SLP permutation node

This removes the SLP_TREE_TWO_OPERATORS hack in favor of having
explicit SLP nodes for both computations and the blend operation.
For this introduce a generic merge + select + permute SLP node
(with implementation limits).

Building upon earlier patches it adds vect_stmt_dominates_stmt_p
and the ability to compute a vector insertion place from
vectorized stmts (which now have UID zero) as needed for
the permute node.

2020-06-17  Richard Biener  <rguenther@suse.de>

* tree-vectorizer.h (_slp_tree::two_operators): Remove.
(_slp_tree::lane_permutation): New member.
(_slp_tree::code): Likewise.
(SLP_TREE_TWO_OPERATORS): Remove.
(SLP_TREE_LANE_PERMUTATION): New.
(SLP_TREE_CODE): Likewise.
(vect_stmt_dominates_stmt_p): Declare.
* tree-vectorizer.c (vect_stmt_dominates_stmt_p): New function.
* tree-vect-stmts.c (vect_model_simple_cost): Remove
SLP_TREE_TWO_OPERATORS handling.
* tree-vect-slp.c (_slp_tree::_slp_tree): Amend.
(_slp_tree::~_slp_tree): Likewise.
(vect_two_operations_perm_ok_p): Remove.
(vect_build_slp_tree_1): Remove verification of two-operator
permutation here.
(vect_build_slp_tree_2): When we have two different operators
build two computation SLP nodes and a blend.
(vect_print_slp_tree): Print the lane permutation if it exists.
(slp_copy_subtree): Copy it.
(vect_slp_rearrange_stmts): Re-arrange it.
(vect_slp_analyze_node_operations_1): Handle SLP_TREE_CODE
VEC_PERM_EXPR explicitely.
(vect_schedule_slp_instance): Likewise.  Remove old
SLP_TREE_TWO_OPERATORS code.
(vectorizable_slp_permutation): New function.

4 years ago[Ada] Fix small inefficiency in previous change to expander
Eric Botcazou [Sun, 26 Apr 2020 10:46:03 +0000 (12:46 +0200)]
[Ada] Fix small inefficiency in previous change to expander

2020-06-18  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* exp_ch4.adb (Get_Size_For_Range): Only make sure to return a
size lower than that of the original type if possible.
* libgnat/s-rannum.adb (Random_Discrete): Back out optimization
added for 32-bit types.

4 years ago[Ada] ACATS 4.1J - B854003 - Subtype conformance check missed
Arnaud Charlet [Thu, 23 Apr 2020 18:46:27 +0000 (14:46 -0400)]
[Ada] ACATS 4.1J - B854003 - Subtype conformance check missed

2020-06-18  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* sem_ch6.ads, sem_ch6.adb (Check_Formal_Conformance): New
subprogram.
(Check_Conformance): Move code to Check_Formal_Conformance.
* sem_ch8.adb (Analyze_Subprogram_Renaming): Check for formal
conformance when needed.

4 years ago[Ada] Narrow large arithmetic and comparison operations
Eric Botcazou [Fri, 24 Apr 2020 20:50:50 +0000 (22:50 +0200)]
[Ada] Narrow large arithmetic and comparison operations

2020-06-18  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* exp_ch4.adb (Narrow_Large_Operation): New procedure to try
and narrow large arithmetic and comparison operations.
(Expand_N_In): Call it.
(Expand_N_Op_Abs): Likewise.
(Expand_N_Op_Add): Likewise.
(Expand_N_Op_Divide): Likewise.
(Expand_N_Op_Eq): Likewise.
(Expand_N_Op_Ge): Likewise.
(Expand_N_Op_Gt): Likewise.
(Expand_N_Op_Le): Likewise.
(Expand_N_Op_Lt): Likewise.
(Expand_N_Op_Minus): Likewise.
(Expand_N_Op_Mod): Likewise.
(Expand_N_Op_Multiply): Likewise.
(Expand_N_Op_Ne): Likewise.
(Expand_N_Op_Plus): Likewise.
(Expand_N_Op_Rem): Likewise.
(Expand_N_Op_Subtract): Likewise.
(Expand_N_Type_Conversion): Use Convert_To procedure.
* exp_ch9.adb (Is_Pure_Barrier) <N_Identifier>: Skip all
numeric types.
<N_Type_Conversion>: Use explicit criterion.

4 years ago[Ada] Small cleanup in constraint checking code for allocators
Eric Botcazou [Fri, 24 Apr 2020 20:05:35 +0000 (22:05 +0200)]
[Ada] Small cleanup in constraint checking code for allocators

2020-06-18  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* exp_ch4.adb (Expand_Allocator_Expression): Apply constraint
and predicate checks for the qualified expression on entry,
followed by constraint and predicate checks for the allocator
itself, and return early if this results in a static error.
(Expand_N_Allocator): Do not do the same here.  Instead apply
constraint and predicate checks for arrays in the subtype
indication case.
* exp_ch5.adb (Expand_N_Assignment_Statement): Do not apply
range checks to allocators here.

4 years ago[Ada] Crash in tagged type constructor with task components
Javier Miranda [Thu, 23 Apr 2020 17:36:43 +0000 (13:36 -0400)]
[Ada] Crash in tagged type constructor with task components

2020-06-18  Javier Miranda  <miranda@adacore.com>

gcc/ada/

* exp_ch6.adb (BIP_Suffix_Kind, Is_Build_In_Place_Entity): Move
declarations...
* exp_ch6.ads: Here.
* exp_util.adb (Is_Secondary_Stack_BIP_Func_Call): Do not rely
on the name of the scope to locate the extra formal BIPalloc
since they are copied when the pointer type associated with
dispatching calls is built; rely on routines
Is_Build_In_Place_Entity and BIP_Suffix_Kind.
* exp_disp.adb (Expand_Dispatching_Call): Set the scope of the
first extra formal of the internally built pointer type.
* sem_ch3.adb (Derive_Subprogram): Do not inherit extra formals
from a limited interface parent since limitedness is not
inherited in such case (AI-419) and this affects the extra
formals.
* sprint.adb (Write_Itype): Output extra formals of subprogram
types.

4 years ago[Ada] Update output of verbose error summary
Ghjuvan Lacambre [Thu, 23 Apr 2020 09:26:54 +0000 (11:26 +0200)]
[Ada] Update output of verbose error summary

2020-06-18  Ghjuvan Lacambre  <lacambre@adacore.com>

gcc/ada/

* errout.adb (Write_Error_Summary): Display number of warnings
treated as errors.
* errutil.ads: Update comment.

4 years ago[Ada] Small cleanup in the attribute code of the expander
Eric Botcazou [Thu, 23 Apr 2020 17:33:47 +0000 (19:33 +0200)]
[Ada] Small cleanup in the attribute code of the expander

2020-06-18  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* exp_attr.adb (Analyze_Attribute) <Asm_{In,Out}put>: Alphabetize.
<Component_Size>: Add check for universal integer attribute.
<Aft>, <Bit_Order>, <Definite>, <Max_Alignment_For_Allocation>,
<Scalar_Storage_Order>: Raise Program_Error on them.
* sem_attr.adb (Eval_Attribute) <Component_Size>: Add comment on
the packed array case.

4 years ago[Ada] Implement AI12-0032 fixes for 'Old attribute accessibility
Steve Baird [Thu, 23 Apr 2020 21:39:55 +0000 (14:39 -0700)]
[Ada] Implement AI12-0032 fixes for 'Old attribute accessibility

2020-06-18  Steve Baird  <baird@adacore.com>

gcc/ada/

* sem_util.adb (Object_Access_Level): Treat a 'Old attribute
reference like an aggregate in determining its static
accessibility level; after the evaluation of the relevant
post-condition, the implicitly declared constant associated with
an Old attribute reference ceases to exist. Similarly for
Loop_Entry attribute.
* exp_ch6.adb (Expand_Call_Helper): For an attribute reference
that is expanded into a reference to an implicitly declared
constant (e.g., a 'Old or 'Loop_Entry attribute), compute the
dynamic accessibility level of that constant by looking at the
declaration of the constant (as opposed to looking at the
attribute reference).

4 years ago[Ada] No Default_Initial_Condition check when declaring an imported object
Steve Baird [Thu, 23 Apr 2020 18:37:10 +0000 (11:37 -0700)]
[Ada] No Default_Initial_Condition check when declaring an imported object

2020-06-18  Steve Baird  <baird@adacore.com>

gcc/ada/

* exp_ch3.adb (Expand_N_Object_Declaration): Do not generate a
default initial condition check for the declaration of an
imported object.

4 years ago[Ada] Add support for XDR streaming in the default runtime
Arnaud Charlet [Thu, 23 Apr 2020 09:46:29 +0000 (05:46 -0400)]
[Ada] Add support for XDR streaming in the default runtime

2020-06-18  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* Makefile.rtl: Add s-statxd.o.
* bindgen.adb (Gen_Adainit): Add support for XDR_Stream.
* bindusg.adb (Display): Add mention of -xdr.
* gnatbind.adb: Process -xdr switch.
* init.c (__gl_xdr_stream): New.
* opt.ads (XDR_Stream): New.
* libgnat/s-stratt__xdr.adb: Rename to...
* libgnat/s-statxd.adb: this and adjust.
* libgnat/s-statxd.ads: New.
* libgnat/s-stratt.ads, libgnat/s-stratt.adb: Choose between
default and XDR implementation at runtime.
* libgnat/s-ststop.ads: Update comments.
* doc/gnat_rm/implementation_advice.rst: Update doc on XDR
streaming.
* gnat_rm.texi: Regenerate.

4 years ago[Ada] Fix host/target confusion for attribute To_Address
Eric Botcazou [Thu, 23 Apr 2020 14:22:28 +0000 (16:22 +0200)]
[Ada] Fix host/target confusion for attribute To_Address

2020-06-18  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* sem_attr.adb (Analyze_Attribute) <To_Address>: Use the address
size of the target instead of the host when checking the value of
a static expression.  Also use standard idiom for exponentiation.

4 years ago[Ada] Add second warning for convention C_Variadic_n
Eric Botcazou [Thu, 23 Apr 2020 12:26:48 +0000 (14:26 +0200)]
[Ada] Add second warning for convention C_Variadic_n

2020-06-18  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* sem_prag.adb (Process_Convention): Give a warning on C_Variadic_n
being applied to a subprogram with exactly n parameters.

4 years ago[Ada] Profile mismatch between C and Ada functions
Arnaud Charlet [Wed, 22 Apr 2020 10:11:48 +0000 (06:11 -0400)]
[Ada] Profile mismatch between C and Ada functions

2020-06-18  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* libgnarl/s-osinte__linux.ads, libgnat/g-io.adb,
libgnat/g-socket.adb, libgnat/g-socthi.adb,
libgnat/g-socthi.ads, libgnat/g-socthi__vxworks.adb,
libgnat/g-socthi__vxworks.ads, libgnat/g-sothco.ads,
libgnat/s-io.adb, libgnat/a-except.adb: Fix function profile
mismatch with imported C functions.

4 years ago[Ada] Minor cleanup in Expand_Call_Helper
Eric Botcazou [Wed, 22 Apr 2020 18:51:16 +0000 (20:51 +0200)]
[Ada] Minor cleanup in Expand_Call_Helper

2020-06-18  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* exp_ch6.adb (Expand_Call_Helper): Remove superfluous calls
to Relocate_Node and merge calls to Analyze and Resolve in a
couple of places.  Do not attempt to generate a range check
for an actual parameter against the formal's type of a derived
subprogram after generating a conversion to the formal's type
of the parent subprogram.

4 years ago[Ada] Improve compile-time evaluation of value ranges
Eric Botcazou [Tue, 21 Apr 2020 20:28:00 +0000 (22:28 +0200)]
[Ada] Improve compile-time evaluation of value ranges

2020-06-18  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* checks.adb (Compute_Range_For_Arithmetic_Op): New procedure to
compute a range for an arithmetical operation extracted from...
(Minimize_Eliminate_Overflows): ...here.  Call it.
(Determine_Range_Cache_O): New cache for Original_Node nodes.
(Determine_Range): Call Compute_Range_For_Arithmetic_Op for all
arithmetic expressions. Use Attribute_Id in lieu of Attribute_Name
for attributes. Add handling for Range_Length alongside Length.
Add specific handling for Alignment, Bit, First_Bit, Last_Bit,
Max_Size_In_Storage_Elements, Position, Bit_Position,
Component_Size, Object_Size, Size, Value_Size, Descriptor_Size.
(Enable_Overflow_Check): Omit the check for Abs and Minus if the
operand cannot be the largest negative number.
(Selected_Length_Checks): Use Pos for Number_Dimensions.
* exp_attr.adb (Expand_N_Attribute_Reference): Move compile-time
handling of Bit_Position, Descriptor_Size, First_Bit, Last_Bit
and Position to...
* sem_attr.adb (Eval_Attribute): ...here.  Move up Alignment for
objects and use Compile_Time_Known_Attribute in this case too.

4 years ago[Ada] Do not treat pragma Compile_Time_Warning as error even with -gnatwe
Ghjuvan Lacambre [Mon, 20 Apr 2020 07:41:08 +0000 (09:41 +0200)]
[Ada] Do not treat pragma Compile_Time_Warning as error even with -gnatwe

2020-06-18  Ghjuvan Lacambre  <lacambre@adacore.com>

gcc/ada/

* erroutc.ads: Declare new Is_Compile_Time_Msg boolean,
add new Compile_Time_Pragma field to Error_Msg_Object type.
(Count_Compile_Time_Pragma_Warnings): New function.
* erroutc.adb (Count_Compile_Time_Pragma_Warnings): New
function.
(Compilation_Errors): Take Compile_Time warnings into account
when tallying Errors/Warnings.
* errout.ads (Error_Msg): New procedure.
* errout.adb (Error_Msg): New procedure.
(Error_Msg_Internal): Set new Compile_Time_Pragma field in
Error_Msg_Object.
* errutil.adb (Error_Msg): Set new Compile_Time_Pragma field in
Error_Msg_Object.
* sem_prag.adb (Validate_Compile_Time_Warning_Or_Error): Pass
True to new Error_Msg procedure.
* doc/gnat_rm/implementation_defined_pragmas.rst: Update doc for
the Compile_Time_Warning pragma.
* gnat_rm.texi: Regenerate.
* opt.ads: Update comment.

4 years ago[Ada] Suppress CodePeer message on possible uninitialized variable
Arnaud Charlet [Wed, 22 Apr 2020 07:51:24 +0000 (03:51 -0400)]
[Ada] Suppress CodePeer message on possible uninitialized variable

2020-06-18  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* sem_ch4.adb (Check_Compatible_Profiles): Add explicit
initialization.

4 years ago[Ada] Fix failed assertion on a slice indexed by a subtype_indication
Piotr Trojanek [Thu, 16 Apr 2020 11:59:53 +0000 (13:59 +0200)]
[Ada] Fix failed assertion on a slice indexed by a subtype_indication

2020-06-18  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* checks.adb (Generate_Index_Checks): Handle
N_Subtype_Indication returned from Scalar_Range.

4 years ago[Ada] Cleanups in code related to static expressions
Piotr Trojanek [Thu, 16 Apr 2020 09:03:49 +0000 (11:03 +0200)]
[Ada] Cleanups in code related to static expressions

2020-06-18  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* checks.adb, sem_ch3.adb: Minor refactorings.
* sem_eval.adb (Eval_Qualified_Expression): Fix reference to RM
rule in comment; only set a local variable Hex in the branch
where it is used.

4 years ago[Ada] Avoid forced loading of System.Priority in CodePeer mode
Piotr Trojanek [Fri, 17 Apr 2020 11:34:53 +0000 (13:34 +0200)]
[Ada] Avoid forced loading of System.Priority in CodePeer mode

2020-06-18  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* sem_eval.adb (Check_Non_Static_Context): Use Is_RTE.

4 years ago[Ada] ACATS 4.1L - B452002 - Wrong universal access "=" rules
Arnaud Charlet [Tue, 14 Apr 2020 07:29:43 +0000 (03:29 -0400)]
[Ada] ACATS 4.1L - B452002 - Wrong universal access "=" rules

2020-06-18  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* sem_ch4.adb (Find_Equality_Types.Check_Access_Object_Types):
New function, used to implement RM 4.5.2 (9.6/2).
(Find_Equality_Types.Check_Compatible_Profiles): New function,
used to implement RM 4.5.2(9.7/2).
(Find_Equality_Types.Reference_Anonymous_Access_Type): New
function.
(Find_Equality_Types.Try_One_Interp): Fix handling of anonymous
access types which was accepting both too much and too little.
Remove accumulated special and incomplete cases for
instantiations, replaced by Has_Compatible_Type.
(Analyze_Overloaded_Selected_Component): Use
Is_Anonymous_Access_Type instead of Ekind_In.
* sem_res.adb: Code cleanup and bug fix: use
Is_Anonymous_Access_Type instead of Ekind_In.  Relax checking of
anonymous access parameter when universal_access "=" is
involved.
* sem_type.adb: Likewise.
(Find_Unique_Type): Move code from here...
(Specific_Type): ...to here. Also add missing handling of access
to class wide types.
* einfo.ads, einfo.adb (Is_Access_Object_Type): New.

4 years ago[Ada] AI12-0293-1 Implement storage streams
Bob Duff [Mon, 20 Apr 2020 19:11:35 +0000 (15:11 -0400)]
[Ada] AI12-0293-1 Implement storage streams

2020-06-18  Bob Duff  <duff@adacore.com>

gcc/ada/

* libgnat/a-strsto.ads, libgnat/a-ststbo.adb,
libgnat/a-ststbo.ads, libgnat/a-ststun.adb,
libgnat/a-ststun.ads: New files, containing packages
Ada.Streams.Storage, Ada.Streams.Storage.Bounded, and
Ada.Streams.Storage.Unbounded.
* impunit.adb, Makefile.rtl: Add new file names.