gcc.git
4 years ago[Ada] Add support for compile time evaluation of Shift_Right_Arithmetic
Arnaud Charlet [Sun, 21 Jun 2020 08:27:07 +0000 (04:27 -0400)]
[Ada] Add support for compile time evaluation of Shift_Right_Arithmetic

gcc/ada/

* sem_eval.adb (Eval_Intrinsic_Call, Fold_Shift): Add support
for Shift_Right_Arithmetic and for signed integers.
* exp_ch4.adb (Expand_N_Op_Rotate_Left,
Expand_N_Op_Rotate_Right, Expand_N_Op_Shift_Left,
Expand_N_Op_Shift_Right_Arithmetic): Minor reformatting and code
cleanup to ensure a consistent handling. Update comments and add
assertion.

4 years ago[Ada] Ada2020: AI12-0180 Using subprograms and entries in invariants
Bob Duff [Mon, 22 Jun 2020 19:23:45 +0000 (15:23 -0400)]
[Ada] Ada2020: AI12-0180 Using subprograms and entries in invariants

gcc/ada/

* sem_ch13.adb (Visible_Component): Enable this code for task
and protected types, as well as record and private types.
* sem_ch13.ads (Replace_Type_References_Generic): Update
comment.  Move the efficiency comment into the body, because
it's about the implementation.

4 years ago[Ada] Warn on unknown aspect
Arnaud Charlet [Mon, 22 Jun 2020 06:59:37 +0000 (02:59 -0400)]
[Ada] Warn on unknown aspect

gcc/ada/

* par-ch13.adb (Get_Aspect_Specifications): Generate a warning
rather than an error on unknown aspects unless -gnatd2 is used.
(Aspect_Specifications_Present): Improve detection of unknown
aspects.
* debug.adb (Debug_Flag_2): Update document.

4 years ago[Ada] Complete support for static intrinsic functions
Arnaud Charlet [Sun, 21 Jun 2020 17:52:29 +0000 (13:52 -0400)]
[Ada] Complete support for static intrinsic functions

gcc/ada/

* sem_res.adb (Resolve_Call): Do not try to inline intrinsic
calls.

4 years ago[Ada] Ada_2020: Add aspect Aggregate to standard container units
Ed Schonberg [Sun, 21 Jun 2020 16:58:55 +0000 (12:58 -0400)]
[Ada] Ada_2020: Add aspect Aggregate to standard container units

gcc/ada/

* exp_aggr.adb (Expand_N_Aggregate): A record aggregate requires
a non-private type.
* sem_ch13.adb (Valid_Assign_Indexed): New subprogram local to
Resolve_Aspect_Aggregate, to handle the case when the
corresponding name appearing in the aspect specification for an
indexed aggregate is an overloaded operation.
* libgnat/a-convec.ads, libgnat/a-convec.adb,
libgnat/a-coinve.ads, libgnat/a-coinve.adb,
libgnat/a-cobove.ads, libgnat/a-cobove.adb,
libgnat/a-cdlili.ads, libgnat/a-cdlili.adb,
libgnat/a-cbdlli.ads, libgnat/a-cbdlli.adb,
libgnat/a-cohama.ads, libgnat/a-cihama.ads,
libgnat/a-cbhama.ads, libgnat/a-cborma.ads,
libgnat/a-ciorma.ads, libgnat/a-coorma.ads,
libgnat/a-cihase.ads, libgnat/a-cohase.ads,
libgnat/a-cbhase.ads, libgnat/a-cborse.ads,
libgnat/a-ciorse.ads, libgnat/a-coorse.ads: Add Ada_2020 aspect
Aggregate to types declared in standard containers, as well as
new subprograms where required.

4 years ago[Ada] Add iterators over GNAT.Array_Split.Slice_Set
Arnaud Charlet [Sun, 21 Jun 2020 16:36:27 +0000 (12:36 -0400)]
[Ada] Add iterators over GNAT.Array_Split.Slice_Set

gcc/ada/

* libgnat/g-arrspl.ads, libgnat/g-arrspl.adb (Create,
First_Cursor, Advance, Has_Element): New.

4 years ago[Ada] AI12-0385 Predefined shifts and rotates should be static
Arnaud Charlet [Wed, 17 Jun 2020 11:41:34 +0000 (07:41 -0400)]
[Ada] AI12-0385 Predefined shifts and rotates should be static

gcc/ada/

* Makefile.rtl: Add target pair for interfac.ads.
* libgnat/interfac.ads: Add a comment.
* libgnat/interfac__2020.ads: New, used for bootstrap purposes.
* sem_util.adb (Is_Static_Function): Always return False for pre
Ada 2020 to e.g. ignore the Static aspect in Interfaces for
Ada < 2020.

4 years ago[Ada] Do not remove side effects from any object declarations in SPARK
Piotr Trojanek [Fri, 19 Jun 2020 15:14:42 +0000 (17:14 +0200)]
[Ada] Do not remove side effects from any object declarations in SPARK

gcc/ada/

* exp_util.adb (Remove_Side_Effects): Move special-casing for
GNATprove to be applied to all object declarations.

4 years agotree-optimization/97482 - fix split_constant_offset of nop-conversions
Richard Biener [Thu, 15 Oct 2020 07:10:40 +0000 (09:10 +0200)]
tree-optimization/97482 - fix split_constant_offset of nop-conversions

split_constant_offset is confused about a nop-conversion from
unsigned long to sizetype and tries to prove non-overflowing
of the inner operation.  Obviously the conversion could have been
elided so make sure split_constant_offset handles this properly.

It also makes sure that convert_to_ptrofftype does not introduce
conversions not necessary which in this case is the source for
the unnecessary conversion.

2020-10-15  Richard Biener  <rguenther@suse.de>

PR tree-optimization/97482
* tree-data-ref.c (split_constant_offset_1): Handle
trivial conversions better.
* fold-const.c (convert_to_ptrofftype_loc): Elide conversion
if the offset is already ptrofftype_p.

* gcc.dg/vect/pr97428.c: New testcase.

4 years ago[nvptx, testsuite] Remove xfail for PR84958
Tom de Vries [Thu, 15 Oct 2020 08:29:40 +0000 (10:29 +0200)]
[nvptx, testsuite] Remove xfail for PR84958

The xfail in gcc.dg/tree-ssa/pr84512.c for PR84958 has started to xpass,
presumably because of commit 744fd446c32 "tree-ssa-sccvn.c (class pass_fre):
Add may_iterate pass parameter".

Remove the xfail.  Tested on nvptx.

gcc/testsuite/ChangeLog:

2020-10-15  Tom de Vries  <tdevries@suse.de>

* gcc.dg/tree-ssa/pr84512.c: Remove xfail for nvptx.

4 years ago[nvptx, testsuite] Fix xpass with ident-0b.c
Tom de Vries [Thu, 15 Oct 2020 07:37:03 +0000 (09:37 +0200)]
[nvptx, testsuite] Fix xpass with ident-0b.c

For nvptx, I see:
...
XPASS: c-c++-common/ident-0b.c  -Wc++-compat   scan-assembler-not GCC:
...

Fix this by requiring effective target ident_directive.  Tested on nvptx.

gcc/testsuite/ChangeLog:

2020-10-15  Tom de Vries  <tdevries@suse.de>

* c-c++-common/ident-0b.c: Require effective target ident_directive.

4 years ago[nvptx, testsuite] Remove dg-skip-if for ptxas oom
Tom de Vries [Thu, 15 Oct 2020 06:00:23 +0000 (08:00 +0200)]
[nvptx, testsuite] Remove dg-skip-if for ptxas oom

There's a dg-skip-if for nvptx that is related to ptxas oom.

If I remove it, the test-case passes for me (with ptxas from cuda 9.1).

I've tested it on a range of cudas, from 5.0 to 11.1 and did not
manage to reproduce the fail.

Remove the dg-skip-if.  Tested on nvptx.

gcc/testsuite/ChangeLog:

2020-10-15  Tom de Vries  <tdevries@suse.de>

* gcc.c-torture/compile/limits-externdecl.c: Remove dg-skip-if for
nvptx.

4 years ago[nvptx, testsuite] Disable default xfails
Tom de Vries [Wed, 14 Oct 2020 10:07:21 +0000 (12:07 +0200)]
[nvptx, testsuite] Disable default xfails

For nvptx, I run into a couple of XPASSes due to nvptx not being listed in:
...
  { xfail { ! { long list of targets } } }
...

Add nvptx to the list to get a PASS.  Tested on nvptx.

gcc/testsuite/ChangeLog:

2020-10-15  Tom de Vries  <tdevries@suse.de>

* gcc.dg/attr-alloc_size-11.c: Don't xfail for nvptx.
* gcc.dg/tree-ssa/20040204-1.c: Same.

4 years ago[nvptx, testsuite] Remove dg-skip-if for ptxas crash fixed in cuda 8.0
Tom de Vries [Wed, 14 Oct 2020 14:26:50 +0000 (16:26 +0200)]
[nvptx, testsuite] Remove dg-skip-if for ptxas crash fixed in cuda 8.0

The test-case gcc.c-torture/execute/pr68185.c has a dg-skip-if for nvptx due
to "ptxas crashes or executes incorrectly".

I've managed to reproduce the problem using cuda 7.5:
...
FAIL: gcc.c-torture/execute/pr68185.c   -O0  (test for excess errors)
Excess errors:
nvptx-as: ptxas terminated with signal 11 [Segmentation fault], core dumped
...
but it's fixed starting cuda 8.0.

Remove the dg-skip-if.  Tested on nvptx.

gcc/testsuite/ChangeLog:

2020-10-15  Tom de Vries  <tdevries@suse.de>

* gcc.c-torture/execute/pr68185.c: Remove dg-skip-if for nvptx.

4 years ago[nvptx, testsuite] Remove dg-skip-if for ptxas crashes
Tom de Vries [Wed, 14 Oct 2020 14:18:16 +0000 (16:18 +0200)]
[nvptx, testsuite] Remove dg-skip-if for ptxas crashes

There's a dg-skip-if for nvptx that is related to a ptxas crash.

If I remove it, the test-case passes for me (with ptxas from cuda 9.1).

I've tested this on a range of cudas, from 5.0 to 11.1 and did not
manage to reproduce the fail.

Remove the dg-skip-if.  Tested on nvptx.

gcc/testsuite/ChangeLog:

2020-10-15  Tom de Vries  <tdevries@suse.de>

* gcc.c-torture/execute/981019-1.c: Remove dg-skip-if for nvptx.

4 years ago[nvptx, testsuite] Remove xpassing xfails for ptxas crashes
Tom de Vries [Wed, 14 Oct 2020 13:51:24 +0000 (15:51 +0200)]
[nvptx, testsuite] Remove xpassing xfails for ptxas crashes

There's a couple of nvptx xfails that are related to ptxas crashes,
which are xpassing for me (with ptxas from cuda 9.1).

I've tested these on a range of cudas, from 5.0 to 11.1 and did not
manage to reproduce the fails.

Remove the xfails.  Tested on nvptx.

gcc/testsuite/ChangeLog:

2020-10-15  Tom de Vries  <tdevries@suse.de>

* gcc.c-torture/compile/pr42717.c: Remove nvptx xfail.
* gcc.c-torture/compile/pr61684.c: Same.
* gcc.c-torture/execute/pr20601-1.c: Same.
* gcc.c-torture/execute/pr52129.c: Same.
* gcc.c-torture/execute/pr59221.c: Same.
* gcc.dg/pr68671.c: Same.

4 years agotestsuite: Partially fix up modref-*.c tests
Jakub Jelinek [Thu, 15 Oct 2020 08:19:23 +0000 (10:19 +0200)]
testsuite: Partially fix up modref-*.c tests

This ia a partial attempt to fix:
FAIL: gcc.dg/ipa/modref-1.c (test for excess errors)
FAIL: gcc.dg/ipa/modref-1.c scan-ipa-dump modref "param offset: 1"
FAIL: gcc.dg/ipa/modref-1.c scan-ipa-dump modref "param offset: 2"
FAIL: gcc.dg/tree-ssa/modref-4.c (test for excess errors)
FAIL: gcc.dg/tree-ssa/modref-4.c scan-tree-dump modref1 "param offset: 1"
UNRESOLVED: gcc.dg/tree-ssa/modref-4.c scan-tree-dump modref2 "param offset: 2"
UNRESOLVED: gcc.dg/tree-ssa/modref-4.c scan-tree-dump modref2 "return 0"
The return 0 scan still FAILs.

2020-10-15  Jakub Jelinek  <jakub@redhat.com>

* gcc.dg/ipa/modref-1.c: Remove space between param offset: and number
in scan-ipa-dump.
(b): Declare return type to void.
(main): Declare return type to int.  Change c to array of 3 chars.
* gcc.dg/tree-ssa/modref-4.c: Remove space between param offset: and
number in scan-ipa-dump.  Use modref1 instead of modref2.
(b): Declare return type to void.
(main): Declare return type to int.  Change c to array of 3 chars.

4 years agoIPA: fix profile handling in IRA
Martin Liska [Tue, 13 Oct 2020 14:44:47 +0000 (16:44 +0200)]
IPA: fix profile handling in IRA

gcc/ChangeLog:

PR ipa/97295
* profile-count.c (profile_count::to_frequency): Move part of
gcc_assert to STATIC_ASSERT.
* regs.h (REG_FREQ_FROM_BB): Do not use count.to_frequency for
a function that does not have count_max initialized.

