platform/upstream/gcc.git
3 years agolibcody: Fix build for older GCC versions
Jonathan Wakely [Wed, 16 Dec 2020 13:37:17 +0000 (13:37 +0000)]
libcody: Fix build for older GCC versions

Before CWG DR 1955 the controlling expression for an #elif must be
syntactically correct, meaning this won't compile with C++11 compilers
such as gcc 4.8:

The solution is to define __has_include(X) as 0 for compilers that don't
support it.

The second problem is that when <source_location> is found, it is used
without the std:: qualification.

libcody/ChangeLog:

* internal.hh: Define fallback macros for __has_builtin and
__has_include. Use __has_builtin for __builtin_FILE and
__builtin_LINE. Define alias for std::source_location.

3 years agolibstdc++: Only use __builtin_sprintf if supported [PR 96083]
Jonathan Wakely [Wed, 16 Dec 2020 13:50:34 +0000 (13:50 +0000)]
libstdc++: Only use __builtin_sprintf if supported [PR 96083]

Clang doesn't support __builtin_sprintf, so use std::sprintf instead.

libstdc++-v3/ChangeLog:

PR libstdc++/96083
* include/ext/throw_allocator.h: Use __has_builtin to check for
__builtin_sprintf support, and use std::sprtinf if necessary.

3 years agolibcody: fix --enable-checking=... [PR 98311]
Nathan Sidwell [Wed, 16 Dec 2020 14:20:20 +0000 (06:20 -0800)]
libcody: fix --enable-checking=... [PR 98311]

The -enable-checking configure code in libcody didn't play well with
us.  This just uses libcpp's configurey for that piece.

libcody/
* configure.ac: Use libcpp's enable-checking code.
* configure: Rebuilt.

3 years agolibcody: More dashism
Nathan Sidwell [Wed, 16 Dec 2020 14:03:38 +0000 (06:03 -0800)]
libcody: More dashism

There were still some dash-killing uses of +=.  Fixed thusly.

* config.m4: Replace V+="..." with V="$V..."
* configure: Rebuilt.

3 years agoc++: Fix detailed-mem-stat breakage
Nathan Sidwell [Wed, 16 Dec 2020 13:51:42 +0000 (05:51 -0800)]
c++: Fix detailed-mem-stat breakage

module.cc has a static initializer that ends up in a circular
dependency when detailed mem stats are enabled.  This removes the need
for that initializer to be dynamic, and we punt to the lazy
initializing we already had inside the object in question anyway.  At
the cost of an additional indirection.

gcc/cp/
* module.cc (loc_spans): Make spans a pointer, not inline.
Adjust all accesses.

3 years agoRequire .init_array/.fini_array support for SHF_GNU_RETAIN
H.J. Lu [Tue, 15 Dec 2020 04:10:13 +0000 (20:10 -0800)]
Require .init_array/.fini_array support for SHF_GNU_RETAIN

Since SHF_GNU_RETAIN support doesn't work for crtstuff.c which switches
the output section directly with asm statement:

---
static void __attribute__((used))
__do_global_dtors_aux (void)
{
  static _Bool completed;

  if (__builtin_expect (completed, 0))
    return;
  completed = 1;
}

static void __attribute__((__used__))
call___do_global_dtors_aux (void)
{
  asm ("\t.section\t.fini");
  __do_global_dtors_aux ();
  asm ("\t.section\t.text");
}
---

use SHF_GNU_RETAIN only if .init_array/.fini_array section is supported.

gcc/

PR target/98146
* defaults.h (SUPPORTS_SHF_GNU_RETAIN): New.
* varasm.c (get_section): Replace HAVE_GAS_SHF_GNU_RETAIN with
SUPPORTS_SHF_GNU_RETAIN.
(resolve_unique_section): Likewise.
(get_variable_section): Likewise.
(switch_to_section): Likewise.

gcc/testsuite/

PR target/98146
* lib/target-supports.exp
(check_effective_target_R_flag_in_section): Also check
HAVE_INITFINI_ARRAY_SUPPORT != 0.

3 years agoWarn used and not used symbols in section with the same name
H.J. Lu [Thu, 3 Dec 2020 23:39:59 +0000 (15:39 -0800)]
Warn used and not used symbols in section with the same name

When SECTION_RETAIN is used, issue a warning when a symbol without used
attribute and a symbol with used attribute are placed in the section with
the same name, like

int __attribute__((used,section(".data.foo"))) foo2 = 2;
int __attribute__((section(".data.foo"))) foo1 = 1;

since assembler will put them in different sections with the same section
name.

gcc/

PR target/98146
* varasm.c (switch_to_section): Warn when a symbol without used
attribute and a symbol with used attribute are placed in the
section with the same name.

gcc/testsuite/

PR target/98146
* c-c++-common/attr-used-5.c: Updated.
* c-c++-common/attr-used-6.c: Likewise.
* c-c++-common/attr-used-7.c: Likewise.
* c-c++-common/attr-used-8.c: Likewise.

3 years agoSwitch to a new section if the SECTION_RETAIN bit doesn't match
H.J. Lu [Thu, 3 Dec 2020 19:01:06 +0000 (11:01 -0800)]
Switch to a new section if the SECTION_RETAIN bit doesn't match

When definitions marked with used attribute and unmarked definitions are
placed in the section with the same name, switch to a new section if the
SECTION_RETAIN bit doesn't match.

gcc/

PR target/98146
* output.h (switch_to_section): Add a tree argument, default to
nullptr.
* varasm.c (get_section): If the SECTION_RETAIN bit doesn't match,
return and switch to a new section later.
(assemble_start_function): Pass decl to switch_to_section.
(assemble_variable): Likewise.
(switch_to_section): If the SECTION_RETAIN bit doesn't match,
switch to a new section.

gcc/testsuite/

PR target/98146
* c-c++-common/attr-used-5.c: New test.
* c-c++-common/attr-used-6.c: Likewise.
* c-c++-common/attr-used-7.c: Likewise.
* c-c++-common/attr-used-8.c: Likewise.
* c-c++-common/attr-used-9.c: Likewise.

3 years agolibstdc++: Fix errors from Library Fundamentals TS headers in C++11 [PR 98319]
Jonathan Wakely [Wed, 16 Dec 2020 13:37:17 +0000 (13:37 +0000)]
libstdc++: Fix errors from Library Fundamentals TS headers in C++11 [PR 98319]

Currently the <experimental/random>, <experimental/source_location> and
<experimental/utility> headers can be included in C++98 and C++11 modes,
but gives errors. With this change they can be included, but define
nothing.

libstdc++-v3/ChangeLog:

PR libstdc++/98319
* include/experimental/random: Only define contents for C++14
and later.
* include/experimental/source_location: Likewise.
* include/experimental/utility: Likewise.
* testsuite/experimental/feat-lib-fund.cc: Include all LFTS
headers that are present. Allow test to run for all modes.

3 years agolibstdc++: Add performance test for atomic_flag [PR 46447]
Jonathan Wakely [Wed, 16 Dec 2020 11:51:42 +0000 (11:51 +0000)]
libstdc++: Add performance test for atomic_flag [PR 46447]

This adds a test to compare the performance of std::atomic_flag with
similar operations on std::atomic_uchar and std::atomic_int.

libstdc++-v3/ChangeLog:

PR libstdc++/46447
* testsuite/performance/29_atomics/atomic_flag.cc: New test.

3 years agolibstdc++: Test errno macros directly, not via autoconf [PR 93151]
Jonathan Wakely [Tue, 15 Dec 2020 20:28:11 +0000 (20:28 +0000)]
libstdc++: Test errno macros directly, not via autoconf [PR 93151]

This fixes a bug caused by a mismatch between the macros defined by
<errno.h> when GCC is built and the macros defined by <errno.h> when
users include <system_error>. If the user code is compiled with
_XOPEN_SOURCE defined to 500 or 600, Darwin suppresses the
ENOTRECOVERABLE and EOWNERDEAD macros, which are not defined by SUSv3
(aka POSIX.1-2001).

Since POSIX requires the errno macros to be macros (and not variables or
enumerators) we can just test for them directly using the preprocessor.
That means that <system_error> will match what is actuallydefined when
it's included, not what was defined when GCC was built. With that change
there is no need for the GLIBCXX_CHECK_SYSTEM_ERROR configure checks and
they can be removed.

libstdc++-v3/ChangeLog:

PR libstdc++/93151
* acinclude.m4 (GLIBCXX_CHECK_SYSTEM_ERROR): Remove.
* configure.ac: Regenerate.
* config/os/generic/error_constants.h: Test POSIX errno macros
directly, instead of corresponding _GLIBCXX_HAVE_EXXX macros.
* testsuite/19_diagnostics/headers/system_error/errc_std_c++0x.cc:
Likewise.
* testsuite/19_diagnostics/headers/system_error/93151.cc: New
test.

