gcc.git
4 years agoaarch64: Fix BTI support in libitm
Szabolcs Nagy [Thu, 2 Jul 2020 16:12:05 +0000 (17:12 +0100)]
aarch64: Fix BTI support in libitm

sjlj.S did not have the GNU property note markup and the BTI c
instructions that are necessary when it is built with branch
protection.

The notes are only added when libitm is built with branch
protection, because old linkers mishandle the note (merge
them incorrectly or emit warnings), the BTI instructions
are added unconditionally.

2020-07-09  Szabolcs Nagy  <szabolcs.nagy@arm.com>

libitm/ChangeLog:

* config/aarch64/sjlj.S: Add BTI marking and related definitions,
and add BTI c to function entries.

4 years agoaarch64: Fix BTI support in libgcc [PR96001]
Szabolcs Nagy [Thu, 2 Jul 2020 16:11:56 +0000 (17:11 +0100)]
aarch64: Fix BTI support in libgcc [PR96001]

lse.S did not have the GNU property note markup and the BTI c
instructions that are necessary when it is built with branch
protection.

The notes are only added when libgcc is built with branch
protection, because old linkers mishandle the note (merge
them incorrectly or emit warnings), the BTI instructions
are added unconditionally.

Note: BTI c is only necessary at function entry if the function
may be called indirectly, currently lse functions are not called
indirectly, but BTI is added for ABI reasons e.g. to allow
linkers later to emit stub code with indirect jump.

2020-07-09  Szabolcs Nagy  <szabolcs.nagy@arm.com>

libgcc/ChangeLog:

PR target/96001
* config/aarch64/lse.S: Add BTI marking and related definitions,
and add BTI c to function entries.

4 years agoaarch64: Fix noexecstack note in libgcc
Szabolcs Nagy [Fri, 3 Jul 2020 13:11:49 +0000 (14:11 +0100)]
aarch64: Fix noexecstack note in libgcc

lse.S did not have GNU stack note, this may cause missing
PT_GNU_STACK in binaries on Linux and FreeBSD.

2020-07-09  Szabolcs Nagy  <szabolcs.nagy@arm.com>

libgcc/ChangeLog:

* config/aarch64/lse.S: Add stack note.

4 years agoaarch64: Fix noexecstack note in libitm
Szabolcs Nagy [Fri, 3 Jul 2020 13:09:25 +0000 (14:09 +0100)]
aarch64: Fix noexecstack note in libitm

sjlj.S only had the note on Linux, but it is supposed
to have it on FreeBSD too.

2020-07-09  Szabolcs Nagy  <szabolcs.nagy@arm.com>

libitm/ChangeLog:

* config/aarch64/sjlj.S: Add stack note if __FreeBSD__ is defined.

4 years agoaarch64: Add missing ACLE support for BTI
Szabolcs Nagy [Thu, 2 Jul 2020 15:04:51 +0000 (16:04 +0100)]
aarch64: Add missing ACLE support for BTI

Define the __ARM_FEATURE_BTI_DEFAULT feature test
macro when BTI branch protection is enabled.

2020-07-09  Szabolcs Nagy  <szabolcs.nagy@arm.com>

gcc/ChangeLog:

* config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins): Add
__ARM_FEATURE_BTI_DEFAULT support.

4 years agoaarch64: Mitigate SLS for BLR instruction
Matthew Malcomson [Thu, 9 Jul 2020 08:11:59 +0000 (09:11 +0100)]
aarch64: Mitigate SLS for BLR instruction

This patch introduces the mitigation for Straight Line Speculation past
the BLR instruction.

This mitigation replaces BLR instructions with a BL to a stub which uses
a BR to jump to the original value.  These function stubs are then
appended with a speculation barrier to ensure no straight line
speculation happens after these jumps.

When optimising for speed we use a set of stubs for each function since
this should help the branch predictor make more accurate predictions
about where a stub should branch.

When optimising for size we use one set of stubs for all functions.
This set of stubs can have human readable names, and we are using
`__call_indirect_x<N>` for register x<N>.

When BTI branch protection is enabled the BLR instruction can jump to a
`BTI c` instruction using any register, while the BR instruction can
only jump to a `BTI c` instruction using the x16 or x17 registers.
Hence, in order to ensure this transformation is safe we mov the value
of the original register into x16 and use x16 for the BR.

As an example when optimising for size:
a
    BLR x0
instruction would get transformed to something like
    BL __call_indirect_x0
where __call_indirect_x0 labels a thunk that contains
__call_indirect_x0:
    MOV X16, X0
    BR X16
    <speculation barrier>

The first version of this patch used local symbols specific to a
compilation unit to try and avoid relocations.
This was mistaken since functions coming from the same compilation unit
can still be in different sections, and the assembler will insert
relocations at jumps between sections.

On any relocation the linker is permitted to emit a veneer to handle
jumps between symbols that are very far apart.  The registers x16 and
x17 may be clobbered by these veneers.
Hence the function stubs cannot rely on the values of x16 and x17 being
the same as just before the function stub is called.

Similar can be said for the hot/cold partitioning of single functions,
so function-local stubs have the same restriction.

This updated version of the patch never emits function stubs for x16 and
x17, and instead forces other registers to be used.

Given the above, there is now no benefit to local symbols (since they
are not enough to avoid dealing with linker intricacies).  This patch
now uses global symbols with hidden visibility each stored in their own
COMDAT section.  This means stubs can be shared between compilation
units while still avoiding the PLT indirection.

This patch also removes the `__call_indirect_x30` stub (and
function-local equivalent) which would simply jump back to the original
location.

The function-local stubs are emitted to the assembly output file in one
chunk, which means we need not add the speculation barrier directly
after each one.
This is because we know for certain that the instructions directly after
the BR in all but the last function stub will be from another one of
these stubs and hence will not contain a speculation gadget.
Instead we add a speculation barrier at the end of the sequence of
stubs.

The global stubs are emitted in COMDAT/.linkonce sections by
themselves so that the linker can remove duplicates from multiple object
files.  This means they are not emitted in one chunk, and each one must
include the speculation barrier.

Another difference is that since the global stubs are shared across
compilation units we do not know that all functions will be targeting an
architecture supporting the SB instruction.
Rather than provide multiple stubs for each architecture, we provide a
stub that will work for all architectures -- using the DSB+ISB barrier.

This mitigation does not apply for BLR instructions in the following
places:
- Some accesses to thread-local variables use a code sequence with a BLR
  instruction.  This code sequence is part of the binary interface between
  compiler and linker. If this BLR instruction needs to be mitigated, it'd
  probably be best to do so in the linker. It seems that the code sequence
  for thread-local variable access is unlikely to lead to a Spectre Revalation
  Gadget.
- PLT stubs are produced by the linker and each contain a BLR instruction.
  It seems that at most only after the last PLT stub a Spectre Revalation
  Gadget might appear.

Testing:
  Bootstrap and regtest on AArch64
    (with BOOT_CFLAGS="-mharden-sls=retbr,blr")
  Used a temporary hack(1) in gcc-dg.exp to use these options on every
  test in the testsuite, a slight modification to emit the speculation
  barrier after every function stub, and a script to check that the
  output never emitted a BLR, or unmitigated BR or RET instruction.
  Similar on an aarch64-none-elf cross-compiler.

1) Temporary hack emitted a speculation barrier at the end of every stub
function, and used a script to ensure that:
  a) Every RET or BR is immediately followed by a speculation barrier.
  b) No BLR instruction is emitted by compiler.

gcc/ChangeLog:

* config/aarch64/aarch64-protos.h (aarch64_indirect_call_asm):
New declaration.
* config/aarch64/aarch64.c (aarch64_regno_regclass): Handle new
stub registers class.
(aarch64_class_max_nregs): Likewise.
(aarch64_register_move_cost): Likewise.
(aarch64_sls_shared_thunks): Global array to store stub labels.
(aarch64_sls_emit_function_stub): New.
(aarch64_create_blr_label): New.
(aarch64_sls_emit_blr_function_thunks): New.
(aarch64_sls_emit_shared_blr_thunks): New.
(aarch64_asm_file_end): New.
(aarch64_indirect_call_asm): New.
(TARGET_ASM_FILE_END): Use aarch64_asm_file_end.
(TARGET_ASM_FUNCTION_EPILOGUE): Use
aarch64_sls_emit_blr_function_thunks.
* config/aarch64/aarch64.h (STB_REGNUM_P): New.
(enum reg_class): Add STUB_REGS class.
(machine_function): Introduce `call_via` array for
function-local stub labels.
* config/aarch64/aarch64.md (*call_insn, *call_value_insn): Use
aarch64_indirect_call_asm to emit code when hardening BLR
instructions.
* config/aarch64/constraints.md (Ucr): New constraint
representing registers for indirect calls.  Is GENERAL_REGS
usually, and STUB_REGS when hardening BLR instruction against
SLS.
* config/aarch64/predicates.md (aarch64_general_reg): STUB_REGS class
is also a general register.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/sls-mitigation/sls-miti-blr-bti.c: New test.
* gcc.target/aarch64/sls-mitigation/sls-miti-blr.c: New test.