4 years agoparams: Fix up help.exp testing
Jakub Jelinek [Thu, 15 Oct 2020 07:24:06 +0000 (09:24 +0200)]
params: Fix up help.exp testing

This patch fixes:
Running /usr/src/gcc/gcc/testsuite/gcc.misc-tests/help.exp ...
FAIL: compiler driver --help=params option(s): "[^.]$" absent from output: "y"
FAIL: compiler driver --help=param option(s): "^ +-.*[^:.]$" absent from output: "  --param-ipa-jump-function-lookups= Maximum number of statements visited during jump function offset discovery"

2020-10-15  Jakub Jelinek  <jakub@redhat.com>

* params.opt (-param-ipa-jump-function-lookups=): Add full stop at
the end of the parameter description.

4 years agoRISC-V: Add support for -mcpu option.
Kito Cheng [Tue, 13 Oct 2020 07:07:21 +0000 (15:07 +0800)]
RISC-V: Add support for -mcpu option.

 - The behavior of -mcpu basically equal to -march plus -mtune, but it
   has lower priority than -march and -mtune.

 - The behavior and available options has sync with clang except we don't add
   few LLVM specific value, and add more sifive processor to the list.

 - -mtune also accept all available options of -mcpu, and use it setting.

gcc/ChangeLog:

* common/config/riscv/riscv-common.c (riscv_cpu_tables): New.
(riscv_arch_str): Return empty string if current_subset_list
is NULL.
(riscv_find_cpu): New.
(riscv_handle_option): Verify option value of -mcpu.
(riscv_expand_arch): Using std::string.
(riscv_default_mtune): New.
(riscv_expand_arch_from_cpu): Ditto.
* config/riscv/riscv-cores.def: New.
* config/riscv/riscv-protos.h (riscv_find_cpu): New.
(riscv_cpu_info): New.
* config/riscv/riscv.c (riscv_tune_info): Rename ...
(riscv_tune_param): ... to this.
(riscv_cpu_info): Rename ...
(riscv_tune_info): ... to this.
(tune_info): Rename ...
(tune_param): ... to this.
(rocket_tune_info): Update data type name.
(sifive_7_tune_info): Ditto.
(optimize_size_tune_info): Ditto.
(riscv_cpu_info_table): Rename ...
(riscv_tune_info_table): ... to this.
(riscv_parse_cpu): Rename ...
(riscv_parse_tune): ... to this, and translate valid -mcpu option to
-mtune option.
(riscv_rtx_costs): Rename tune_info to tune_param.
(riscv_class_max_nregs): Ditto.
(riscv_memory_move_cost): Ditto.
(riscv_init_machine_status): Use value of -mcpu if -mtune is not
given, and rename tune_info to tune_param.
* config/riscv/riscv.h (riscv_expand_arch_from_cpu): New.
(riscv_default_mtune): Ditto.
(EXTRA_SPEC_FUNCTIONS): Add riscv_expand_arch_from_cpu and
riscv_default_mtune.
(OPTION_DEFAULT_SPECS): Handle default value of -march/-mabi.
(DRIVER_SELF_SPECS): Expand -march from -mcpu if -march is not
given.
* config/riscv/riscv.opt (-mcpu): New option.
* config/riscv/t-riscv ($(common_out_file)): Add
riscv-cores.def to dependency.
* doc/invoke.texi (RISC-V Option): Add -mcpu, and update the
description of default value for -mtune and -march.

gcc/testsuite/ChangeLog:

* gcc.target/riscv/mcpu-1.c: New.
* gcc.target/riscv/mcpu-2.c: Ditto.
* gcc.target/riscv/mcpu-3.c: Ditto.
* gcc.target/riscv/mcpu-4.c: Ditto.
* gcc.target/riscv/mcpu-5.c: Ditto.
* gcc.target/riscv/mcpu-6.c: Ditto.
* gcc.target/riscv/mcpu-7.c: Ditto.

4 years agoEnable Intel HRESET Instruction
Hongyu Wang [Tue, 7 Apr 2020 18:39:53 +0000 (18:39 +0000)]
Enable Intel HRESET Instruction

gcc/

* common/config/i386/cpuinfo.h (get_available_features):
Detect HRESET.
* common/config/i386/i386-common.c (OPTION_MASK_ISA2_HRESET_SET,
OPTION_MASK_ISA2_HRESET_UNSET): New macros.
(ix86_handle_option): Handle -mhreset.
* common/config/i386/i386-cpuinfo.h (enum processor_features):
Add FEATURE_HRESET.
* common/config/i386/i386-isas.h: Add ISA_NAMES_TABLE_ENTRY
for hreset.
* config.gcc: Add hresetintrin.h
* config/i386/hresetintrin.h: New header file.
* config/i386/x86gprintrin.h: Include hresetintrin.h.
* config/i386/cpuid.h (bit_HRESET): New.
* config/i386/i386-builtin.def: Add new builtin.
* config/i386/i386-expand.c (ix86_expand_builtin):
Handle new builtin.
* config/i386/i386-c.c (ix86_target_macros_internal): Define
__HRESET__.
* config/i386/i386-options.c (isa2_opts): Add -mhreset.
(ix86_valid_target_attribute_inner_p): Handle hreset.
* config/i386/i386.h (TARGET_HRESET, TARGET_HRESET_P,
PTA_HRESET): New.
(PTA_ALDERLAKE): Add PTA_HRESET.
* config/i386/i386.opt: Add option -mhreset.
* config/i386/i386.md (UNSPECV_HRESET): New unspec.
(hreset): New define_insn.
* doc/invoke.texi: Document -mhreset.
* doc/extend.texi: Document hreset.

gcc/testsuite/

* gcc.target/i386/hreset-1.c: New test.
* gcc.target/i386/funcspec-56.inc: Add new target attribute.
* gcc.target/i386/x86gprintrin-1.c: Add -mhreset.
* gcc.target/i386/x86gprintrin-2.c: Ditto.
* gcc.target/i386/x86gprintrin-3.c: Ditto.
* gcc.target/i386/x86gprintrin-4.c: Add mhreset.
* gcc.target/i386/x86gprintrin-5.c: Ditto.

4 years agoEnable gcc support for UINTR
liuhongt [Mon, 20 May 2019 09:56:41 +0000 (17:56 +0800)]
Enable gcc support for UINTR

2020-05-20  Hongtao Liu  <hongtao.liu@intel.com>

gcc/
* common/config/i386/cpuinfo.h (get_available_features):
Detect UINTR.
* common/config/i386/i386-common.c (OPTION_MASK_ISA2_UINTR_SET
OPTION_MASK_ISA2_UINTR_UNSET): New.
(ix86_handle_option): Handle -muintr.
* common/config/i386/i386-cpuinfo.h (enum processor_features):
Add FEATURE_UINTR.
* common/config/i386/i386-isas.h: Add ISA_NAMES_TABLE_ENTRY
for uintr.
* config.gcc: Add uintrintrin.h to extra_headers.
* config/i386/uintrintrin.h: New.
* config/i386/cpuid.h (bit_UINTR): New.
* config/i386/i386-builtin-types.def: Add new types.
* config/i386/i386-builtin.def: Add new builtins.
* config/i386/i386-builtins.c (ix86_init_mmx_sse_builtins): Add
__builtin_ia32_testui.
* config/i386/i386-builtins.h (ix86_builtins): Add
IX86_BUILTIN_TESTUI.
* config/i386/i386-c.c (ix86_target_macros_internal): Define
__UINTR__.
* config/i386/i386-expand.c (ix86_expand_special_args_builtin):
Handle UINT8_FTYPE_VOID.
(ix86_expand_builtin): Handle IX86_BUILTIN_TESTUI.
* config/i386/i386-options.c (isa2_opts): Add -muintr.
(ix86_valid_target_attribute_inner_p): Handle UINTR.
(ix86_option_override_internal): Add TARGET_64BIT check for UINTR.
* config/i386/i386.h (TARGET_UINTR, TARGET_UINTR_P, PTA_UINTR): New.
(PTA_SAPPHIRRAPIDS): Add PTA_UINTR.
* config/i386/i386.opt: Add -muintr.
* config/i386/i386.md
(define_int_iterator UINTR_UNSPECV): New.
(define_int_attr uintr_unspecv): New.
(uintr_<uintr_unspecv>, uintr_senduipi, testui):
New define_insn patterns.
* config/i386/x86gprintrin.h: Include uintrintrin.h
* doc/invoke.texi: Document -muintr.
* doc/extend.texi: Document uintr.

gcc/testsuite/

* gcc.target/i386/funcspec-56.inc: Add new target attribute.
* gcc.target/i386/uintr-1.c: New test.
* gcc.target/i386/uintr-2.c: Ditto.
* gcc.target/i386/uintr-3.c: Ditto.
* gcc.target/i386/uintr-4.c: Ditto.
* gcc.target/i386/uintr-5.c: Ditto.
* gcc.target/i386/x86gprintrin-1.c: Add -muintr for 64bit target.
* gcc.target/i386/x86gprintrin-2.c: Ditto.
* gcc.target/i386/x86gprintrin-3.c: Ditto.
* gcc.target/i386/x86gprintrin-4.c: Add muintr for 64bit target.
* gcc.target/i386/x86gprintrin-5.c: Ditto.

4 years agoDaily bump.
GCC Administrator [Thu, 15 Oct 2020 00:16:34 +0000 (00:16 +0000)]
Daily bump.

4 years agolibgo: print reason code if throwing unwind exception fails
Nikhil Benesch [Sat, 10 Oct 2020 16:26:54 +0000 (16:26 +0000)]
libgo: print reason code if throwing unwind exception fails

Calls to _Unwind_RaiseException and friends *can* return due to bugs in
libgo or memory corruption. When this occurs, print a message to stderr
with the reason code before aborting to aid debugging.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261257

4 years agoPR middle-end/97391 - bogus -Warray-bounds accessing a multidimensional array parameter
Martin Sebor [Wed, 14 Oct 2020 21:19:39 +0000 (15:19 -0600)]
PR middle-end/97391 - bogus -Warray-bounds accessing a multidimensional array parameter

gcc/ChangeLog:

PR middle-end/97391
* builtins.c (gimple_parm_array_size): Peel off one less layer
of array types.

gcc/testsuite/ChangeLog:

PR middle-end/97391
* gcc.dg/Warray-bounds-68.c: New test.

4 years agoPR c/97413 - bogus error on function declaration with many VLA arguments
Martin Sebor [Wed, 14 Oct 2020 21:18:19 +0000 (15:18 -0600)]
PR c/97413 - bogus error on function declaration with many VLA arguments

gcc/ChangeLog:

PR c/97413
* attribs.c (init_attr_rdwr_indices): Unwrap extra list layer.

gcc/c-family/ChangeLog:

PR c/97413
* c-attribs.c (build_attr_access_from_parms): Wrap chain of VLA
bounds in an extra list.

gcc/testsuite/ChangeLog:

PR c/97413
* gcc.dg/Wvla-parameter-8.c: New test.

4 years ago[testsuite] Don't overwrite compiler_flags in check_compile
Tom de Vries [Wed, 14 Oct 2020 13:25:53 +0000 (15:25 +0200)]
[testsuite] Don't overwrite compiler_flags in check_compile

Consider the test-case gcc.c-torture/compile/pr42717.c, which has:
...
/* { dg-xfail-if "ptxas crashes" { nvptx-*-* } { "-O0" } { "" } } */
...

When running make check-gcc, I get:
...
XPASS: gcc.c-torture/compile/pr42717.c   -O0  (test for excess errors)
...
but when forcing to run only that test-case using
RUNTESTFLAGS=compile.exp=pr42717.c I get instead:
...
PASS: gcc.c-torture/compile/pr42717.c   -O0  (test for excess errors)
...

Using RUNTESTFLAGS="-v -v -v" we can see what happens:
...
check_cached_effective_target exceptions_enabled: \
  returning 1 for nvptx-none-run
Limited to targets: *-*-*
Will search for options  "-O0"
Will exclude for options  ""
Compiler flags are: exceptions_enabled9848.cc -fdiagnostics-plain-output \
  --sysroot=/home/vries/nvptx/trunk/install/nvptx-none -S  -isystem \
  /home/vries/nvptx/trunk/build-gcc/nvptx-none/./newlib/targ-include \
  -isystem /home/vries/nvptx/trunk/source-gcc/newlib/libc/include \
  -o exceptions_enabled9848.s
Checking "*-*-*" against "nvptx-unknown-none"
Looking for -O0 to include in the compiler flags
Looking for  to exclude in the compiler flags
This is not a conditional match
PASS: gcc.c-torture/compile/pr42717.c   -O0  (test for excess errors)
...

The effective target exceptions_enabled is tested from gcc-dg-prune, but
the calculation overwrites $compiler_flags, which is subsequently tested for
-O0.

Fix this by saving and restoring $compiler_flags when calling
${tool}_target_compile in check_compile.

Tested on nvptx.

gcc/testsuite/ChangeLog:

2020-10-14  Tom de Vries  <tdevries@suse.de>

* lib/target-supports.exp (check_compile): Save and restore
$compiler_flags when calling ${tool}_target_compile.

4 years agolibgo: export NetBSD-specific types in mksysinfo.sh
Nikhil Benesch [Tue, 13 Oct 2020 06:36:43 +0000 (06:36 +0000)]
libgo: export NetBSD-specific types in mksysinfo.sh