3 years agoc++tools: Fix (an) install issue
Nathan Sidwell [Wed, 16 Dec 2020 13:14:57 +0000 (05:14 -0800)]
c++tools:  Fix (an) install issue

This fixes installers that don't understand -p.

c++tools/
* Makefile.in (install): Do not use -p, use mkinstalldirs.
(clean): Fix typo.

3 years agoc++: Fix (some) solaris breakage
Nathan Sidwell [Wed, 16 Dec 2020 13:10:16 +0000 (05:10 -0800)]
c++: Fix (some) solaris breakage

Solaris' sys/socket uses the poisoned bcopy identifier, so we must
preemptively copy a bit of cody's inclusion logic to get it earlier.

gcc/cp/
* mapper-client.cc: Include sys/socket.h before system.h.

3 years ago[Ada] Code cleanup: rename ALI.Scope
Arnaud Charlet [Tue, 1 Dec 2020 14:53:35 +0000 (09:53 -0500)]
[Ada] Code cleanup: rename ALI.Scope

gcc/ada/

* ali.ads, ali.adb, bindo-writers.adb, lib-writ.adb (Scope):
Renamed to IS_Scope.

3 years ago[Ada] Add contracts to Ada.Strings.Fixed
Joffrey Huguet [Thu, 12 Nov 2020 09:40:16 +0000 (10:40 +0100)]
[Ada] Add contracts to Ada.Strings.Fixed

gcc/ada/

* libgnat/a-strfix.ads: Add postconditions and contract cases to
subprograms.

3 years ago[Ada] Handle iterator filters on loop specifications over containers
Ed Schonberg [Sat, 28 Nov 2020 15:19:47 +0000 (10:19 -0500)]
[Ada] Handle iterator filters on loop specifications over containers

gcc/ada/

* sem_ch5.adb (Analyze_Iterator_Specification): If iterator
filter is present, preanalyze filter without expansion.
(Analyze_Loop_Parameter_Specification): When
loop_Parameter_Specification is rewritten as
Iterator_Specification, transfer Iterator_Filter if present.

3 years ago[Ada] armhf-linux: symbolic tracebacks
Doug Rupp [Mon, 30 Nov 2020 19:09:58 +0000 (11:09 -0800)]
[Ada] armhf-linux: symbolic tracebacks

gcc/ada/

* libgnat/s-objrea.ads (Object_Arch): Add ARM enum
* libgnat/s-objrea.adb (Initialize): Add EM_ARM case.
(Read_Address): Add ARM case to 32bit read.
* Makefile.rtl: Add trasym units to the runtime for armhf-linux.

3 years ago[Ada] Fix memory leak in GNAT.Expect.Non_Blocking_Spawn on Windows
Dmitriy Anisimkov [Sun, 29 Nov 2020 17:21:58 +0000 (23:21 +0600)]
[Ada] Fix memory leak in GNAT.Expect.Non_Blocking_Spawn on Windows

gcc/ada/

* libgnat/g-expect.adb (Non_Blocking_Spawn): Deallocate elements
on Arg_List after calling Set_Up_Child_Communications.

3 years ago[Ada] Remove inconsistent colons in messages for Ada 83 violations
Piotr Trojanek [Mon, 30 Nov 2020 11:09:12 +0000 (12:09 +0100)]
[Ada] Remove inconsistent colons in messages for Ada 83 violations

gcc/ada/

* par-ch3.adb (P_Modular_Type_Definition): Remove colon from
error message.
* sem_ch11.adb (Check_Duplication): Likewise.
* sem_ch3.adb (Derived_Type_Declaration): Likewise.

3 years ago[Ada] Refine types of variables for parsing formal object declarations
Piotr Trojanek [Mon, 30 Nov 2020 11:04:05 +0000 (12:04 +0100)]
[Ada] Refine types of variables for parsing formal object declarations

gcc/ada/

* par-ch12.adb (P_Formal_Object_Declarations): Refine types to
Pos.

3 years ago[Ada] Fix typo in checks for implementation defined units
Piotr Trojanek [Sun, 29 Nov 2020 21:54:21 +0000 (22:54 +0100)]
[Ada] Fix typo in checks for implementation defined units

gcc/ada/

* impunit.adb (Not_Impl_Defined_Unit): Fix typo in iteration
over Non_Imp_File_Names_12 array.

3 years ago[Ada] Simplify membership tests with N_Delay_Statement subtype
Piotr Trojanek [Sun, 29 Nov 2020 21:30:17 +0000 (22:30 +0100)]
[Ada] Simplify membership tests with N_Delay_Statement subtype

gcc/ada/

* exp_ch9.adb, sem_warn.adb: Simplify membership test.

3 years ago[Ada] Simplify membership tests with N_Subprogram_Call subtype
Piotr Trojanek [Sun, 29 Nov 2020 21:20:09 +0000 (22:20 +0100)]
[Ada] Simplify membership tests with N_Subprogram_Call subtype

gcc/ada/

* exp_ch6.adb, exp_util.adb, sem_ch4.adb, sem_disp.adb,
sem_elab.adb: Simplify membership test.

3 years ago[Ada] Fix glitch in comment of System.Powten_Table
Eric Botcazou [Sat, 28 Nov 2020 13:05:53 +0000 (14:05 +0100)]
[Ada] Fix glitch in comment of System.Powten_Table

gcc/ada/

* libgnat/s-powtab.ads (Maxpow): Use explicit formula in comment.

3 years ago[Ada] Fix possible uninitialized ATCB component use
Philippe Gil [Fri, 27 Nov 2020 10:14:15 +0000 (11:14 +0100)]
[Ada] Fix possible uninitialized ATCB component use

gcc/ada/

* libgnarl/s-tporft.adb (Register_Foreign_Thread): Set
Global_Task_Lock_Nesting before using allocator.

3 years ago[Ada] Avoid artificial underflow in System.Val_Real
Eric Botcazou [Fri, 27 Nov 2020 18:52:35 +0000 (19:52 +0100)]
[Ada] Avoid artificial underflow in System.Val_Real

gcc/ada/

* libgnat/s-valrea.adb (Maxexp32): New constant array.
(Maxexp64): Likewise.
(Maxexp80): Likewise.
(Integer_to_Real): New local constants Maxexp and B.
When the exponent is too negative, do the divison in two steps.

3 years ago[Ada] Fix integer-vs-float errors in example for Test_Case pragma
Piotr Trojanek [Fri, 27 Nov 2020 14:01:27 +0000 (15:01 +0100)]
[Ada] Fix integer-vs-float errors in example for Test_Case pragma

gcc/ada/

* doc/gnat_rm/implementation_defined_pragmas.rst
(Test_Case): Change integer to float literals.
* gnat_rm.texi: Regenerate.

3 years ago[Ada] Reject junk syntax for Contract_Cases/Test_Case/Subprogram_Variant
Piotr Trojanek [Fri, 27 Nov 2020 13:55:17 +0000 (14:55 +0100)]
[Ada] Reject junk syntax for Contract_Cases/Test_Case/Subprogram_Variant

gcc/ada/

* sem_ch13.adb (Analyze_Aspect_Specifications): Add a codefix
for extra parentheses around aspect Annotate expression; reject
"(null record)" aggregate and extra parentheses around aspect
Test_Case expression.
* sem_prag.adb (Analyze_Pragma): Reject "null", "(null record)"
and extra parentheses around pragma Contract_Cases; likewise for
pragma Subprogram_Variant.

3 years ago[Ada] Fix gmem.out corruption by GNAT.Expect
Dmitriy Anisimkov [Fri, 27 Nov 2020 05:18:46 +0000 (11:18 +0600)]
[Ada] Fix gmem.out corruption by GNAT.Expect

gcc/ada/

* adaint.h (__gnat_in_child_after_fork): New flag to express
child process side after fork call.
* adaint.c (__gnat_portable_spawn): Set flag
__gnat_in_child_after_fork.
* expect.c (__gnat_expect_fork): Set __gnat_in_child_after_fork
to one on child side.
* libgnat/memtrack.adb
(In_Child_After_Fork): Flag to disable memory tracking.
(Allow_Trace): New routine defining if memory should be tracked.
(Alloc, Realloc, Free): Use Allow_Trace in "if" condition
instead of First_Call.

3 years ago[Ada] Mark generic body outside of SPARK
Yannick Moy [Fri, 27 Nov 2020 09:13:23 +0000 (10:13 +0100)]
[Ada] Mark generic body outside of SPARK

gcc/ada/

* libgnat/a-tifiio.adb: Mark body not in SPARK.
* libgnat/a-tifiio.ads: Mark spec in SPARK.
* libgnat/a-tifiio__128.adb: Mark body not in SPARK.

3 years ago[Ada] Another small adjustment to System.Value_R
Eric Botcazou [Fri, 27 Nov 2020 08:21:17 +0000 (09:21 +0100)]
[Ada] Another small adjustment to System.Value_R

gcc/ada/