4 years agoaarch64: Introduce SLS mitigation for RET and BR instructions
Matthew Malcomson [Thu, 9 Jul 2020 08:11:59 +0000 (09:11 +0100)]
aarch64: Introduce SLS mitigation for RET and BR instructions

Instructions following RET or BR are not necessarily executed.  In order
to avoid speculation past RET and BR we can simply append a speculation
barrier.

Since these speculation barriers will not be architecturally executed,
they are not expected to add a high performance penalty.

The speculation barrier is to be SB when targeting architectures which
have this enabled, and DSB SY + ISB otherwise.

We add tests for each of the cases where such an instruction was seen.

This is implemented by modifying each machine description pattern that
emits either a RET or a BR instruction.  We choose not to use something
like `TARGET_ASM_FUNCTION_EPILOGUE` since it does not affect the
`indirect_jump`, `jump`, `sibcall_insn` and `sibcall_value_insn`
patterns and we find it preferable to implement the functionality in the
same way for every pattern.

There is one particular case which is slightly tricky.  The
implementation of TARGET_ASM_TRAMPOLINE_TEMPLATE uses a BR which needs
to be mitigated against.  The trampoline template is used *once* per
compilation unit, and the TRAMPOLINE_SIZE is exposed to the user via the
builtin macro __LIBGCC_TRAMPOLINE_SIZE__.
In the future we may implement function specific attributes to turn on
and off hardening on a per-function basis.
The fixed nature of the trampoline described above implies it will be
safer to ensure this speculation barrier is always used.

Testing:
  Bootstrap and regtest done on aarch64-none-linux
  Used a temporary hack(1) to use these options on every test in the
  testsuite and a script to check that the output never emitted an
  unmitigated RET or BR.

1) Temporary hack was a change to the testsuite to always use
`-save-temps` and run a script on the assembly output of those
compilations which produced one to ensure every RET or BR is immediately
followed by a speculation barrier.

gcc/ChangeLog:

* config/aarch64/aarch64-protos.h (aarch64_sls_barrier): New.
* config/aarch64/aarch64.c (aarch64_output_casesi): Emit
speculation barrier after BR instruction if needs be.
(aarch64_trampoline_init): Handle ptr_mode value & adjust size
of code copied.
(aarch64_sls_barrier): New.
(aarch64_asm_trampoline_template): Add needed barriers.
* config/aarch64/aarch64.h (AARCH64_ISA_SB): New.
(TARGET_SB): New.
(TRAMPOLINE_SIZE): Account for barrier.
* config/aarch64/aarch64.md (indirect_jump, *casesi_dispatch,
simple_return, *do_return, *sibcall_insn, *sibcall_value_insn):
Emit barrier if needs be, also account for possible barrier using
"sls_length" attribute.
(sls_length): New attribute.
(length): Determine default using any non-default sls_length
value.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/sls-mitigation/sls-miti-retbr.c: New test.
* gcc.target/aarch64/sls-mitigation/sls-miti-retbr-pacret.c:
New test.
* gcc.target/aarch64/sls-mitigation/sls-mitigation.exp: New file.
* lib/target-supports.exp (check_effective_target_aarch64_asm_sb_ok):
New proc.

4 years agoaarch64: New Straight Line Speculation (SLS) mitigation flags
Matthew Malcomson [Thu, 9 Jul 2020 08:11:58 +0000 (09:11 +0100)]
aarch64: New Straight Line Speculation (SLS) mitigation flags

Here we introduce the flags that will be used for straight line speculation.

The new flag introduced is `-mharden-sls=`.
This flag can take arguments of `none`, `all`, or a comma seperated list of one
or more of `retbr` or `blr`.
`none` indicates no special mitigation of the straight line speculation
vulnerability.
`all` requests all mitigations currently implemented.
`retbr` requests that the RET and BR instructions have a speculation barrier
inserted after them.
`blr` requests that BLR instructions are replaced by a BL to a function stub
using a BR with a speculation barrier after it.

Setting this on a per-function basis using attributes or the like is not
enabled, but may be in the future.

gcc/ChangeLog:

2020-06-02  Matthew Malcomson  <matthew.malcomson@arm.com>

* config/aarch64/aarch64-protos.h (aarch64_harden_sls_retbr_p):
New.
(aarch64_harden_sls_blr_p): New.
* config/aarch64/aarch64.c (enum aarch64_sls_hardening_type):
New.
(aarch64_harden_sls_retbr_p): New.
(aarch64_harden_sls_blr_p): New.
(aarch64_validate_sls_mitigation): New.
(aarch64_override_options): Parse options for SLS mitigation.
* config/aarch64/aarch64.opt (-mharden-sls): New option.
* doc/invoke.texi: Document new option.

4 years agovect: Enhance condition check to use partial vectors
Kewen Lin [Thu, 9 Jul 2020 03:27:41 +0000 (22:27 -0500)]
vect: Enhance condition check to use partial vectors

This patch is derived from the review of vector with length patch
series.  The length-based partial vector approach doesn't support
reduction so far, so we would like to disable vectorization with
partial vectors explicitly for it in vectorizable_condition.
Otherwise, it will cause some unexpected failures for a few cases
like gcc.dg/vect/pr65947-2.c.

But if we disable it for the cases excepting for reduction_type equal
to EXTRACT_LAST_REDUCTION, it cause one regression failure on aarch64:

  gcc.target/aarch64/sve/reduc_8.c -march=armv8.2-a+sve

The disabling makes the outer loop can't work with partial vectors,
the check fails.  But the case is safe to adopt it.  As Richard S.
pointed out in the review comments, the extra inactive lanes only
matter for double reductions, so this patch is to permit vectorization
with partial vectors for cases EXTRACT_LAST_REDUCTION or nested-cycle
reduction.

Bootstrapped/regtested on aarch64-linux-gnu.

gcc/ChangeLog:

* tree-vect-stmts.c (vectorizable_condition): Prohibit vectorization
with partial vectors explicitly excepting for EXTRACT_LAST_REDUCTION
or nested-cycle reduction.

4 years agovect/testsuite: Adjust dumping for fully masking decision
Kewen Lin [Thu, 9 Jul 2020 03:18:54 +0000 (22:18 -0500)]
vect/testsuite: Adjust dumping for fully masking decision

As Richard S. suggested in the review of vector with length patch
series, we can use one message on "partial vectors" instead of
"fully with masking".  This patch is to update the dumping string
and related test cases.

Bootstrapped/regtested on aarch64-linux-gnu.

gcc/ChangeLog:

* tree-vect-loop.c (vect_analyze_loop_2): Update dumping string
for fully masking to be more common.

gcc/testsuite/ChangeLog:

* gcc.target/aarch64/sve/clastb_1.c: Update dumping string.
* gcc.target/aarch64/sve/clastb_2.c: Likewise.
* gcc.target/aarch64/sve/clastb_3.c: Likewise.
* gcc.target/aarch64/sve/clastb_4.c: Likewise.
* gcc.target/aarch64/sve/clastb_5.c: Likewise.
* gcc.target/aarch64/sve/clastb_6.c: Likewise.
* gcc.target/aarch64/sve/clastb_7.c: Likewise.

4 years agoRISC-V: Implement __builtin_thread_pointer
Kito Cheng [Tue, 7 Jul 2020 08:20:53 +0000 (16:20 +0800)]
RISC-V: Implement __builtin_thread_pointer

RISC-V has a dedicate register for thread pointer which is specified in psABI
doc, so we could support __builtin_thread_pointer in straightforward way.

Note: clang/llvm was supported __builtin_thread_pointer for RISC-V port
recently.
- https://reviews.llvm.org/rGaabc24acf0d5f8677bd22fe9c108581e07c3e180

gcc/ChangeLog:

* config/riscv/riscv.md (get_thread_pointer<mode>): New.
(TP_REGNUM): Ditto.
* doc/extend.texi (Target Builtins): Add RISC-V built-in section.
Document __builtin_thread_pointer.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/read-thread-pointer.c: New.

4 years agoRISC-V: Disable remove unneeded save-restore call optimization if there are any argum...
Kito Cheng [Fri, 3 Jul 2020 05:49:51 +0000 (13:49 +0800)]
RISC-V: Disable remove unneeded save-restore call optimization if there are any arguments on stack.

 - This optimization will adjust stack, but it not check/update other
   stack pointer use-site, the example is when the arguments put on
   stack, the offset become wrong after optimization.

 - However adjust stack frame usage after register allocation could be
   error prone, so we decide to turn off this optimization for such case.

 - Ye-Ting Kuo report this issue on github:
   https://github.com/riscv/riscv-gcc/pull/192

gcc/ChangeLog:

* config/riscv/riscv-sr.c (riscv_remove_unneeded_save_restore_calls):
Abort if any arguments on stack.

gcc/testsuite/ChangeLog