The syscall package depends on many NetBSD-specific types on NetBSD.
Teach mksysinfo.sh to export these types.

This alone is not sufficient to get the syscall package to compile on
NetBSD, but it's a start.

Note that the IfMsgHdr type is recapitalized to IfMsghdr, which requires
changes in the AIX port. The new capitalization is what's used by
upstream in existing NetBSD-specific code and is more consistent with
the capitalization of other C structs with the "hdr" suffix.

Updates golang/go#38538.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261739

4 years agoruntime: correct semaphore implementation on netbsd
Nikhil Benesch [Tue, 13 Oct 2020 07:17:55 +0000 (07:17 +0000)]
runtime: correct semaphore implementation on netbsd

NetBSD's semaphores use the underlying lighweight process mechanism
(LWP) on NetBSD, rather than pthreads. This means the m.prodcid needs
to be set to the LWP ID rather than the pthread ID in order for unpark
notifications to get sent to the right place.

Introduce a new getProcID() method that selects the correct ID for the
platform.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261742

4 years agoanalyzer: fix ICE on globals with unknown size [PR93388]
David Malcolm [Tue, 13 Oct 2020 22:49:11 +0000 (18:49 -0400)]
analyzer: fix ICE on globals with unknown size [PR93388]

This patch fixes an ICE seen when attempting to build various existing
tests in our testsuite with -fanalyzer, including
gcc.c-torture/compile/980816-1.c.

gcc/analyzer/ChangeLog:
PR analyzer/93388
* region-model.cc (region_model::get_initial_value_for_global):
Fall back to returning an initial_svalue if
decl_region::get_svalue_for_initializer fails.
* region.cc (decl_region::get_svalue_for_initializer): Don't
attempt to create a compound_svalue if the region has an unknown
size.

gcc/testsuite/ChangeLog:
PR analyzer/93388
* gcc.dg/analyzer/data-model-21.c: New test.

4 years agoanalyzer: fix build with ada [PR93723]
David Malcolm [Tue, 13 Oct 2020 21:11:17 +0000 (17:11 -0400)]
analyzer: fix build with ada [PR93723]

gcc/analyzer/ChangeLog:
PR analyzer/93723
* store.cc (binding_map::apply_ctor_to_region): Remove redundant
assertion.

4 years agoanalyzer: don't use <setjmp.h> in tests [PR97394]
David Malcolm [Tue, 13 Oct 2020 19:56:45 +0000 (15:56 -0400)]
analyzer: don't use <setjmp.h> in tests [PR97394]

PR analyzer/97394 reports issues with analyzer setjmp results
when testing against MUSL.  This patch fixes up gcc.dg/analyzer
so that it doesn't use <setjmp.h>.

gcc/testsuite/ChangeLog:
PR analyzer/97394
* gcc.dg/analyzer/setjmp-pr93378.c: Use test-setjmp.h rather than
<setjmp.h>.
* gcc.dg/analyzer/sigsetjmp-5.c: Likewise.
* gcc.dg/analyzer/sigsetjmp-6.c: Likewise.
* gcc.dg/analyzer/test-setjmp.h: Don't include <setjmp.h>.
Provide decls of jmp_buf, sigjmp_buf, setjmp, sigsetjmp,
longjmp, and siglongjmp.

4 years agoc++: Diagnose bogus variadic lambda. [PR97358]
Jason Merrill [Wed, 14 Oct 2020 18:55:04 +0000 (14:55 -0400)]
c++: Diagnose bogus variadic lambda. [PR97358]

If the lambda has a capture pack, it cannot be used unexpanded within the
body of the lambda.  If you want to expand the pack across multiple lambdas,
don't capture the whole pack.

gcc/cp/ChangeLog:

PR c++/97358
* pt.c (check_for_bare_parameter_packs): Diagnose use of
capture pack.

gcc/testsuite/ChangeLog:

PR c++/97358
* g++.dg/cpp0x/lambda/lambda-variadic11.C: New test.

4 years agoRework the condition variables support for VxWorks
Alexandre Oliva [Tue, 7 Jul 2020 05:47:53 +0000 (02:47 -0300)]
Rework the condition variables support for VxWorks

This change reworks the condition variables support for VxWorks
to address the very legit points raised by Rasmus in

 https://gcc.gnu.org/pipermail/gcc/2020-May/232524.html

While some of the issues were taken care of by the use of semFlush,
a few others were indeed calling for adjustments.

We first considered resorting to the condvarLib library available
in VxWorks7. Unfortunately, it is vx7 only and we wanted something working
for at least vx 6.9 as well. It also turned out requiring the use of
recursive mutexes for condVarWait, which seemed unnecessarily constraining.

Instead, this change corrects the sequencing logic in a few places and
leverages the semExchange API to ensure the key atomicity requirement on
cond_wait operations.

2020-10-14  Alexandre Oliva  <oliva@adacore.com>

libgcc/
* config/gthr-vxworks-thread.c: Include stdlib.h.
(tls_delete_hook): Prototype it.
(__gthread_cond_signal): Return early if no waiters.  Consume
signal in case the semaphore got full.  Use semInfoGet instead
of kernel-mode-only semInfo.
(__gthread_cond_timedwait): Use semExchange.  Always take the
mutex again before returning.
* config/gthr-vxworks-cond.c (__ghtread_cond_wait): Likewise.

4 years agox86: Add missing intrinsics [PR95483]
Sunil K Pandey [Wed, 14 Oct 2020 18:36:39 +0000 (11:36 -0700)]
x86: Add missing intrinsics [PR95483]

Tested on x86-64.

gcc/ChangeLog:

PR target/95483
* config/i386/avx2intrin.h (_mm_broadcastsi128_si256): New intrinsics.
(_mm_broadcastsd_pd): Ditto.
* config/i386/avx512bwintrin.h (_mm512_loadu_epi16): New intrinsics.
(_mm512_storeu_epi16): Ditto.
(_mm512_loadu_epi8): Ditto.
(_mm512_storeu_epi8): Ditto.
* config/i386/avx512dqintrin.h (_mm_reduce_round_sd): New intrinsics.
(_mm_mask_reduce_round_sd): Ditto.
(_mm_maskz_reduce_round_sd): Ditto.
(_mm_reduce_round_ss): Ditto.
(_mm_mask_reduce_round_ss): Ditto.
(_mm_maskz_reduce_round_ss): Ditto.
(_mm512_reduce_round_pd): Ditto.
(_mm512_mask_reduce_round_pd): Ditto.
(_mm512_maskz_reduce_round_pd): Ditto.
(_mm512_reduce_round_ps): Ditto.
(_mm512_mask_reduce_round_ps): Ditto.
(_mm512_maskz_reduce_round_ps): Ditto.
* config/i386/avx512erintrin.h
(_mm_mask_rcp28_round_sd): New intrinsics.
(_mm_maskz_rcp28_round_sd): Ditto.
(_mm_mask_rcp28_round_ss): Ditto.
(_mm_maskz_rcp28_round_ss): Ditto.
(_mm_mask_rsqrt28_round_sd): Ditto.
(_mm_maskz_rsqrt28_round_sd): Ditto.
(_mm_mask_rsqrt28_round_ss): Ditto.
(_mm_maskz_rsqrt28_round_ss): Ditto.
(_mm_mask_rcp28_sd): Ditto.
(_mm_maskz_rcp28_sd): Ditto.
(_mm_mask_rcp28_ss): Ditto.
(_mm_maskz_rcp28_ss): Ditto.
(_mm_mask_rsqrt28_sd): Ditto.
(_mm_maskz_rsqrt28_sd): Ditto.
(_mm_mask_rsqrt28_ss): Ditto.
(_mm_maskz_rsqrt28_ss): Ditto.
* config/i386/avx512fintrin.h (_mm_mask_sqrt_sd): New intrinsics.
(_mm_maskz_sqrt_sd): Ditto.
(_mm_mask_sqrt_ss): Ditto.
(_mm_maskz_sqrt_ss): Ditto.
(_mm_mask_scalef_sd): Ditto.
(_mm_maskz_scalef_sd): Ditto.
(_mm_mask_scalef_ss): Ditto.
(_mm_maskz_scalef_ss): Ditto.
(_mm_mask_cvt_roundsd_ss): Ditto.
(_mm_maskz_cvt_roundsd_ss): Ditto.
(_mm_mask_cvt_roundss_sd): Ditto.
(_mm_maskz_cvt_roundss_sd): Ditto.
(_mm_mask_cvtss_sd): Ditto.
(_mm_maskz_cvtss_sd): Ditto.
(_mm_mask_cvtsd_ss): Ditto.
(_mm_maskz_cvtsd_ss): Ditto.
(_mm512_cvtsi512_si32): Ditto.
(_mm_cvtsd_i32): Ditto.
(_mm_cvtss_i32): Ditto.
(_mm_cvti32_sd): Ditto.
(_mm_cvti32_ss): Ditto.
(_mm_cvtsd_i64): Ditto.
(_mm_cvtss_i64): Ditto.
(_mm_cvti64_sd): Ditto.
(_mm_cvti64_ss): Ditto.
* config/i386/avx512vlbwintrin.h (_mm256_storeu_epi8): New intrinsics.
(_mm_storeu_epi8): Ditto.
(_mm256_loadu_epi16): Ditto.
(_mm_loadu_epi16): Ditto.
(_mm256_loadu_epi8): Ditto.
(_mm_loadu_epi8): Ditto.
(_mm256_storeu_epi16): Ditto.
(_mm_storeu_epi16): Ditto.
* config/i386/avx512vlintrin.h (_mm256_load_epi64): New intrinsics.
(_mm_load_epi64): Ditto.
(_mm256_load_epi32): Ditto.
(_mm_load_epi32): Ditto.
(_mm256_store_epi32): Ditto.
(_mm_store_epi32): Ditto.
(_mm256_loadu_epi64): Ditto.
(_mm_loadu_epi64): Ditto.
(_mm256_loadu_epi32): Ditto.
(_mm_loadu_epi32): Ditto.
(_mm256_mask_cvt_roundps_ph): Ditto.
(_mm256_maskz_cvt_roundps_ph): Ditto.
(_mm_mask_cvt_roundps_ph): Ditto.
(_mm_maskz_cvt_roundps_ph): Ditto.
* config/i386/avxintrin.h (_mm256_cvtsi256_si32): New intrinsics.
* config/i386/emmintrin.h (_mm_loadu_si32): New intrinsics.
(_mm_loadu_si16): Ditto.
(_mm_storeu_si32): Ditto.
(_mm_storeu_si16): Ditto.
* config/i386/i386-builtin-types.def
(V8DF_FTYPE_V8DF_INT_V8DF_UQI_INT): Add new type.
(V16SF_FTYPE_V16SF_INT_V16SF_UHI_INT): Ditto.
(V4SF_FTYPE_V4SF_V2DF_V4SF_UQI_INT): Ditto.
(V2DF_FTYPE_V2DF_V4SF_V2DF_UQI_INT): Ditto.
* config/i386/i386-builtin.def
(__builtin_ia32_cvtsd2ss_mask_round): New builtin.
(__builtin_ia32_cvtss2sd_mask_round): Ditto.
(__builtin_ia32_rcp28sd_mask_round): Ditto.
(__builtin_ia32_rcp28ss_mask_round): Ditto.
(__builtin_ia32_rsqrt28sd_mask_round): Ditto.
(__builtin_ia32_rsqrt28ss_mask_round): Ditto.
(__builtin_ia32_reducepd512_mask_round): Ditto.
(__builtin_ia32_reduceps512_mask_round): Ditto.
(__builtin_ia32_reducesd_mask_round): Ditto.
(__builtin_ia32_reducess_mask_round): Ditto.
* config/i386/i386-expand.c
(ix86_expand_round_builtin): Expand round builtin for new type.
(V8DF_FTYPE_V8DF_INT_V8DF_UQI_INT)
(V16SF_FTYPE_V16SF_INT_V16SF_UHI_INT)
(V4SF_FTYPE_V4SF_V2DF_V4SF_UQI_INT)
(V2DF_FTYPE_V2DF_V4SF_V2DF_UQI_INT)
* config/i386/mmintrin.h ()
Define datatype __m32 and __m16.
Define datatype __m32_u and __m16_u.
* config/i386/sse.md: Adjust pattern.
(<mask_codefor>reducep<mode><mask_name><round_saeonly_name>): Adjust.
(reduces<mode><mask_scalar_name><round_saeonly_scalar_name>): Ditto.
(sse2_cvtsd2ss<mask_name><round_name>): Ditto.
(sse2_cvtss2sd<mask_name><round_saeonly_name>): Ditto.
(avx512er_vmrcp28<mode><mask_name><round_saeonly_name>): Ditto.
(avx512er_vmrsqrt28<mode><mask_name><round_saeonly_name>): Ditto.

gcc/testsuite/ChangeLog:

PR target/95483
* gcc.target/i386/avx-1.c: Add test.
* gcc.target/i386/avx2-vbroadcastsi128-1.c: Ditto.
* gcc.target/i386/avx2-vbroadcastsi128-2.c: Ditto.
* gcc.target/i386/avx512bw-vmovdqu16-1.c: Ditto.
* gcc.target/i386/avx512bw-vmovdqu8-1.c: Ditto.
* gcc.target/i386/avx512dq-vreducesd-1.c: Ditto.
* gcc.target/i386/avx512dq-vreducesd-2.c: Ditto.
* gcc.target/i386/avx512dq-vreducess-1.c: Ditto.
* gcc.target/i386/avx512dq-vreducess-2.c: Ditto.
* gcc.target/i386/avx512er-vrcp28sd-1.c: Ditto.
* gcc.target/i386/avx512er-vrcp28sd-2.c: Ditto.
* gcc.target/i386/avx512er-vrcp28ss-1.c: Ditto.
* gcc.target/i386/avx512er-vrcp28ss-2.c: Ditto.
* gcc.target/i386/avx512er-vrsqrt28sd-1.c: Ditto.
* gcc.target/i386/avx512er-vrsqrt28sd-2.c: Ditto.
* gcc.target/i386/avx512er-vrsqrt28ss-1.c: Ditto.
* gcc.target/i386/avx512er-vrsqrt28ss-2.c: Ditto.
* gcc.target/i386/avx512f-vcvtsd2si-1.c: Ditto.
* gcc.target/i386/avx512f-vcvtsd2si64-1.c: Ditto.
* gcc.target/i386/avx512f-vcvtsd2ss-1.c: Ditto.
* gcc.target/i386/avx512f-vcvtsi2sd64-1.c: Ditto.
* gcc.target/i386/avx512f-vcvtsi2ss-1.c: Ditto.
* gcc.target/i386/avx512f-vcvtsi2ss64-1.c: Ditto.
* gcc.target/i386/avx512f-vcvtss2sd-1.c: Ditto.
* gcc.target/i386/avx512f-vcvtss2si-1.c: Ditto.
* gcc.target/i386/avx512f-vcvtss2si64-1.c: Ditto.
* gcc.target/i386/avx512f-vscalefsd-1.c: Ditto.
* gcc.target/i386/avx512f-vscalefsd-2.c: Ditto.
* gcc.target/i386/avx512f-vscalefss-1.c: Ditto.
* gcc.target/i386/avx512f-vscalefss-2.c: Ditto.
* gcc.target/i386/avx512f-vsqrtsd-1.c: Ditto.
* gcc.target/i386/avx512f-vsqrtsd-2.c: Ditto.
* gcc.target/i386/avx512f-vsqrtss-1.c: Ditto.
* gcc.target/i386/avx512f-vsqrtss-2.c: Ditto.
* gcc.target/i386/avx512vl-vmovdqa32-1.c: Ditto.
* gcc.target/i386/avx512vl-vmovdqa64-1.c: Ditto.
* gcc.target/i386/sse-13.c: Ditto.
* gcc.target/i386/sse-23.c: Ditto.
* gcc.target/i386/avx512dq-vreducepd-3.c: New test.
* gcc.target/i386/avx512dq-vreducepd-4.c: New test.
* gcc.target/i386/avx512dq-vreduceps-3.c: New test.
* gcc.target/i386/avx512dq-vreduceps-4.c: New test.
* gcc.target/i386/avx512f-vcvtsi2sd-1.c: New test.
* gcc.target/i386/pr95483-1.c: New test.
* gcc.target/i386/pr95483-2.c: New test.
* gcc.target/i386/pr95483-3.c: New test.
* gcc.target/i386/pr95483-4.c: New test.
* gcc.target/i386/pr95483-5.c: New test.
* gcc.target/i386/pr95483-6.c: New test.
* gcc.target/i386/pr95483-7.c: New test.

4 years agoFix the VX_CPU selection for -mcpu=xscale on arm-vxworks
Olivier Hainque [Thu, 5 Mar 2020 15:02:12 +0000 (15:02 +0000)]
Fix the VX_CPU selection for -mcpu=xscale on arm-vxworks

This fixlet makes sure -mcpu=xscale selects the correct VX_CPU.

2020-10-14  Olivier Hainque  <hainque@adacore.com>

gcc/
* config/arm/vxworks.h (TARGET_OS_CPP_BUILTINS): Fix
the VX_CPU selection for -mcpu=xscale on arm-vxworks.

4 years agolibstdc++: Fix unspecified comparison to null pointer [PR 97415]
Jonathan Wakely [Wed, 14 Oct 2020 17:55:14 +0000 (18:55 +0100)]
libstdc++: Fix unspecified comparison to null pointer [PR 97415]

The standard doesn't guarantee that null pointers compare less than
non-null pointers. AddressSanitizer complains about the pptr()> egptr()
comparison in basic_stringbuf::str() when egptr() is null.

libstdc++-v3/ChangeLog:

PR libstdc++/97415
* include/std/sstream (basic_stringbuf::str()): Check for
null egptr() before comparing to non-null pptr().

4 years agoRework CPP_BUILTINS_SPEC for powerpc-vxworks
Olivier Hainque [Tue, 13 Oct 2020 10:31:36 +0000 (10:31 +0000)]
Rework CPP_BUILTINS_SPEC for powerpc-vxworks

This change reworks CPP_BUILTINS_SPEC for powerpc-vxworks to
prepare for the upcoming addition of 32 and 64 bit ports for
VxWorks 7r2.

2020-10-14  Olivier Hainque  <hainque@adacore.com>

gcc/
* config/rs6000/vxworks.h (TARGET_OS_CPP_BUILTINS): Accommodate
expectations from different versions of VxWorks, for 32 or 64bit
configurations.

4 years agoFallback to default CPP spec for C++ on VxWorks
Olivier Hainque [Tue, 18 Feb 2020 09:59:56 +0000 (09:59 +0000)]
Fallback to default CPP spec for C++ on VxWorks

Arrange to inhibit the effects of CPLUSPLUS_CPP_SPEC in gnu-user.h,
which #defines _GNU_SOURCE, which is invalid for VxWorks (possibly
not providing ::mkstemp, for example).

2020-10-14  Olivier Hainque  <hainque@adacore.com>

gcc/
* config/vxworks.h: #undef CPLUSPLUS_CPP_SPEC.

4 years agoHonor $(MULTISUBDIR) in -I directives for libgcc on VxWorks
Olivier Hainque [Fri, 26 Jun 2020 16:29:42 +0000 (16:29 +0000)]
Honor $(MULTISUBDIR) in -I directives for libgcc on VxWorks

This is useful to handle ports where we might arrange to use
different sets of fixed headers for different multilibs, typically
for kernel vs rtp modes.

2020-10-14  Olivier Hainque  <hainque@adacore.com>

libgcc/
* config/t-vxworks (LIBGCC2_INCLUDES): Append
$(MULTISUBDIR) to the -I path for fixed headers, as we
arrange to have different sets of such headers for different
multilibs when they are activated.
* config/t-vxworks7: Likewise.

4 years agoAdd include-fixed to include search paths for libgcc on VxWorks
Olivier Hainque [Thu, 5 Mar 2020 15:05:43 +0000 (15:05 +0000)]
Add include-fixed to include search paths for libgcc on VxWorks

The special vxworks rules for the compilation of libgcc had
-I.../gcc/include and not .../gcc/include-fixed, causing build
failure of our arm-vxworks7r2 port because of indirect dependencies
on limits.h.

The omission was just an oversight and this change just adds the
missing -I.

2020-10-14  Olivier Hainque  <hainque@adacore.com>

libgcc/
* config/t-vxworks: Add include-fixed to include search
paths for libgcc on VxWorks.
* config/t-vxworks7: Likewise.

4 years agoAdjust the VxWorks alternative LIMITS_H guard for glimits.h
Olivier Hainque [Fri, 28 Feb 2020 16:32:40 +0000 (16:32 +0000)]
Adjust the VxWorks alternative LIMITS_H guard for glimits.h

This is a minor adjustment to the vxworks specific macro name
used to guard the header file contents, to make it closer to the
original one and easier to search for.

2020-10-14  Olivier Hainque  <hainque@adacore.com>

gcc/
* config/t-vxworks: Adjust the VxWorks alternative LIMITS_H guard
for glimits.h, make it both closer to the previous one and easier to
search for.

4 years agoc++: DECL_FRIEND_P cleanup
Nathan Sidwell [Wed, 14 Oct 2020 16:59:45 +0000 (09:59 -0700)]
c++: DECL_FRIEND_P cleanup

DECL_FRIEND_P's meaning has changed over time.  It now (almost) means
the the friend function decl has not been met via an explicit decl.
This completes that transition, renaming it to DECL_UNIQUE_FRIEND_P,
so one doesn't think it is the sole indicator of friendliness (plenty
of friends do not have the flag set).  This allows reduction in the
complexity of managing the field -- all in duplicate_decls now.

gcc/cp/
* cp-tree.h (struct lang_decl_fn): Adjust context comment.
(DECL_FRIEND_P): Replace with ...
(DECL_UNIQUE_FRIEND_P): ... this.  Only for FUNCTION_DECLs.
(DECL_FRIEND_CONTEXT): Adjust.
* class.c (add_implicitly_declared_members): Detect friendly
spaceship from context.
* constraint.cc (remove_constraints): Use a checking assert.
(maybe_substitute_reqs_for): Use DECL_UNIQUE_FRIEND_P.
* decl.c (check_no_redeclaration_friend_default_args):
DECL_UNIQUE_FRIEND_P is signficant, not hiddenness.
(duplicate_decls): Adjust DECL_UNIQUE_FRIEND_P clearing.
(redeclaration_error_message): Use DECL_UNIQUE_FRIEND_P.
(start_preparsed_function): Correct in-class friend processing.
Refactor some initializers.
(grokmethod): Directly check friend decl-spec.
* decl2.c (grokfield): Check DECL_UNIQUE_FRIEND_P.
* friend.c (do_friend): Set DECL_UNIQUE_FRIEND_P first, remove
extraneous conditions.  Don't re set it afterwards.
* name-lookup.c (lookup_elaborated_type_1): Simplify revealing
code.
(do_pushtag): Likewise.
* pt.c (optimize_specialization_lookup_p): Check
DECL_UNIQUE_FRIEND_P.
(push_template_decl): Likewise.  Drop unneeded friend setting.
(type_dependent_expression_p): Check DECL_UNIQUE_FRIEND_P.
libcc1/
* libcp1plugin.cc (plugin_add_friend): Set DECL_UNIQUE_FRIEND_P.

4 years agoi386: Improve chaining of _{addcarry,subborrow}_u{32,64} [PR97387]
Jakub Jelinek [Wed, 14 Oct 2020 15:14:47 +0000 (17:14 +0200)]
i386: Improve chaining of _{addcarry,subborrow}_u{32,64} [PR97387]

These builtins have two known issues and this patch fixes one of them.

One issue is that the builtins effectively return two results and
they make the destination addressable until expansion, which means
a stack slot is allocated for them and e.g. with -fstack-protector*
DSE isn't able to optimize that away.  I think for that we want to use
the technique of returning complex value; the patch doesn't handle that
though.  See PR93990 for that.

The other problem is optimization of successive uses of the builtin
e.g. for arbitrary precision arithmetic additions/subtractions.
As shown PR93990, combine is able to optimize the case when the first
argument to these builtins is 0 (the first instance when several are used
together), and also the last one if the last one ignores its result (i.e.
the carry/borrow is dead and thrown away in that case).
As shown in this PR, combiner refuses to optimize the rest, where it sees:
(insn 10 9 11 2 (set (reg:QI 88 [ _31 ])
        (ltu:QI (reg:CCC 17 flags)
            (const_int 0 [0]))) "include/adxintrin.h":69:10 785 {*setcc_qi}
     (expr_list:REG_DEAD (reg:CCC 17 flags)
        (nil)))
- set pseudo 88 to CF from flags, then some uninteresting insns that
don't modify flags, and finally:
(insn 17 15 18 2 (parallel [
            (set (reg:CCC 17 flags)
                (compare:CCC (plus:QI (reg:QI 88 [ _31 ])
                        (const_int -1 [0xffffffffffffffff]))
                    (reg:QI 88 [ _31 ])))
            (clobber (scratch:QI))
        ]) "include/adxintrin.h":69:10 350 {*addqi3_cconly_overflow_1}
     (expr_list:REG_DEAD (reg:QI 88 [ _31 ])
        (nil)))
to set CF in flags back to what we saved earlier.  The combiner just punts
trying to combine the 10, 17 and following addcarrydi (etc.) instruction,
because
  if (i1 && !can_combine_p (i1, i3, i0, NULL, i2, NULL, &i1dest, &i1src))
    {
      if (dump_file && (dump_flags & TDF_DETAILS))
        fprintf (dump_file, "Can't combine i1 into i3\n");
      undo_all ();
      return 0;
    }