* libgnat/s-valuer.adb (Scan_Decimal_Digits): Tweak overflow test.
(Scan_Integral_Digits): Likewise.

3 years ago[Ada] Add some OS constants to control serial port
Pascal Obry [Sat, 7 Nov 2020 09:31:43 +0000 (10:31 +0100)]
[Ada] Add some OS constants to control serial port

gcc/ada/

* s-oscons-tmplt.c: Add some OS constants.

3 years agobswap: Handle vector CONSTRUCTORs [PR96239]
Jakub Jelinek [Wed, 16 Dec 2020 12:08:07 +0000 (13:08 +0100)]
bswap: Handle vector CONSTRUCTORs [PR96239]

The following patch teaches the bswap pass to handle for small (2/4/8 byte
long) vectors a CONSTRUCTOR by determining if the bytes of the constructor
come from non-vector sources and are either nop or bswap and changing the
CONSTRUCTOR in that case to VIEW_CONVERT_EXPR from scalar integer to
the vector type.

Unfortunately, as I found after the patch was written, due to pass ordering
this doesn't really fix the original testcase, just the one I wrote,
because both loop and slp vectorization is done only after the bswap pass.
A possible way out of that would be to perform just this particular bswap
optimization (i.e. for CONSTRUCTOR assignments with integral vector types
call find_bswap_or_nop and bswap_replace if successful) also during the
store merging pass, it isn't really a store, but the store merging pass
already performs bswapping when handling store, so it wouldn't be that big
hack.  What do you think?

2020-12-16  Jakub Jelinek  <jakub@redhat.com>

PR tree-optimization/96239
* gimple-ssa-store-merging.c (find_bswap_or_nop): Handle a vector
CONSTRUCTOR.
(bswap_replace): Likewise.

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

3 years agoopts: Remove all usages of Report keyword.
Martin Liska [Fri, 11 Dec 2020 16:25:43 +0000 (17:25 +0100)]
opts: Remove all usages of Report keyword.

gcc/brig/ChangeLog:

* lang.opt: Remove usage of Report.

gcc/c-family/ChangeLog:

* c.opt: Remove usage of Report.

gcc/ChangeLog:

* common.opt: Remove usage of Report.
* config/aarch64/aarch64.opt: Ditto.
* config/alpha/alpha.opt: Ditto.
* config/arc/arc.opt: Ditto.
* config/arm/arm.opt: Ditto.
* config/avr/avr.opt: Ditto.
* config/bfin/bfin.opt: Ditto.
* config/bpf/bpf.opt: Ditto.
* config/c6x/c6x.opt: Ditto.
* config/cr16/cr16.opt: Ditto.
* config/cris/cris.opt: Ditto.
* config/cris/elf.opt: Ditto.
* config/csky/csky.opt: Ditto.
* config/darwin.opt: Ditto.
* config/fr30/fr30.opt: Ditto.
* config/frv/frv.opt: Ditto.
* config/ft32/ft32.opt: Ditto.
* config/gcn/gcn.opt: Ditto.
* config/i386/cygming.opt: Ditto.
* config/i386/i386.opt: Ditto.
* config/ia64/ia64.opt: Ditto.
* config/ia64/ilp32.opt: Ditto.
* config/linux-android.opt: Ditto.
* config/linux.opt: Ditto.
* config/lm32/lm32.opt: Ditto.
* config/m32r/m32r.opt: Ditto.
* config/m68k/m68k.opt: Ditto.
* config/mcore/mcore.opt: Ditto.
* config/microblaze/microblaze.opt: Ditto.
* config/mips/mips.opt: Ditto.
* config/mmix/mmix.opt: Ditto.
* config/mn10300/mn10300.opt: Ditto.
* config/moxie/moxie.opt: Ditto.
* config/msp430/msp430.opt: Ditto.
* config/nds32/nds32.opt: Ditto.
* config/nios2/elf.opt: Ditto.
* config/nios2/nios2.opt: Ditto.
* config/nvptx/nvptx.opt: Ditto.
* config/pa/pa.opt: Ditto.
* config/pdp11/pdp11.opt: Ditto.
* config/pru/pru.opt: Ditto.
* config/riscv/riscv.opt: Ditto.
* config/rl78/rl78.opt: Ditto.
* config/rs6000/aix64.opt: Ditto.
* config/rs6000/linux64.opt: Ditto.
* config/rs6000/rs6000.opt: Ditto.
* config/rs6000/sysv4.opt: Ditto.
* config/rx/elf.opt: Ditto.
* config/rx/rx.opt: Ditto.
* config/s390/s390.opt: Ditto.
* config/s390/tpf.opt: Ditto.
* config/sh/sh.opt: Ditto.
* config/sol2.opt: Ditto.
* config/sparc/long-double-switch.opt: Ditto.
* config/sparc/sparc.opt: Ditto.
* config/tilegx/tilegx.opt: Ditto.
* config/tilepro/tilepro.opt: Ditto.
* config/v850/v850.opt: Ditto.
* config/visium/visium.opt: Ditto.
* config/vms/vms.opt: Ditto.
* config/vxworks.opt: Ditto.
* config/xtensa/xtensa.opt: Ditto.

gcc/lto/ChangeLog:

* lang.opt: Remove usage of Report.

3 years agoRemove Report keyword for options
Martin Liska [Fri, 11 Dec 2020 16:06:49 +0000 (17:06 +0100)]
Remove Report keyword for options

Since g:7caa49706316e650fb67719e1a1bf3a35054b685 the option is ignored
as we print used command line for -fverbose-asm output.

gcc/ChangeLog:

* doc/options.texi: Remove Report keyword.
* opt-functions.awk: Print error when Report keyword
is used.
* optc-gen.awk: Do not handle Report keyword.
* opts.h (struct cl_option): Remove cl_report bitfield flag.

3 years agoAdd -Wtsan.
Martin Liska [Mon, 7 Dec 2020 14:55:59 +0000 (15:55 +0100)]
Add -Wtsan.

gcc/ChangeLog:

PR sanitizer/97868
* common.opt: Add new warning -Wtsan.
* doc/invoke.texi: Likewise.
* tsan.c (instrument_builtin_call): Warn users about unsupported
std::atomic_thread_fence.

gcc/testsuite/ChangeLog:

PR sanitizer/97868
* gcc.dg/tsan/atomic-fence.c: New test.

3 years agooptions: fix integer overflow
Martin Liska [Tue, 15 Dec 2020 08:57:19 +0000 (09:57 +0100)]
options: fix integer overflow

gcc/ChangeLog:

PR rtl-optimization/98271
PR rtl-optimization/98276
PR tree-optimization/98279
* opts-common.c (set_option): Do not allow overflow for integer
arguments.

gcc/testsuite/ChangeLog:

PR rtl-optimization/98271
PR rtl-optimization/98276
PR tree-optimization/98279
* gcc.dg/pr98271.c: New test.

3 years agoFix PR tree-optimization/98272
Eric Botcazou [Wed, 16 Dec 2020 08:39:07 +0000 (09:39 +0100)]
Fix PR tree-optimization/98272

This fixes the precision mismatch introduced by the previous change.

gcc/ChangeLog:
PR tree-optimization/98272
* tree-switch-conversion.c (bit_test_cluster::emit): When finding
out whether the entry test can be merged in the bit test, do the
computation using the type of the index expression.

gcc/testsuite/ChangeLog:
* gcc.dg/pr98272.c: New test.

3 years agors6000: Use subreg for QI/HI vector init
Kewen Lin [Wed, 16 Dec 2020 06:28:44 +0000 (00:28 -0600)]
rs6000: Use subreg for QI/HI vector init

This patch is to use paradoxical subreg instead of
zero_extend for promoting QI/HI to SI/DI when we
want to construct one vector with these modes.
Since we do the gpr->vsx movement and vector merge
or pack later, the high part is useless and safe to
use paradoxical subreg.  It can avoid useless rlwinms
generated for signed cases.

Bootstrapped/regtested on powerpc64le-linux-gnu P9.

gcc/ChangeLog:

* config/rs6000/rs6000.c (rs6000_expand_vector_init): Use
paradoxical subreg instead of zero_extend for QI/HI promotion.

gcc/testsuite/ChangeLog:

* gcc.target/powerpc/pr96933-1.c: Adjusted to check no rlwinm.
* gcc.target/powerpc/pr96933-2.c: Likewise.

3 years agoarm: Replace calls to __builtin_vcgt* by <,> in arm_neon.h [PR66791]
Prathamesh Kulkarni [Wed, 16 Dec 2020 07:46:25 +0000 (13:16 +0530)]
arm: Replace calls to __builtin_vcgt* by <,> in arm_neon.h [PR66791]

gcc/
2020-12-16  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

PR target/66791
* config/arm/arm_neon.h: Replace calls to __builtin_vcgt* by
<, > operators in vclt and vcgt intrinsics respectively.
* config/arm/arm_neon_builtins.def: Remove entry for
vcgt and vcgtu.