* gcc.target/riscv/save-restore-9.c: New.

4 years agoDaily bump.
GCC Administrator [Thu, 9 Jul 2020 00:16:44 +0000 (00:16 +0000)]
Daily bump.

4 years agoMake memory copy functions scalar storage order barriers
Eric Botcazou [Wed, 8 Jul 2020 22:13:50 +0000 (00:13 +0200)]
Make memory copy functions scalar storage order barriers

This addresses the issue raised about the usage of memory copy functions
to toggle the scalar storage order.  Recall that you cannot (the compiler
errors out) take the address of a scalar which is stored in reverse order,
but you can do it for the enclosing aggregate type., which means that you
can also pass it to the memory copy functions.  In this case, the optimizer
may rewrite the copy into a scalar copy, which is a no-no.

gcc/c-family/ChangeLog:
* c.opt (Wscalar-storage-order): Add explicit variable.

gcc/c/ChangeLog:
* c-typeck.c (convert_for_assignment): If -Wscalar-storage-order is
set, warn for conversion between pointers that point to incompatible
scalar storage orders.

gcc/ChangeLog:
* gimple-fold.c (gimple_fold_builtin_memory_op): Do not fold if
either type has reverse scalar storage order.
* tree-ssa-sccvn.c (vn_reference_lookup_3): Do not propagate through
a memory copy if either type has reverse scalar storage order.

gcc/testsuite/ChangeLog:
* gcc.dg/sso-11.c: New test.
* gcc.dg/sso/sso.exp: Pass -Wno-scalar-storage-order.
* gcc.dg/sso/memcpy-1.c: New test.

4 years agoamdgcn, nvptx: Handle -fpic/-fPIC in mkoffload
Kwok Cheung Yeung [Mon, 6 Jul 2020 22:21:08 +0000 (15:21 -0700)]
amdgcn, nvptx: Handle -fpic/-fPIC in mkoffload

2020-07-08  Tobias Burnus  <tobias@codesourcery.com>

gcc/ChangeLog:

* config/gcn/mkoffload.c (compile_native, main): Pass -fPIC/-fpic
on to the native compiler, if used.
* config/nvptx/mkoffload.c (compile_native, main): Likewise.

4 years agoPR fortran/96085 - ICE in gfc_finish_var_decl, at fortran/trans-decl.c:694
Harald Anlauf [Wed, 8 Jul 2020 18:53:12 +0000 (20:53 +0200)]
PR fortran/96085 - ICE in gfc_finish_var_decl, at fortran/trans-decl.c:694

Legacy ASSIGN requires a scalar integer variable.  Reject parameter
arguments.

gcc/fortran/
PR fortran/96085
* resolve.c (gfc_resolve_code): Check whether assign target is a
parameter.

4 years agoUpdate gcc sv.po.
Joseph Myers [Wed, 8 Jul 2020 18:30:23 +0000 (18:30 +0000)]
Update gcc sv.po.

* sv.po: Update.

4 years agoc++: ICE in is_really_empty_class [PR95497]
Patrick Palka [Wed, 8 Jul 2020 18:17:47 +0000 (14:17 -0400)]
c++: ICE in is_really_empty_class [PR95497]

We are ICEing in the testcase below because we pass the
yet-uninstantiated class type A<int> of the PARM_DECL b to
is_really_empty_class from is_rvalue_constant_expression when parsing
the requirement t += b.

This patch fixes the ICE by guarding the problematic call to
is_really_empty_class with a COMPLETE_TYPE_P check, which should also
subsume the existing dependent_type_p check.

gcc/cp/ChangeLog:

PR c++/95497
* constexpr.c (potential_constant_expression_1) <case PARM_DECL>:
When processing_template_decl, check COMPLETE_TYPE_P before
calling is_really_empty_class.  Don't check dependent_type_p.

gcc/testsuite/ChangeLog:

PR c++/95497
* g++.dg/cpp2a/concepts-pr95497.C: New test.

4 years ago[PATCH, rs6000]Add support to enable vmsumudm behind vec_msum builtin.
Will Schmidt [Thu, 18 Jun 2020 20:14:00 +0000 (15:14 -0500)]
[PATCH, rs6000]Add support to enable vmsumudm behind vec_msum builtin.

gcc/ChangeLog:

2020-07-08  Will Schmidt  <will_schmidt@vnet.ibm.com>

* config/rs6000/altivec.h (vec_vmsumudm): New define.
* config/rs6000/altivec.md (UNSPEC_VMSUMUDM): New unspec.
  (altivec_vmsumudm): New define_insn.
* config/rs6000/rs6000-builtin.def (altivec_vmsumudm): New BU_ALTIVEC_3
  entry. (vmsumudm): New BU_ALTIVEC_OVERLOAD_3 entry.
* config/rs6000/rs6000-call.c (altivec_overloaded_builtins): Add entries for
  ALTIVEC_BUILTIN_VMSUMUDM variants of vec_msum.
* doc/extend.texi: Add document for vmsumudm behind vmsum.

gcc/testsuite/ChangeLog:

2020-07-08  Will Schmidt  <will_schmidt@vnet.ibm.com>

* gcc.target/powerpc/builtins-msum-runnable.c: New test.
* gcc.target/powerpc/vsx-builtin-msum.c: New test.

4 years agocompute and check alignment info during analysis
Richard Biener [Wed, 8 Jul 2020 11:50:51 +0000 (13:50 +0200)]
compute and check alignment info during analysis

This moves querying the alignment support scheme from load/store
transform time to get_load_store_type where we should know best
what alignment constraints we actually need.  This should make
verify_data_ref_alignment obsolete which prematurely disqualifies
all vectorization IMHO.

2020-07-08  Richard Biener  <rguenther@suse.de>

* tree-vect-stmts.c (get_group_load_store_type): Pass
in the SLP node and the alignment support scheme output.
Set that.
(get_load_store_type): Likewise.
(vectorizable_store): Adjust.
(vectorizable_load): Likewise.

4 years ago[Ada] Disable warning about unsafe use of __builtin_frame_address
Eric Botcazou [Mon, 25 May 2020 08:53:00 +0000 (10:53 +0200)]
[Ada] Disable warning about unsafe use of __builtin_frame_address

gcc/ada/

* tracebak.c [generic implementation]: Add pragma GCC diagnostic
to disable warning about __builtin_frame_address.

4 years ago[Ada] Fix C miss parentheses warning on Windows
Dmitriy Anisimkov [Sun, 24 May 2020 18:57:12 +0000 (00:57 +0600)]
[Ada] Fix C miss parentheses warning on Windows

gcc/ada/

* socket.c [_WIN32] (__gnat_minus_500ms): Parentheses around &&
operations.  Remove notes about TN in comment.

4 years ago[Ada] Fix warnings in C runtime files on Windows
Eric Botcazou [Sun, 24 May 2020 13:13:05 +0000 (15:13 +0200)]
[Ada] Fix warnings in C runtime files on Windows

gcc/ada/

* adaint.h (__gnat_expect_portable_execvp): Fix prototype.
(__gnat_expect_poll): Likewise.
* expect.c [_WIN32]: Include adaint.h file.
(__gnat_waitpid): Remove useless variable.
(__gnat_expect_portable_execvp): Add ATTRIBUTE_UNUSED on parameter.
* raise-gcc.c [SEH] (__gnat_personality_v0): Add ATTRIBUTE_UNUSED.
* socket.c [_WIN32] (__gnat_getservbyport): Add ATTRIBUTE_UNUSED on
a couple of parameters.
(__gnat_gethostbyname): Likewise.
(__gnat_gethostbyaddr): Likewise.
(__gnat_getservbyname): Likewise.
(__gnat_last_socket_in_set): Use variables local to loops.
(__gnat_socket_ioctl): Cast 3rd parameter to proper type if _WIN32.
(__gnat_inet_pton): Cast 2nd parameter to proper type if _WIN32.
* sysdep.c (__gnat_localtime_tzoff): Remove superfluous test.
* terminals.c [_WIN32]: Include io.h file.
(is_gui_app): Remove useless variables and fix unsigned comparison.
(nt_spawnve): Add ATTRIBUTE_UNUSED on first parameter.  Initialize a
local variable and remove others that are useless.  Add missing cast
(__gnat_setup_child_communication): Remove useless variable and call
Use proper formatting string in call to sprintf.
(__gnat_setup_parent_communication): Cast to proper type.
(find_child_console): Fix prototype and remove useless variable.
(find_process_handle): Likewise.
(_gnat_interrupt_process): Move to after __gnat_interrupt_pid.
(__gnat_reset_tty): Add ATTRIBUTE_UNUSED on parameter, remove return
(__gnat_setup_winsize): Add ATTRIBUTE_UNUSED on all parameters.

4 years ago[Ada] Do not apply constraint checks on allocator with No_Initialization
Eric Botcazou [Sun, 24 May 2020 13:23:42 +0000 (15:23 +0200)]
[Ada] Do not apply constraint checks on allocator with No_Initialization