fails - the 3 insns aren't all adjacent and
      || (! all_adjacent
          && (((!MEM_P (src)
                || ! find_reg_note (insn, REG_EQUIV, src))
               && modified_between_p (src, insn, i3))
src (flags hard register) is modified between the first and third insn - in
the second insn.

The following patch optimizes this by optimizing just the two insns,
10 and 17 above, i.e. save CF into pseudo, set CF from that pseudo, into
a nop.  The new define_insn_and_split matches how combine simplifies those
two together (except without the ix86_cc_mode change it was choosing CCmode
for the destination instead of CCCmode, so had to change that function too,
and also adjust costs so that combiner understand it is beneficial).

With this, all the testcases are optimized, so that the:
        setc    %dl
...
        addb    $-1, %dl
insns in between the ad[dc][lq] or s[ub]b[lq] instructions are all optimized
away (sure, if something would clobber flags in between they wouldn't, but
there is nothing that can be done about that).

2020-10-14  Jakub Jelinek  <jakub@redhat.com>

PR target/97387
* config/i386/i386.md (CC_CCC): New mode iterator.
(*setcc_qi_addqi3_cconly_overflow_1_<mode>): New
define_insn_and_split.
* config/i386/i386.c (ix86_cc_mode): Return CCCmode
for *setcc_qi_addqi3_cconly_overflow_1_<mode> pattern operands.
(ix86_rtx_costs): Return true and *total = 0;
for *setcc_qi_addqi3_cconly_overflow_1_<mode> pattern.  Use op0 and
op1 temporaries to simplify COMPARE checks.

* gcc.target/i386/pr97387-1.c: New test.
* gcc.target/i386/pr97387-2.c: New test.

4 years agolibstdc++: Fix tests that fail with old std::string ABI
Jonathan Wakely [Wed, 14 Oct 2020 15:15:49 +0000 (16:15 +0100)]
libstdc++: Fix tests that fail with old std::string ABI

These two tests have started to fail with the old std::string ABI. The
scan-assembler-not checks fail because they match debug info, not code.

Adding -g0 to the test flags fixes them.

libstdc++-v3/ChangeLog:

* testsuite/21_strings/basic_string/modifiers/assign/char/move_assign_optim.cc:
Do not generate debug info.
* testsuite/21_strings/basic_string/modifiers/assign/wchar_t/move_assign_optim.cc:
Likewise.

4 years agoDo not call range_of_ssa_name_with_loop_info with the loop tree root.
Aldy Hernandez [Tue, 13 Oct 2020 07:05:23 +0000 (03:05 -0400)]
Do not call range_of_ssa_name_with_loop_info with the loop tree root.

gcc/ChangeLog:

PR tree-optimization/97396
* gimple-range.cc (gimple_ranger::range_of_phi): Do not call
range_of_ssa_name_with_loop_info with the loop tree root.

gcc/testsuite/ChangeLog:

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

4 years agoMore vect_get_and_check_slp_defs refactoring
Richard Biener [Wed, 14 Oct 2020 13:04:24 +0000 (15:04 +0200)]
More vect_get_and_check_slp_defs refactoring

This is another tiny piece in some bigger refactoring of
vect_get_and_check_slp_defs.  Split out a test that has nothing
to do with def types or commutation.

2020-10-14  Richard Biener  <rguenther@suse.de>

* tree-vect-slp.c (vect_get_and_check_slp_defs): Split out
test for compatible operand types.

4 years agoTigthen flag_pic processing in vxworks_override_options
Olivier Hainque [Fri, 28 Feb 2020 16:35:05 +0000 (16:35 +0000)]
Tigthen flag_pic processing in vxworks_override_options

This fixes spurious complaints about PIC mode not supported
from "gcc --help=...", on VxWorks without -mrtp. The spurious message
is emitted by vxworks_override_options, called with flag_pic == -1
when we're running for --help.

The change simply adjusts the check testing for "we're generating pic code"
to "flag_pic > 0" instead of just "flag_pic". We're not generating code at
all when reaching here with -1.

gcc/ChangeLog:

2020-10-14  Olivier Hainque  <hainque@adacore.com>

* config/vxworks.c (vxworks_override_options): Guard pic checks with
flag_pic > 0 instead of just flag_pic.

4 years agoTurn offset_map to HOST_WIDE_INT
Jan Hubicka [Wed, 14 Oct 2020 14:07:07 +0000 (16:07 +0200)]
Turn offset_map to HOST_WIDE_INT

gcc/ChangeLog:

2020-10-14  Jan Hubicka  <hubicka@ucw.cz>

* ipa-fnsummary.c (remap_edge_summaries): Make offset_map HOST_WIDE_INT.
(remap_freqcounting_predicate): Likewise.
(ipa_merge_fn_summary_after_inlining): Likewise.
* ipa-predicate.c (predicate::remap_after_inlining): Likewise
* ipa-predicate.h (remap_after_inlining): Update.

4 years agoHandle POINTER_PLUS_EXPR in jump functions in ipa-modref.
Jan Hubicka [Wed, 14 Oct 2020 14:01:39 +0000 (16:01 +0200)]
Handle POINTER_PLUS_EXPR in jump functions in ipa-modref.

gcc/ChangeLog:

* ipa-modref.c (compute_parm_map): Handle POINTER_PLUS_EXPR in
PASSTHROUGH.

gcc/testsuite/ChangeLog:

* gcc.dg/ipa/modref-1.c: New test.
* gcc.dg/tree-ssa/modref-4.c: New test.

4 years agoFortran: Fix line-truncation warning for !$acc and !gcc$
Tobias Burnus [Wed, 14 Oct 2020 13:48:22 +0000 (15:48 +0200)]
Fortran: Fix line-truncation warning for !$acc and !gcc$

gcc/fortran/ChangeLog:

PR fortran/97390
* scanner.c (load_line): Fix line-truncation warning for !$acc
and !gcc$ in free-form source code.

gcc/testsuite/ChangeLog:

PR fortran/97390
* gfortran.dg/goacc/warn_truncated.f90: New test.

4 years agoadjust BB SLP build from scalars heuristics
Richard Biener [Wed, 14 Oct 2020 11:44:21 +0000 (13:44 +0200)]
adjust BB SLP build from scalars heuristics

We can end up with { _1, 1.0 } * { 3.0, _2 } which isn't really
profitable.  The following adjusts things so we reject more than
one possibly expensive (non-constant and not uniform) vector CTOR
and instead build a CTOR for the scalar operation results.

This also moves a check in vect_get_and_check_slp_defs to a better
place.

2020-10-14  Richard Biener  <rguenther@suse.de>

* tree-vect-slp.c (vect_get_and_check_slp_defs): Move
check for duplicate/interleave of variable size constants
to a place done once and early.
(vect_build_slp_tree_2): Adjust heuristics when to build
a BB SLP node from scalars.

4 years ago[gimple] Move can_duplicate_bb_p to gimple_can_duplicate_bb_p
Tom de Vries [Wed, 7 Oct 2020 05:22:53 +0000 (07:22 +0200)]
[gimple] Move can_duplicate_bb_p to gimple_can_duplicate_bb_p

The function gimple_can_duplicate_bb_p currently always returns true.

The presence of can_duplicate_bb_p in tracer.c however suggests that
there are cases when bb's indeed cannot be duplicated.

Move the implementation of can_duplicate_bb_p to gimple_can_duplicate_bb_p.

Bootstrapped and reg-tested on x86_64-linux.

Build x86_64-linux with nvptx accelerator and tested libgomp.

No issues found.

As corner-case check, bootstrapped and reg-tested a patch that makes
gimple_can_duplicate_bb_p always return false, resulting in
PR97333 - "[gimple_can_duplicate_bb_p == false, tree-ssa-threadupdate]
ICE in duplicate_block, at cfghooks.c:1093".

gcc/ChangeLog:

2020-10-09  Tom de Vries  <tdevries@suse.de>

* tracer.c (cached_can_duplicate_bb_p, analyze_bb): Use
can_duplicate_block_p.
(can_duplicate_insn_p, can_duplicate_bb_no_insn_iter_p)
(can_duplicate_bb_p): Move and merge ...
* tree-cfg.c (gimple_can_duplicate_bb_p): ... here.

4 years agoc++: Instantiation with local extern [PR97395]
Nathan Sidwell [Wed, 14 Oct 2020 12:06:54 +0000 (05:06 -0700)]
c++: Instantiation with local extern [PR97395]

It turns out that pushdecl_with_scope has somewhat strange behaviour,
which probably made more sense way back.  Unfortunately making it
somewhat saner turned into a rathole.  Instead use a
push_nested_namespace around pushing the alias -- this is similar to
some of the friend handling we already have.

gcc/cp/
* name-lookup.c (push_local_extern_decl_alias): Push into alias's
namespace and use pushdecl.
(do_pushdecl_with_scope): Clarify behaviour.
gcc/testsuite/
* g++.dg/lookup/extern-redecl2.C: New.

4 years agolibstdc++: Define some std::string constructors inline
Jonathan Wakely [Wed, 14 Oct 2020 11:10:26 +0000 (12:10 +0100)]
libstdc++: Define some std::string constructors inline

There are a lot of very simple constructors for the old string which are
not defined inline. I don't see any reason for this and it probably
makes them less likely to be optimized away. Move the definitions into
the class body.

libstdc++-v3/ChangeLog:

* include/bits/basic_string.h (basic_string(const Alloc&))
(basic_string(const basic_string&)
(basic_string(const CharT*, size_type, const Alloc&))
(basic_string(const CharT*, const Alloc&))
(basic_string(size_type, CharT, const Alloc&))
(basic_string(initializer_list<CharT>, const Alloc&))
(basic_string(InputIterator, InputIterator, const Alloc&)):
Define inline in class body.
* include/bits/basic_string.tcc (basic_string(const Alloc&))
(basic_string(const basic_string&)
(basic_string(const CharT*, size_type, const Alloc&))
(basic_string(const CharT*, const Alloc&))
(basic_string(size_type, CharT, const Alloc&))
(basic_string(initializer_list<CharT>, const Alloc&))
(basic_string(InputIterator, InputIterator, const Alloc&)):
Move definitions into class body.

4 years agolibstdc++: Improve comments for check_effective_target_cxx11-abi
Jonathan Wakely [Wed, 14 Oct 2020 11:09:27 +0000 (12:09 +0100)]
libstdc++: Improve comments for check_effective_target_cxx11-abi

libstdc++-v3/ChangeLog:

* testsuite/lib/libstdc++.exp (check_effective_target_cxx11-abi):
Add comments about which test flags get used by the check.

4 years agolibstdc++: Improve comments in std::string tests
Jonathan Wakely [Wed, 14 Oct 2020 11:07:31 +0000 (12:07 +0100)]
libstdc++: Improve comments in std::string tests

The COW std::string does support some features of C++11 allocators, just
not propagation. Change some comments in the tests to be more precise
about that.

libstdc++-v3/ChangeLog:

* testsuite/21_strings/basic_string/allocator/char/copy.cc: Make
comment more precise about what isn't supported by COW strings.
* testsuite/21_strings/basic_string/allocator/char/copy_assign.cc:
Likewise.
* testsuite/21_strings/basic_string/allocator/char/move.cc:
Likewise.
* testsuite/21_strings/basic_string/allocator/char/move_assign.cc:
Likewise.
* testsuite/21_strings/basic_string/allocator/char/noexcept.cc:
Likewise.
* testsuite/21_strings/basic_string/allocator/char/operator_plus.cc:
Likewise.
* testsuite/21_strings/basic_string/allocator/char/swap.cc:
Likewise.
* testsuite/21_strings/basic_string/allocator/wchar_t/copy.cc:
Likewise.
* testsuite/21_strings/basic_string/allocator/wchar_t/copy_assign.cc:
Likewise.
* testsuite/21_strings/basic_string/allocator/wchar_t/move.cc:
Likewise.
* testsuite/21_strings/basic_string/allocator/wchar_t/move_assign.cc:
Likewise.
* testsuite/21_strings/basic_string/allocator/wchar_t/noexcept.cc:
Likewise.
* testsuite/21_strings/basic_string/allocator/wchar_t/operator_plus.cc:
Likewise.
* testsuite/21_strings/basic_string/allocator/wchar_t/swap.cc:
Likewise.

4 years agolibstdc++: Enable tests that incorrectly require cxx11-abi
Jonathan Wakely [Wed, 14 Oct 2020 11:05:57 +0000 (12:05 +0100)]
libstdc++: Enable tests that incorrectly require cxx11-abi

These tests were not being run when -D_GLIBCXX_USE_CXX11_ABI=0 was added
to the test flags, but they actually work OK with the old string.

libstdc++-v3/ChangeLog:

* testsuite/21_strings/basic_string/allocator/char/minimal.cc:
Do not require cxx11-abi effective target.
* testsuite/21_strings/basic_string/allocator/wchar_t/minimal.cc:
Likewise.
* testsuite/27_io/basic_fstream/cons/base.cc: Likewise.

4 years agolibstdc++: Implement LWG 3706 for COW strings
Jonathan Wakely [Wed, 14 Oct 2020 10:52:26 +0000 (11:52 +0100)]
libstdc++: Implement LWG 3706 for COW strings

The basic_string deduction guides are defined for the old ABI, but the
tests are currently disabled. This is because a single case fails when
using the old ABI, which is just because LWG 3706 isn't implemented for
the old ABI. That can be done easily, and the tests can be enabled.

libstdc++-v3/ChangeLog:

* include/bits/basic_string.h [!_GLIBCXX_USE_CXX11_ABI]
(basic_string(const _CharT*, const _Alloc&)): Constrain to
require an allocator-like type to fix CTAD ambiguity (LWG 3706).
* testsuite/21_strings/basic_string/cons/char/deduction.cc:
Remove dg-skip-if.
* testsuite/21_strings/basic_string/cons/wchar_t/deduction.cc:
Likewise.

4 years agoFortran : ICE in build_field PR95614
Mark Eggleston [Thu, 11 Jun 2020 13:33:51 +0000 (14:33 +0100)]
Fortran  :  ICE in build_field PR95614

Local identifiers can not be the same as a module name.  Original
patch by Steve Kargl resulted in name clashes between common block
names and local identifiers.  A local identifier can be the same as
a global identier if that identifier is not a module or a program.
The original patch was modified to reject global identifiers that
represent a module or a program.

2020-10-14  Steven G. Kargl  <kargl@gcc.gnu.org>
    Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/fortran/ChangeLog:

PR fortran/95614
* decl.c (gfc_get_common): Use gfc_match_common_name instead
of match_common_name.
* decl.c (gfc_bind_idents): Use gfc_match_common_name instead
of match_common_name.
* match.c : Rename match_common_name to gfc_match_common_name.
* match.c (gfc_match_common): Use gfc_match_common_name instead
of match_common_name.
* match.h : Rename match_common_name to gfc_match_common_name.
* resolve.c (resolve_common_vars): Check each symbol in a
common block has a global symbol.  If there is a global symbol
issue an error if the symbol type is a module or a program.

2020-10-14  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/testsuite/ChangeLog:

PR fortran/95614
* gfortran.dg/pr95614_1.f90: New test.
* gfortran.dg/pr95614_2.f90: New test.
* gfortran.dg/pr95614_3.f90: New test.
* gfortran.dg/pr95614_4.f90: New test.

4 years agoSupport ofsetted parameters in local modref
Jan Hubicka [Wed, 14 Oct 2020 09:44:30 +0000 (11:44 +0200)]
Support ofsetted parameters in local modref

2020-10-14  Jan Hubicka  <hubicka@ucw.cz>

* doc/invoke.texi: (ipa-jump-function-lookups): Document param.
* ipa-modref.c (merge_call_side_effects): Use
unadjusted_ptr_and_unit_offset.
* ipa-prop.c (unadjusted_ptr_and_unit_offset): New function.
* ipa-prop.h (unadjusted_ptr_and_unit_offset): Declare.
* params.opt: (-param-ipa-jump-function-lookups): New.

4 years agoFix SCC discovery in ipa-modref
Jan Hubicka [Wed, 14 Oct 2020 08:54:00 +0000 (10:54 +0200)]
Fix SCC discovery in ipa-modref

this patch fixes SCC discovery in ipa-modref which is causing misoptimization
of gnat bootstrapped with LTO, PGO and -O3.

I also improved debug info and spotted wrong parameter to ignore_stores_p
(which is probably quite harmless since we only inline matching functions, but
it is better to be consistent).

PR bootstrap/97350
* ipa-modref.c (ignore_edge): Do not ignore inlined edes.
(ipa_merge_modref_summary_after_inlining): Improve debug output and
fix parameter of ignore_stores_p.

4 years agolibgomp: Fix a typo in documentation
Jakub Jelinek [Wed, 14 Oct 2020 08:17:11 +0000 (10:17 +0200)]
libgomp: Fix a typo in documentation

2020-10-14  Jakub Jelinek  <jakub@redhat.com>

* libgomp.texi (omp_get_supported_active_levels): Fix a typo.

4 years agoruntime: populate signal PC on NetBSD
Nikhil Benesch [Tue, 13 Oct 2020 06:51:30 +0000 (06:51 +0000)]
runtime: populate signal PC on NetBSD

The NetBSD libc provides an architecture-independent macro that can
extract the PC from a ucontext struct.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261740

4 years agosyscall: port fix for netbsd unix sockets from upstream
Nikhil Benesch [Tue, 13 Oct 2020 07:06:11 +0000 (07:06 +0000)]
syscall: port fix for netbsd unix sockets from upstream

NetBSD does not include the null terminator when in its reported socket
length. Port the upstream bugfix for the issue (#6627).

This was likely missed during the usual upstream merge because the gc
and gccgo socket implementations have diverged quite a bit.

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/261741

4 years agoPR target/96759 - Handle global variable assignment from misaligned structure/PARALLE...
Kito Cheng [Wed, 2 Sep 2020 06:26:15 +0000 (14:26 +0800)]
PR target/96759 - Handle global variable assignment from misaligned structure/PARALLEL return values.

In g:70cdb21e579191fe9f0f1d45e328908e59c0179e, DECL/global variable has handled
misaligned stores, but it didn't handle PARALLEL values, and I refer the
other part of this function, I found the PARALLEL need handled by
emit_group_* functions, so I add a check, and using emit_group_store if
storing a PARALLEL value, also checked this change didn't break the
testcase(gcc.target/arm/unaligned-argument-3.c) added by the orginal changes.

For riscv64 target, struct S {int a; double b;} will pack into a parallel
value to return and it has TImode when misaligned access is supported,
however TImode required 16-byte align, but it only 8-byte align, so it go to
the misaligned stores handling, then it will try to generate move
instruction from a PARALLEL value.

Tested on following target without introduced new reguression:
  - riscv32/riscv64 elf
  - x86_64-linux
  - arm-eabi

v2 changes:
  - Use maybe_emit_group_store instead of emit_group_store.
  - Remove push_temp_slots/pop_temp_slots, emit_group_store only require
    stack temp slot when dst is CONCAT or PARALLEL, however
    maybe_emit_group_store will always use REG for dst if needed.

gcc/ChangeLog:

PR target/96759
* expr.c (expand_assignment): Handle misaligned stores with PARALLEL
value.

gcc/testsuite/ChangeLog:

PR target/96759
* g++.target/riscv/pr96759.C: New.
* gcc.target/riscv/pr96759.c: New.

4 years agoreflect: ensure uniqueness of type descriptors on AIX.
Clément Chigot [Wed, 7 Oct 2020 13:47:45 +0000 (15:47 +0200)]
reflect: ensure uniqueness of type descriptors on AIX.

On AIX, duplication of type descriptors can occur if one is
declared in the libgo and one in the Go program being compiled.
The AIX linker isn't able to merge them together as Linux one does.
One solution is to always load libgo first but that needs a huge mechanism in
gcc core. Thus, this patch ensures that the duplication isn't visible
for the end user.

In reflect and internal/reflectlite, the comparison of rtypes is made on their
name and not only on their addresses.

In reflect, toType() function is using a canonicalization map to force rtypes
having the same rtype.String() to return the same Type. This can't be made in
internal/reflectlite as it needs sync package. But, for now, it doesn't matter
as internal/reflectlite is not widely used.

Fixes golang/go#39276

Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/260158

4 years agoDaily bump.
GCC Administrator [Wed, 14 Oct 2020 00:16:24 +0000 (00:16 +0000)]
Daily bump.

4 years agoopenmp: Add support for the omp_get_supported_active_levels runtime library routine
Kwok Cheung Yeung [Wed, 7 Oct 2020 16:34:32 +0000 (09:34 -0700)]
openmp: Add support for the omp_get_supported_active_levels runtime library routine

This patch implements the omp_get_supported_active_levels runtime routine
from the OpenMP 5.0 specification, which returns the maximum number of
active nested parallel regions supported by this implementation.  The
current maximum (set using the omp_set_max_active_levels routine or the
OMP_MAX_ACTIVE_LEVELS environment variable) cannot exceed this number.

2020-10-13  Kwok Cheung Yeung  <kcy@codesourcery.com>

libgomp/
* env.c (gomp_max_active_levels_var): Initialize to
gomp_supported_active_levels.
(initialize_env): Limit gomp_max_active_levels_var to be at most
equal to gomp_supported_active_levels.
* fortran.c (omp_get_supported_active_levels): Add ialias_redirect.
(omp_get_supported_active_levels_): New.
* icv.c (omp_set_max_active_levels): Limit gomp_max_active_levels_var
to at most equal to gomp_supported_active_levels.
(omp_get_supported_active_levels): New.
* libgomp.h (gomp_supported_active_levels): New.
* libgomp.map (OMP_5.0.1): Add omp_get_supported_active_levels and
omp_get_supported_active_levels_.
* libgomp.texi (omp_get_supported_active_levels): New.
(omp_set_max_active_levels): Update.  Add reference to
omp_get_supported_active_levels.
* omp.h.in (omp_get_supported_active_levels): New.
* omp_lib.f90.in (omp_get_supported_active_levels): New.
* omp_lib.h.in (omp_get_supported_active_levels): New.
* testsuite/libgomp.c/lib-2.c (main): Check omp_get_max_active_levels
against omp_get_supported_active_levels.
* testsuite/libgomp.fortran/lib4.f90 (lib4): Likewise.

4 years agolibstdc++: Fix doxygen comment for std::any_of
Nuno Lopes [Tue, 13 Oct 2020 19:21:55 +0000 (20:21 +0100)]
libstdc++: Fix doxygen comment for std::any_of

libstdc++-v3/ChangeLog:

* include/bits/stl_algo.h (any_of): Fix incorrect description
in comment.

4 years agocombine: Fix up simplify_shift_const_1 for nested ROTATEs [PR97386]
Jakub Jelinek [Tue, 13 Oct 2020 17:13:26 +0000 (19:13 +0200)]
combine: Fix up simplify_shift_const_1 for nested ROTATEs [PR97386]

The following testcases are miscompiled (the first one since my improvements
to rotate discovery on GIMPLE, the other one for many years) because
combiner optimizes nested ROTATEs with narrowing SUBREG in between (i.e.
the outer rotate is performed in shorter precision than the inner one) to
just one ROTATE of the rotated constant.  While that (under certain
conditions) can work for shifts, it can't work for rotates where we can only
do that with rotates of the same precision.

2020-10-13  Jakub Jelinek  <jakub@redhat.com>

PR rtl-optimization/97386
* combine.c (simplify_shift_const_1): Don't optimize nested ROTATEs if
they have different modes.

* gcc.c-torture/execute/pr97386-1.c: New test.
* gcc.c-torture/execute/pr97386-2.c: New test.

4 years agolibstdc++: Update C++20 status documentation
Jonathan Wakely [Tue, 13 Oct 2020 16:40:43 +0000 (17:40 +0100)]
libstdc++: Update C++20 status documentation

libstdc++-v3/ChangeLog:

* doc/xml/manual/evolution.xml: Document some API changes
and deprecations.
* doc/xml/manual/intro.xml: Document LWG 2499.
* doc/xml/manual/status_cxx2020.xml: Update status.
* doc/html/*: Regenerate.

4 years agolibstdc++: Remove trailing whitespace from XML docs
Jonathan Wakely [Tue, 13 Oct 2020 15:43:11 +0000 (16:43 +0100)]
libstdc++: Remove trailing whitespace from XML docs

libstdc++-v3/ChangeLog:

* doc/xml/book.txml: Remove trailing whitespace.
* doc/xml/chapter.txml: Likewise.
* doc/xml/class.txml: Likewise.
* doc/xml/gnu/fdl-1.3.xml: Likewise.
* doc/xml/gnu/gpl-3.0.xml: Likewise.
* doc/xml/manual/abi.xml: Likewise.
* doc/xml/manual/algorithms.xml: Likewise.
* doc/xml/manual/allocator.xml: Likewise.
* doc/xml/manual/appendix_contributing.xml: Likewise.
* doc/xml/manual/appendix_free.xml: Likewise.
* doc/xml/manual/appendix_porting.xml: Likewise.
* doc/xml/manual/atomics.xml: Likewise.
* doc/xml/manual/auto_ptr.xml: Likewise.
* doc/xml/manual/backwards_compatibility.xml: Likewise.
* doc/xml/manual/bitmap_allocator.xml: Likewise.
* doc/xml/manual/build_hacking.xml: Likewise.
* doc/xml/manual/codecvt.xml: Likewise.
* doc/xml/manual/concurrency.xml: Likewise.
* doc/xml/manual/concurrency_extensions.xml: Likewise.
* doc/xml/manual/configure.xml: Likewise.
* doc/xml/manual/containers.xml: Likewise.
* doc/xml/manual/ctype.xml: Likewise.
* doc/xml/manual/debug.xml: Likewise.
* doc/xml/manual/debug_mode.xml: Likewise.
* doc/xml/manual/diagnostics.xml: Likewise.
* doc/xml/manual/documentation_hacking.xml: Likewise.
* doc/xml/manual/evolution.xml: Likewise.
* doc/xml/manual/internals.xml: Likewise.
* doc/xml/manual/intro.xml: Likewise.
* doc/xml/manual/io.xml: Likewise.
* doc/xml/manual/iterators.xml: Likewise.
* doc/xml/manual/locale.xml: Likewise.
* doc/xml/manual/localization.xml: Likewise.
* doc/xml/manual/messages.xml: Likewise.
* doc/xml/manual/mt_allocator.xml: Likewise.
* doc/xml/manual/numerics.xml: Likewise.
* doc/xml/manual/parallel_mode.xml: Likewise.
* doc/xml/manual/policy_data_structures.xml: Likewise.
* doc/xml/manual/prerequisites.xml: Likewise.
* doc/xml/manual/shared_ptr.xml: Likewise.
* doc/xml/manual/spine.xml: Likewise.
* doc/xml/manual/status_cxxtr1.xml: Likewise.
* doc/xml/manual/status_cxxtr24733.xml: Likewise.
* doc/xml/manual/strings.xml: Likewise.
* doc/xml/manual/support.xml: Likewise.
* doc/xml/manual/test.xml: Likewise.
* doc/xml/manual/test_policy_data_structures.xml: Likewise.
* doc/xml/manual/using.xml: Likewise.
* doc/xml/manual/using_exceptions.xml: Likewise.
* doc/xml/manual/utilities.xml: Likewise.
* doc/html/*: Regenerate.

4 years agoDo not save hash slots across calls to hash_table::get_or_insert.
Aldy Hernandez [Tue, 13 Oct 2020 08:40:20 +0000 (04:40 -0400)]
Do not save hash slots across calls to hash_table::get_or_insert.

There's a read of a freed block while accessing the default_slot in
calc_switch_ranges.

      default_slot->intersect (def_range);

It seems the default_slot got swiped from under us, and the valgrind
dump indicates the free came from the get_or_insert in the same
function:

      irange *&slot = m_edge_table->get_or_insert (e, &existed);

So it looks like the get_or_insert is actually freeing the value of
the previously allocated default_slot.  Looking down the chain
from get_or_insert, we see it calls hash_table<>::expand, which
actually does a free while doing a resize of sorts:

  if (!m_ggc)
    Allocator <value_type> ::data_free (oentries);
  else
    ggc_free (oentries);

This patch avoids keeping a pointer to the default_slot across multiple
calls to get_or_insert in the loop.

gcc/ChangeLog:

PR tree-optimization/97379
* gimple-range-edge.cc (outgoing_range::calc_switch_ranges): Do
not save hash slot across calls to hash_table<>::get_or_insert.

4 years agolto-wrapper: Use nontemp filename with -save-temps
Tobias Burnus [Tue, 13 Oct 2020 13:56:58 +0000 (15:56 +0200)]
lto-wrapper: Use nontemp filename with -save-temps

gcc/ChangeLog:

* lto-wrapper.c (find_crtoffloadtable): Fix last commit
by adding NULL as last argument to concat.

4 years ago[arm] Use -Os for stack-protector-[56].c tests
Richard Sandiford [Tue, 13 Oct 2020 13:50:24 +0000 (14:50 +0100)]
[arm] Use -Os for stack-protector-[56].c tests

Using -O2 made the tests subject to LDRD vs. LDM tuning.
The simplest fix seems to be to use -Os, so that LDM is
unequivocally a win.

gcc/testsuite/
* gcc.target/arm/stack-protector-5.c: Use -Os rather than -O2.
* gcc.target/arm/stack-protector-6.c: Likewise.

4 years agoAArch64: Add Neoverse N2 tuning model
Kyrylo Tkachov [Thu, 8 Oct 2020 14:44:46 +0000 (15:44 +0100)]
AArch64: Add Neoverse N2 tuning model

This patch adds a tuning structure for Neoverse N2 to allow for further
tuning.
For now it's just a deduplication of the Neoverse N1 struct that it was
reusing but with the SVE width set to 128.

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

gcc/
* config/aarch64/aarch64.c (neoversen2_tunings): Define.
* config/aarch64/aarch64-cores.def (neoverse-n2): Use it.

4 years agolto-wrapper: Use nontemp filename with -save-temps
Tobias Burnus [Tue, 13 Oct 2020 13:19:51 +0000 (15:19 +0200)]
lto-wrapper: Use nontemp filename with -save-temps

gcc/ChangeLog:

* lto-wrapper.c (find_crtoffloadtable): With -save-temps,
use non-temp file name utilizing the dump prefix.
(run_gcc): Update call.

4 years agoRemove STMT_VINFO_SAME_ALIGN_REFS
Richard Biener [Tue, 13 Oct 2020 09:42:27 +0000 (11:42 +0200)]
Remove STMT_VINFO_SAME_ALIGN_REFS

This makes the only consumer of STMT_VINFO_SAME_ALIGN_REFS, the
loop peeling for alignment code, use locally computed data and
then removes STMT_VINFO_SAME_ALIGN_REFS and its computation.

It also adjusts the auto_vec<> move CTOR/assignment so you
can write

  auto_vec<..> foo = bar.copy ();

and have foo own the generated copy.

2020-10-13  Richard Biener  <rguenther@suse.de>

PR tree-optimization/97382
* tree-vectorizer.h (_stmt_vec_info::same_align_refs): Remove.
(STMT_VINFO_SAME_ALIGN_REFS): Likewise.
* tree-vectorizer.c (vec_info::new_stmt_vec_info): Do not
allocate STMT_VINFO_SAME_ALIGN_REFS.
(vec_info::free_stmt_vec_info): Do not release
STMT_VINFO_SAME_ALIGN_REFS.
* tree-vect-data-refs.c (vect_analyze_data_ref_dependences):
Do not compute self and read-read dependences.
(vect_dr_aligned_if_related_peeled_dr_is): New helper.
(vect_dr_aligned_if_peeled_dr_is): Likewise.
(vect_update_misalignment_for_peel): Use it instead of
iterating over STMT_VINFO_SAME_ALIGN_REFS.
(dr_align_group_sort_cmp): New function.
(vect_enhance_data_refs_alignment): Count the number of
same aligned refs here and elide uses of STMT_VINFO_SAME_ALIGN_REFS.
(vect_find_same_alignment_drs): Remove.
(vect_analyze_data_refs_alignment): Do not call it.
* vec.h (auto_vec<T, 0>::auto_vec): Adjust CTOR to take
a vec<>&&, assert it isn't using auto storage.
(auto_vec& operator=): Apply a similar change.

* gcc.dg/vect/no-vfa-vect-dv-2.c: Remove same align dump
scanning.
* gcc.dg/vect/vect-103.c: Likewise.
* gcc.dg/vect/vect-91.c: Likewise.
* gfortran.dg/vect/vect-4.f90: Likewise.

4 years agonvptx/mkoffload.c: Add missing fclose
Tobias Burnus [Tue, 13 Oct 2020 09:54:26 +0000 (11:54 +0200)]
nvptx/mkoffload.c: Add missing fclose

gcc/ChangeLog:

* config/nvptx/mkoffload.c (main): Add missing fclose (in).

4 years agoASAN: disable -Wno-stringop-overflow for 2 tests
Martin Liska [Tue, 13 Oct 2020 08:09:47 +0000 (10:09 +0200)]
ASAN: disable -Wno-stringop-overflow for 2 tests

gcc/testsuite/ChangeLog:

PR middle-end/97392
* g++.dg/asan/asan_test.C: Disable -Wstringop-overflow.
* gcc.dg/asan/pr80166.c: Likewise.

4 years agoAArch64: Add FLAG for mul/mla/mls intrinsics [PR94442]
zhengnannan [Tue, 13 Oct 2020 08:05:52 +0000 (09:05 +0100)]
AArch64: Add FLAG for mul/mla/mls intrinsics [PR94442]

2020-10-13  Zhiheng Xie  <xiezhiheng@huawei.com>
    Nannan Zheng  <zhengnannan@huawei.com>

gcc/ChangeLog:

* config/aarch64/aarch64-simd-builtins.def: Add proper FLAG
for mul/mla/mls intrinsics.

4 years agoopenmp: Improve composite triangular loop lowering and expansion
Jakub Jelinek [Tue, 13 Oct 2020 07:30:47 +0000 (09:30 +0200)]
openmp: Improve composite triangular loop lowering and expansion

This propagates needed values from the point where number of iterations
is calculated on composite loops to the places where that information
is needed to use the more efficient square root discovery to compute
the starting iterator values from the logical iteration number.

2020-10-13  Jakub Jelinek  <jakub@redhat.com>

* omp-low.c (add_taskreg_looptemp_clauses): For triangular loops
with non-constant number of iterations add another 4 _looptemp_
clauses before the (optional) one for lastprivate.
(lower_omp_for_lastprivate): Skip those clauses when looking for
the lastprivate clause.
(lower_omp_for): For triangular loops with non-constant number of
iterations add another 4 _looptemp_ clauses.
* omp-expand.c (expand_omp_for_init_counts): For triangular loops
with non-constant number of iterations set counts[0],
fd->first_inner_iterations, fd->factor and fd->adjn1 from the newly
added _looptemp_ clauses.
(expand_omp_for_init_vars): Initialize the newly added _looptemp_
clauses.
(find_lastprivate_looptemp): New function.
(expand_omp_for_static_nochunk, expand_omp_for_static_chunk,
expand_omp_taskloop_for_outer): Use it instead of manually skipping
_looptemp_ clauses.

4 years agoFix tramp3d PGO misoptimization
Jan Hubicka [Tue, 13 Oct 2020 07:19:54 +0000 (09:19 +0200)]
Fix tramp3d PGO misoptimization

this patch fixes tramp3d ICE with PGO.  It has turned out to be by a misupdate
in ignore_edge I introduced in previous patch that made us to not compute
SCCs correctly with -fno-lto.

While looking for problem I proofread the sources and also fortified the
srouces for situation where we insert a summary for no good reason and noticed
a problem that early ipa-modref disabled itself in some cases.
I also noticed that param_index is treamed as uhwi while it is signed (that
wastes file space).

Bootstrapping/regtesting x86_64-linux, will commit it tomorrow if that passes.

gcc/ChangeLog:

2020-10-13  Jan Hubicka  <hubicka@ucw.cz>

PR ipa/97389
* ipa-modref.c (dump_lto_records): Fix formating of dump file.
(modref_summary::dump): Do not check loads to be non-null.
(modref_summary_lto::dump): Do not check loads to be non-null.
(merge_call_side_effects): Improve debug output.
(analyze_call): Crash when cur_summary->loads is NULL.
(analyze_function): Update.
(modref_summaries::insert): Insert only into summaries, not
optimization_summaries.
(modref_summaries::duplicate): Likewise; crash when load or sotres
are NULL.
(modref_summaries_lto::duplicate): Crash when loads or stores are NULL.
(write_modref_records): param_index is signed.
(read_modref_records): param_index is signed.
(modref_write): Crash when loads or stores are NULL.
(read_section): Compensate previous change.
(pass_modref::execute): Do not check optimization_summaries t be
non-NULL.
(ignore_edge): Fix.
(compute_parm_map): Fix formating.
(modref_propagate_in_scc): Do not expect loads/stores to be NULL.

4 years agoDaily bump.
GCC Administrator [Tue, 13 Oct 2020 00:16:26 +0000 (00:16 +0000)]
Daily bump.

4 years agoanalyzer: handle static callbacks [PR97258]
David Malcolm [Wed, 30 Sep 2020 22:51:26 +0000 (18:51 -0400)]
analyzer: handle static callbacks [PR97258]

The analyzer's initial worklist was only populated with non-static
functions in the TU (along with those that look promising for call
summaries).  Hence some static functions that were never explicitly
called but could be called via function pointers were not being
analyzed.

This patch remedies this by ensuring that functions that escape as
function pointers get added to the worklist, if they haven't been
already.  Another fix would be to simply analyze all functions that
we have a body for, but too much of the testsuite relies on static
test functions not being directly analyzed.

gcc/analyzer/ChangeLog:
PR analyzer/97258
* engine.cc (impl_region_model_context::on_escaped_function): New
vfunc.
(exploded_graph::add_function_entry): Use m_functions_with_enodes
to implement idempotency.
(add_any_callbacks): New.
(exploded_graph::build_initial_worklist): Use the above to find
callbacks that are reachable from global initializers.
(exploded_graph::on_escaped_function): New.
* exploded-graph.h
(impl_region_model_context::on_escaped_function): New decl.
(exploded_graph::on_escaped_function): New decl.
(exploded_graph::m_functions_with_enodes): New field.
* region-model-reachability.cc
(reachable_regions::reachable_regions): Replace "store" param with
"model" param; use it to initialize m_model.
(reachable_regions::add): When getting the svalue for the region,
call get_store_value on the model rather than using an initial
value.
(reachable_regions::mark_escaped_clusters): Add ctxt param and
use it to call on_escaped_function when a function_region escapes.
* region-model-reachability.h
(reachable_regions::reachable_regions): Replace "store" param with
"model" param.
(reachable_regions::mark_escaped_clusters): Add ctxt param.
(reachable_regions::m_model): New field.
* region-model.cc (region_model::handle_unrecognized_call): Update
for change in reachable_regions ctor.
(region_model::handle_unrecognized_call): Pass ctxt to
mark_escaped_clusters.
(region_model::get_reachable_svalues): Update for change in
reachable_regions ctor.
(region_model::get_initial_value_for_global): Read-only variables
keep their initial values.
* region-model.h (region_model_context::on_escaped_function): New
vfunc.
(noop_region_model_context::on_escaped_function): New.

gcc/testsuite/ChangeLog:
PR analyzer/97258
* gcc.dg/analyzer/callbacks-1.c: New test.
* gcc.dg/analyzer/callbacks-2.c: New test.
* gcc.dg/analyzer/callbacks-3.c: New test.

4 years agomathfn_built_in_type case type fix
Alexandre Oliva [Mon, 12 Oct 2020 21:55:40 +0000 (18:55 -0300)]
mathfn_built_in_type case type fix

Martin Liška reported warnings about type mismatches in the cases in
the recently-introduced mathfn_built_in_type.  This patch adjusts the
macros to use the combined_fn enumerators rather than the
(currently same-numbered) built_in_function ones.

for  gcc/ChangeLog

* builtins.c (mathfn_built_in_type): Use CFN_ enumerators.

4 years agomake sin and cos generics inlineable
Alexandre Oliva [Mon, 12 Oct 2020 21:55:37 +0000 (18:55 -0300)]
make sin and cos generics inlineable

Enable the sincos optimization within callers of these
(single-argument) elementary functions.

for  gcc/ada/ChangeLog

* libgnat/a-ngelfu.ads (Sin, Cos): Make the single-argument
functions inline.

4 years agoMIPS/libphobos: Fix switchcontext.S assembly for MIPS I ISA
Maciej W. Rozycki [Mon, 12 Oct 2020 18:09:13 +0000 (19:09 +0100)]
MIPS/libphobos: Fix switchcontext.S assembly for MIPS I ISA

Correct MIPS I assembly build errors in switchcontext.S:

.../libphobos/libdruntime/config/mips/switchcontext.S: Assembler messages:
.../libphobos/libdruntime/config/mips/switchcontext.S:50: Error: opcode not supported on this processor: mips1 (mips1) `sdc1 $f20,(0*8-((6*8+4+(-6*8+4&7))))($sp)'

etc., due to the use of the MIPS II LDC1 and SDC1 hardware instructions
for FP register load and store operations.  Instead use the L.D and S.D
generic assembly instructions, which are strict aliases for the LDC1 and
SDC1 instructions respectively and produce identical machine code where
the assembly for the MIPS II or a higher ISA has been requested, however
they become assembly macros and expand to compatible sequences of LWC1
and SWC1 hardware instructions where the assembly for the MIPS I ISA is
in effect.

libphobos/
* libdruntime/config/mips/switchcontext.S [__mips_hard_float]:
Use L.D and S.D generic assembly instructions rather than LDC1
and SDC1 MIPS II hardware instructions.

4 years agoDo not ignore failures from gimple_range_calc_op2.
Andrew MacLeod [Mon, 12 Oct 2020 17:00:12 +0000 (13:00 -0400)]
Do not ignore failures from gimple_range_calc_op2.

We were ignoring the return value if op2 returned false and getting garbage ranges propagated.

gcc/ChangeLog:

PR tree-optimization/97381
* gimple-range-gori.cc (gori_compute::compute_operand2_range): If a range cannot be
calculated through operand 2, return false.

gcc/testsuite/ChangeLog:

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

4 years agolibstdc++: Apply proposed resolution for LWG 3450
Patrick Palka [Mon, 12 Oct 2020 17:46:24 +0000 (13:46 -0400)]
libstdc++: Apply proposed resolution for LWG 3450

libstdc++-v3/ChangeLog:

* include/std/ranges (take_while_view::begin): Constrain the
const overload further as per LWG 3450.
(take_while_view::end): Likewise.
* testsuite/std/ranges/adaptors/take_while.cc: Add test for LWG
3450.

4 years agolibstdc++: Apply proposed resolution for LWG 3449 [PR95322]
Patrick Palka [Mon, 12 Oct 2020 17:46:21 +0000 (13:46 -0400)]
libstdc++: Apply proposed resolution for LWG 3449 [PR95322]

Now that the frontend bug PR96805 is fixed, we can cleanly apply the
proposed resolution for this issue.

This slightly deviates from the proposed resolution by declaring _CI a
member of take_view instead of take_view::_Sentinel, since it doesn't
depend on anything within _Sentinel anymore.

libstdc++-v3/ChangeLog:

PR libstdc++/95322
* include/std/ranges (take_view::_CI): Define this alias
template as per LWG 3449 and remove ...
(take_view::_Sentinel::_CI): ... this type alias.
(take_view::_Sentinel::operator==): Adjust use of _CI
accordingly.  Define a second overload that accepts an iterator
of the opposite constness as per LWG 3449.
(take_while_view::_Sentinel::operator==): Likewise.
* testsuite/std/ranges/adaptors/95322.cc: Add tests for LWG 3449.

4 years agolibstdc++: Update doxyfile to Doxygen 1.8.20 format
Jonathan Wakely [Mon, 12 Oct 2020 17:14:01 +0000 (18:14 +0100)]
libstdc++: Update doxyfile to Doxygen 1.8.20 format

libstdc++-v3/ChangeLog:

* doc/doxygen/user.cfg.in: Update to Doxygen 1.8.20 format.

4 years agolibstdc++: Include C++17 features in doxygen API docs
Jonathan Wakely [Mon, 12 Oct 2020 17:14:01 +0000 (18:14 +0100)]
libstdc++: Include C++17 features in doxygen API docs

libstdc++-v3/ChangeLog:

* doc/doxygen/user.cfg.in (PREDEFINED): Use __cplusplus=201703L
so that C++17 features are documented.

4 years agolibstdc++: Fix documentation for return values of copy algos
Jonathan Wakely [Mon, 12 Oct 2020 17:14:01 +0000 (18:14 +0100)]
libstdc++: Fix documentation for return values of copy algos

The doxygen comments for these algos all incorrectly claim to use
(first - last) as the difference from the start of the output range to
the return value. As reported on the mailing list by Johannes Choo, it
should be (last - first).

libstdc++-v3/ChangeLog:

* include/bits/stl_algobase.h (copy, move, copy_backward)
(move_backward): Fix documentation for returned iterator.

4 years agooperator_trunc_mod::wi_fold: Return VARYING for mod by zero.
Aldy Hernandez [Mon, 12 Oct 2020 14:41:21 +0000 (10:41 -0400)]
operator_trunc_mod::wi_fold: Return VARYING for mod by zero.

gcc/ChangeLog:

PR tree-optimization/97378
* range-op.cc (operator_trunc_mod::wi_fold): Return VARYING for mod by zero.

gcc/testsuite/ChangeLog:

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

4 years agoanalyzer: add warnings about writes to constant regions [PR95007]
David Malcolm [Wed, 7 Oct 2020 22:34:09 +0000 (18:34 -0400)]
analyzer: add warnings about writes to constant regions [PR95007]

This patch adds two new warnings:
  -Wanalyzer-write-to-const
  -Wanalyzer-write-to-string-literal
for code paths where the analyzer detects a write to a constant region.

As noted in the documentation part of the patch, the analyzer doesn't
prioritize detection of such writes, in that the state-merging logic
will blithely lose the distinction between const and non-const regions.
Hence false negatives are likely to arise due to state-merging.

However, if the analyzer does happen to spot such a write, it seems worth
reporting, hence this patch.

gcc/analyzer/ChangeLog:
* analyzer.opt (Wanalyzer-write-to-const): New.
(Wanalyzer-write-to-string-literal): New.
* region-model-impl-calls.cc (region_model::impl_call_memcpy):
Call check_for_writable_region.
(region_model::impl_call_memset): Likewise.
(region_model::impl_call_strcpy): Likewise.
* region-model.cc (class write_to_const_diagnostic): New.
(class write_to_string_literal_diagnostic): New.
(region_model::check_for_writable_region): New.
(region_model::set_value): Call check_for_writable_region.
* region-model.h (region_model::check_for_writable_region): New
decl.

gcc/ChangeLog:
* doc/invoke.texi: Document -Wanalyzer-write-to-const and
-Wanalyzer-write-to-string-literal.

gcc/testsuite/ChangeLog:
PR c/83347
PR middle-end/90404
PR analyzer/95007
* gcc.dg/analyzer/write-to-const-1.c: New test.
* gcc.dg/analyzer/write-to-string-literal-1.c: New test.

4 years agoPR c++/97201 - ICE in -Warray-bounds writing to result of operator new(0)
Martin Sebor [Mon, 12 Oct 2020 15:35:02 +0000 (09:35 -0600)]
PR c++/97201 - ICE in -Warray-bounds writing to result of operator new(0)

gcc/cp/ChangeLog:

PR c++/97201
* error.c (dump_type_suffix): Handle both the C and C++ forms of
zero-length arrays.

libstdc++-v3/ChangeLog:

PR c++/97201
* libsupc++/new (operator new): Add attribute alloc_size and malloc.

gcc/testsuite/ChangeLog:

PR c++/97201
* g++.dg/warn/Wplacement-new-size-8.C: Adjust expected message.
* g++.dg/warn/Warray-bounds-10.C: New test.
* g++.dg/warn/Warray-bounds-11.C: New test.
* g++.dg/warn/Warray-bounds-12.C: New test.
* g++.dg/warn/Warray-bounds-13.C: New test.

4 years agoGeneralize compute_objsize to return maximum size/offset instead of failing (PR middl...
Martin Sebor [Fri, 9 Oct 2020 20:48:43 +0000 (14:48 -0600)]
Generalize compute_objsize to return maximum size/offset instead of failing (PR middle-end/97023).

Also resolves:
PR middle-end/97342 - bogus -Wstringop-overflow with nonzero signed and unsigned offsets
PR middle-end/97023 - missing warning on buffer overflow in chained mempcpy
PR middle-end/96384 - bogus -Wstringop-overflow= storing into multidimensional array with index in range

gcc/ChangeLog:

PR middle-end/97342
PR middle-end/97023
PR middle-end/96384
* builtins.c (access_ref::access_ref): Initialize new member.  Use
new enum.
(access_ref::size_remaining): Define new member function.
(inform_access): Handle expressions referencing objects.
(gimple_call_alloc_size): Call get_size_range instead of get_range.
(gimple_call_return_array): New function.
(get_range): Rename...
(get_offset_range): ...to this.  Improve detection of ranges from
types of expressions.
(gimple_call_return_array): Adjust calls to get_range per above.
(compute_objsize): Same.  Set maximum size or offset instead of
failing for unknown objects and handle more kinds of expressions.
(compute_objsize): Call access_ref::size_remaining.
(compute_objsize): Have transitional wrapper fail for pointers
into unknown objects.
(expand_builtin_strncmp): Call access_ref::size_remaining and
handle new cases.
* builtins.h (access_ref::size_remaining): Declare new member function.
(access_ref::set_max_size_range): Define new member function.
(access_ref::add_ofset, access_ref::add_max_ofset): Same.
(access_ref::add_base0): New data member.
* calls.c (get_size_range): Change argument type.  Handle new
condition.
* calls.h (get_size_range): Adjust signature.
(enum size_range_flags): Define new type.
* gimple-ssa-warn-restrict.c (builtin_memref::builtin_memref): Correct
argument to get_size_range.
* tree-ssa-strlen.c (get_range): Handle anti-ranges.
(maybe_warn_overflow): Check DECL_P before assuming it's one.

gcc/testsuite/ChangeLog:

PR middle-end/97342
PR middle-end/97023
PR middle-end/96384
* c-c++-common/Wrestrict.c: Adjust comment.
* gcc.dg/Wstringop-overflow-34.c: Remove xfail.
* gcc.dg/Wstringop-overflow-43.c: Remove xfails.  Adjust regex patterns.
* gcc.dg/pr51683.c: Prune out expected warning.
* gcc.target/i386/pr60693.c: Same.
* g++.dg/warn/Wplacement-new-size-8.C: New test.
* gcc.dg/Wstringop-overflow-41.c: New test.
* gcc.dg/Wstringop-overflow-44.s: New test.
* gcc.dg/Wstringop-overflow-45.c: New test.
* gcc.dg/Wstringop-overflow-46.c: New test.
* gcc.dg/Wstringop-overflow-47.c: New test.
* gcc.dg/Wstringop-overflow-49.c: New test.
* gcc.dg/Wstringop-overflow-50.c: New test.
* gcc.dg/Wstringop-overflow-51.c: New test.
* gcc.dg/Wstringop-overflow-52.c: New test.
* gcc.dg/Wstringop-overflow-53.c: New test.
* gcc.dg/Wstringop-overflow-54.c: New test.
* gcc.dg/Wstringop-overflow-55.c: New test.
* gcc.dg/Wstringop-overread-5.c: New test.

4 years agoCorrect handling of indices into arrays with elements larger than 1 (PR c++/96511)
Martin Sebor [Fri, 9 Oct 2020 19:56:53 +0000 (13:56 -0600)]
Correct handling of indices into arrays with elements larger than 1 (PR c++/96511)

Resolves:
PR c++/96511 - Incorrect -Wplacement-new on POINTER_PLUS into an array with 4-byte elements
PR middle-end/96384 - bogus -Wstringop-overflow= storing into multidimensional array with index in range

gcc/ChangeLog:

PR c++/96511
PR middle-end/96384
* builtins.c (get_range): Return full range of type when neither
value nor its range is available.  Fail for ranges inverted due
to the signedness of offsets.
(compute_objsize): Handle more special array members.  Handle
POINTER_PLUS_EXPR and VIEW_CONVERT_EXPR that come up in front end
code.
(access_ref::offset_bounded): Define new member function.
* builtins.h (access_ref::eval): New data member.
(access_ref::offset_bounded): New member function.
(access_ref::offset_zero): New member function.
(compute_objsize): Declare a new overload.
* gimple-array-bounds.cc (array_bounds_checker::check_array_ref): Use
enum special_array_member.
* tree.c (component_ref_size): Use special_array_member.
* tree.h (special_array_member): Define a new type.
(component_ref_size): Change signature.

gcc/cp/ChangeLog:

PR c++/96511
PR middle-end/96384
* init.c (warn_placement_new_too_small): Call builtin_objsize instead
of duplicating what it does.

gcc/testsuite/ChangeLog:

PR c++/96511
PR middle-end/96384
* g++.dg/init/strlen.C: Add expected warning.
* g++.dg/warn/Wplacement-new-size-1.C: Relax warnings.
* g++.dg/warn/Wplacement-new-size-2.C: Same.
* g++.dg/warn/Wplacement-new-size-6.C: Same.
* gcc.dg/Warray-bounds-58.c: Adjust
* gcc.dg/Wstringop-overflow-37.c: Same.
* g++.dg/warn/Wplacement-new-size-7.C: New test.