3 years agoarm: Replace calls to __builtin_vneg* by - in arm_neon.h [PR66791]
Prathamesh Kulkarni [Wed, 16 Dec 2020 06:24:37 +0000 (11:54 +0530)]
arm: Replace calls to __builtin_vneg* by - in arm_neon.h [PR66791]

gcc/
2020-12-16  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

PR target/66791
* config/arm/arm_neon.h: Replace calls to __builtin_vneg* by - operator
in vneg intrinsics.
* config/arm/arm_neon_builtins.def: Remove entry for vneg.

3 years agoarm: Replace calls to __builtin_vcreate* in arm_neon.h [PR66791]
Prathamesh Kulkarni [Wed, 16 Dec 2020 06:02:25 +0000 (11:32 +0530)]
arm: Replace calls to __builtin_vcreate* in arm_neon.h [PR66791]

gcc/
2020-12-16  Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>

PR target/66791
* config/arm/arm_neon.h: Replace calls to __builtin_vcreate*
in vcreate intrinsics.
* config/arm/arm_neon_builtins.def: Remove entry for vcreate.

3 years agoDaily bump.
GCC Administrator [Wed, 16 Dec 2020 00:16:31 +0000 (00:16 +0000)]
Daily bump.

3 years agoc++: Remove dg-ice in constexpr-52830.C [PR52830]
Marek Polacek [Tue, 15 Dec 2020 22:54:45 +0000 (17:54 -0500)]
c++: Remove dg-ice in constexpr-52830.C [PR52830]

It turned out that r11-5942 fixed this old PR, and it was detected
by one of the few dg-ice tests -- exactly the point of them!  Now
the PR won't be opened until someone notices that it'd been fixed.
The patch failed to remove the dg-ice though, so now it XPASSes.  Fixing
this now.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/constexpr-52830.C: Remove dg-ice.

3 years agocody: Remove unused variable.
Marek Polacek [Tue, 15 Dec 2020 22:03:49 +0000 (17:03 -0500)]
cody: Remove unused variable.

libcody/ChangeLog:

* buffer.cc (MessageBuffer::Lex): Remove unused variable.

3 years agolibcody: Work with older gccs
Nathan Sidwell [Tue, 15 Dec 2020 21:34:26 +0000 (13:34 -0800)]
libcody:  Work with older gccs

Older GCCs don't have all the exciting options we have now.  let's just
turn them off.

libcody/
* Makefile.in: Disable some flags.

3 years agogcc_update update
Nathan Sidwell [Tue, 15 Dec 2020 21:42:23 +0000 (13:42 -0800)]
gcc_update update

I missed adding these two configure files.

contrib/
* gcc_update: Add c++tools & libcody.

3 years agomatch.pd: Optimize X / bool_range_Y to X [PR96094]
Jakub Jelinek [Tue, 15 Dec 2020 21:43:46 +0000 (22:43 +0100)]
match.pd: Optimize X / bool_range_Y to X [PR96094]

When the divisor is bool or has [0, 1] range, as division by
0 is UB, the only remaining option in valid programs is division by 1,
so we can optimize X / bool_range_Y into X.

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

PR tree-optimization/96094
* match.pd (X / bool_range_Y -> X): New simplification.

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

3 years agod: Fix ICE in gimplify_expr, at gimplify.c (PR98277)
Iain Buclaw [Tue, 15 Dec 2020 09:36:00 +0000 (10:36 +0100)]
d: Fix ICE in gimplify_expr, at gimplify.c (PR98277)

The DMD front-end shouldn't, but can sometimes leak manifest constants
in the AST passed to the code generator.  To prevent this being an
issue, the setting of DECL_INITIAL has been moved to the point where the
CONST_DECL is used, rather than in the declaration handler.

gcc/d/ChangeLog:

PR d/98277
* decl.cc (DeclVisitor::visit (VarDeclaration *)): Move setting of
DECL_INITIAL for manifest constants to ...
(get_symbol_decl): ... here.

gcc/testsuite/ChangeLog:

PR d/98277
* gdc.dg/pr98277.d: New test.

3 years agoGo testsuite: update bugs for recent change
Ian Lance Taylor [Tue, 15 Dec 2020 21:12:17 +0000 (13:12 -0800)]
Go testsuite: update bugs for recent change

This matches changes in 788d204885c187d5604e3960d7c78e1523f04861.

3 years agocompiler: correct grammar in error message
Ian Lance Taylor [Tue, 15 Dec 2020 20:36:19 +0000 (12:36 -0800)]
compiler: correct grammar in error message

For golang/go#43200

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

3 years agocompiler: avoid knock-on errors from invalid interfaces
Ian Lance Taylor [Tue, 15 Dec 2020 06:50:18 +0000 (22:50 -0800)]
compiler: avoid knock-on errors from invalid interfaces

The test case for this is issue11614.go.

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

3 years agocompiler: discard global sink variables with static initializers
Ian Lance Taylor [Tue, 15 Dec 2020 04:41:30 +0000 (20:41 -0800)]
compiler: discard global sink variables with static initializers

This is specifically for the test fixedbugs/issue23781.go, which
builds a large static array.  The code does compile and work without
this change, but it takes a long time and generates a large object
file.  Discarding the unnecessary static initializer makes this test
much faster.

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

3 years agocompiler: better error for unexpected digit
Ian Lance Taylor [Tue, 15 Dec 2020 05:26:33 +0000 (21:26 -0800)]
compiler: better error for unexpected digit

A digit character is not invalid in general, but it's not permitted
at the start of an identifier.  Report a better error message.
The test case is issue11359.go in the source repo.

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

3 years agoFix dashism
Nathan Sidwell [Tue, 15 Dec 2020 19:37:52 +0000 (11:37 -0800)]
Fix dashism

I missed some other places that used +=

* config.m4: Avoid var+=...
* configure: Rebuilt

3 years agolibcody: Fix for dash
Nathan Sidwell [Tue, 15 Dec 2020 19:29:44 +0000 (11:29 -0800)]
libcody: Fix for dash

Apparently 'var+=...' is not a dash thing.  Fixed thusly.

* config.m4: Avoid non-dash idiom
* configure: Rebuilt.

3 years agolibstdc++: Remove init_priority attribute for Init object [PR 98108]
Jonathan Wakely [Tue, 15 Dec 2020 18:40:28 +0000 (18:40 +0000)]
libstdc++: Remove init_priority attribute for Init object [PR 98108]

This reverts commit cf4ed3b41594b6935a337fe0aaf8149eadf88751.

libstdc++-v3/ChangeLog:

    PR libstdc++/98108
    * include/std/iostream (__ioinit): Remove init_priority attribute.

3 years agolibstdc++: Support libc with stdio-only I/O in libstdc++
Keith Packard [Tue, 15 Dec 2020 17:39:24 +0000 (17:39 +0000)]
libstdc++: Support libc with stdio-only I/O in libstdc++

The current libstdc++ basic_file_stdio.cc code assumes a POSIX API
underneath the stdio implementation provided by the host libc. This
means that the host must provide a fairly broad POSIX file API,
including read, write, open, close, lseek and ioctl.

This patch changes basic_file_stdio.cc to only use basic ANSI-C stdio
functions, allowing it to be used with libc implementations like
picolibc which may not have a POSIX operating system underneath.

This is enabled by a new --enable-cstdio=stdio_pure configure option.

Aided-by: Jonathan Wakely <jwakely@redhat.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
libstdc++-v3/ChangeLog:

* acinclude.m4 (GLIBCXX_ENABLE_CSTDIO): Allow "stdio_pure"
option and define _GLIBCXX_USE_PURE_STDIO when it is used. Also
add "stdio_posix" option as an alias for "stdio".
* config/io/basic_file_stdio.cc [_GLIBCXX_USE_PURE_STDIO]: Only
use defined stdio entry points for all I/O operations, without
direct calls to underlying POSIX functions.
* config.h.in: Regenerate.
* configure: Regenerate.

3 years agoc++: Fix return type deduction during satisfaction
Patrick Palka [Tue, 15 Dec 2020 17:10:26 +0000 (12:10 -0500)]
c++: Fix return type deduction during satisfaction

During satisfaction that's entered through the three-parameter version
of satisfy_declaration_constraints, current_function_decl gets set to
the dependent DECL_TEMPLATE_RESULT for sake of access checking.  This
makes the predicate in_template_function return true during satisfaction
from this entrypoint, which in turn makes calls to mark_used exit early
before it does its full processing.  This leads to us accepting the
invalid testcase below due to mark_used never attempting to deduce the
return type of A::foo() and detecting failure thereof.

It seems wrong for in_template_function to be true during instantiation
or during satisfaction, so this patch makes in_template_function inspect
the less volatile cfun->decl instead of current_function_decl.

gcc/cp/ChangeLog:

* pt.c (in_template_function): Inspect cfun->decl instead of
current_function_decl.