gcc/ada/

* exp_ch4.adb (Expand_N_Allocator): In the subtype mark case, do
not apply constraint checks if the No_Initialization flag is set.

4 years ago[Ada] Fix recent regression on _Master declaration
Javier Miranda [Fri, 22 May 2020 19:29:57 +0000 (15:29 -0400)]
[Ada] Fix recent regression on _Master declaration

gcc/ada/

* exp_ch9.adb
(Build_Class_Wide_Master): Insert the declaration of _Master
before its use; required to avoid assertion failure in the
backend.

4 years ago[Ada] Clean up in Interfaces.C.Extensions
Arnaud Charlet [Fri, 22 May 2020 12:21:46 +0000 (08:21 -0400)]
[Ada] Clean up in Interfaces.C.Extensions

gcc/ada/

* libgnat/i-cexten.ads (long_long, unsigned_long_long): Now
subtypes of Interfaces.C types.
* libgnat/a-calcon.ads, libgnat/a-calcon.adb
(To_Unix_Nano_Time): Use Interfaces.C.long_long instead of
Interfaces.C.Extensions.long_long.

4 years ago[Ada] Optional warning on build-in-place function calls
Vasiliy Fofanov [Fri, 22 May 2020 11:22:41 +0000 (13:22 +0200)]
[Ada] Optional warning on build-in-place function calls

gcc/ada/

* debug.adb: Document new switch.
* exp_ch6.adb (Warn_BIP): New function that warns if the switch
is on.  Call it from Make_Build_In_Place_* functions.  Warn_BIP
is not needed in Make_Build_In_Place_Iface_*, because those call
Make_Build_In_Place_Call_In_Object_Declaration or similar.

4 years ago[Ada] Fix typo and layout in comments about matching
Piotr Trojanek [Fri, 22 May 2020 11:56:06 +0000 (13:56 +0200)]
[Ada] Fix typo and layout in comments about matching

gcc/ada/

* erroutc.adb (Matches): Fix comments.

4 years ago[Ada] Fix internal error on string type comparision with predicate
Eric Botcazou [Thu, 21 May 2020 23:37:00 +0000 (01:37 +0200)]
[Ada] Fix internal error on string type comparision with predicate

gcc/ada/

* freeze.adb (Has_Decl_In_List): New predicate to check that an
entity is declared in a list of nodes.
(Freeze_Expression): Use it to deal with Expression_With_Actions,
short-circuit expression, if- and case-expression and ensure that
the freeze node is put onto their Actions list if the entity is
declared locally.

4 years ago[Ada] Fix incorrect placement of freeze node with predicate
Eric Botcazou [Wed, 20 May 2020 22:58:06 +0000 (00:58 +0200)]
[Ada] Fix incorrect placement of freeze node with predicate

gcc/ada/

* freeze.adb (In_Expanded_Body): Return true for the body of a
generated predicate function.

4 years ago[Ada] Minor reformatting and typo fix
Gary Dismukes [Wed, 20 May 2020 17:44:34 +0000 (13:44 -0400)]
[Ada] Minor reformatting and typo fix

gcc/ada/

* sem_attr.adb: Remove hyphens in comments, plus minor code
reformatting.
* sem_ch13.adb: Fix typo (that => than).
* sem_util.adb: Add hyphen in comment ("class-wide").

4 years ago[Ada] Add comment on implementation choice for byte-packed array types
Eric Botcazou [Wed, 20 May 2020 08:13:05 +0000 (10:13 +0200)]
[Ada] Add comment on implementation choice for byte-packed array types

gcc/ada/

* freeze.adb (Freeze_Array_Type): Add comment on implementation
choice for byte-packed array types.

4 years ago[Ada] Accept aspect Relaxed_Initialization on generic subprograms
Piotr Trojanek [Fri, 15 May 2020 13:11:18 +0000 (15:11 +0200)]
[Ada] Accept aspect Relaxed_Initialization on generic subprograms

gcc/ada/

* sem_attr.adb (Analyze_Attribute): Correct prefix of 'Result
this prefix is a generic function but the enclosing aspect or
pragma is attached to its instance.
* sem_ch12.adb (Analyze_Generic_Subprogram_Declaration): Analyze
generic subprogram formal parameters (including the implicit
result of a generic function) and only then analyse its aspects,
because with Relaxed_Initialization the aspect expression might
refer to those formal parameters.
* sem_ch13.adb (Analyze_Aspect_Relaxed_Initialization): Accept
aspect on generic subprograms; install formal parameters of a
generic subprogram but not formal parameters of the generic unit
itself (the previous code was inspired by aspects Post and
Depends, where both kinds of formals are allowed).
* sem_util.ads (Enter_Name): Fix name of a subprogram referenced
in comment.

4 years ago[Ada] Analyze aspects once generic subprograms are recognized
Piotr Trojanek [Thu, 14 May 2020 10:11:52 +0000 (12:11 +0200)]
[Ada] Analyze aspects once generic subprograms are recognized

gcc/ada/

* sem_ch12.adb (Analyze_Generic_Subprogram_Declaration): Call
Analyze_Aspect_Specifications after setting Ekind of the
analyzed entity.
* sem_ch13.adb (Analyze_Aspect_Yield): Remove minimal decoration
of generic subprograms.

4 years ago[Ada] ACATS 4.1R - BD10001 - Error missed
Arnaud Charlet [Mon, 18 May 2020 10:00:31 +0000 (06:00 -0400)]
[Ada] ACATS 4.1R - BD10001 - Error missed

gcc/ada/

* sem_prag.adb (Process_Inline): Check for duplicate
pragma+aspect Inline. Minor code cleanup.
(Check_Duplicate_Pragma): Add warning for duplicate
pragma [No_]Inline under -gnatwr.
* sinfo.ads, sinfo.adb (Next_Rep_Item): Allow N_Null_Statement
which can appear when a pragma is rewritten.
* sem_util.ads, sem_util.adb, bindo-writers.adb: Fix bad
copy/paste now flagged.
* libgnat/s-mmap.ads: Remove redundant pragma Inline.

4 years ago[Ada] Update entities on class-wide condition function creation
Ed Schonberg [Mon, 18 May 2020 09:25:32 +0000 (11:25 +0200)]
[Ada] Update entities on class-wide condition function creation

gcc/ada/

* sem_util.adb (Build_Class_Wide_Clone_Body): Update entities to
refer to the right spec.

4 years ago[Ada] Disallow Predicate_Failure without predicate
Bob Duff [Tue, 19 May 2020 13:23:21 +0000 (09:23 -0400)]
[Ada] Disallow Predicate_Failure without predicate

gcc/ada/

* sem_ch13.adb (Predicate_Failure): Check that the type has
predicates.  Remove the setting of Has_Delayed_Aspects and
Freeze_Node, because (if the code is legal) it should have
already been done by the predicate aspect.

4 years ago[Ada] Typo corrections, plus minor reformatting in comments
Gary Dismukes [Tue, 19 May 2020 18:30:05 +0000 (14:30 -0400)]
[Ada] Typo corrections, plus minor reformatting in comments

gcc/ada/

* par-ch4.adb (P_Iterated_Component_Association): Typo
corrections.

4 years ago[Ada] Ada_2020 AI12-0250 : Implement Iterator filters.
Ed Schonberg [Mon, 18 May 2020 01:02:59 +0000 (21:02 -0400)]
[Ada] Ada_2020 AI12-0250 : Implement Iterator filters.

gcc/ada/

* par.adb (P_Iterator_Specification): Make public for use in
other parser subprograms.
* par-ch4.adb (P_Iterated_Component_Association): In Ada_2020,
recognize use of Iterator_Specification in an element iterator.
To simplify disambiguation between the two iterator forms, mark
the component association as carrying an Iterator_Specification
only when the element iterator (using "OF") is used.
* par-ch5.adb (P_Loop_Parameter_Specification): In Ada_2020,
parse iterator filter when present.
(P_Iterator_Specification): Ditto.  Remove declaration of
P_Iterator_Specification, now in parent unit.
* exp_ch5.adb (Expand_N_Loop_Statement): Apply Iterator filter
when present.
(Expand_Iterator_Loop_Over_Array): Ditto.
(Expand_Iterator_Loop_Over_Container): Ditto.
* sem_aggr.adb (Resolve_Array_Aggregate): Emit error nessage if
an iterated component association includes a iterator
specificcation with an element iterator, i.e. one that uses the
OF keyword.
* sem_ch5.adb (Analyze_Iterator_Specification): Analyze Iterator
filter when present.
(Analyze_Loop_Parameter_Specification): Ditto.
* sinfo.adb: Suprogram bodies for new syntactic element
Iterator_Filter.
* sinfo.ads: Add Iterator_Filter to relevant nodes.  Structure
of Component_Association and Iteroted_Component_Association
nodes is modified to take into account the possible  presence of
an iterator specification in the latter.