gcc/testsuite/ChangeLog:

* g++.dg/cpp2a/concepts-requires23.C: New test.

3 years agoc++: Add changelog files in c++tools/ and libcody/ directories
Jakub Jelinek [Tue, 15 Dec 2020 16:39:12 +0000 (17:39 +0100)]
c++: Add changelog files in c++tools/ and libcody/ directories

Add ChangeLog files, so that update_version_git can then fill those in.

3 years agoAdd the -fdebug-aux-vars flag to debug variables generated by Fortran.
Thomas Koenig [Tue, 15 Dec 2020 16:10:37 +0000 (17:10 +0100)]
Add the -fdebug-aux-vars flag to debug variables generated by Fortran.

gcc/fortran/ChangeLog:

PR fortran/90207
* invoke.texi: Document -fdebug-aux-vars.
* lang.opt: Add -fdebug-aux-vars.
* trans.c (MAX_PREFIX_LEN): New macro.
(create_var_debug_raw): New function.
(gfc_create_var_np): Call create_var_debug_raw if
flag_debug_aux_vars is set.

3 years agolibstdc++: Fix the test for rvalue stream extraction
Ville Voutilainen [Tue, 15 Dec 2020 10:05:51 +0000 (12:05 +0200)]
libstdc++: Fix the test for rvalue stream extraction

libstdc++-v3/ChangeLog:

* testsuite/27_io/rvalue_streams.cc: Run the extraction to a char*
for C++17 and lower only.

3 years agodoc: Document C++ 20 modules
Nathan Sidwell [Mon, 14 Dec 2020 21:15:17 +0000 (13:15 -0800)]
doc: Document C++ 20 modules

And here is the user-facing documentation.

gcc/
* doc/cppopts.texi: Document new cpp opt.
* doc/invoke.texi: Add C++20 module option & documentation.

3 years agoc++: Modules Is Landing
Nathan Sidwell [Mon, 14 Dec 2020 19:40:44 +0000 (11:40 -0800)]
c++: Modules Is Landing

This is the C++ modules implementation.  Dropping in the real
module.cc file into the module-shaped hole I carved out.  I include
some sanity tests for now.  I'll commit the remaining tests when the
initial round of failures seems abated.

gcc/cp/
* module.cc: Replace stubs with implementation.
gcc/testsuite/
* g++.dg/modules/mod-decl-0-2a.C: New.
* g++.dg/modules/mod-decl-0.C: New.
* g++.dg/modules/mod-decl-1.C: New.
* g++.dg/modules/mod-decl-2_a.C: New.
* g++.dg/modules/mod-decl-2_b.C: New.
* g++.dg/modules/mod-decl-2_c.C: New.
* g++.dg/modules/mod-decl-3.C: New.
* g++.dg/modules/mod-decl-5_a.C: New.
* g++.dg/modules/mod-decl-5_b.C: New.

3 years agoc++: module mapper
Nathan Sidwell [Mon, 14 Dec 2020 18:22:21 +0000 (10:22 -0800)]
c++: module mapper

To avoid always requiring an active mapper to connect to, we provide a
default in-process mapper with similar functionality to the sample
server.  This is that code.  Also included is the client-side
connection mechanism, which determines what server to use and how to
connect to it.

gcc/cp/
* Make-lang.in (CXX_AND_OBJCXX_OBJS): Add mapper-client &
mapper-resolver.
* mapper-client.h: New.
* mapper-client.cc: New.
* mapper-resolver.cc: New.

3 years agoAdd C++tools
Nathan Sidwell [Tue, 15 Dec 2020 15:39:29 +0000 (07:39 -0800)]
Add C++tools

These are the toplevel directory changes to add c++tools

ChangeLog:

* Makefile.def
* Makefile.in
* Makefile.tpl
* configure
* configure.ac

3 years agoAdd c++tools
Nathan Sidwell [Mon, 14 Dec 2020 17:30:00 +0000 (09:30 -0800)]
Add c++tools

Part of our module implementation adds a sample mapper server, the
guts of which are used by the default in-process mapping of cc1plus.
Rather than add another executable to gcc/cp/, this creates a new
c++tools directory where this and any other c++ tools might live.
The toplevel changes are a subsequent commit, because ... git.

c++tools/ChangeLog:

* Makefile.in: New.
* config.h.in: New.
* configure: New.
* configure.ac: New.
* resolver.cc: New.
* resolver.h: New.
* server.cc: New.

3 years agolibstdc++: Increase timeout for tests in debug mode
Jonathan Wakely [Tue, 15 Dec 2020 15:39:58 +0000 (15:39 +0000)]
libstdc++: Increase timeout for tests in debug mode

These tests FAIL when testing debug mode with a small tool_timeout
value. Give them a longer relative timeout.

libstdc++-v3/ChangeLog:

* testsuite/25_algorithms/lexicographical_compare/deque_iterators/1.cc:
Add dg-timeout-factor directive.
* testsuite/ext/pb_ds/regression/tree_map_rand_debug.cc:
Increase timeout factor from 2.0 to 3.0.
* testsuite/ext/pb_ds/regression/tree_set_rand_debug.cc:
Likewise.
* testsuite/lib/libstdc++.exp (check_effective_target_debug-mode):
Define "debug-mode" as an effective-target keyword.

3 years agolibstdc++: Do not define constexpr assertions for C++11
Jonathan Wakely [Tue, 15 Dec 2020 15:39:58 +0000 (15:39 +0000)]
libstdc++: Do not define constexpr assertions for C++11

There's no point even checking is_constant_evaluated() in C++11 mode,
because the 'if' statement used for the assertion wouldn't be valid in a
C++11 constexpr function anyway.

libstdc++-v3/ChangeLog:

* include/bits/c++config (__glibcxx_assert_1): Define as empty
for C++11.

3 years agoAdd libcody
Nathan Sidwell [Mon, 14 Dec 2020 16:10:27 +0000 (08:10 -0800)]
Add libcody

In order to separate compiler from build system, C++ Modules, as
implemented in GCC introduces a communication channel between those
two entities.  This is implemented by libcody.  It is anticipated that
other implementations will also implement this protocol, or use
libcody to provide it.

* Makefile.def: Add libcody.
* configure.ac: Add libcody.
* Makefile.in: Regenerated.
* configure: Regenerated.
gcc/
* Makefile.in (CODYINC, CODYLIB, CODYLIB_H): New. Use them.
libcody/
* configure.ac: New.
* CMakeLists.txt: New.
* CODING.md: New.
* CONTRIB.md: New.
* LICENSE: New.
* LICENSE.gcc: New.
* Makefile.in: New.
* Makesub.in: New.
* README.md: New.
* buffer.cc: New.
* build-aux/config.guess: New.
* build-aux/config.sub: New.
* build-aux/install-sh: New.
* client.cc: New.
* cmake/libcody-config-ix.cmake
* cody.hh: New.
* config.h.in: New.
* config.m4: New.
* configure: New.
* configure.ac: New.
* dox.cfg.in: New.
* fatal.cc: New.
* gdbinit.in: New.
* internal.hh: New.
* netclient.cc: New.
* netserver.cc: New.
* packet.cc: New.
* resolver.cc: New.
* server.cc: New.
* tests/01-serialize/connect.cc: New.
* tests/01-serialize/decoder.cc: New.
* tests/01-serialize/encoder.cc: New.
* tests/02-comms/client-1.cc: New.
* tests/02-comms/pivot-1.cc: New.
* tests/02-comms/server-1.cc: New.
* tests/Makesub.in: New.
* tests/jouster: New.

3 years agoAdd toplevel dirs
Nathan Sidwell [Tue, 15 Dec 2020 14:49:06 +0000 (09:49 -0500)]
Add toplevel dirs

contrib/
* gcc-changelog/git_commit.py (changelog_locations): Add
libcody, c++tools.

3 years agoc++: module-related tweak
Nathan Sidwell [Mon, 14 Dec 2020 19:44:12 +0000 (11:44 -0800)]
c++: module-related tweak

In manually applying a name-lookup patch, I managed to transpose two
calls.  That caused a test failure.  Fixed thusly.

gcc/cp/
* name-lookup.c (do_namespace_alias): Set originating module
before pushing.

3 years agolibstdc++: Fix required locales of a testcase
Marius Hillenbrand [Tue, 15 Dec 2020 11:40:07 +0000 (11:40 +0000)]
libstdc++: Fix required locales of a testcase

The testsuite for libstdc++ aims to skips test cases for which not all
required locales are installed. This patch adds missing directives about
required locales to one test case to avoid false positive test failures
on systems that have a partial set of locales installed.

Verified by test suite runs that this patch changes the test case from
FAIL to UNSUPPORTED when not all required locales are available and that
the test case will run and PASS when the necessary locales have been
added.

libstdc++-v3/ChangeLog:

* testsuite/22_locale/locale/cons/5.cc: Add missing directives
for required locales.

3 years agolibstdc++: Remove workaround for PR c++/78173
Jonathan Wakely [Tue, 15 Dec 2020 11:40:07 +0000 (11:40 +0000)]
libstdc++: Remove workaround for PR c++/78173

Now that the G++ bug is fixed we no longer need to protect this partial
specialization from complaining about subtracting void pointers.

libstdc++-v3/ChangeLog:

* include/bits/iterator_concepts.h (incrementable_traits<Tp>):
Remove workaround for PR c++/78173.

3 years agolibstdc++: Disabling AC_LIBTOOL_DLOPEN check if building with avr-libc
Vladimir Vishnevsky [Tue, 15 Dec 2020 11:40:07 +0000 (11:40 +0000)]
libstdc++: Disabling AC_LIBTOOL_DLOPEN check if building with avr-libc

The AC_LIBTOOL_DLOPEN checks were previously disabled for newlib targets.
The patch applies similar logic to avr-libc based builds.

libstdc++-v3/ChangeLog:

* configure.ac: Skip AC_LIBTOOL_DLOPEN check if avr-libc is used.
* configure: Regenerate.

3 years agolibstdc++: Use init_priority attribute for Init object [PR 98108]
Jonathan Wakely [Tue, 15 Dec 2020 11:40:06 +0000 (11:40 +0000)]
libstdc++: Use init_priority attribute for Init object [PR 98108]

This causes the global objects that run the <iostream> initialization
code to be constructed earlier, which avoids some bugs in user code due
to incorrectly relying on static initialization order.

libstdc++-v3/ChangeLog:

PR libstdc++/98108
* include/std/iostream (__ioinit): Add init_priority attribute.

3 years ago[Ada] Fix serial port baud rate setting on GNU/Linux
Pascal Obry [Sat, 7 Nov 2020 09:31:43 +0000 (10:31 +0100)]
[Ada] Fix serial port baud rate setting on GNU/Linux

gcc/ada/

* libgnat/g-sercom__linux.adb (Set): Use cfsetospeed and
cfsetispeed to set the baud rate. Clear non-blocking serial port
status when blocking is requested.

3 years ago[Ada] Small adjustment to System.Val_Real
Eric Botcazou [Thu, 26 Nov 2020 14:58:24 +0000 (15:58 +0100)]
[Ada] Small adjustment to System.Val_Real

gcc/ada/

* libgnat/s-valrea.adb (Integer_to_Real): Always use Extra.

3 years ago[Ada] Simplify check for extra parens
Piotr Trojanek [Thu, 26 Nov 2020 17:37:09 +0000 (18:37 +0100)]
[Ada] Simplify check for extra parens

gcc/ada/

* par-ch5.adb (P_Condition): Simplify condition for warning
about extra parens and make it easier to understand.

3 years ago[Ada] Refactor repeated complains about missing -gnat2005 switch
Piotr Trojanek [Wed, 25 Nov 2020 21:02:29 +0000 (22:02 +0100)]
[Ada] Refactor repeated complains about missing -gnat2005 switch

gcc/ada/

* errout.ads (Error_Msg_Ada_2005_Extension): New routine (spec).
* errout.adb (Error_Msg_Ada_2005_Extension): New routine (body).
* par-ch10.adb: Reuse new routine; correct casing for "LIMITED
WITH".
* par-ch11.adb: Likewise.
* par-ch12.adb: Likewise.
* par-ch3.adb: Likewise.
* par-ch4.adb: Likewise; replace "box" with "<>".
* par-ch6.adb: Likewise.
* par-ch9.adb: Likewise; correct casing for "THEN ABORT".

3 years ago[Ada] Small adjustment to parameterization of System.Value_R
Eric Botcazou [Wed, 25 Nov 2020 18:32:15 +0000 (19:32 +0100)]
[Ada] Small adjustment to parameterization of System.Value_R

gcc/ada/

* doc/gnat_ugn/gnat_and_program_execution.rst: Minor fix.
* gnat_ugn.texi: Regenerate.
* libgnat/s-valuer.ads (Precision_Limit): New formal parameter.
* libgnat/s-valuer.adb (Precision_Limit): Remove.
(Scan_Decimal_Digits): Robustify overflow check.
(Scan_Integral_Digits): Likewise.
* libgnat/s-valrea.adb: Add assertion on the size of the unsigned
type and instantiate System.Value_R with the mantissa limit.
(Integer_to_Real): Add Extra parameter and take it into account.
(Scan_Real): Pass Extra to Integer_to_Real.
(Value_Real): Likewise.
* libgnat/s-valued.adb: Add assertion on the size of the unsigned
type and instantiate System.Value_R with the mantissa limit.
* libgnat/s-valuef.adb: Likewise.

3 years ago[Ada] Postcondition checks performed before finalization
Justin Squirek [Mon, 16 Nov 2020 14:08:51 +0000 (09:08 -0500)]
[Ada] Postcondition checks performed before finalization

gcc/ada/

* contracts.adb, contracts.ads (Build_Postconditions_Procedure):
Add declarations for Postcond_Enabled,
Result_Object_For_Postcondition, and
Return_Success_For_Postcond, and place all postconditions within
an if statement to control their execution for interactions when
cleanup actions get generated.
(Get_Postcond_Enabled): Created to fetch object declared to
handle new expansion of postconditions.
(Get_Result_Object_For_Postcond): Created to fetch object
declared to handle new expansion of postconditions.
(Get_Return_Success_For_Postcond): Created to fetch object
declared to handle new expansion of postconditions.
* einfo.adb, einfo.ads: Modify flag Stores_Attribute_Old_Prefix
to apply to constants, variables, and types.
* exp_ch6.adb (Add_Return): Add assignment to
Return_Success_For_Postcond.
(Expand_Non_Function_Return): Add assignment to
Return_Success_For_Postcond
(Expand_Simple_Function_Return): Add assignment to
Result_Object_For_Postcond and Return_Success_For_Postcond.
* exp_ch7.adb (Build_Finalization_Master): Mark finalization
masters which finalize types created store 'Old objects as
storing 'Old objects.
(Build_Finalizer): Created to generated a unified and special
expansion for finalization when postconditions are present.
(Build_Finalizer_Helper): Renamed Build_Finalizer and added
parameter to facilitate the creation of separate finalization
routines for 'Old objects and general objects.
(Create_Finalizer): Add condition for the insertion of the
finalizer spec to avoid malformed trees.
(Expand_Cleanup_Actions): Move _postconditions and related
declarations to the new declarative section.  Fix the loop to
properly stop at the subprogram declaration for the
postconditions procedure and exclude its body from being moved
to the new list of declarations to avoid freezing issues.
* exp_prag.adb (Expand_Attributes): Mark temporary created to
store 'Old objects as storing a 'Old attribute.
* sem_ch6.adb (Find_What_Applies_To): Remove strange exception
to postconditions when traversing the scope stack.
* sem_prag.adb (Find_Related_Declaration_Or_Body): Use the newly
created Enclosing_HSS function to find the HSS for a potentially
nested statement.
* sem_util.adb, sem_util.ads (Declare_Indirect_Temp): Mark types
created to store 'Old objects as storing 'Old attributes.
(Enclosing_HSS): Created to find the enclosing handled sequence
of statements for a given statement.
* snames.ads-tmpl: Add multiple names to aid in the expansion of
finalization and to control the evaluation of postconditions.
Including _finalization_controller, a new routine to centralize
finalization actions and postcondition evaluation.

3 years ago[Ada] Complain about missing -gnat2020 switch on iterator_filter
Piotr Trojanek [Wed, 25 Nov 2020 11:05:47 +0000 (12:05 +0100)]
[Ada] Complain about missing -gnat2020 switch on iterator_filter

gcc/ada/

* par-ch5.adb (P_Loop_Parameter_Specification): Complain about
missing -gnat2020 switch.
(P_Iterator_Specification): Likewise.

3 years ago[Ada] Reuse Append_New in parsing aggregates
Piotr Trojanek [Wed, 25 Nov 2020 11:27:23 +0000 (12:27 +0100)]
[Ada] Reuse Append_New in parsing aggregates

gcc/ada/

* par-ch4.adb (P_Aggregate_Or_Paren_Expr): Simplify with
Append_New.

3 years ago[Ada] Implement tiered support for floating-point input operations
Eric Botcazou [Mon, 23 Nov 2020 14:42:08 +0000 (15:42 +0100)]
[Ada] Implement tiered support for floating-point input operations

gcc/ada/