4 years ago[Ada] Add utility function to recognize attribute 'Loop_Entry
Yannick Moy [Tue, 19 May 2020 14:11:28 +0000 (16:11 +0200)]
[Ada] Add utility function to recognize attribute 'Loop_Entry

gcc/ada/

* sem_util.ads, sem_util.adb (Is_Attribute_Loop_Entry): New
function for GNATProve.

4 years ago[Ada] Add expected and actual size to "bit number out of range" error message
Ghjuvan Lacambre [Mon, 18 May 2020 13:41:09 +0000 (15:41 +0200)]
[Ada] Add expected and actual size to "bit number out of range" error message

gcc/ada/

* sem_ch13.adb (Analyze_Record_Representation_Clause,
Check_Record_Representation_Clause): Add expected and actual
size to error message.

4 years ago[Ada] Remove excessive validity checks on in-parameters
Piotr Trojanek [Mon, 18 May 2020 19:41:12 +0000 (21:41 +0200)]
[Ada] Remove excessive validity checks on in-parameters

gcc/ada/

* sem_util.ads, sem_util.adb (Safe_To_Capture_Value): Return
True for in-parameters.

4 years ago[Ada] Minor refactoring
Justin Squirek [Mon, 6 Apr 2020 11:53:12 +0000 (07:53 -0400)]
[Ada] Minor refactoring

gcc/ada/

* exp_attr.adb (Expand_Attribute): Set
Stores_Attribute_Old_Prefix to generated renamings of 'Old
constants for later use in generating finalization routines.
* exp_ch7.adb (Build_Finalizer): Minor reformatting. Use "or
else" operators.

4 years ago[Ada] Static expression function problems with -gnatc and -gnatd.F (SPARK mode)
Gary Dismukes [Sun, 17 May 2020 21:57:05 +0000 (17:57 -0400)]
[Ada] Static expression function problems with -gnatc and -gnatd.F (SPARK mode)

gcc/ada/

* exp_ch6.adb (Expand_Simple_Function_Return): Remove ugly code
that was copying the return expression, resetting Analyzed
flags, etc. for the return expression of static expression
functions.
* inline.adb (Inline_Static_Expression_Function_Call): Set the
Parent of the copied expression to that of the call. This avoids
a blowup in Insert_Actions when GNATprove_Mode is set and there
are nested SEF calls. Add ??? comment.
* sem_ch6.adb (Analyze_Expression_Function): In the case of a
static expression function, create a new copy of the expression
and replace the function's expression with the copy; the
original expression is used in the expression function's body
and will be analyzed and rewritten, and we need to save a clean
copy for later use in processing static calls to the function.
This allows removing the kludgy code that was in
Expand_Simple_Function_Return.
* sem_eval.adb (Eval_Qualified_Expression): Return immediately
if any errors have been posted on the qualified expression, to
avoid blowups when GNATprove_Mode is enabled (or with -gnatd.F),
since illegal static expressions are handled differently in that
case and attempting to fold such expressions would fail.

4 years ago[Ada] Fix inaccurate -gnatR output for derived untagged types
Eric Botcazou [Mon, 18 May 2020 20:36:49 +0000 (22:36 +0200)]
[Ada] Fix inaccurate -gnatR output for derived untagged types

gcc/ada/

* repinfo.adb (Compute_Max_Length): Skip hidden discriminants.
(List_Record_Layout): Likewise.
(List_Structural_Record_Layout): Use First_Discriminant instead
of First_Stored_Discriminant and Next_Discriminant instead of
Next_Stored_Discriminant to walk the list of discriminants.

4 years ago[Ada] Allow boolean expressions in aspect Relaxed_Initialization
Piotr Trojanek [Mon, 18 May 2020 16:46:49 +0000 (18:46 +0200)]
[Ada] Allow boolean expressions in aspect Relaxed_Initialization

gcc/ada/

* sem_ch13.adb (Analyze_Aspect_Relaxed_Initialization): Analyze
optional boolean expressions.
* sem_util.ads, sem_util.adb (Has_Relaxed_Initialization): Adapt
query; update comment.

4 years ago[Ada] Style cleanups related to Current_Condition
Piotr Trojanek [Fri, 15 May 2020 18:40:03 +0000 (20:40 +0200)]
[Ada] Style cleanups related to Current_Condition

gcc/ada/

* einfo.ads (Current_Value): Fix typo in comment.
* exp_ch2.adb (Expand_Current_Value): Remove unnecessary "Start
of processing ..." comment.
* exp_util.adb (Set_Entity_Current_Value): Fix unbalanced paren
in comment.
(Get_Current_Value_Condition): Fix layout in comment.
* sem_ch5.adb (Analyze_Cond_Then): Replace commented condition
with pragma Assert.

4 years ago[Ada] Extend optimization to True/False prefixed with Standard
Piotr Trojanek [Fri, 15 May 2020 18:27:18 +0000 (20:27 +0200)]
[Ada] Extend optimization to True/False prefixed with Standard

gcc/ada/

* exp_ch5.adb (Expand_N_If_Statement): Detect True/False
prefixed with Standard.

4 years ago[Ada] Check predicates for subtypes of private types
Bob Duff [Sat, 16 May 2020 15:59:50 +0000 (11:59 -0400)]
[Ada] Check predicates for subtypes of private types

gcc/ada/

* sem_ch13.adb (Analyze_Aspect_Specifications): Add freeze node
for the Underlying_Full_View if it exists. The freeze node is
what triggers the generation of the predicate function.
* freeze.adb: Minor reformatting.

4 years ago[Ada] Small tweak to Narrow_Large_Operation procedure
Eric Botcazou [Sat, 16 May 2020 13:42:04 +0000 (15:42 +0200)]
[Ada] Small tweak to Narrow_Large_Operation procedure

gcc/ada/

* exp_ch4.adb (Narrow_Large_Operation): Use the base type instead
of the first subtype of standard integer types as narrower type.

4 years agoexpr: Fix REDUCE_BIT_FIELD for constants [PR95694]
Richard Sandiford [Wed, 8 Jul 2020 14:01:14 +0000 (15:01 +0100)]
expr: Fix REDUCE_BIT_FIELD for constants [PR95694]

This is yet another PR caused by constant integer rtxes not storing
a mode.  We were calling REDUCE_BIT_FIELD on a constant integer that
didn't fit in poly_int64, and then tripped the as_a<scalar_int_mode>
assert on VOIDmode.

AFAICT REDUCE_BIT_FIELD is always passed rtxes that have TYPE_MODE
(rather than some other mode) and it just fills in the redundant
sign bits of that TYPE_MODE value.  So it should be safe to get
the mode from the type instead of the rtx.  The patch does that
and asserts that the modes agree, where information is available.

That on its own is enough to fix the bug, but we might as well
extend the folding case to all constant integers, not just those
that fit poly_int64.

gcc/
PR middle-end/95694
* expr.c (expand_expr_real_2): Get the mode from the type rather
than the rtx, and assert that it is consistent with the mode of
the rtx (where known).  Optimize all constant integers, not just
those that can be represented in poly_int64.

gcc/testsuite/
PR middle-end/95694
* gcc.dg/pr95694.c: New test.

4 years agoc++: Better diagnostic for decltype(auto) in C++11 [PR96103]
Marek Polacek [Tue, 7 Jul 2020 21:09:42 +0000 (17:09 -0400)]
c++: Better diagnostic for decltype(auto) in C++11 [PR96103]

If you try to use decltype(auto) in C++11, we emit obscure

  error: expected primary-expression before 'auto'

giving the user no hint as to what's wrong.  This patch improves that
diagnostic.  Since we've been giving an error, I'm also using error().

gcc/cp/ChangeLog:

PR c++/96103
* parser.c (cp_parser_decltype): Print error about using decltype(auto)
in C++11.  Check that the token following "auto" is ")".

gcc/testsuite/ChangeLog:

PR c++/96103
* g++.dg/cpp0x/decltype77.C: New test.

4 years agors6000: Add len_load/len_store optab support
Kewen Lin [Wed, 8 Jul 2020 07:44:02 +0000 (02:44 -0500)]
rs6000: Add len_load/len_store optab support

Define rs6000 specific len_load/len_store for the LEN_LOAD/LEN_STORE
internal function's expansion.  As the doc description of the
len_load/len_store optab shows, we should use V16QI to wrap those
available vector modes.

gcc/ChangeLog:

* config/rs6000/vsx.md (len_load_v16qi): New define_expand.
(len_store_v16qi): Likewise.

4 years agoIFN/optabs: Support vector load/store with length
Kewen Lin [Wed, 8 Jul 2020 07:33:03 +0000 (02:33 -0500)]
IFN/optabs: Support vector load/store with length

This patch is to add the internal function and optabs support for
vector load/store with length.

For the vector load/store with length optab, the length item would
be measured in lanes by default.  For the targets which support
length measured in bytes like Power, they should only define VnQI
modes to wrap the other same size vector modes.  If the length is
larger than total lane/byte count of the given mode, the behavior
is undefined.  For the remaining lanes/bytes which isn't specified
by length, they would be taken as undefined value.

gcc/ChangeLog:

* doc/md.texi (len_load_@var{m}): Document.
(len_store_@var{m}): Likewise.
* internal-fn.c (len_load_direct): New macro.
(len_store_direct): Likewise.
(expand_len_load_optab_fn): Likewise.
(expand_len_store_optab_fn): Likewise.
(direct_len_load_optab_supported_p): Likewise.
(direct_len_store_optab_supported_p): Likewise.
(expand_mask_load_optab_fn): New macro.  Original renamed to ...
(expand_partial_load_optab_fn): ... here.  Add handlings for
len_load_optab.
(expand_mask_store_optab_fn): New macro.  Original renamed to ...
(expand_partial_store_optab_fn): ... here. Add handlings for
len_store_optab.
(internal_load_fn_p): Handle IFN_LEN_LOAD.
(internal_store_fn_p): Handle IFN_LEN_STORE.
(internal_fn_stored_value_index): Handle IFN_LEN_STORE.
* internal-fn.def (LEN_LOAD): New internal function.
(LEN_STORE): Likewise.
* optabs.def (len_load_optab, len_store_optab): New optab.

4 years agolibstdc++: Fix [multi]map/[multi]set move constructors noexcept qualification
François Dumont [Fri, 3 Jul 2020 06:13:19 +0000 (08:13 +0200)]
libstdc++: Fix [multi]map/[multi]set move constructors noexcept qualification

Container move constructors shall not consider their allocator move
constructor qualification.

libstdc++-v3/ChangeLog:

* include/bits/stl_tree.h (_Rb_tree_impl(_Rb_tree_impl&&)): Add noexcept
qualification based only on _Compare one.
* testsuite/23_containers/map/cons/noexcept_move_construct.cc: Add
static asserts.
* testsuite/23_containers/multimap/cons/noexcept_move_construct.cc:
Likewise.
* testsuite/23_containers/multiset/cons/noexcept_move_construct.cc:
Likewise.
* testsuite/23_containers/set/cons/noexcept_move_construct.cc: Likewise.

4 years agolibbacktrace: test linker support for DWARF 5
Ian Lance Taylor [Wed, 8 Jul 2020 03:42:21 +0000 (20:42 -0700)]
libbacktrace: test linker support for DWARF 5

On AIX, the compiler supports DWARF 5 but the linker does not.

2020-07-07 Clement Chigot <clement.chigot@atos.net>

* configure.ac: Test linker support for DWARF5
* configure: Regenerate

4 years agoDaily bump.
GCC Administrator [Wed, 8 Jul 2020 00:16:40 +0000 (00:16 +0000)]
Daily bump.

4 years agoc++: Add new test [PR92427]
Marek Polacek [Tue, 7 Jul 2020 23:28:04 +0000 (19:28 -0400)]
c++: Add new test [PR92427]

Fixed in r10-5578.

PR c++/92427
* g++.dg/ext/flexary37.C: New test.

4 years agolibstdc++: Whitespace changes to remove spaces before tabs
Jonathan Wakely [Tue, 7 Jul 2020 22:39:44 +0000 (23:39 +0100)]
libstdc++: Whitespace changes to remove spaces before tabs

libstdc++-v3/ChangeLog:

* include/std/limits: Whitespace changes.

4 years agolibstdc++: Replace __int_limits with __numeric_traits_integer
Jonathan Wakely [Tue, 7 Jul 2020 22:26:38 +0000 (23:26 +0100)]
libstdc++: Replace __int_limits with __numeric_traits_integer

I recently added std::__detail::__int_limits as a lightweight
alternative to std::numeric_limits, forgetting that the values it
provides (digits, min and max) are already provided by
__gnu_cxx::__numeric_traits.

This change adds __int_traits as an alias for __numeric_traits_integer.
This avoids instantiating __numeric_traits to decide whether to use
__numeric_traits_integer or __numeric_traits_floating. Then all uses of
__int_limits can be replaced with __int_traits, and __int_limits can be
removed.

libstdc++-v3/ChangeLog:

* include/Makefile.am: Remove bits/int_limits.h.
* include/Makefile.in: Regenerate.
* include/bits/int_limits.h: Removed.
* include/bits/parse_numbers.h (_Select_int_base): Replace
__int_limits with __int_traits.
* include/bits/range_access.h (_SSize::operator()): Likewise.
* include/ext/numeric_traits.h (__numeric_traits_integer): Add
static assertion.
(__int_traits): New alias template.
* include/std/bit (__rotl, __rotr, __countl_zero, __countl_one)
(__countr_zero, __countr_one, __popcount, __bit_ceil)
(__bit_floor, __bit_width) Replace __int_limits with
__int_traits.
* include/std/charconv (__to_chars_8, __from_chars_binary)
(__from_chars_alpha_to_num, from_chars): Likewise.
* include/std/memory_resource (polymorphic_allocator::allocate)
(polymorphic_allocator::allocate_object): Likewise.
* include/std/string_view (basic_string_view::_S_compare):
Likewise.
* include/std/utility (cmp_equal, cmp_less, in_range): Likewise.

4 years agolibstdc++: Whitespace changes to keep lines below 80 columns
Jonathan Wakely [Tue, 7 Jul 2020 22:26:38 +0000 (23:26 +0100)]
libstdc++: Whitespace changes to keep lines below 80 columns

Also remove leading spaces that are followed by tabs.

libstdc++-v3/ChangeLog:

* include/std/limits: Whitespace changes.

4 years agoc++: wrong pretty printing of nested type [PR95303]
Patrick Palka [Tue, 7 Jul 2020 20:33:12 +0000 (16:33 -0400)]
c++: wrong pretty printing of nested type [PR95303]

In the testcase below, we pretty print the nested type A<int>::B as
A<int>::B<int> because we don't check whether B is itself a class
template before printing the innermost set of template arguments from
B's TEMPLATE_INFO (which in this case belong to A).  This patch fixes
this by checking PRIMARY_TEMPLATE_P beforehand.

gcc/cp/ChangeLog:

PR c++/95303
* cxx-pretty-print.c (pp_cxx_unqualified_id): Check
PRIMARY_TEMPLATE_P before printing the innermost template
arguments.

gcc/testsuite/ChangeLog:

PR c++/95303
* g++.dg/concepts/diagnostic14.C: New test.

4 years agors6000: fix power10_hw test
Aaron Sawdey [Tue, 7 Jul 2020 17:48:56 +0000 (12:48 -0500)]
rs6000: fix power10_hw test

The code snippet for this test was returning 1 if power10
instructions executed correctly. It should return 0 if the
test passes.

* lib/target-supports.exp (check_power10_hw_available):
Return 0 for passing test.

4 years agotestsuite: missed testcase
Nathan Sidwell [Tue, 7 Jul 2020 18:43:58 +0000 (11:43 -0700)]
testsuite: missed testcase

I discovered I'd missed applying a testcase when fixing up the EOF
token location a while back.

gcc/testsuite/
* c-c++-common/cpp/pragma-eof.c: New

4 years agopreprocessor: Better line info for <builtin> & <command-line>
Nathan Sidwell [Tue, 7 Jul 2020 18:28:59 +0000 (11:28 -0700)]
preprocessor: Better line info for <builtin> & <command-line>

With C++ module header units it becomes important to distinguish
between macros defined in forced headers (& commandline & builtins)
from those defined in the header file being processed.  We weren't
making that easy because we treated the builtins and command-line
locations somewhat file-like, with incrementing line numbers, and
showing them as included from line 1 of the main file.  This patch does
3 things:

0) extend the idiom that 'line 0' of a file means 'the file as a whole'

1) builtins and command-line macros are shown as-if included from line zero.

2) when emitting preprocessed output we keep resetting the line number
so that re-reading that preprocessed output will get the same set of
locations for the command line etc.

For instance the new c-c++-common/cpp/line-2.c test, now emits

In file included from <command-line>:
./line-2.h:4:2: error: #error wrong
    4 | #error wrong
      |  ^~~~~
line-2.c:3:11: error: macro "bill" passed 1 arguments, but takes just 0
    3 | int bill(1);
      |           ^
In file included from <command-line>:
./line-2.h:3: note: macro "bill" defined here
    3 | #define bill() 2
      |

Before it told you about including from <command-line>:31.

the preprocessed output looks like:
...

(There's a new optimization in do_line_marker to stop each of these
line markers causing a new line map.  We can simply rewind the
location, and keep using the same line map.)