* Makefile.rtl (GNATRTL_NONTASKING_OBJS): Remove s-fatsfl$(objext)
and add s-valflt$(objext), s-vallfl$(objext), s-valllf$(objext).
* exp_attr.adb (Find_Fat_Info): Merge Short_Float and Float cases.
* exp_imgv.adb (Expand_Value_Attribute): Replace RE_Value_Real with
RE_Value_Long_Long_Float for fixed-point types and use appropriate
base type for floating-point types.
* rtsfind.ads (RTU_Id): Remove System_Fat_IEEE_Long_Float,
System_Fat_IEEE_Short_Float and System_Val_Real, add System_Val_Flt,
System_Val_LFlt and System_Val_LLF.
(RE_Id): Remove RE_Attr_IEEE_Long, RE_Fat_IEEE_Long,
RE_Attr_IEEE_Short, RE_Fat_IEEE_Short, RE_Attr_Short_Float, add
RE_Value_Float, RE_Value_Long_Float, RE_Value_Long_Long_Float,
(RE_Unit_Table): Likewise.
* libgnat/a-ticoau.ads: Add with clause for Float_Aux and make the
package generic.
(Get): Change parameter types to Num.
(Put): Likewise.
(Gets): Likewise.
(Puts): Likewise.
* libgnat/a-ticoau.adb: Remove clause and renaming for Float_Aux.
(Get): Change parameter types to Num.
(Gets): Likewise.
(Put): Likewise.
(Puts): Likewise.  Add conversion to Long_Long_Float.
* libgnat/a-ticoio.adb: Remove with clause for Ada.Text_IO, add with
clause for Float_Aux, add with and use clauses for System.Val_Flt,
System.Val_LFlt and System.Val_LLF. Instantiate Float_Aux and
Complex_Aux on Float, Long_Float, and Long_Long_Float.
(OK_Float): New boolean constant.
(OK_Long_Float): Likewise.
(Get): Call appropriate Get routine from auxiliary package.
(Get): Call appropriate Gets routine from auxiliary package.
(Put): Call appropriate Put routine from auxiliary package.
(Put): Call appropriate Puts routine from auxiliary package.
* libgnat/a-tideau.adb: Remove with and use clause for Float_Aux.
* libgnat/a-tifiau.adb: Likewise.
* libgnat/a-tifiio.adb: Add with and use clause for System.Val_LLF.
Instantiate Float_Aux on Long_Long_Float.
(Get): Adjust call to Get routine from auxiliary package.
(Get): Adjust call to Gets routine from auxiliary package.
(Put): Adjust call to Put routine from auxiliary package.
(Put): Adjust call to Puts routine from auxiliary package.
* libgnat/a-tifiio__128.adb: Likewise.
(Get): Likewise.
(Get): Likewise.
(Put): Likewise.
(Put): Likewise.
* libgnat/a-tiflau.ads: Make the package generic.
(Get): Change parameter type to Num.
(Put): Likewise.
(Gets): Likewise.
(Puts): Likewise.
* libgnat/a-tiflau.adb: Remove clauses for System.Val_Real.
(Get): Change parameter type to Num and call Scan routine.
(Gets): Likewise.
(Load_Real): Move to...
(Put): Change parameter type and add conversion to Long_Long_Float.
(Puts): Likewise.
* libgnat/a-tiflio.adb: Add with and use clauses for System.Val_Flt,
System.Val_LFlt and System.Val_LLF. Instantiate Float_Aux on Float,
Long_Float and Long_Long_Float.
(OK_Float): New boolean constant.
(OK_Long_Float): Likewise.
(Get): Call appropriate Get routine from auxiliary package.
(Get): Call previous variant.
(Get): Call appropriate Gets routine from auxiliary package.
(Put): Call appropriate Put routine from auxiliary package.
(Put): Call previous variant.
(Put): Call appropriate Puts routine from auxiliary package.
* libgnat/a-tigeau.ads (Load_Real): New procedure.
* libgnat/a-tigeau.adb (Load_Real): ...here.
* libgnat/a-wtcoau.ads: Add with clause for Float_Aux and make the
package generic.
(Get): Change parameter types to Num.
(Put): Likewise.
(Gets): Likewise.
(Puts): Likewise.
* libgnat/a-wtcoau.adb: Remove clause and renaming for Float_Aux.
(Get): Change parameter types to Num.
(Gets): Likewise.
(Put): Likewise.
(Puts): Likewise.  Add conversion to Long_Long_Float.
* libgnat/a-wtcoio.ads: Remove use clause for Complex_Types and use
qualified names throughout accordingly.
* libgnat/a-wtcoio.adb: Remove clause for Ada.Unchecked_Conversion,
add with clause for Float_Aux, add clauses for System.Val_Flt,
System.Val_LFlt and System.Val_LLF. Add clause for Complex_Types.
Instantiate Float_Aux and Complex_Aux on Float, Long_Float, and
Long_Long_Float.  Remove LLF subtype and TFT instantiation.
(OK_Float): New boolean constant.
(OK_Long_Float): Likewise.
(Get): Call appropriate Get routine from auxiliary package.
(Get): Call appropriate Gets routine from auxiliary package.
(Put): Call appropriate Put routine from auxiliary package.
(Put): Call appropriate Puts routine from auxiliary package.
* libgnat/a-wtdeau.adb: Remove with and use clause for Float_Aux.
* libgnat/a-wtfiau.adb: Likewise.
* libgnat/a-wtfiio.adb: Add with and use clause for System.Val_LLF.
Instantiate Float_Aux on Long_Long_Float.
(Get): Adjust call to Get routine from auxiliary package.
(Get): Adjust call to Gets routine from auxiliary package.
(Put): Adjust call to Put routine from auxiliary package.
(Put): Adjust call to Puts routine from auxiliary package.
* libgnat/a-wtfiio__128.adb: Likewise.
(Get): Likewise.
(Get): Likewise.
(Put): Likewise.
(Put): Likewise.
* libgnat/a-wtflau.ads: Make the package generic.
(Get): Change parameter type to Num.
(Put): Likewise.
(Gets): Likewise.
(Puts): Likewise.
* libgnat/a-wtflau.adb: Remove clauses for System.Val_Real.
(Get): Change parameter type to Num and call Scan routine. Set
Ptr parameter lazily.
(Gets): Likewise.
(Load_Real): Move to...
(Put): Change parameter type and add conversion to Long_Long_Float.
Bump buffer length to Max_Real_Image_Length.
(Puts): Likewise.
* libgnat/a-wtflio.adb: Add with and use clauses for System.Val_Flt,
System.Val_LFlt and System.Val_LLF. Instantiate Float_Aux on Float,
Long_Float and Long_Long_Float.
(OK_Float): New boolean constant.
(OK_Long_Float): Likewise.
(Get): Call appropriate Get routine from auxiliary package.  Add
pragma Unsuppress (Range_Check) and manual validity check.
(Get): Call appropriate Gets routine from auxiliary package. Add
pragma Unsuppress (Range_Check) and manual validity check.
(Put): Call appropriate Put routine from auxiliary package.
(Put): Call appropriate Puts routine from auxiliary package.
* libgnat/a-wtgeau.ads (Load_Real): New procedure.
* libgnat/a-wtgeau.adb (Load_Real): ...here.
* libgnat/a-ztcoau.ads: Add with clause for Float_Aux and make the
package generic.
(Get): Change parameter types to Num.
(Put): Likewise.
(Gets): Likewise.
(Puts): Likewise.
* libgnat/a-ztcoau.adb: Remove clause and renaming for Float_Aux.
(Get): Change parameter types to Num.
(Gets): Likewise.
(Put): Likewise.
(Puts): Likewise.  Add conversion to Long_Long_Float.
* libgnat/a-ztcoio.ads: Remove use clause for Complex_Types and use
qualified names throughout accordingly.
* libgnat/a-ztcoio.adb: Remove clause for Ada.Unchecked_Conversion,
add with clause for Float_Aux, add clauses for System.Val_Flt,
System.Val_LFlt and System.Val_LLF. Add clause for Complex_Types.
Instantiate Float_Aux and Complex_Aux on Float, Long_Float, and
Long_Long_Float. Remove LLF subtype and TFT instantiation.
(OK_Float): New boolean constant.
(OK_Long_Float): Likewise.
(Get): Call appropriate Get routine from auxiliary package.
(Get): Call appropriate Gets routine from auxiliary package.
(Put): Call appropriate Put routine from auxiliary package.
(Put): Call appropriate Puts routine from auxiliary package.
* libgnat/a-ztdeau.adb: Remove with and use clause for Float_Aux.
* libgnat/a-ztfiau.adb: Likewise.
* libgnat/a-ztfiio.adb: Add with and use clause for System.Val_LLF.
Instantiate Float_Aux on Long_Long_Float.
(Get): Adjust call to Get routine from auxiliary package.
(Get): Adjust call to Gets routine from auxiliary package.
(Put): Adjust call to Put routine from auxiliary package.
(Put): Adjust call to Puts routine from auxiliary package.
* libgnat/a-ztfiio__128.adb: Likewise.
(Get): Likewise.
(Get): Likewise.
(Put): Likewise.
(Put): Likewise.
* libgnat/a-ztflau.ads: Make the package generic.
(Get): Change parameter type to Num.
(Put): Likewise.
(Gets): Likewise.
(Puts): Likewise.
* libgnat/a-ztflau.adb: Remove clauses for System.Val_Real.
(Get): Change parameter type to Num and call Scan routine. Set
Ptr parameter lazily.
(Gets): Likewise.
(Load_Real): Move to...
(Put): Change parameter type and add conversion to Long_Long_Float.
Bump buffer length to Max_Real_Image_Length.
(Puts): Likewise.
* libgnat/a-ztflio.adb: Add with and use clauses for System.Val_Flt,
System.Val_LFlt and System.Val_LLF. Instantiate Float_Aux on Float,
Long_Float and Long_Long_Float.
(OK_Float): New boolean constant.
(OK_Long_Float): Likewise.
(Get): Call appropriate Get routine from auxiliary package.  Add
pragma Unsuppress (Range_Check) and manual validity check.
(Get): Call appropriate Gets routine from auxiliary package. Add
pragma Unsuppress (Range_Check) and manual validity check.
(Put): Call appropriate Put routine from auxiliary package.
(Put): Call appropriate Puts routine from auxiliary package.
* libgnat/a-ztgeau.ads (Load_Real): New procedure.
* libgnat/a-ztgeau.adb (Load_Real): ...here.
* libgnat/s-fatsfl.ads: Delete.
* libgnat/s-valflt.ads: New package.
* libgnat/s-vallfl.ads: Likewise.
* libgnat/s-valllf.ads: Likewise.
* libgnat/s-valrea.ads: Make generic. Add assertions, defensive
code and clarify intent.
(Scan_Real): Change parameter type to Num.
(Value_Real): Likewise.
* libgnat/s-valrea.adb: Instantiate Value_R on Uns.
(Integer_to_Real): Change parameter and result to Num.
Call Float_Control.Reset only if the mantissa is 64 bits.  Use
a divide to compute the final value if the scale is negative.
(Scan_Real): Change result to Num.
(Value_Real): Likewise.
* libgnat/s-valuer.adb: Add assertions, defensive code and
clarify intent.
(F_Limit): Delete.
(I_Limit): Likewise.
(Precision_Limit): Always use the integer limit.
* libgnat/s-fatgen.adb: Add pragma Annotate.