libcpp/
* directives.c (do_linemarker): Optimize rewinding to line zero.
* files.c (_cpp_stack_file): Start on line zero when about to inject
headers.
(cpp_push_include, cpp_push_default_include): Use highest_line as
the location.
* include/cpplib.h (cpp_read_main_file): Add injecting parm.
* init.c (cpp_read_main_file): Likewise, inform _cpp_stack_file.
* internal.h (enum include_type): Add IT_MAIN_INJECT.
gcc/c-family/
* c-opts.c (c_common_post_options): Add 'injecting' arg to
cpp_read_main_file.
(c_finish_options): Add linemap_line_start calls for builtin and cmd
maps.  Force token position to line_table's highest line.
* c-ppoutput.c (print_line_1): Refactor, print line zero.
(cb_define): Always increment source line.
gcc/testsuite/
* c-c++-common/cpp/line-2.c: New.
* c-c++-common/cpp/line-2.h: New.
* c-c++-common/cpp/line-3.c: New.
* c-c++-common/cpp/line-4.c: New.
* c-c++-common/cpp/line-4.h: New.

4 years agoAvoid printing informational notes when -Wmismatched-tags is suppressed in system...
Martin Sebor [Tue, 7 Jul 2020 17:23:50 +0000 (11:23 -0600)]
Avoid printing informational notes when -Wmismatched-tags is suppressed in system headers (PR c++/96063)

Related:
PR c++/96063 - mismatched-tags warnings in stdlib headers

gcc/cp/ChangeLog:

PR c++/96063
* parser.c (class_decl_loc_t::diag_mismatched_tags): Print notes only
if warning_at returns nonzero.

gcc/testsuite/ChangeLog:

PR c++/96063
* g++.dg/warn/Wmismatched-tags-7.C: New test.
* g++.dg/warn/Wmismatched-tags-8.C: New test.

4 years agoAarch64: Change costs for TX2 to expose more vectorization opportunities
Anton Youdkevitch [Tue, 26 May 2020 11:23:04 +0000 (04:23 -0700)]
Aarch64: Change costs for TX2 to expose more vectorization opportunities

Make the costs such that they do not exaclty reflect
the actual instructions costs from the manual but make
the codegen emit the code we want it to.

gcc/ChangeLog:

* config/aarch64/aarch64.c (thunderx2t99_regmove_cost,
thunderx2t99_vector_cost): Likewise.

4 years agofix detection of negative step DR groups
Richard Biener [Tue, 7 Jul 2020 11:57:40 +0000 (13:57 +0200)]
fix detection of negative step DR groups

This fixes a condition that caused all negative step DR groups to
be detected as single element interleaving.  Such groups are
rejected by interleaving vectorization but miscompiled by SLP
which is fixed by forcing VMAT_STRIDED_SLP for now.

2020-07-07  Richard Biener  <rguenther@suse.de>

* tree-vect-data-refs.c (vect_analyze_data_ref_accesses): Fix
group overlap condition to allow negative step DR groups.
* tree-vect-stmts.c (get_group_load_store_type): For
multi element SLP groups force VMAT_STRIDED_SLP when the step
is negative.

* gcc.dg/vect/slp-47.c: New testcase.
* gcc.dg/vect/slp-48.c: Likewise.

4 years ago[Ada] Small adjustment in the handling of alignment for arrays
Eric Botcazou [Fri, 15 May 2020 21:15:38 +0000 (23:15 +0200)]
[Ada] Small adjustment in the handling of alignment for arrays

gcc/ada/

* freeze.adb (Freeze_Array_Type): Use Ctyp more consistently.
Move code setting the alignment in the non-packed case to...
* layout.adb (Layout_Type): ...here.

4 years ago[Ada] Avoid crash on node extension
Bob Duff [Fri, 15 May 2020 15:40:50 +0000 (11:40 -0400)]
[Ada] Avoid crash on node extension

gcc/ada/

* treepr.adb (Print_Node): Add code to test Is_Extension.

4 years ago[Ada] Assert failure on invalid Variable_Indexing
Arnaud Charlet [Fri, 15 May 2020 09:41:10 +0000 (05:41 -0400)]
[Ada] Assert failure on invalid Variable_Indexing

gcc/ada/

* sem_ch4.adb (Try_Container_Indexing): Add ??? comment. Protect
against malformed tree in case of errors.

4 years ago[Ada] Use Is_Generic_Subprogram where possible
Piotr Trojanek [Thu, 14 May 2020 19:56:29 +0000 (21:56 +0200)]
[Ada] Use Is_Generic_Subprogram where possible

gcc/ada/

* einfo.adb, sem_ch10.adb, sem_ch12.adb, sem_ch8.adb: Use
Is_Generic_Subprogram.

4 years ago[Ada] Fix typo in code to get a better error message
Piotr Trojanek [Thu, 14 May 2020 20:08:09 +0000 (22:08 +0200)]
[Ada] Fix typo in code to get a better error message

gcc/ada/

* sem_ch8.adb (Analyze_Use_Package): Replace low-level,
error-prone Ekind_In tests with high-level Is_Generic_Subprogram
and Is_Subprogram.

4 years ago[Ada] ACATS 4.1J - B854003 - Subtype conformance check missed #2
Arnaud Charlet [Thu, 14 May 2020 12:33:15 +0000 (08:33 -0400)]
[Ada] ACATS 4.1J - B854003 - Subtype conformance check missed #2

gcc/ada/

* sem_ch6.adb (Check_Formal_Subprogram_Conformance): New
subprogram to handle checking without systematically emitting an
error.
(Check_Conformance): Update call to
Check_Formal_Subprogram_Conformance and fix handling of Conforms
and Errmsg parameters.

4 years ago[Ada] ACATS 4.1K - C452003
Arnaud Charlet [Wed, 13 May 2020 08:41:03 +0000 (04:41 -0400)]
[Ada] ACATS 4.1K - C452003

gcc/ada/

* exp_ch4.adb (Tagged_Membership): Generate a call to
CW_Membership instead of using Build_CW_Membership.
(Expand_N_In): Remove wrong handling of null access types and
corresponding comment.
* exp_intr.adb (Expand_Dispatching_Constructor_Call): Generate a
call to CW_Membership instead of using Build_CW_Membership.
* rtsfind.ads: Add CW_Membership.
* exp_atag.ads, exp_atag.adb (Build_CW_Membership): Removed.
* einfo.ads: Fix typo.
* libgnat/a-tags.ads, libgnat/a-tags.adb (CW_Membership): Moved
back to spec.

4 years ago[Ada] Errors in handling of access_to_subprogram contracts
Ed Schonberg [Thu, 14 May 2020 15:06:54 +0000 (11:06 -0400)]
[Ada] Errors in handling of access_to_subprogram contracts

gcc/ada/

* exp_ch3.adb (Build_Access_Subprogram_Wrapper_Body): Create
proper subprogram specification for body, using names in the
subprogram declaration but distinct entities.
* exp_ch6.adb (Expand_Call): If this is an indirect call
involving a subprogram wrapper, insert pointer parameter in list
of actuals with a parameter association, not as a positional
parameter.

4 years ago[Ada] Hang on conditional expression as actual
Justin Squirek [Wed, 13 May 2020 22:59:29 +0000 (18:59 -0400)]
[Ada] Hang on conditional expression as actual

gcc/ada/

* exp_ch6.adb (Expand_Branch): Verify the original node is a
conditional expression before recursing further.
(Insert_Level_Assign): Transform assertion into an explicit
raise.

4 years ago[Ada] Simplify statically known Max_Size_In_Storage_Elements attribute in more cases
Steve Baird [Wed, 13 May 2020 17:38:35 +0000 (10:38 -0700)]
[Ada] Simplify statically known Max_Size_In_Storage_Elements attribute in more cases

gcc/ada/

* sem_attr.adb (Eval_Attribute): Generalize static evaluation of
Size attribute references to also handle
Max_Size_In_Storage_Elements references.

4 years ago[Ada] Ada2020: AI12-0198 potentially unevaluated components of arrays
Javier Miranda [Wed, 13 May 2020 10:24:59 +0000 (06:24 -0400)]
[Ada] Ada2020: AI12-0198 potentially unevaluated components of arrays

gcc/ada/

* sem_util.adb (Is_Potentially_Unevaluated): Code cleanup.

4 years ago[Ada] Move generation of range checks for entry families to expander
Eric Botcazou [Sun, 10 May 2020 20:02:44 +0000 (22:02 +0200)]
[Ada] Move generation of range checks for entry families to expander

gcc/ada/

* checks.ads (Expander Routines): Update the description of the
Do_Range_Check mechanism.
* checks.adb (Selected_Range_Checks): Fix typo.
* exp_ch9.adb: Add with and use clause for Checks.
(Actual_Index_Expression): Generate a range check if requested.
(Entry_Index_Expression): Likewise.
* sem_attr.adb (Resolve_Attribute) <Attribute_Count>: Call
Apply_Scalar_Range_Check instead of Apply_Range_Check.
* sem_ch9.adb (Analyze_Accept_Statement): Likewise.
* sem_res.adb (Resolve_Entry): Likewise, after having set the
actual index type on the prefix of the indexed component.
(Resolve_Indexed_Component): Remove useless conditional construct.

4 years ago[Ada] Freeze aspect expression relocated to pragma Precondition
Piotr Trojanek [Tue, 12 May 2020 19:17:08 +0000 (21:17 +0200)]
[Ada] Freeze aspect expression relocated to pragma Precondition