3 years ago[Ada] Mark generic body outside of SPARK
Yannick Moy [Wed, 25 Nov 2020 09:33:54 +0000 (10:33 +0100)]
[Ada] Mark generic body outside of SPARK

gcc/ada/

* libgnat/a-tiflio.adb: Mark body not in SPARK.
* libgnat/a-tiflio.ads: Mark spec in SPARK.

3 years ago[Ada] Transform_Function_Array issues
Arnaud Charlet [Mon, 16 Nov 2020 17:10:25 +0000 (18:10 +0100)]
[Ada] Transform_Function_Array issues

gcc/ada/

* exp_ch6.adb (Build_Procedure_Body_Form): Adjust, the
declaration of the procedure form is now insert before the
original function body rather than after.
(Expand_N_Subprogram_Declaration): Deal with private types whose
full views are arrays.
* exp_unst.adb (Unnest_Subprogram): Deal with private types.
(Needs_Fat_Pointer): Code cleanup.
* freeze.adb (Freeze_Subprogram): Ditto.
* exp_util.adb (Build_Procedure_Form): Insert the procedure form
decl before and not after.
* sem_ch6.adb (Analyze_Subprogram_Body_Helper): Build missing
spec when needed for Transform_Function_Array.
* sem_util.adb (Get_Fullest_View): Deal with null entity.

3 years ago[Ada] Simplify discarding nodes when processing aspect/pragma Priority
Piotr Trojanek [Tue, 24 Nov 2020 21:56:40 +0000 (22:56 +0100)]
[Ada] Simplify discarding nodes when processing aspect/pragma Priority

gcc/ada/

* sem_ch13.adb (Analyze_Aspect_Specifications): Simplify code
for aspect Priority.
* sem_prag.adb (Analyze_Pragma): Simplify code for pragma
Priority.

3 years ago[Ada] Crash on unnesting unnamed blocks
Arnaud Charlet [Tue, 24 Nov 2020 16:53:28 +0000 (17:53 +0100)]
[Ada] Crash on unnesting unnamed blocks

gcc/ada/

* exp_ch7.adb (Reset_Scopes_To_Block_Elab_Proc): Do not crash on
a block with no Identifier. Code cleanups.

3 years ago[Ada] Refactor repeated code for Value attributes
Piotr Trojanek [Tue, 24 Nov 2020 15:01:52 +0000 (16:01 +0100)]
[Ada] Refactor repeated code for Value attributes

gcc/ada/

* sem_attr.adb (Analyze_Attribute): Reuse existing code for
attribute Value when analyzing attributes Wide_Value and
Wide_Wide_Value.

3 years ago[Ada] Fix possible infinite recursion in directory iterator
Pascal Obry [Fri, 20 Nov 2020 16:28:50 +0000 (17:28 +0100)]
[Ada] Fix possible infinite recursion in directory iterator

gcc/ada/

* libgnat/g-diopit.adb (Find): Fix possible infinite recursion
in Find iterator.
* libgnat/g-diopit.ads (Find): Update comments accordingly.

3 years ago[Ada] Refactor repeated code for Callable and Terminated attributes
Piotr Trojanek [Mon, 23 Nov 2020 23:31:49 +0000 (00:31 +0100)]
[Ada] Refactor repeated code for Callable and Terminated attributes

gcc/ada/

* sem_attr.adb (Analyze_Attribute): Merge identical code for
Callable and Terminated attributes; refactor calls to Set_Etype
occurring in both THEN and ELSE branches of an IF statement for
attribute Storage_Size.

3 years ago[Ada] Refactor repeated code for Width attributes
Piotr Trojanek [Mon, 23 Nov 2020 23:18:47 +0000 (00:18 +0100)]
[Ada] Refactor repeated code for Width attributes

gcc/ada/

* sem_attr.adb (Analyze_Attribute): Merge identical code for
Wide_Wide_Width, Wide_Width and Width attributes.

3 years ago[Ada] Refactor repeated code for Pred and Succ attributes
Piotr Trojanek [Mon, 23 Nov 2020 23:17:02 +0000 (00:17 +0100)]
[Ada] Refactor repeated code for Pred and Succ attributes

gcc/ada/

* sem_attr.adb (Analyze_Attribute): Merge identical code for
Pred and Succ attributes.

3 years ago[Ada] Refactor repeated code for size attributes
Piotr Trojanek [Mon, 23 Nov 2020 23:05:44 +0000 (00:05 +0100)]
[Ada] Refactor repeated code for size attributes

gcc/ada/

* sem_attr.adb (Analyze_Attribute): Merge identical code for
Size, Object_Size and Value_Size attributes.

3 years ago[Ada] Refactor repeated code for fixed point attributes
Piotr Trojanek [Mon, 23 Nov 2020 23:00:17 +0000 (00:00 +0100)]
[Ada] Refactor repeated code for fixed point attributes

gcc/ada/

* sem_attr.adb (Analyze_Attribute): Consistently call
Check_Fixed_Point_Type before checking the number of attribute
expressions (like it is done for floating point types); reuse
Check_Fixed_Point_Type_0.

3 years ago[Ada] Remove redundant calls to UI_To_Int in relational operands
Piotr Trojanek [Mon, 23 Nov 2020 22:52:59 +0000 (23:52 +0100)]
[Ada] Remove redundant calls to UI_To_Int in relational operands

gcc/ada/

* exp_disp.adb (Make_Tags): Remove call to UI_To_Int.
* sem_attr.adb (Check_Array_Type): Likewise; also, refine type
of a local variable.
(Analyze_Attribute): Likewise.
(Get_Enclosing_Object): Likewise.
* sem_util.adb (Get_Enum_Lit_From_Pos): Likewise.

3 years ago[Ada] Refactor repeated code for component attributes
Piotr Trojanek [Mon, 23 Nov 2020 22:44:06 +0000 (23:44 +0100)]
[Ada] Refactor repeated code for component attributes

gcc/ada/

* sem_attr.adb (Analyze_Attribute): Merge identical code for
First_Bit/Last_Bit and Position attributes.

3 years ago[Ada] Refactor repeated code for real type attributes returning integers
Piotr Trojanek [Mon, 23 Nov 2020 22:30:32 +0000 (23:30 +0100)]
[Ada] Refactor repeated code for real type attributes returning integers

gcc/ada/

* sem_attr.adb (Analyze_Attribute): Merge identical code for
Machine_Radix and Mantissa attributes.

3 years ago[Ada] Refactor repeated code for real type attributes returning booleans
Piotr Trojanek [Mon, 23 Nov 2020 22:28:46 +0000 (23:28 +0100)]
[Ada] Refactor repeated code for real type attributes returning booleans

gcc/ada/

* sem_attr.adb (Analyze_Attribute): Merge identical code for
Machine_Overflows and Machine_Rounds attributes.