gcc/ada/

* contracts.adb (Analyze_Entry_Or_Subprogram_Contract,
Process_Preconditions_For): Freeze expression that has been
relocated to pragma Precondition, not the expression which is
still in the aspect.

4 years ago[Ada] ACATS 4.1H - BC60005 - null exclusion matching for formal subprograms
Arnaud Charlet [Sun, 10 May 2020 20:36:00 +0000 (16:36 -0400)]
[Ada] ACATS 4.1H - BC60005 - null exclusion matching for formal subprograms

gcc/ada/

* sem_ch6.adb (Check_Conformance): Remove unnecessary (and
wrong) code.
* sem_ch8.adb (Check_Null_Exclusion): Post error at proper
location.  Introduce new helper Null_Exclusion_Mismatch and fix
implementation wrt formal subprograms used in generic bodies.
(Analyze_Subprogram_Renaming): Fix missing setting of
Error_Msg_Sloc.
(Analyze_Object_Renaming): Replace "in Anonymous_Access_Kind" by
Is_Anonymous_Access_Type.
* sem_util.adb (Has_Null_Exclusion): Fix handling of
N_Parameter_Specification.
* sem_ch12.adb (Instantiate_Object): Replace "in
Anonymous_Access_Kind" by Is_Anonymous_Access_Type.

4 years ago[Ada] Handle explicit dereferences in expression functions
Ed Schonberg [Tue, 12 May 2020 12:20:22 +0000 (08:20 -0400)]
[Ada] Handle explicit dereferences in expression functions

gcc/ada/

* freeze.adb (Freeze_Expr_Types): Freeze the designated type of
the explicit dereference.

4 years ago[Ada] Ada2020: AI12-0198 potentially unevaluated components of arrays
Javier Miranda [Tue, 12 May 2020 15:01:16 +0000 (11:01 -0400)]
[Ada] Ada2020: AI12-0198 potentially unevaluated components of arrays

gcc/ada/

* sem_util.adb (Is_Potentially_Unevaluated): Protect reading
attribute Etype.

4 years ago[Ada] Use pragma Unsuppress in Time_IO
Bob Duff [Tue, 12 May 2020 15:07:36 +0000 (11:07 -0400)]
[Ada] Use pragma Unsuppress in Time_IO

gcc/ada/

* libgnat/g-catiio.adb (Value, Parse_ISO_8601): Unsuppress
checks, and don't rely on 'Valid.

4 years ago[Ada] Add support for XDR streaming in the default runtime
Arnaud Charlet [Tue, 12 May 2020 14:35:12 +0000 (16:35 +0200)]
[Ada] Add support for XDR streaming in the default runtime

gcc/ada/

* Makefile.rtl: Remove dead code.
* doc/gnat_ugn/building_executable_programs_with_gnat.rst:
Document gnatbind -xdr switch.
* gnat_ugn.texi: Regenerate.

4 years ago[Ada] Fix documentation of -gnatVa switch
Piotr Trojanek [Mon, 11 May 2020 21:48:34 +0000 (23:48 +0200)]
[Ada] Fix documentation of -gnatVa switch

gcc/ada/

* doc/gnat_ugn/building_executable_programs_with_gnat.rst
(Validity Checking): Add "p" to the list of switches enabled by
-gnatVa.
* gnat_ugn.texi: Regenerate.

4 years ago[Ada] Ensure No_Specification_Of_Aspect forbids pragmas and repr. clauses
Ghjuvan Lacambre [Mon, 11 May 2020 11:51:13 +0000 (13:51 +0200)]
[Ada] Ensure No_Specification_Of_Aspect forbids pragmas and repr. clauses

gcc/ada/

* sem_ch13.adb (Analyze_Attribute_Definition_Clause): Add call
to Check_Restriction_No_Specification_Of_Aspect.
* sem_prag.adb (Analyze_Pragma): Likewise.
* restrict.ads (Check_Restriction_No_Specification_Of_Aspect):
Mention possible new node kinds in documentation.
* restrict.adb (Check_Restriction_No_Specification_Of_Aspect):
Retrieve aspect id from different fields if given node is an
N_Pragma or an N_Attribute_Definition_Clause.

4 years ago[Ada] Checking type invariants on in params of procedures, not functions (AI12-0044)
Gary Dismukes [Mon, 11 May 2020 14:34:26 +0000 (10:34 -0400)]
[Ada] Checking type invariants on in params of procedures, not functions (AI12-0044)

gcc/ada/

* contracts.adb (Add_Invariant_And_Predicate_Checks): Relax the
condition for doing invariant checks so that in-mode parameters
of procedures are also checked (required by AI05-0289, and
restricted to procedures by AI12-0044). This is done in a
procedure's nested postconditions procedure.
* exp_ch6.adb (Expand_Actuals): Also perform postcall invariant
checks for in parameters of procedures (but not functions).
Moved invariant-checking code to end of Expand_Actuals
(including the nested function Is_Public_Subp).

4 years ago[Ada] Change local object from variable to constant
Piotr Trojanek [Sun, 10 May 2020 19:56:42 +0000 (21:56 +0200)]
[Ada] Change local object from variable to constant

gcc/ada/

* sem_aggr.adb (Resolve_Delta_Array_Aggregate): Make Index_Type
a constant.

4 years ago[Ada] Fix expansion of delta aggregates with slices
Piotr Trojanek [Sun, 10 May 2020 19:12:33 +0000 (21:12 +0200)]
[Ada] Fix expansion of delta aggregates with slices

gcc/ada/

* exp_aggr.adb (Expand_N_Delta_Aggregate): Use type of the delta
base expression for the anonymous object of the delta aggregate.

4 years ago[Ada] Ada2020: AI12-0198 potentially unevaluated components of arrays
Javier Miranda [Sun, 10 May 2020 11:27:02 +0000 (07:27 -0400)]
[Ada] Ada2020: AI12-0198 potentially unevaluated components of arrays

gcc/ada/

* sem_util.ads (Interval_Lists): Reordering routine.
* sem_util.adb (Interval_Lists): Reordering routines to keep
them alphabetically ordered.

4 years ago[Ada] Remove extra checks for non-static context from resolving 'Update
Piotr Trojanek [Mon, 11 May 2020 16:21:29 +0000 (18:21 +0200)]
[Ada] Remove extra checks for non-static context from resolving 'Update

gcc/ada/

* sem_attr.adb (Resolve_Attribute): Do not call
Check_Non_Static_Context.

4 years ago[Ada] Spurious elaboration warnings with -gnatc and null procedures
Arnaud Charlet [Sat, 9 May 2020 17:37:13 +0000 (13:37 -0400)]
[Ada] Spurious elaboration warnings with -gnatc and null procedures

gcc/ada/

* sem_elab.adb (Is_Guaranteed_ABE): Take into account null
procedures.

4 years ago[Ada] Minor cleanup with Is_Assignable
Piotr Trojanek [Sun, 10 May 2020 14:16:30 +0000 (16:16 +0200)]
[Ada] Minor cleanup with Is_Assignable

gcc/ada/

* sem_ch5.adb (Analyze_Assignment): Reuse Is_Assignable.

4 years ago[Ada] Set range checks for for 'Update on arrays in GNATprove expansion
Piotr Trojanek [Sat, 9 May 2020 20:30:56 +0000 (22:30 +0200)]
[Ada] Set range checks for for 'Update on arrays in GNATprove expansion

gcc/ada/

* exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Add scalar
range checks for 'Update on arrays just like for 'Update on
records.
* sem_attr.adb (Analyze_Array_Component_Update): Do not set
range checks for single-dimensional arrays.
(Resolve_Attribute): Do not set range checks for both single-
and multi- dimensional arrays.

4 years ago[Ada] Style fixes in the description of Analysis-Resolution-Expansion
Piotr Trojanek [Sun, 10 May 2020 19:55:27 +0000 (21:55 +0200)]
[Ada] Style fixes in the description of Analysis-Resolution-Expansion

gcc/ada/

* sem.ads (Sem): Fix description.

4 years ago[Ada] Allow aspect Relaxed_Initialization on protected entries
Piotr Trojanek [Sun, 10 May 2020 21:16:43 +0000 (23:16 +0200)]
[Ada] Allow aspect Relaxed_Initialization on protected entries

gcc/ada/

* sem_ch13.adb (Analyze_Relaxed_Parameter): Fix for protected
entries.

4 years agoFix a typo in doc/generic.texi
Qian Jianhua [Tue, 7 Jul 2020 09:12:07 +0000 (10:12 +0100)]
Fix a typo in doc/generic.texi

gcc/
* doc/generic.texi: Fix typo.

4 years agoPass correct parameters to c_parser_do_statement.
Kaipeng Zhou [Tue, 7 Jul 2020 09:07:28 +0000 (10:07 +0100)]
Pass correct parameters to c_parser_do_statement.

gcc/c/ChangeLog:

* c-parser.c (c_parser_statement_after_labels): Pass correct
parameters to c_parser_do_statement.