gcc.git
5 years ago[Ada] Avoid spurious error in GNATprove mode on non-null access types
Yannick Moy [Wed, 21 Aug 2019 08:29:51 +0000 (08:29 +0000)]
[Ada] Avoid spurious error in GNATprove mode on non-null access types

GNATprove directly handles non-null access checks, and requires that the
frontend does not insert explicit checks in the form of conditional
exceptions being raised. Now fixed.

There is no impact on compilation.

2019-08-21  Yannick Moy  <moy@adacore.com>

gcc/ada/

* checks.adb (Install_Null_Excluding_Check): Do not install
check in GNATprove mode.

From-SVN: r274780

5 years ago[Ada] Ignore subprogram address in ownership checking
Yannick Moy [Wed, 21 Aug 2019 08:29:47 +0000 (08:29 +0000)]
[Ada] Ignore subprogram address in ownership checking

Ownership checking done as in GNATprove should ignore address of
subprograms, as it applies only on objects. Now fixed.

There is no impact on compilation.

2019-08-21  Yannick Moy  <moy@adacore.com>

gcc/ada/

* sem_spark.adb (Process_Path): Do nothing on address of
subprogram.

From-SVN: r274779

5 years ago[Ada] Fix assertion failure on derived private protected type
Eric Botcazou [Wed, 21 Aug 2019 08:29:42 +0000 (08:29 +0000)]
[Ada] Fix assertion failure on derived private protected type

This fixes an assertion failure on the instantiation of a generic
package on a type derived from the private view of a protected type,
ultimately caused by Finalize_Address returning Empty for the subtype
built for the generic actual type of the instantiation.

Finalize_Address has a special processing for untagged derivations of
private views, but it would no longer trigger for the subtype because
this subtype is now represented as a subtype of an implicit derived base
type instead of as the derived type of an implicit subtype previously.

2019-08-21  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* exp_util.adb (Finalize_Address): Deal consistently with
subtypes of private protected types.

gcc/testsuite/

* gnat.dg/prot9.adb, gnat.dg/prot9_gen.ads,
gnat.dg/prot9_pkg1.ads, gnat.dg/prot9_pkg2.ads: New testcase.

From-SVN: r274778

5 years ago[Ada] Replace low-level membership tests with high-level routines
Piotr Trojanek [Wed, 21 Aug 2019 08:29:37 +0000 (08:29 +0000)]
[Ada] Replace low-level membership tests with high-level routines

Code cleanup to improve readablity. Semantics unaffected.

2019-08-21  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* exp_util.adb (Corresponding_Runtime_Package): Use high-level
Is_Protected_Type.
* sem_ch8.adb (Analyze_Renamed_Entry): Likewise.
* sem_ch9.adb (Analyze_Requeue): Likewise.

From-SVN: r274777

5 years ago[Ada] Missing attribute update in new_copy_tree
Javier Miranda [Wed, 21 Aug 2019 08:29:33 +0000 (08:29 +0000)]
[Ada] Missing attribute update in new_copy_tree

The compiler crashes processing an internally generated cloned tree that
has a subprogram call with a named actual parameter.

2019-08-21  Javier Miranda  <miranda@adacore.com>

gcc/ada/

* sem_util.adb (Update_Named_Associations): Update
First_Named_Actual when the subprogram call has a single named
actual.

gcc/testsuite/

* gnat.dg/implicit_param.adb, gnat.dg/implicit_param_pkg.ads:
New testcase.

From-SVN: r274776

5 years ago[Ada] doc/Makefile: automatically create doc/share/_static
Joel Brobecker [Wed, 21 Aug 2019 08:29:27 +0000 (08:29 +0000)]
[Ada] doc/Makefile: automatically create doc/share/_static

2019-08-21  Joel Brobecker  <brobecker@adacore.com>

gcc/ada/

* doc/Makefile (mk_empty_dirs): New (PHONY) rule.
(%.html, %.pdf, %.txt, %.info, %.texinfo): Add dependencies on
mk_empty_dirs.

From-SVN: r274775

5 years ago[Ada] Max_Entry_Queue_Length aspect for protected entries
Justin Squirek [Wed, 21 Aug 2019 08:29:23 +0000 (08:29 +0000)]
[Ada] Max_Entry_Queue_Length aspect for protected entries

Allow values of negative one to be accepted as a valid parameter as a
special case.

2019-08-21  Justin Squirek  <squirek@adacore.com>

gcc/ada/

* doc/gnat_rm/implementation_defined_pragmas.rst: Modify
documentation to reflect expected behavior.
* gnat_rm.texi: Regenerate.
* sem_prag.adb (Analyze_Pragma): Modify handling of pragma
Max_Entry_Queue_Length to not reject integer values of negative
one.
* sem_util.adb (Get_Max_Queue_Length): Add processing for values
of negative one to fit within the current scheme.

From-SVN: r274774

5 years agolibphobos: Merge upstream druntime 5bb8ce19
Iain Buclaw [Wed, 21 Aug 2019 07:54:34 +0000 (07:54 +0000)]
libphobos: Merge upstream druntime 5bb8ce19

Synchronizes extern(C) bindings with latest release.

Reviewed-on: https://github.com/dlang/druntime/pull/2741

libphobos/ChangeLog:

* libdruntime/Makefile.am (DRUNTIME_DSOURCES_BIONIC): Add
core/sys/bionic/string.d.
(DRUNTIME_DSOURCES_DARWIN): Add core/sys/darwin/string.d.
(DRUNTIME_DSOURCES_DRAGONFLYBSD): Add core/sys/dragonflybsd/string.d,
core/sys/dragonflybsd/sys/socket.d.
(DRUNTIME_DSOURCES_FREEBSD): Add core/sys/freebsd/string.d.
(DRUNTIME_DSOURCES_LINUX): Add core/sys/linux/string.d.
(DRUNTIME_DSOURCES_NETBSD): Add core/sys/netbsd/string.d,
core/sys/netbsd/sys/featuretest.d.
* libdruntime/Makefile.in: Regenerate.

From-SVN: r274773

5 years agolibphobos: Merge upstream druntime 94686651
Iain Buclaw [Wed, 21 Aug 2019 07:54:19 +0000 (07:54 +0000)]
libphobos: Merge upstream druntime 94686651

Adds extern(C) bindings for version OpenBSD.

Reviewed-on: https://github.com/dlang/druntime/pull/2748

libphobos/ChangeLog:

* libdruntime/Makefile.am (DRUNTIME_DSOURCES_OPENBSD): Add
core/sys/openbsd/sys/cdefs.d, core/sys/openbsd/sys/elf.d,
core/sys/openbsd/sys/elf32.d, core/sys/openbsd/sys/elf64.d,
core/sys/openbsd/sys/elf_common.d, core/sys/openbsd/sys/link_elf.d,
core/sys/openbsd/sys/mman.d, core/sys/openbsd/time.d.
* libdruntime/Makefile.in: Regenerate.

From-SVN: r274772

5 years agore PR d/91339 (libphobos: ftbfs when the path contains '~')
Iain Buclaw [Wed, 21 Aug 2019 07:54:06 +0000 (07:54 +0000)]
re PR d/91339 (libphobos: ftbfs when the path contains '~')

PR d/91339
d/dmd: Merge upstream dmd b37a537d3

Fixes the error: cannot find source code for runtime library file
'object.d' when the path contains '~'.

Reviewed-on: https://github.com/dlang/dmd/pull/10309

From-SVN: r274771

5 years agolibphobos: Merge upstream phobos 66ae77ac3
Iain Buclaw [Wed, 21 Aug 2019 07:53:55 +0000 (07:53 +0000)]
libphobos: Merge upstream phobos 66ae77ac3

Finishes off phobos support for musl targets.

Reviewed-on: https://github.com/dlang/phobos/pull/7108

From-SVN: r274770

5 years agod: Partially fix ICE: in register_moduleinfo, at d/modules.cc:40
Iain Buclaw [Wed, 21 Aug 2019 07:53:44 +0000 (07:53 +0000)]
d: Partially fix ICE: in register_moduleinfo, at d/modules.cc:40

gcc/d/ChangeLog:

PR d/88722
* modules.cc: Include diagnostic.h.
(register_moduleinfo): Use sorry instead of gcc_assert for targets
without named sections.

From-SVN: r274769

5 years agod/dmd: Merge upstream dmd 375ed10aa
Iain Buclaw [Wed, 21 Aug 2019 07:53:35 +0000 (07:53 +0000)]
d/dmd: Merge upstream dmd 375ed10aa

Don't crash when compiling for 16-bit platforms.

Reviewed-on: https://github.com/dlang/dmd/pull/10306

gcc/d/ChangeLog:

* d-target.cc: Include diagnostic.h.
(Target::_init): Set Tsize_t and Tptrdiff_t as D ushort and short if
the target pointer size is 2.  Add sorry if the pointer size is not
either 2, 4, or 8.

From-SVN: r274768

5 years agod: Fix ICE: Segmentation fault in build_function_type at gcc/tree.c:8539
Iain Buclaw [Wed, 21 Aug 2019 07:53:25 +0000 (07:53 +0000)]
d: Fix ICE: Segmentation fault in build_function_type at gcc/tree.c:8539

gcc/d/ChangeLog:

PR d/90446
* d-lang.cc (d_type_for_mode): Check for all internal __intN types.
(d_type_for_size): Likewise.

From-SVN: r274767

5 years agod: Fix internal compiler error: in d_build_c_type_nodes, at d/d-builtins.cc:783
Iain Buclaw [Wed, 21 Aug 2019 07:53:15 +0000 (07:53 +0000)]
d: Fix internal compiler error: in d_build_c_type_nodes, at d/d-builtins.cc:783

gcc/d/ChangeLog:

PR d/90445
* d-builtins.cc (d_build_c_type_nodes): Test UINTMAX_TYPE for setting
uintmax_type_node.  Set signed_size_type_node as the signed_type_for
size_type_node.

From-SVN: r274766

5 years agod: Fix internal compiler error: in d_init_builtins, at d/d-builtins.cc:1121
Iain Buclaw [Wed, 21 Aug 2019 07:53:05 +0000 (07:53 +0000)]
d: Fix internal compiler error: in d_init_builtins, at d/d-builtins.cc:1121

gcc/d/ChangeLog:

PR d/90444
* d-builtins.cc (build_frontend_type): Build anonymous RECORD_TYPE
nodes as well, push all fields to the struct members.
(d_build_builtins_module): Push anonymous va_list structs to the
builtins module, naming them __builtin_va_list.
(d_init_builtins): Use sorry instead of gcc_unreachable if va_list did
not succeed in being represented as a D type.

From-SVN: r274765

5 years agore PR testsuite/91458 (FAIL: g++.dg/tree-ssa/pr19807.C -std=gnu++98 scan-tree-dump...
Martin Sebor [Wed, 21 Aug 2019 02:18:41 +0000 (02:18 +0000)]
re PR testsuite/91458 (FAIL: g++.dg/tree-ssa/pr19807.C  -std=gnu++98  scan-tree-dump-times optimized "&MEM\\\\[\\\\(void .\\\\)&a \\\\+ 8B\\\\]" 3)

PR testsuite/91458

gcc/testsuite/ChangeLog:
* g++.dg/tree-ssa/ssa-dse-1.C: Use the same search pattern
unconditionally (correcting r272199, PR middle-end/90676).
* gcc.dg/tree-prof/stringop-2.c: Same.

From-SVN: r274764

5 years agoDaily bump.
GCC Administrator [Wed, 21 Aug 2019 00:16:16 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r274763

5 years agoDo not try to process deleted headers with Doxygen
Jonathan Wakely [Tue, 20 Aug 2019 21:35:55 +0000 (22:35 +0100)]
Do not try to process deleted headers with Doxygen

* doc/doxygen/user.cfg.in (INPUT): Remove profile mode headers.

From-SVN: r274758

5 years agoFix markdown in Doxygen comments for std::reduce
Jonathan Wakely [Tue, 20 Aug 2019 21:34:15 +0000 (22:34 +0100)]
Fix markdown in Doxygen comments for std::reduce

* include/std/numeric (reduce): Fix Doxygen markup.

From-SVN: r274757

5 years agoPR libstdc++/91371 make std::is_function handle other calling conventions
Jonathan Wakely [Tue, 20 Aug 2019 21:21:15 +0000 (22:21 +0100)]
PR libstdc++/91371 make std::is_function handle other calling conventions

The x86 attributes such as ms_abi, stdcall, fastcall etc. alter the
function type, which means that functions with one of those attributes
do not match any of the partial specializations of std::is_function.

Rather than duplicating the list for every calling convention, use a
much simpler definition of std::is_function.

Also redefine __is_referenceable to not rely on partial specializations
for each type of referenceable function.

PR libstdc++/91371
* include/std/type_traits (is_function): Simplify definition. Remove
partial specializations for function types.
(__is_referenceable): Simplify definition.
* testsuite/20_util/bind/91371.cc: New test.
* testsuite/20_util/is_function/91371.cc: New test.
* testsuite/20_util/is_function/value.cc: Check more pointer types.
* testsuite/20_util/is_member_function_pointer/91371.cc: New test.
* testsuite/20_util/is_object/91371.cc: New test.

From-SVN: r274756

5 years agocompiler, runtime: implement shifts by signed amounts
Ian Lance Taylor [Tue, 20 Aug 2019 21:15:46 +0000 (21:15 +0000)]
compiler, runtime: implement shifts by signed amounts

    Shifting by signed types is a new language feature in Go 1.13.

    This requires a patch to the testsuite.

    Updates golang/go#19113

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

* go.test/test/fixedbugs/bug073.go: Update for language changes.

From-SVN: r274755

5 years agofunction.c (assign_parm_find_stack_rtl): Use known_eq instead of ==.
Bernd Edlinger [Tue, 20 Aug 2019 16:08:12 +0000 (16:08 +0000)]
function.c (assign_parm_find_stack_rtl): Use known_eq instead of ==.

2019-08-20  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        * function.c (assign_parm_find_stack_rtl): Use known_eq instead of ==.

From-SVN: r274751

5 years agotree-ssa-dse.c (dse_optimize_redundant_stores): Improved check to catch more redundan...
Matthew Beliveau [Tue, 20 Aug 2019 13:23:01 +0000 (13:23 +0000)]
tree-ssa-dse.c (dse_optimize_redundant_stores): Improved check to catch more redundant zero initialization cases.

2019-08-19  Matthew Beliveau  <mbelivea@redhat.com>

* tree-ssa-dse.c (dse_optimize_redundant_stores): Improved check to
catch more redundant zero initialization cases.
(dse_dom_walker::dse_optimize_stmt): Likewise.

From-SVN: r274749

5 years agore PR lto/91307 (-flto causes binary to vary)
Richard Biener [Tue, 20 Aug 2019 13:14:59 +0000 (13:14 +0000)]
re PR lto/91307 (-flto causes binary to vary)

2019-08-20  Richard Biener  <rguenther@suse.de>

PR lto/91307
* ipa.c (cgraph_build_static_cdtor_1): Use names not recognizable
by collect2 when targetm.have_ctors_dtors which avoids dragging
in temporary filenames from LTO input objects.

From-SVN: r274748

5 years agore PR tree-optimization/37242 (missed FRE opportunity because of signedness of addition)
Richard Biener [Tue, 20 Aug 2019 12:02:56 +0000 (12:02 +0000)]
re PR tree-optimization/37242 (missed FRE opportunity because of signedness of addition)

2019-08-20  Richard Biener  <rguenther@suse.de>

PR tree-optimization/37242
* tree-ssa-sccvn.c (visit_nary_op): Also CSE (T)(a + b)
to (T)a + (T)b if we know that a + b does not overflow.

* gcc.dg/tree-ssa/ssa-fre-80.c: New testcase.

From-SVN: r274746

5 years agoIntrinsic documentation changes.
Mark Eggleston [Tue, 20 Aug 2019 10:08:10 +0000 (10:08 +0000)]
Intrinsic documentation changes.

Add notes to DIM, MOD and MODULE stating that as a GNU extension,
integers of different kinds are allowed as arguments and that the
return value has the larger kind.

From-SVN: r274744

5 years ago[Ada] Unnesting: take inlining (-gnatn) into account
Arnaud Charlet [Tue, 20 Aug 2019 09:50:43 +0000 (09:50 +0000)]
[Ada] Unnesting: take inlining (-gnatn) into account

This affects only LLVM-based compilation.

2019-08-20  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* exp_unst.adb (Unnest_Subprograms, Unnest_Subprogram): Take
inlining (-gnatn) into account.

From-SVN: r274743

5 years ago[Ada] Crash on a Storage_Size aspect depending on attr. of another type
Ed Schonberg [Tue, 20 Aug 2019 09:50:38 +0000 (09:50 +0000)]
[Ada] Crash on a Storage_Size aspect depending on attr. of another type

This patch fixes a crash on an aspect specification for Storage_Size for
a type T when the expression for the aspect depends on attributes of a
previously declared type that is not frozen yet. The  temporary
declaration that captures the value of the aspect must be part of the
actions attached to the freeze node for T.

2019-08-20  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* exp_ch13.adb (Expand_N_Attribute_Definition_Clause, case
Storage_Size): If the expression for Storage_Size is not static
it may depend on characterstics of another type that may bot be
frozen yet, so the elaboration of the expression for the aspect
must be attached directly to the freeze actions of the type to
which it applies.

gcc/testsuite/

* gnat.dg/storage_size1.adb: New testcase.

From-SVN: r274742

5 years ago[Ada] Inconsistent scope chain due to quantified expression
Piotr Trojanek [Tue, 20 Aug 2019 09:50:34 +0000 (09:50 +0000)]
[Ada] Inconsistent scope chain due to quantified expression

Routine Build_DIC_Procedure_Declaration appears to be heavily inspired
by Build_Invariant_Procedure_Declaration; they both wrap an expression
attached to a type inside an internal procedure. Initially none of them
were calling Set_Last_Entity.

For Build_Invariant_Procedure_Declaration this was fixed previously.
For Build_DIC_Procedure_Declaration this is fixed here.

The issue affects the GNATprove tool and is not visible to end users of
the GNAT compiler. No simple test is available because this would
require a debug session.

2019-08-20  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* exp_util.adb (Build_DIC_Procedure_Declaration): Set the last
entity of the generated Default_Initial_Condition procedure in
order to construct a proper entity chain.

From-SVN: r274741

5 years ago[Ada] Adapt GNATprove expansion for slices with access prefix
Yannick Moy [Tue, 20 Aug 2019 09:50:29 +0000 (09:50 +0000)]
[Ada] Adapt GNATprove expansion for slices with access prefix

The special expansion done in GNATprove mode should be adapted to slices
where the prefix has access type, like indexed expressions.

There is no impact on compilation.

2019-08-20  Yannick Moy  <moy@adacore.com>

gcc/ada/

* exp_spark.adb (Expand_SPARK_N_Slice_Or_Indexed_Component):
Renaming of function to apply to slices as well.
(Expand_SPARK): Expand prefix of slices of access type.

From-SVN: r274740

5 years ago[Ada] Improve efficiency of aggregates with <>
Bob Duff [Tue, 20 Aug 2019 09:50:24 +0000 (09:50 +0000)]
[Ada] Improve efficiency of aggregates with <>

The generated code has been improved so that aggregates with <> are more
efficient.  No change in behavior; no test.

2019-08-20  Bob Duff  <duff@adacore.com>

gcc/ada/

* exp_aggr.adb (Expand_Array_Aggregate): Use build-in-place in
the nonlimited case in STEP 4. This improves the efficiency of
things like (1 .. 1000 => <>).  We still generate some code for
that, unfortunately, but it is much improved.
(Aggr_Assignment_OK_For_Backend): Return false if <> components
are present.

From-SVN: r274739

5 years ago[Ada] Improve speed of discriminated return types
Bob Duff [Tue, 20 Aug 2019 09:50:19 +0000 (09:50 +0000)]
[Ada] Improve speed of discriminated return types

The compiler now generates faster code for functions that return
discriminated types in many cases where the size is known at compile
time.

2019-08-20  Bob Duff  <duff@adacore.com>

gcc/ada/

* exp_ch6.adb (Needs_BIP_Alloc_Form): Call
Requires_Transient_Scope rather than checking constrainedness
and so forth.  We have previously improved
Requires_Transient_Scope to return False in various cases,
notably a limited record with an access discriminant. This
change takes advantage of that to avoid using the secondary
stack for functions returning such types.
(Make_Build_In_Place_Call_In_Allocator): Be consistent by
calling Needs_BIP_Alloc_Form rather than Is_Constrained and so
forth.
* sem_ch4.adb (Analyze_Allocator): The above change causes the
compiler to generate code that is not legal Ada, in particular
an uninitialized allocator for indefinite subtype.  This is
harmless, so we suppress the error message in this case.

From-SVN: r274738

5 years ago[Ada] Minor reformattings
Gary Dismukes [Tue, 20 Aug 2019 09:50:14 +0000 (09:50 +0000)]
[Ada] Minor reformattings

2019-08-20  Gary Dismukes  <dismukes@adacore.com>

gcc/ada/

* ali.adb, ali.ads, aspects.adb, checks.ads, checks.adb,
doc/gnat_rm/implementation_defined_pragmas.rst,
doc/gnat_ugn/building_executable_programs_with_gnat.rst,
einfo.ads, exp_aggr.adb, exp_ch11.adb, exp_ch3.ads, exp_ch4.adb,
exp_disp.adb, inline.adb, libgnat/a-locale.ads,
libgnat/s-soflin.ads, par_sco.adb, repinfo.adb, sem_ch5.adb,
sem_disp.adb, sem_elab.adb, sem_eval.adb, sem_spark.adb,
sem_spark.ads, sinfo.ads: Minor reformattings, typo fixes and
and rewordings.

From-SVN: r274737

5 years ago[Ada] Set GNAT.OS_Lib.GM_Split's granularity back to 1 second
Dmitriy Anisimkov [Tue, 20 Aug 2019 09:50:09 +0000 (09:50 +0000)]
[Ada] Set GNAT.OS_Lib.GM_Split's granularity back to 1 second

The modification to round time up to even second was added decades ago.
It was done to avoid unneeded recompilations when the project was built
on non-FAT filesystems and then moved to FAT filesystems. Such a
situation is now very rare and does not deserve time distortion.

2019-08-20  Dmitriy Anisimkov  <anisimko@adacore.com>

gcc/ada/

* adaint.c (__gnat_to_gm_time): On _WIN32, don't round time up
to even second.

From-SVN: r274736

5 years ago[Ada] Fix propagation of compiler internal flag
Ed Schonberg [Tue, 20 Aug 2019 09:50:05 +0000 (09:50 +0000)]
[Ada] Fix propagation of compiler internal flag

No change in behavior for GCC-based compilations.

2019-08-20  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch3.adb (Analyze_Object_Declaration): If actual type is
private and distinct from nominal type in declaration, propagate
flags Is_Constr_Subt_For_U_Nominal and _UN_Aliased to full view
of private type.

From-SVN: r274735

5 years ago[Ada] Crash on Loop_Entry for while_loop involving substrings
Ed Schonberg [Tue, 20 Aug 2019 09:50:00 +0000 (09:50 +0000)]
[Ada] Crash on Loop_Entry for while_loop involving substrings

When expanding a loop entry attribute for a while_loop we construct a
function that incorporates the expanded condition of the loop. The
itypes that may be generated in that expansion must carry the scope of
the constructed function for proper handling in the backend.

2019-08-20  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* exp_attr.adb (Expand_Loop_Entry_Attribute): When expanding a
loop entry attribute for a while_loop we construct a function
that incorporates the expanded condition of the loop. The itypes
that may be generated in that expansion must carry the scope of
the constructed function for proper handling in gigi.

gcc/testsuite/

* gnat.dg/loop_entry2.adb: New testcase.

From-SVN: r274734

5 years ago[Ada] Spurious error in dispatching call with class-wide precondition
Ed Schonberg [Tue, 20 Aug 2019 09:49:56 +0000 (09:49 +0000)]
[Ada] Spurious error in dispatching call with class-wide precondition

This patch fixes a spurious visibility error on a dispatching call to
a subprogram with a classwide precondition, when the call qppears in
the same declarative part as the subprogram declaration itself.

2019-08-20  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* exp_disp.adb (Build_Class_Wide_Check, Replace_Formals): When a
dispatching call tp a subprogram with a class-wide precondition
occurrs in the same declarative part as the ancestor subprogram
being called, the`expression for the precondition has not been
analyzed yet. Such a call may appear, e.g. in an expression
function. In that case, the replacement of formals by actuals in
the call cannot use the formal entities of the subprogram being
called, and the occurrence of the formals in the expression must
be located by name (Chars fields) as would be done at a later
freeze point, when the expression is resolved in the context of
the subprogram itself.

gcc/testsuite/

* gnat.dg/tagged5.adb, gnat.dg/tagged5.ads: New testcase.

From-SVN: r274733

5 years ago[Ada] Suppress Initialize_Scalars for Persistent_BSS
Bob Duff [Tue, 20 Aug 2019 09:49:51 +0000 (09:49 +0000)]
[Ada] Suppress Initialize_Scalars for Persistent_BSS

If a variable has pragma Persistent_BSS, the compiler now automatically
suppresses implicit initializations caused by Initialize_Scalars and
Normalize_Scalars. Variables with Persistent_BSS cannot be initialized,
and previously a pragma Suppress_Initialization was required before the
pragma Persistent_BSS.

2019-08-20  Bob Duff  <duff@adacore.com>

gcc/ada/

* sem_prag.adb (Persistent_BSS): If an initialization is present
because of Initialize_Scalars or Normalize_Scalars, generate an
implicit pragma Suppress_Initialization to remove that, because
initialization is not allowed for these variables. Other
initializations remain illegal.

From-SVN: r274732

5 years ago[Ada] Illegal limited function call accepted in a type conversion
Gary Dismukes [Tue, 20 Aug 2019 09:49:46 +0000 (09:49 +0000)]
[Ada] Illegal limited function call accepted in a type conversion

It's illegal to call a function with a result of an immutably limited
type inside a type conversion that's used in one of the special contexts
that allow such a function call by itself (see RM 7.5 (2.1-2.10)), such
as in the initialization expression of an object declaration. The
compiler was recursively applying OK_For_Limited_Init_In_05 to the
expression inside of a rewritten type conversion, rather than directly
to the Original_Node itself (which is what was cased on to get to the
type conversion case alternative), which allowed such illegal
initialization, and that's corrected by this fix. However, when the
expression is not a rewriting of a user-written conversion, the
recursive call to OK_For_Limited_Init_In_05 must be applied to the
Expression of the conversion.

2019-08-20  Gary Dismukes  <dismukes@adacore.com>

gcc/ada/

* sem_ch3.adb (OK_For_Limited_Init_In_05): In the case of type
conversions, apply the recursive call to the Original_Node of
the expression Exp rather than the Expression of the
Original_Node, in the case where Exp has been rewritten;
otherwise, when Original_Node is the same as Exp, apply the
recursive call to the Expression.
(Check_Initialization): Revise condition for special check on
type conversions of limited function calls to test Original_Node
(avoiding spurious errors on expanded unchecked conversions
applied to build-in-place dispatching calls).

gcc/testsuite/

* gnat.dg/type_conv2.adb, gnat.dg/type_conv2.ads: New testcase.

From-SVN: r274731

5 years ago[Ada] New pragma Aggregate_Individually_Assign
Patrick Bernardi [Tue, 20 Aug 2019 09:49:41 +0000 (09:49 +0000)]
[Ada] New pragma Aggregate_Individually_Assign

Where possible GNAT will store the binary representation of a record
aggregate in memory for space and performance reasons. This
configuration pragma changes this behaviour so that record aggregates
are instead always converted into individual assignment statements.

The following package pack.ads:

-- pack.ads

pragma Aggregate_Individually_Assign;
pragma Restrictions (No_Multiple_Elaboration);

package Pack is
   type A_Rec is record
      A, B, C, D : Boolean;
   end record;

   A : A_Rec := (True, False, True, True);
end Pack;

when compiled with

gcc -c -gnatdg pack.ads

should produce the following output:

Source recreated from tree for Pack (spec)
------------------------------------------

pragma aggregate_individually_assign;
pragma restrictions (no_multiple_elaboration);

package pack is
   type pack__a_rec is record
      a : boolean;
      b : boolean;
      c : boolean;
      d : boolean;
   end record;
   freeze pack__a_rec [
      procedure pack__a_recIP (_init : out pack__a_rec) is
      begin
         %push_constraint_error_label ()
         %push_program_error_label ()
         %push_storage_error_label ()
         null;
         %pop_constraint_error_label
         %pop_program_error_label
         %pop_storage_error_label
         return;
      end pack__a_recIP;
   ]
   pack__a : pack__a_rec := (
      a => true,
      b => false,
      c => true,
      d => true);
   pack__a.a := true;
   pack__a.b := false;
   pack__a.c := true;
   pack__a.d := true;
   null;
end pack;

2019-08-20  Patrick Bernardi  <bernardi@adacore.com>

gcc/ada/

* exp_aggr.adb (Expand_Record_Aggregate): Always convert a
record Aggregate to assignment statements if the option
Aggregate_Individually_Assign is set.
* opt.ads (Aggregate_Individually_Assign): New option.
* par-prag.adb (Prag): Add Pragma_Aggregate_Individually_Assign.
* sem_prag.adb (Analyze_Pragma): Likewise.
* snames.ads-tmpl: Add Pragma_Aggregate_Individually_Assign and
Name_Aggregate_Individually_Assign.
* doc/gnat_rm/implementation_defined_pragmas.rst: Document
pragma Aggregate_Individually_Assign.
* gnat_rm.texi: Regenerate.

From-SVN: r274730

5 years ago[Ada] Enable delta_aggregate only in Ada 2020 mode
Bob Duff [Tue, 20 Aug 2019 09:49:37 +0000 (09:49 +0000)]
[Ada] Enable delta_aggregate only in Ada 2020 mode

If the delta_aggregate feature is used, the -gnat2020 or -gnatX switch
must be given.

The following test must get an error if neither
-gnat2020 nor -gnatX is specified:

gcc -c delta_aggregate.ads -gnat2012

delta_aggregate.ads:4:18: delta_aggregate is an Ada 202x feature
delta_aggregate.ads:4:18: compile with -gnatX

package Delta_Aggregate is

   X : String := "Hello";
   Y : String := (X with delta 1 => 'h');

end Delta_Aggregate;

2019-08-20  Bob Duff  <duff@adacore.com>

gcc/ada/

* par-ch4.adb: Minor wording change in error messages.
* sem_aggr.adb (Resolve_Delta_Aggregate): Emit an error for Ada
versions prior to Ada 2020.

From-SVN: r274729

5 years ago[Ada] Improve generated code for initialization of atomics
Bob Duff [Tue, 20 Aug 2019 09:49:32 +0000 (09:49 +0000)]
[Ada] Improve generated code for initialization of atomics

This patch makes the temp for initialization of an atomic variable be
constant.

No change in behavior; no test.

2019-08-20  Bob Duff  <duff@adacore.com>

gcc/ada/

* freeze.adb (Is_Atomic_VFA_Aggregate): Make the temp for
initialization of the atomic variable be constant. This is
cleaner, and might improve efficiency.

From-SVN: r274728

5 years ago[Ada] More complete information level for -gnatR4 output
Eric Botcazou [Tue, 20 Aug 2019 09:49:28 +0000 (09:49 +0000)]
[Ada] More complete information level for -gnatR4 output

This instructs -gnatR4 to also list the Etype of a user-declared record
subtype if it is compiler-generated, for example in:

package P is

   type U_Arr is array (Integer range <>) of Character;

   type Rec1 (D1, D2 : Integer) is record
      C : U_Arr (D1 .. D2);
   end record;

   type Rec_N is new Rec1 (1, 2);

end P;

2019-08-20  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* repinfo.adb (List_Record_Info): In -gnatR4 mode, set the
relevant flag on the implicit base type of a record subtype.

From-SVN: r274727

5 years ago[Ada] Fix a folding issue with System'To_Address
Bob Duff [Tue, 20 Aug 2019 09:49:23 +0000 (09:49 +0000)]
[Ada] Fix a folding issue with System'To_Address

2019-08-20  Bob Duff  <duff@adacore.com>

gcc/ada/

* sem_eval.adb (Expr_Value): Implement the case of an unchecked
conversion of a static expression.

From-SVN: r274726

5 years ago[Ada] Warn on Unchecked_Conversion to zero-sized array
Bob Duff [Tue, 20 Aug 2019 09:49:12 +0000 (09:49 +0000)]
[Ada] Warn on Unchecked_Conversion to zero-sized array

The compiler usually warns on Unchecked_Conversion between types with
mismatched sizes. This warning is now extended to the case where the
target type is a zero-sized array.

2019-08-20  Bob Duff  <duff@adacore.com>

gcc/ada/

* sem_ch13.adb (Is_Null_Array): New function, used to detect the
null array case; used to warn about uncheckedly converting to a
zero-sized array.  It is unfortunate that we can't just check
the size, and warn on all cases of converting from a
nonzero-sized type to a zero-sized one. That's because "0" means
two different things: "size is zero" and "size is unknown".
Until we fix that design flaw, we need this more targeted fix.

gcc/testsuite/

* gnat.dg/unchecked_convert14.adb: New testcase.

From-SVN: r274725

5 years ago[Ada] Efficiency improvement in bounded ordered containers
Bob Duff [Tue, 20 Aug 2019 09:49:07 +0000 (09:49 +0000)]
[Ada] Efficiency improvement in bounded ordered containers

The Delete operations in the bounded ordered containers have been
substantially sped up.  No change in semantics, so no test.

2019-08-20  Bob Duff  <duff@adacore.com>

gcc/ada/

* libgnat/a-cborma.adb, libgnat/a-cborse.adb (Clear): Repeatedly
call Delete. This avoids clearing the free list, which
substantially speeds up future Delete operations.

From-SVN: r274724

5 years ago[Ada] Warning for out-of-order record representation clauses
Bob Duff [Tue, 20 Aug 2019 09:49:02 +0000 (09:49 +0000)]
[Ada] Warning for out-of-order record representation clauses

The compiler can now warn for out-of-order record representation
clauses. A warning is given if the order of component declarations,
component clauses, and bit-level layout do not all agree.  The warning
is disabled by default, and may be enabled by the -gnatw_r switch.

2019-08-20  Bob Duff  <duff@adacore.com>

gcc/ada/

* sem_ch13.adb (Component_Order_Check): New procedure to check
for out-of-order clauses.
* warnsw.ads, warnsw.adb: New -gnatw_r switch.
* doc/gnat_ugn/building_executable_programs_with_gnat.rst:
Document new switch.
* gnat_ugn.texi: Regenerate.

From-SVN: r274723

5 years ago[Ada] Object_Size clause specifying 0 bits is illegal
Bob Duff [Tue, 20 Aug 2019 09:48:57 +0000 (09:48 +0000)]
[Ada] Object_Size clause specifying 0 bits is illegal

The patch gives an error message on "for T'Object_Size use 0;".

2019-08-20  Bob Duff  <duff@adacore.com>

gcc/ada/

* sem_ch13.adb (Object_Size): Give an error for zero. It really
rubs me the wrong way that we don't honor "for T'Object_Size use
0;", but it's not important enough to fix. In any case, if we're
not going to obey the clause, we should give an error.

gcc/testsuite/

* gnat.dg/object_size1.adb: New testcase.

From-SVN: r274722

5 years ago[Ada] Pragma Warning_As_Error works for style warnings
Bob Duff [Tue, 20 Aug 2019 09:48:51 +0000 (09:48 +0000)]
[Ada] Pragma Warning_As_Error works for style warnings

Pragma Warning_As_Error now works for style warnings (messages that
start with "(style)", enabled by -gnaty) the same way it works for
regular warnings enabled by -gnatw.

The following test should fail to build with style checks:

gnat.adc:

pragma Warning_As_Error ("two spaces required");

style.adb:

procedure Style is
   X : Integer;
begin
   null;
   --Hello
end;

gnatmake -q -f -g style.adb -gnaty

should get:

style.adb:2:04: warning: variable "X" is never read and never assigned
style.adb:5:06: error: (style) two spaces required [warning-as-error]
style.adb:6:01: (style) "end Style" required
gnatmake: "style.adb" compilation error

and no executable should be created.

2019-08-20  Bob Duff  <duff@adacore.com>

gcc/ada/

* errout.adb (Error_Msg_Internal): Set Warn_Err in case of
Is_Style_Msg.
* erroutc.adb (Output_Msg_Text): Do Warnings_Treated_As_Errors
processing and [warning-as-error] modification for style
messages.  Clean up code, simplify, remove unnecessary block
statement, add renaming of table entry.
* erroutc.ads (Warning_Treated_As_Error): Fix comment: no such
thing as Set_Warning_As_Error.
* opt.ads: Clean up comments and move related declarations near
each other.
* par-prag.adb: Process Warning_As_Error. This is necessary
because many style warning happen during parsing.
* sem_prag.adb: Use new Acquire_Warning_Match_String.
* sem_util.ads, sem_util.adb (Acquire_Warning_Match_String): New
function shared by par-prag.adb and sem_prag.adb. Replaces the
procedure in sem_prag.adb. Avoid use of global variables.
* stringt.ads, stringt.adb (To_String): New function to convert
String_Id to String.
* doc/gnat_rm/implementation_defined_pragmas.rst: Document the
new feature.
* gnat_rm.texi: Regenerate.

From-SVN: r274721

5 years ago[Ada] Get rid of linear searches in Lib
Eric Botcazou [Tue, 20 Aug 2019 09:48:33 +0000 (09:48 +0000)]
[Ada] Get rid of linear searches in Lib

This change is aimed at removing a couple of linear searches in the
units management code that can become problematic performance-wise when
the number of loaded units is in the several hundreds, which can happen
for large files even at -O0 without any inlining.

It introduces an auxiliary hash table to record a mapping between the
name of units and their entry in the units table, and then replaces the
linear searches by lookups in this names table.  This can save up to 2%
of the compilation time spent in the front-end in some cases.

There should be no functional changes, except in the error message
issued for circular unit dependencies in very peculiar and convoluted
cases.

2019-08-20  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* lib.ads: Add with clause for GNAT.HTable.
Add pragma Inline for Is_Loaded and alphabetize the list.
(Unit_Name_Table_Size): New constant.
(Unit_Name_Header_Num): New subtype.
(Unit_Name_Hash): New function declaration.
(Unit_Names): New simple hash table.
(Init_Unit_Name): New procedure declaration.
* lib.adb (Set_Unit_Name): Unregister the old name in the table,
if any, and then register the new name.
(Init_Unit_Name): New procedure.
(Is_Loaded): Reimplement using a lookup in the names table.
(Remove_Unit): Unregister the name.
(Unit_Name_Hash): New function.
* lib-load.adb (Create_Dummy_Package_Unit): Call Init_Unit_Name.
(Load_Unit): Use a lookup in the names table to find out whether
the unit has already been loaded.  Call Init_Unit_Name and then
Remove_Unit if the loading has failed.
(Make_Child_Decl_Unit): Call Init_Unit_Name.
(Make_Instance_Unit): Likewise.
* lib-writ.adb (Ensure_System_Dependency): Likewise.

From-SVN: r274720

5 years ago[Ada] Sem_Ch13: fix uninitialized parameter static analysis warning
Bob Duff [Tue, 20 Aug 2019 09:48:11 +0000 (09:48 +0000)]
[Ada] Sem_Ch13: fix uninitialized parameter static analysis warning

No functional change.

2019-08-20  Bob Duff  <duff@adacore.com>

gcc/ada/

* sem_ch13.adb (Record_Hole_Check): Initialize After_Last.

From-SVN: r274719

5 years ago[Ada] Revert change for gnatprove that is no longer needed
Piotr Trojanek [Tue, 20 Aug 2019 09:48:02 +0000 (09:48 +0000)]
[Ada] Revert change for gnatprove that is no longer needed

Years ago, we adapted Get_Kind_Of_Unit so that gnatprove could use it to
detect both bodies and specs of predefined units.

However, this wasn't really needed: gnatprove could simply reuse
Lib.In_Predefined_Unit and now it does. This patch simply reverts two
commits mentioned above.

No frontend test provided, because the removed comment is clear that this
doesn't affect the compiler. Other tools similarly should not be affected
(at least they were not when this change was introduced in 2012).

2019-08-20  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

* impunit.adb (Get_Kind_Of_Unit): Revert change for adapting
this routine for gnatprove.

From-SVN: r274718

5 years ago[Ada] Document requirements for Pragma Lock_Free
Arnaud Charlet [Tue, 20 Aug 2019 09:47:58 +0000 (09:47 +0000)]
[Ada] Document requirements for Pragma Lock_Free

2019-08-20  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

* doc/gnat_rm/implementation_defined_pragmas.rst: Document
requirements for Pragma Lock_Free.
* gnat_rm.texi: Regenerate.

From-SVN: r274717

5 years ago[Ada] Initialize gnat_argc/gnat_argv only the first time
Philippe Gil [Tue, 20 Aug 2019 09:47:53 +0000 (09:47 +0000)]
[Ada] Initialize gnat_argc/gnat_argv only the first time

2019-08-20  Philippe Gil  <gil@adacore.com>

gcc/ada/

* bindgen.adb (Gen_Main): Set gnat_argc/gnat_argv to argc/argv
only when still uninitialized.

From-SVN: r274716

5 years ago[Ada] Fix documentation for GNAT.Command_Line.Exit_From_Command_Line
Bob Duff [Tue, 20 Aug 2019 09:47:49 +0000 (09:47 +0000)]
[Ada] Fix documentation for GNAT.Command_Line.Exit_From_Command_Line

2019-08-20  Bob Duff  <duff@adacore.com>

gcc/ada/

* libgnat/g-comlin.ads (Exit_From_Command_Line): Fix
documentation for GNAT.Command_Line.

From-SVN: r274715

5 years ago[Ada] Add missing dot at the end of lang.opt doc for -fdump-scos
Pierre-Marie de Rodat [Tue, 20 Aug 2019 09:47:44 +0000 (09:47 +0000)]
[Ada] Add missing dot at the end of lang.opt doc for -fdump-scos

2019-08-20  Pierre-Marie de Rodat  <derodat@adacore.com>

gcc/ada/

PR ada/91492
* gcc-interface/lang.opt (-fdump-scos): Add missing dot at the
end of the documentation.

From-SVN: r274714

5 years agore PR rtl-optimization/91347 (hppa: wrong code generated with tail call optimisation)
Eric Botcazou [Tue, 20 Aug 2019 09:10:53 +0000 (09:10 +0000)]
re PR rtl-optimization/91347 (hppa: wrong code generated with tail call optimisation)

PR rtl-optimization/91347
* dse.c (scan_insn): Call add_wild_read for non-const/memset tail calls
before reload if HARD_FRAME_POINTER_IS_ARG_POINTER.

From-SVN: r274708

5 years agoAdd a pass_by_reference flag to function_arg_info
Richard Sandiford [Tue, 20 Aug 2019 08:54:03 +0000 (08:54 +0000)]
Add a pass_by_reference flag to function_arg_info

This patch adds a flag that tells targets whether an argument
has been converted to pass-by-reference form.  This replaces
assign_parm_data_one::passed_pointer in function.c.

The flag is set automatically for places that call
apply_pass_by_reference_rules.  Places that apply
pass-by-reference manually need to set it themselves.

(After previous changes, no targets apply pass-by-reference
manually.  They all go through apply_pass_by_reference_rules.)

2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* calls.h (function_arg_info): Add a pass_by_reference field,
defaulting to false.
* calls.c (apply_pass_by_reference_rules): Set pass_by_reference
when applying pass-by-reference semantics.
(initialize_argument_information): Likewise.
(emit_library_call_value_1): Likewise.
* function.c (assign_parm_data_one): Remove passed_pointer field.
(assign_parm_find_data_types): Don't set it.
(assign_parm_find_stack_rtl, assign_parm_adjust_stack_rtl)
(assign_parm_setup_reg, assign_parms, gimplify_parameters): Use
arg.pass_by_reference instead of passed_pointer.

From-SVN: r274707

5 years agoMake calls.c use function_arg_info internally
Richard Sandiford [Tue, 20 Aug 2019 08:53:56 +0000 (08:53 +0000)]
Make calls.c use function_arg_info internally

This patch makes the two main calls.c argument-processing
routines track the state of the argument in a function_arg_info
instead of using separate mode variables.

2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* calls.c (emit_library_call_value_1): Merge arg and orig_arg
into a single function_arg_info, updating its fields when we
apply pass-by-reference and promotion semantics.  Use the
function_arg_info to track the mode rather than keeping it in
a separate local variable.
(initialize_argument_information): Likewise.  Base the final
arg_to_skip on this new function_arg_info rather than creating
a new one from scratch.

From-SVN: r274706

5 years agoMake function.c use function_arg_info internally
Richard Sandiford [Tue, 20 Aug 2019 08:53:52 +0000 (08:53 +0000)]
Make function.c use function_arg_info internally

This patch adds a function_arg_info field to assign_parm_data_one,
so that:

  - passed_type -> arg.type
  - promoted_mode -> arg.mode
  - named_arg -> arg.named

We can then pass this function_arg_info directly to the converted
hooks.

Between the initialisation of the assign_parm_data_one and the
application of promotion rules (which is a state internal to
assign_parm_find_data_types), arg.mode is equivalent to passed_mode
(i.e. to TYPE_MODE).

2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* function.c (assign_parm_data_one): Replace passed_type,
promoted_mode and named_arg with a function_arg_info field.
(assign_parm_find_data_types): Remove local variables and
assign directly to "data".  Make data->passed_mode shadow
data->arg.mode until promotion, then assign the promoted
mode to data->arg.mode.
(assign_parms_setup_varargs, assign_parm_find_entry_rtl)
(assign_parm_find_stack_rtl, assign_parm_adjust_entry_rtl)
(assign_parm_remove_parallels, assign_parm_setup_block_p)
(assign_parm_setup_block, assign_parm_setup_reg)
(assign_parm_setup_stack, assign_parms, gimplify_parameters): Use
arg.mode instead of promoted_mode, arg.type instead of passed_type
and arg.named instead of named_arg.  Use data->arg for
function_arg_info structures that had the field values passed_type,
promoted_mode and named_arg.  Base other function_arg_infos on
data->arg, changing the necessary properties.

From-SVN: r274705

5 years agoAdd a apply_pass_by_reference_rules helper
Richard Sandiford [Tue, 20 Aug 2019 08:53:47 +0000 (08:53 +0000)]
Add a apply_pass_by_reference_rules helper

This patch adds a helper routine that applies pass-by-reference
semantics to an existing function_arg_info.

The c6x part means that c6x_function_arg and c6x_function_arg_advance
see the same "named" value as pass_by_reference did, rather than
pass_by_reference seeing "true" and the others seeing "false".
This doesn't matter because the c6x port doesn't care about namedness.

The rs6000.c patch removes an assignment to "type", but the only
later code to use it was the patched promote_mode line.

(The reason for patching these places despite the above is that
often target code gets used as a basis for new targets or changes
to existing ones.)

2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* calls.h (apply_pass_by_reference_rules): Declare.
* calls.c (apply_pass_by_reference_rules): New function.
* config/c6x/c6x.c (c6x_call_saved_register_used): Use it.
* config/rs6000/rs6000-call.c (rs6000_parm_needs_stack): Likewise.
* config/s390/s390.c (s390_call_saved_register_used): Likewise.
* function.c (assign_parm_find_data_types): Likewise.
* var-tracking.c (prepare_call_arguments): Likewise.

From-SVN: r274704

5 years agoUse function_arg_info for TARGET_MUST_PASS_IN_STACK
Richard Sandiford [Tue, 20 Aug 2019 08:53:39 +0000 (08:53 +0000)]
Use function_arg_info for TARGET_MUST_PASS_IN_STACK

The hook is passed the promoted mode instead of the original type mode.

The expr.h reference in the documentation is no longer correct, but
pointing to calls.h or calls.c doesn't help much either.  I just left
this as-is since it's not related to the point of the series.

After previous changes, most places already pass arg.mode and arg.type.
Only i386 and mcore needed to construct a new one out of nothing.
rs6000 needs to construct one slightly earlier than before.

2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* target.def (must_pass_in_stack): Take a function_arg_info instead
of a mode and a type.
* doc/tm.texi: Regenerate.
* calls.h (must_pass_in_stack_var_size): Take a function_arg_info
instead of a mode and a type.
(must_pass_in_stack_var_size_or_pad): Likewise.
* calls.c (must_pass_in_stack_var_size): Likewise.
(must_pass_in_stack_var_size_or_pad): Likewise.
(initialize_argument_information): Update call to
targetm.calls.must_pass_in_stack.
(must_pass_va_arg_on_stack): Likewise.
* function.c (assign_parm_find_entry_rtl): Likewise.
* targhooks.c (hook_pass_by_reference_must_pass_in_stack): Likewise.
* config/alpha/alpha.c (alpha_function_arg): Likewise.
(alpha_function_arg_advance): Likewise.
* config/cr16/cr16.c (cr16_function_arg): Likewise.
(cr16_function_arg_advance): Likewise.
* config/cris/cris.c (cris_pass_by_reference): Likewise.
(cris_arg_partial_bytes): Likewise.
* config/iq2000/iq2000.c (iq2000_pass_by_reference): Likewise.
* config/lm32/lm32.c (lm32_function_arg): Likewise.
* config/mcore/mcore.c (mcore_num_arg_regs): Likewise.
(mcore_function_arg, mcore_arg_partial_bytes): Likewise.
* config/mips/mips.c (mips_pass_by_reference): Likewise.
* config/mmix/mmix.c (mmix_function_arg_advance): Likewise.
(mmix_function_arg_1, mmix_pass_by_reference): Likewise.
* config/sh/sh.c (sh_pass_by_reference): Likewise.
* config/stormy16/stormy16.c (xstormy16_function_arg): Likewise.
* config/xtensa/xtensa.c (xtensa_function_arg_advance): Likewise.
* config/arm/arm.c (arm_must_pass_in_stack): Take a function_arg_info
instead of a mode and a type.
* config/fr30/fr30.c (fr30_must_pass_in_stack): Likewise.
(fr30_num_arg_regs): Likewise.
(fr30_setup_incoming_varargs): Update calls accordingly.
(fr30_arg_partial_bytes, fr30_function_arg): Likewise.
(fr30_function_arg_advance): Likewise.
* config/frv/frv.c (frv_must_pass_in_stack): Take a function_arg_info
instead of a mode and a type.
* config/gcn/gcn.c (num_arg_regs): Likewise.
(gcn_function_arg, gcn_function_arg_advance): Update calls to
num_arg_regs and targetm.calls.must_pass_in_stack.
(gcn_arg_partial_bytes): Likewise.
* config/i386/i386.c (ix86_must_pass_in_stack): Take a
function_arg_info instead of a mode and a type.
(classify_argument): Update call accordingly.
* config/nds32/nds32.c (nds32_must_pass_in_stack): Take a
function_arg_info instead of a mode and a type.
* config/rs6000/rs6000-internal.h (rs6000_must_pass_in_stack):
Likewise.
* config/rs6000/rs6000-call.c (rs6000_must_pass_in_stack): Likewise.
(rs6000_parm_needs_stack): Update call accordingly.
(setup_incoming_varargs): Likewise.

From-SVN: r274703

5 years agoUse function_arg_info for TARGET_CALLEE_COPIES
Richard Sandiford [Tue, 20 Aug 2019 08:53:23 +0000 (08:53 +0000)]
Use function_arg_info for TARGET_CALLEE_COPIES

The hook is passed the unpromoted type mode instead of the promoted mode.

The aarch64 definition is redundant, but worth keeping for emphasis.

2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* target.def (callee_copies): Take a function_arg_info instead
of a mode, type and named flag.
* doc/tm.texi: Regenerate.
* targhooks.h (hook_callee_copies_named): Take a function_arg_info
instead of a mode, type and named flag.
(hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false): Delete.
(hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true): Likewise.
(hook_bool_CUMULATIVE_ARGS_arg_info_true): New function.
* targhooks.c (hook_callee_copies_named): Take a function_arg_info
instead of a mode, type and named flag.
(hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false): Delete.
(hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true): Likewise.
(hook_bool_CUMULATIVE_ARGS_arg_info_true): New function.
* calls.h (reference_callee_copied): Take a function_arg_info
instead of a mode, type and named flag.
* calls.c (reference_callee_copied): Likewise.
(initialize_argument_information): Update call accordingly.
(emit_library_call_value_1): Likewise.
* function.c (gimplify_parameters): Likewise.
* config/aarch64/aarch64.c (TARGET_CALLEE_COPIES): Define to
hook_bool_CUMULATIVE_ARGS_arg_info_false instead of
hook_bool_CUMULATIVE_ARGS_mode_tree_bool_false.
* config/c6x/c6x.c (c6x_callee_copies): Delete.
(TARGET_CALLEE_COPIES): Define to
hook_bool_CUMULATIVE_ARGS_arg_info_true instead.
* config/epiphany/epiphany.c (TARGET_CALLEE_COPIES): Define to
hook_bool_CUMULATIVE_ARGS_arg_info_true instead of
hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true.
* config/mips/mips.c (mips_callee_copies): Take a function_arg_info
instead of a mode, type and named flag.
* config/mmix/mmix.c (TARGET_CALLEE_COPIES): Define to
hook_bool_CUMULATIVE_ARGS_arg_info_true instead of
hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true.
* config/mn10300/mn10300.c (TARGET_CALLEE_COPIES): Likewise.
* config/msp430/msp430.c (msp430_callee_copies): Delete.
(TARGET_CALLEE_COPIES): Define to
hook_bool_CUMULATIVE_ARGS_arg_info_true instead.
* config/pa/pa.c (pa_callee_copies): Take a function_arg_info
instead of a mode, type and named flag.
* config/sh/sh.c (sh_callee_copies): Likewise.
* config/v850/v850.c (TARGET_CALLEE_COPIES): Define to
hook_bool_CUMULATIVE_ARGS_arg_info_true instead of
hook_bool_CUMULATIVE_ARGS_mode_tree_bool_true.

From-SVN: r274702

5 years agoUse function_arg_info for TARGET_FUNCTION_ARG_ADVANCE
Richard Sandiford [Tue, 20 Aug 2019 08:53:14 +0000 (08:53 +0000)]
Use function_arg_info for TARGET_FUNCTION_ARG_ADVANCE

There seems to be a bit of confusion around this one.  Almost all
callers pass the same arguments as TARGET_FUNCTION_ARG, meaning
that the mode is the promoted mode rather than the type mode.
But the calls.c handling for normal typed arguments instead passes
the unpromoted TYPE_MODE (despite passing the promoted mode to
TARGET_FUNCTION_ARG).  I've kept this behaviour with a ??? comment.

(The calls.c handling of libgcc functions does pass the promoted
mode though, as does the function.c handling of incoming arguments.)

Also, a couple of the arm callers don't seem to be using the hook
correctly.  Again I kept the current choices and added a ??? comment.

2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* target.def (function_arg_advance): Take a function_arg_info instead
of a mode, type and named flag.
* doc/tm.texi: Regenerate.
* targhooks.h (default_function_arg_advance): Take a function_arg_info
instead of a mode, type and named flag.
* targhooks.c (default_function_arg_advance): Likewise.
* calls.c (initialize_argument_information): Update call to
targetm.calls.function_arg_advance.
(emit_library_call_value_1): Likewise.
* dse.c (get_call_args): Likewise.
* expr.c (block_move_libcall_safe_for_call_parm): Likewise.
* function.c (assign_parms, gimplify_parameters): Likewise.
* var-tracking.c (prepare_call_arguments): Likewise.
* config/aarch64/aarch64.c (aarch64_function_arg_advance): Take a
function_arg_info instead of a mode, type and named flag.
(aarch64_setup_incoming_varargs): Update call accordingly.
* config/alpha/alpha.c (alpha_function_arg_advance): Take a
function_arg_info instead of a mode, type and named flag.
(alpha_setup_incoming_varargs): Update call accordingly.
* config/arc/arc.c (arc_function_arg_advance): Take a
function_arg_info instead of a mode, type and named flag.
(arc_setup_incoming_varargs): Update call accordingly.
* config/arm/arm.c (arm_function_arg_advance): Take a
function_arg_info instead of a mode, type and named flag.
(cmse_func_args_or_return_in_stack): Update call accordingly.
(arm_function_ok_for_sibcall): Likewise.
(cmse_nonsecure_call_clear_caller_saved): Likewise.
* config/avr/avr.c (avr_function_arg_advance): Take a
function_arg_info instead of a mode, type and named flag.
* config/bfin/bfin.c (bfin_function_arg_advance): Likewise.
* config/c6x/c6x.c (c6x_function_arg_advance): Likewise.
(c6x_call_saved_register_used): Update call accordingly.
* config/cr16/cr16.c (cr16_function_arg_advance): Take a
function_arg_info instead of a mode, type and named flag.
* config/cris/cris.c (cris_function_arg_advance): Likewise.
* config/csky/csky.c (csky_function_arg_advance): Likewise.
(csky_setup_incoming_varargs): Update call accordingly.
* config/epiphany/epiphany.c (epiphany_function_arg_advance): Take a
function_arg_info instead of a mode, type and named flag.
* config/fr30/fr30.c (fr30_function_arg_advance): Likewise.
* config/frv/frv.c (frv_function_arg_advance): Likewise.
* config/ft32/ft32.c (ft32_function_arg_advance): Likewise.
* config/gcn/gcn.c (gcn_function_arg_advance): Likewise.
* config/h8300/h8300.c (h8300_function_arg_advance): Likewise.
* config/i386/i386.c (ix86_function_arg_advance): Likewise.
(ix86_setup_incoming_varargs): Update call accordingly.
* config/ia64/ia64.c (ia64_function_arg_advance): Take a
function_arg_info instead of a mode, type and named flag.
(ia64_setup_incoming_varargs): Update call accordingly.
* config/iq2000/iq2000.c (iq2000_function_arg_advance): Take a
function_arg_info instead of a mode, type and named flag.
(iq2000_expand_prologue): Update call accordingly.
* config/lm32/lm32.c (lm32_function_arg_advance): Take a
function_arg_info instead of a mode, type and named flag.
* config/m32c/m32c.c (m32c_function_arg_advance): Likewise.
* config/m32r/m32r.c (m32r_function_arg_advance): Likewise.
* config/m68k/m68k.c (m68k_function_arg_advance): Likewise.
* config/mcore/mcore.c (mcore_function_arg_advance): Likewise.
* config/microblaze/microblaze.c (microblaze_function_arg_advance):
Likewise.
(microblaze_expand_prologue): Update call accordingly.
* config/mips/mips.c (mips_function_arg_advance): Take a
function_arg_info instead of a mode, type and named flag.
(mips_setup_incoming_varargs): Update call accordingly.
(mips_output_args_xfer): Likewise.
* config/mmix/mmix.c (mmix_function_arg_advance): Take a
function_arg_info instead of a mode, type and named flag.
* config/mn10300/mn10300.c (mn10300_function_arg_advance): Likewise.
* config/moxie/moxie.c (moxie_function_arg_advance): Likewise.
* config/msp430/msp430.c (msp430_function_arg_advance): Likewise.
* config/nds32/nds32.c (nds32_function_arg_advance): Likewise.
* config/nios2/nios2.c (nios2_function_arg_advance): Likewise.
(nios2_setup_incoming_varargs): Update call accordingly.
* config/nvptx/nvptx.c (nvptx_function_arg_advance): Take a
function_arg_info instead of a mode, type and named flag.
* config/or1k/or1k.c (or1k_function_arg_advance): Likewise.
* config/pa/pa.c (pa_function_arg_advance): Likewise.
* config/pdp11/pdp11.c (pdp11_function_arg_advance): Likewise.
* config/pru/pru.c (pru_function_arg_advance): Likewise.
* config/riscv/riscv.c (riscv_function_arg_advance): Likewise.
(riscv_setup_incoming_varargs): Update call accordingly.
* config/rl78/rl78.c (rl78_function_arg_advance): Take a
function_arg_info instead of a mode, type and named flag.
* config/rs6000/rs6000-internal.h (rs6000_function_arg_advance):
Likewise.
* config/rs6000/rs6000-call.c (rs6000_function_arg_advance): Likewise.
(rs6000_parm_needs_stack): Update call accordingly.
* config/rx/rx.c (rx_function_arg_advance): Take a function_arg_info
instead of a mode, type and named flag.
* config/s390/s390.c (s390_function_arg_advance): Likewise.
(s390_call_saved_register_used): Update call accordingly.
* config/sh/sh.c (sh_function_arg_advance): Take a function_arg_info
instead of a mode, type and named flag.
(sh_output_mi_thunk): Update call accordingly.
* config/sparc/sparc.c (sparc_function_arg_advance): Take a
function_arg_info instead of a mode, type and named flag.
* config/spu/spu.c (spu_function_arg_advance): Likewise.
(spu_setup_incoming_varargs): Update call accordingly.
* config/stormy16/stormy16.c (xstormy16_function_arg_advance): Take a
function_arg_info instead of a mode, type and named flag.
* config/tilegx/tilegx.c (tilegx_function_arg_advance): Likewise.
(tilegx_setup_incoming_varargs): Update call accordingly.
* config/tilepro/tilepro.c (tilepro_function_arg_advance): Take a
function_arg_info instead of a mode, type and named flag.
(tilegx_setup_incoming_varargs): Update call accordingly.
* config/v850/v850.c (v850_function_arg_advance): Take a
function_arg_info instead of a mode, type and named flag.
* config/vax/vax.c (vax_function_arg_advance): Likewise.
* config/visium/visium.c (visium_function_arg_advance): Likewise.
(visium_setup_incoming_varargs): Update call accordingly.
* config/xtensa/xtensa.c (xtensa_function_arg_advance): Take a
function_arg_info instead of a mode, type and named flag.

From-SVN: r274701

5 years agoUse function_arg_info for TARGET_FUNCTION_(INCOMING_)ARG
Richard Sandiford [Tue, 20 Aug 2019 08:53:04 +0000 (08:53 +0000)]
Use function_arg_info for TARGET_FUNCTION_(INCOMING_)ARG

This patch makes both TARGET_FUNCTION_ARG and
TARGET_FUNCTION_INCOMING_ARG take a function_arg_info.
They have to be done together since many targets use the
same function for both.

The hooks are passed the promoted mode instead of the original type mode.

2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* target.def (function_arg, function_incoming_arg): Take a
function_arg_info instead of a mode, tree and named flag.
* doc/tm.texi: Regenerate.
* targhooks.h (default_function_arg): Take a function_arg_info
instead of a mode, tree and named flag.
(default_function_incoming_arg): Likewise.
* targhooks.c (default_function_arg): Likewise.
(default_function_incoming_arg): Likewise.
* calls.h (function_arg_info::end_marker_p): New function.
(function_arg_info::end_marker): Likewise.
* calls.c (prepare_call_address, initialize_argument_information)
(expand_call, emit_library_call_value_1): Update calls to
targetm.calls.function_arg and targetm.calls.function_incoming_arg.
* dse.c: Include calls.h.
(get_call_args): Update call to targetm.calls.function_arg.
* expr.c (block_move_libcall_safe_for_call_parm): Likewise.
* var-tracking.c (prepare_call_arguments): Likewise.
* function.c (assign_parm_find_entry_rtl): Update call to
targetm.calls.function_incoming_arg.
* config/aarch64/aarch64.c (aarch64_function_arg): Take a
function_arg_info instead of a mode, tree and named flag.
* config/alpha/alpha.c (alpha_function_arg): Likewise.
* config/arc/arc.c (arc_function_arg): Likewise.
* config/arm/arm.c (arm_function_arg): Likewise.
(cmse_func_args_or_return_in_stack): Update call accordingly.
(arm_function_ok_for_sibcall): Likewise.
(cmse_nonsecure_call_clear_caller_saved): Likewise.
* config/avr/avr.c (avr_function_arg): Take a function_arg_info
instead of a mode, tree and named flag.
* config/bfin/bfin.c (bfin_function_arg): Likewise.
* config/c6x/c6x.c (c6x_function_arg): Likewise.
(c6x_call_saved_register_used): Update call accordingly.
* config/cr16/cr16.c (cr16_function_arg): Take a function_arg_info
instead of a mode, tree and named flag.
* config/cris/cris.c (cris_function_arg, cris_function_incoming_arg)
(cris_function_arg_1): Likewise.
* config/csky/csky.c (csky_function_arg): Likewise.
* config/epiphany/epiphany.c (epiphany_function_arg): Likewise.
* config/fr30/fr30.c (fr30_function_arg): Likewise.
* config/frv/frv.c (frv_function_arg, frv_function_incoming_arg)
(frv_function_arg_1): Likewise.
* config/ft32/ft32.c (ft32_function_arg): Likewise.
* config/gcn/gcn.c (gcn_function_arg): Likewise.
* config/h8300/h8300.c (h8300_function_arg): Likewise.
* config/i386/i386.c (ix86_function_arg): Likewise.
* config/ia64/ia64.c (ia64_function_arg, ia64_function_incoming_arg)
(ia64_function_arg_1): Likewise.
* config/iq2000/iq2000.c (iq2000_function_arg): Likewise.
(iq2000_expand_prologue, iq2000_pass_by_reference): Update call
accordingly.
* config/lm32/lm32.c (lm32_function_arg): Take a function_arg_info
instead of a mode, tree and named flag.
* config/m32c/m32c.c (m32c_function_arg): Likewise.
* config/m32r/m32r.c (m32r_function_arg): Likewise.
* config/m68k/m68k.c (m68k_function_arg): Likewise.
* config/mcore/mcore.c (mcore_function_arg): Likewise.
* config/microblaze/microblaze.c (microblaze_function_arg): Likewise.
(microblaze_expand_prologue): Update call accordingly.
* config/mips/mips.c (mips_function_arg): Take a function_arg_info
instead of a mode, tree and named flag.
* config/mmix/mmix.c (mmix_function_incoming_arg, mmix_function_arg)
(mmix_function_arg_1): Likewise.
* config/mn10300/mn10300.c (mn10300_function_arg): Likewise.
* config/moxie/moxie.c (moxie_function_arg): Likewise.
* config/msp430/msp430.c (msp430_function_arg): Likewise.
* config/nds32/nds32.c (nds32_function_arg): Likewise.
* config/nios2/nios2.c (nios2_function_arg): Likewise.
* config/nvptx/nvptx.c (nvptx_function_arg): Likewise.
(nvptx_function_incoming_arg): Likewise.
* config/or1k/or1k.c (or1k_function_arg): Likewise.
* config/pa/pa.c (pa_function_arg): Likewise.
* config/pdp11/pdp11.c (pdp11_function_arg): Likewise.
* config/pru/pru.c (pru_function_arg): Likewise.
* config/riscv/riscv.c (riscv_function_arg): Likewise.
* config/rl78/rl78.c (rl78_function_arg): Likewise.
* config/rs6000/rs6000-internal.h (rs6000_function_arg): Likewise.
* config/rs6000/rs6000-call.c (rs6000_function_arg): Likewise.
(rs6000_parm_needs_stack): Update call accordingly.
* config/rx/rx.c (rx_function_arg): Take a function_arg_info
instead of a mode, tree and named flag.
* config/s390/s390.c (s390_function_arg): Likewise.
(s390_call_saved_register_used): Update call accordingly.
* config/sh/sh.c (sh_function_arg): Take a function_arg_info
instead of a mode, tree and named flag.
(sh_output_mi_thunk): Update call accordingly.
* config/sparc/sparc.c (sparc_function_arg_1, sparc_function_arg)
(sparc_function_incoming_arg): Take a function_arg_info instead of
a mode, tree and named flag.
* config/spu/spu.c (spu_function_arg): Likewise.
* config/stormy16/stormy16.c (xstormy16_function_arg): Likewise.
* config/tilegx/tilegx.c (tilegx_function_arg): Likewise.
* config/tilepro/tilepro.c (tilepro_function_arg): Likewise.
* config/v850/v850.c (v850_function_arg): Likewise.
* config/vax/vax.c (vax_function_arg): Likewise.
* config/visium/visium.c (visium_function_arg): Likewise.
* config/xtensa/xtensa.c (xtensa_function_arg_1, xtensa_function_arg)
(xtensa_function_incoming_arg): Likewise.

From-SVN: r274700

5 years agoUse function_arg_info for TARGET_SETUP_INCOMING_ARGS
Richard Sandiford [Tue, 20 Aug 2019 08:52:48 +0000 (08:52 +0000)]
Use function_arg_info for TARGET_SETUP_INCOMING_ARGS

The hook is passed the promoted mode instead of the original type mode.

2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* target.def (setup_incoming_varargs): Take a function_arg_info
instead of a mode and tree.
* doc/tm.texi: Regenerate.
* targhooks.h (default_setup_incoming_varargs): Take a
function_arg_info instead of a mode and tree.
* targhooks.c (default_setup_incoming_varargs): Likewise.
* config/aarch64/aarch64.c (aarch64_setup_incoming_varargs): Likewise.
* config/alpha/alpha.c (alpha_setup_incoming_varargs): Likewise.
* config/arc/arc.c (arc_setup_incoming_varargs): Likewise.
* config/arm/arm.c (arm_setup_incoming_varargs): Likewise.
* config/bfin/bfin.c (setup_incoming_varargs): Likewise.
* config/cris/cris.c (cris_setup_incoming_varargs): Likewise.
* config/csky/csky.c (csky_setup_incoming_varargs): Likewise.
* config/epiphany/epiphany.c (epiphany_setup_incoming_varargs):
Likewise.
* config/fr30/fr30.c (fr30_setup_incoming_varargs): Likewise.
* config/frv/frv.c (frv_setup_incoming_varargs): Likewise.
* config/ft32/ft32.c (ft32_setup_incoming_varargs): Likewise.
* config/i386/i386.c (ix86_setup_incoming_varargs): Likewise.
* config/ia64/ia64.c (ia64_setup_incoming_varargs): Likewise.
* config/iq2000/iq2000.c (iq2000_setup_incoming_varargs): Likewise.
* config/lm32/lm32.c (lm32_setup_incoming_varargs): Likewise.
* config/m32r/m32r.c (m32r_setup_incoming_varargs): Likewise.
* config/mcore/mcore.c (mcore_setup_incoming_varargs): Likewise.
* config/mips/mips.c (mips_setup_incoming_varargs): Likewise.
* config/mmix/mmix.c (mmix_setup_incoming_varargs): Likewise.
* config/moxie/moxie.c (moxie_setup_incoming_varargs): Likewise.
* config/nds32/nds32.c (nds32_setup_incoming_varargs): Likewise.
* config/nios2/nios2.c (nios2_setup_incoming_varargs): Likewise.
* config/riscv/riscv.c (riscv_setup_incoming_varargs): Likewise.
* config/rs6000/rs6000-internal.h (setup_incoming_varargs): Likewise.
* config/rs6000/rs6000-call.c (setup_incoming_varargs): Likewise.
* config/sh/sh.c (sh_setup_incoming_varargs): Likewise.
* config/spu/spu.c (spu_setup_incoming_varargs): Likewise.
* config/tilegx/tilegx.c (tilegx_setup_incoming_varargs): Likewise.
* config/tilepro/tilepro.c (tilepro_setup_incoming_varargs): Likewise.
* config/visium/visium.c (visium_setup_incoming_varargs): Likewise.
* function.c (assign_parms_setup_varargs): Update call to
targetm.calls.setup_incoming_varargs.

From-SVN: r274699

5 years agoUse function_arg_info for TARGET_PASS_BY_REFERENCE
Richard Sandiford [Tue, 20 Aug 2019 08:52:40 +0000 (08:52 +0000)]
Use function_arg_info for TARGET_PASS_BY_REFERENCE

The hook is passed the unpromoted type mode instead of the promoted mode.

2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* target.def (pass_by_reference): Take a function_arg_info instead
of a mode, type and named flag.
* doc/tm.texi: Regenerate.
* targhooks.h (hook_pass_by_reference_must_pass_in_stack): Update
accordingly.
(hook_bool_CUMULATIVE_ARGS_arg_info_false): Declare.
* targhooks.c (hook_pass_by_reference_must_pass_in_stack): Take a
function_arg_info instead of a mode, type and named flag.
(hook_bool_CUMULATIVE_ARGS_arg_info_false): New function.
* calls.h (pass_by_reference): Take a function_arg_info instead of a
mode, type and named flag.
* calls.c (pass_by_reference): Likewise.
(pass_va_arg_by_reference): Update call accordingly.
(initialize_argument_information): Likewise.
(emit_library_call_value_1): Likewise.
* function.c (assign_parm_find_data_types): Likewise.
* var-tracking.c (prepare_call_arguments): Likewise.
* stor-layout.c: Include calls.h.
(compute_record_mode): Update call to targetm.calls.pass_by_reference.
* config/aarch64/aarch64.c (aarch64_pass_by_reference): Take a
function_arg_info instead of a mode, type and named flag.
* config/alpha/alpha.c (alpha_pass_by_reference): Likewise.
* config/arc/arc.c (arc_pass_by_reference): Likewise.
* config/arm/arm.c (arm_pass_by_reference): Likewise.
* config/bfin/bfin.c (bfin_pass_by_reference): Likewise.
* config/c6x/c6x.c (c6x_pass_by_reference): Likewise.
(c6x_call_saved_register_used): Update call to pass_by_reference.
* config/cris/cris.c (cris_pass_by_reference): Take a
function_arg_info instead of a mode, type and named flag.
* config/epiphany/epiphany.c (epiphany_pass_by_reference): Take a
function_arg_info instead of a mode, type and named flag.
(epiphany_arg_partial_bytes): Update call accordingly.
* config/ft32/ft32.c (ft32_pass_by_reference): Take a
function_arg_info instead of a mode, type and named flag.
(ft32_arg_partial_bytes): Update call accordingly.
* config/i386/i386.c (ix86_pass_by_reference): Take a
function_arg_info instead of a mode, type and named flag.
* config/iq2000/iq2000.c (iq2000_pass_by_reference): Likewise.
* config/m32c/m32c.c (m32c_pass_by_reference): Likewise.
* config/m32r/m32r.c (m32r_pass_by_reference): Likewise.
(m32r_return_in_memory): Update call accordingly.
* config/mips/mips.c (mips_pass_by_reference): Take a
function_arg_info instead of a mode, type and named flag.
* config/mmix/mmix.c (mmix_pass_by_reference): Likewise.
* config/mn10300/mn10300.c (mn10300_pass_by_reference): Likewise.
* config/moxie/moxie.c (moxie_pass_by_reference): Likewise.
(moxie_arg_partial_bytes): Update call accordingly.
* config/msp430/msp430.c (msp430_pass_by_reference): Take a
function_arg_info instead of a mode, type and named flag.
* config/nvptx/nvptx.c (nvptx_pass_by_reference): Likewise.
* config/or1k/or1k.c (or1k_pass_by_reference): Likewise.
* config/pa/pa.c (pa_pass_by_reference): Likewise.
* config/riscv/riscv.c (riscv_pass_by_reference): Likewise.
(riscv_return_in_memory): Update call accordingly.
* config/rs6000/rs6000-internal.h (rs6000_pass_by_reference): Take a
function_arg_info instead of a mode, type and named flag.
* config/rs6000/rs6000-call.c (rs6000_pass_by_reference): Likewise.
(rs6000_parm_needs_stack): Update call to pass_by_reference.
* config/s390/s390.c (s390_pass_by_reference): Take a
function_arg_info instead of a mode, type and named flag.
(s390_call_saved_register_used): Update call accordingly.
* config/sh/sh.c (sh_pass_by_reference): Take a function_arg_info
instead of a mode, type and named flag.
* config/sparc/sparc.c (sparc_pass_by_reference): Likewise.
* config/spu/spu.c (spu_pass_by_reference): Likewise.
* config/tilegx/tilegx.c (tilegx_pass_by_reference): Likewise.
* config/tilepro/tilepro.c (tilepro_pass_by_reference): Likewise.
* config/v850/v850.c (v850_pass_by_reference): Likewise.
* config/visium/visium.c (visium_pass_by_reference): Likewise.

gcc/ada/
* gcc-interface/misc.c (default_pass_by_ref): Update call to
pass_by_reference.

From-SVN: r274698

5 years agoUse function_arg_info for TARGET_ARG_PARTIAL_BYTES
Richard Sandiford [Tue, 20 Aug 2019 08:52:17 +0000 (08:52 +0000)]
Use function_arg_info for TARGET_ARG_PARTIAL_BYTES

This patch adds the function_arg_info class and uses it for
TARGET_ARG_PARTIAL_BYTES.

The hook is passed the promoted mode instead of the original type mode.

The arguments aren't mentioned in the documentation, which is why the
target.def change is so small.

The patch changes "true" to "arg.named" in:

  gcc_assert (!epiphany_pass_by_reference (cum, mode, type, /* named */ true));

but epiphany_pass_by_reference doesn't care about the named flag.

2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* target.def (arg_partial_bytes): Take a function_arg_info instead
of a mode, type and named flag.
* doc/tm.texi: Regenerate.
* target.h (function_arg_info): Declare.
* calls.h (function_arg_info): New class.
* targhooks.h (hook_int_CUMULATIVE_ARGS_mode_tree_bool_0): Delete.
(hook_int_CUMULATIVE_ARGS_arg_info_0): Declare.
* targhooks.c (hook_int_CUMULATIVE_ARGS_mode_tree_bool_0): Delete.
(hook_int_CUMULATIVE_ARGS_arg_info_0): New function.
* calls.c (initialize_argument_information): Update call to
targetm.calls.partial_bytes.
(emit_library_call_value_1): Likewise.
* expr.c (block_move_libcall_safe_for_call_parm): Likewise.
* function.c (assign_parm_find_entry_rtl): Likewise.
* config/alpha/alpha.c (alpha_arg_partial_bytes): Take a
function_arg_info instead of a mode, type and named flag.
* config/arc/arc.c (arc_arg_partial_bytes): Likewise.
* config/arm/arm.c (arm_arg_partial_bytes): Likewise.
(cmse_func_args_or_return_in_stack): Update accordingly.
* config/bfin/bfin.c (bfin_arg_partial_bytes): Take a
function_arg_info instead of a mode, type and named flag.
* config/cris/cris.c (cris_arg_partial_bytes): Likewise.
* config/csky/csky.c (csky_arg_partial_bytes): Likewise.
* config/epiphany/epiphany.c (epiphany_arg_partial_bytes): Likewise.
* config/fr30/fr30.c: Include calls.h.
(fr30_arg_partial_bytes): Take a function_arg_info instead of a mode,
type and named flag.
* config/frv/frv.c: Include calls.h.
(frv_arg_partial_bytes): Take a function_arg_info instead of a mode,
type and named flag.
* config/ft32/ft32.c (ft32_arg_partial_bytes): Likewise.
* config/gcn/gcn.c (gcn_arg_partial_bytes): Likewise.
* config/ia64/ia64.c (ia64_arg_partial_bytes): Likewise.
* config/iq2000/iq2000.c (iq2000_arg_partial_bytes): Likewise.
* config/m32r/m32r.c (m32r_arg_partial_bytes): Likewise.
* config/mcore/mcore.c (mcore_arg_partial_bytes): Likewise.
* config/microblaze/microblaze.c (function_arg_partial_bytes):
Likewise.
* config/mips/mips.c (mips_arg_partial_bytes): Likewise.
* config/mn10300/mn10300.c (mn10300_arg_partial_bytes): Likewise.
* config/moxie/moxie.c (moxie_arg_partial_bytes): Likewise.
* config/msp430/msp430.c (msp430_arg_partial_bytes): Likewise.
* config/nds32/nds32.c (nds32_arg_partial_bytes): Likewise.
* config/nios2/nios2.c (nios2_arg_partial_bytes): Likewise.
* config/pa/pa.c (pa_arg_partial_bytes): Likewise.
* config/pru/pru.c (pru_arg_partial_bytes): Likewise.
* config/riscv/riscv.c (riscv_arg_partial_bytes): Likewise.
* config/rs6000/rs6000-internal.h (rs6000_arg_partial_bytes): Likewise.
* config/rs6000/rs6000-call.c (rs6000_arg_partial_bytes): Likewise.
(rs6000_parm_needs_stack): Update call accordingly.
* config/sh/sh.c (sh_arg_partial_bytes): Take a
function_arg_info instead of a mode, type and named flag.
* config/sparc/sparc.c (sparc_arg_partial_bytes): Likewise.
* config/v850/v850.c (v850_arg_partial_bytes): Likewise.

From-SVN: r274697

5 years agoAdd must_pass_va_arg_in_stack
Richard Sandiford [Tue, 20 Aug 2019 08:51:09 +0000 (08:51 +0000)]
Add must_pass_va_arg_in_stack

This patch splits out another idiom from the va_arg gimplification
routines, so that there's only one place to update later.

2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* calls.h (must_pass_va_arg_in_stack): Declare.
* calls.c (must_pass_va_arg_in_stack): New function.
* config/alpha/alpha.c (alpha_gimplify_va_arg_1): Use it.
* config/sh/sh.c (sh_gimplify_va_arg_expr): Likewise.
* config/stormy16/stormy16.c (xstormy16_gimplify_va_arg_expr):
Likewise.
* config/xtensa/xtensa.c (xtensa_gimplify_va_arg_expr): Likewise.

From-SVN: r274696

5 years agoAdd pass_va_arg_by_reference
Richard Sandiford [Tue, 20 Aug 2019 08:50:59 +0000 (08:50 +0000)]
Add pass_va_arg_by_reference

This patch splits out a common idiom from the va_arg gimplification
routines, so that there's only one place to update later.

2019-08-20  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* calls.h (pass_va_arg_by_reference): Declare.
* calls.c (pass_va_arg_by_reference): New function.
* config/aarch64/aarch64.c (aarch64_gimplify_va_arg_expr): Use it.
* config/alpha/alpha.c (alpha_gimplify_va_arg): Likewise.
* config/gcn/gcn.c (gcn_gimplify_va_arg_expr): Likewise.
* config/i386/i386.c (ix86_gimplify_va_arg): Likewise.
* config/ia64/ia64.c (ia64_gimplify_va_arg): Likewise.
* config/mips/mips.c (mips_std_gimplify_va_arg_expr): Likewise.
(mips_gimplify_va_arg_expr): Likewise.
* config/msp430/msp430.c (msp430_gimplify_va_arg_expr): Likewise.
* config/pa/pa.c (hppa_gimplify_va_arg_expr): Likewise.
* config/rs6000/rs6000-call.c (rs6000_gimplify_va_arg): Likewise.
* config/s390/s390.c (s390_gimplify_va_arg): Likewise.
* config/sparc/sparc.c (sparc_gimplify_va_arg): Likewise.
* config/spu/spu.c (spu_gimplify_va_arg_expr): Likewise.
* config/tilegx/tilegx.c (tilegx_gimplify_va_arg_expr): Likewise.
* config/tilepro/tilepro.c (tilepro_gimplify_va_arg_expr): Likewise.
* config/visium/visium.c (visium_gimplify_va_arg): Likewise.
* config/xtensa/xtensa.c (xtensa_gimplify_va_arg_expr): Likewise.
* targhooks.c (std_gimplify_va_arg_expr): Likewise.

From-SVN: r274695

5 years agore PR target/91498 (STV change in r274481 causes 300.twolf regression on Haswell)
Richard Biener [Tue, 20 Aug 2019 08:45:56 +0000 (08:45 +0000)]
re PR target/91498 (STV change in r274481 causes 300.twolf regression on Haswell)

2019-08-20  Richard Biener  <rguenther@suse.de>

PR target/91498
* config/i386/i386-features.c (general_scalar_chain::convert_op):
Use (vec_merge (vec_duplicate..)) style vector from scalar move.
(convert_scalars_to_vector): Add timode_p parameter and use it
to guard TImode-only operation.
(pass_stv::gate): Adjust so STV runs twice for TARGET_64BIT.
(pass_stv::execute): Pass down timode_p.

* gcc.target/i386/minmax-7.c: New testcase.

From-SVN: r274694

5 years agoAdd TIGERLAKE and COOPERLAKE to GCC.
Hongtao Liu [Tue, 20 Aug 2019 07:06:03 +0000 (07:06 +0000)]
Add TIGERLAKE and COOPERLAKE to GCC.

2019-08-20  Lili Cui  <lili.cui@intel.com>

gcc/
* common/config/i386/i386-common.c
(processor_names): Add tigerlake and cooperlake.
(processor_alias_table): Add tigerlake and cooperlake.
* config.gcc: Add -march=tigerlake and cooperlake.
* config/i386/driver-i386.c
(host_detect_local_cpu): Detect tigerlake and cooperlake.
Add "has_avx" to classify processor.
* config/i386/i386-builtins.c (processor_model):
Add M_INTEL_COREI7_TIGERLAKE and M_INTEL_COREI7_COOPERLAKE.
(arch_names_table): Add tigerlake and cooperlake.
(get_builtin_code_for_version) : Handle PROCESSOR_TIGERLAKE and
PROCESSOR_COOPERLAKE.
* config/i386/i386-c.c
(ix86_target_macros_internal): Handle tigerlake and cooperlake.
* config/i386/i386-options.c
(m_TIGERLAKE)  : Define.
(m_COOPERLAKE) : Ditto.
(m_CORE_AVX512): Ditto.
(processor_cost_table): Add cascadelake.
(ix86_option_override_internal): Hadle PTA_MOVDIRI, PTA_MOVDIR64B.
* config/i386/i386.h
(ix86_size_cost) : Define TARGET_TIGERLAKE and TARGET_COOPERLAKE.
(processor_type) : Add PROCESSOR_TIGERLAKE and PROCESSOR_COOPERLAKE.
(PTA_MOVDIRI): Ditto.
(PTA_MOVDIR64B): Ditto.
(PTA_COOPERLAKE) : Ditto.
(PTA_TIGERLAKE)  : Ditto.
(processor_type) : Add PROCESSOR_TIGERLAKE and PROCESSOR_COOPERLAKE.
* doc/extend.texi: Add tigerlake and cooperlake.
* doc/invoke.texi: Add tigerlake and cooperlake.

gcc/testsuite/
* gcc.target/i386/funcspec-56.inc: Handle new march.
* g++.target/i386/mv16.C: Handle new march

libgcc/
* config/i386/cpuinfo.h: Add INTEL_COREI7_TIGERLAKE and
INTEL_COREI7_COOPERLAKE.

From-SVN: r274693

5 years agoinstall.texi (Specific, alpha): Remove note to use binutils 2.11.2 or later.
Gerald Pfeifer [Tue, 20 Aug 2019 05:38:06 +0000 (05:38 +0000)]
install.texi (Specific, alpha): Remove note to use binutils 2.11.2 or later.

* doc/install.texi (Specific, alpha): Remove note to use
binutils 2.11.2 or later.

From-SVN: r274692

5 years agore PR middle-end/89544 (Argument marshalling incorrectly assumes stack slots are...
Bernd Edlinger [Tue, 20 Aug 2019 05:32:49 +0000 (05:32 +0000)]
re PR middle-end/89544 (Argument marshalling incorrectly assumes stack slots are naturally aligned.)

2019-08-20  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        PR middle-end/89544
        * function.c (assign_parm_find_stack_rtl): Use larger alignment
        when possible.

testsuite:
2019-08-20  Bernd Edlinger  <bernd.edlinger@hotmail.de>

        PR middle-end/89544
        * gcc.target/arm/unaligned-argument-1.c: New test.
        * gcc.target/arm/unaligned-argument-2.c: New test.

From-SVN: r274691

5 years agoDaily bump.
GCC Administrator [Tue, 20 Aug 2019 00:16:22 +0000 (00:16 +0000)]
Daily bump.

From-SVN: r274689

5 years agocompiler: new debugging output methods/functions
Ian Lance Taylor [Mon, 19 Aug 2019 21:15:49 +0000 (21:15 +0000)]
compiler: new debugging output methods/functions

    Add new hooks for dumping named objects, package bindings,
    and top level Gogo package list.

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

From-SVN: r274682

5 years agoruntime: be more strict in GC
Ian Lance Taylor [Mon, 19 Aug 2019 19:09:50 +0000 (19:09 +0000)]
runtime: be more strict in GC

    With CL 190599, along with what we do in greyobject, we ensure
    that we only mark allocated heap objects. As a result we can be
    more strict in GC:

    - Enable "sweep increased allocation count" check, which checks
      that the number of mark bits set are no more than the number of
      allocation bits.

    - Enable invalid pointer check on heap scan. We only trace
      allocated heap objects, which should not contain invalid
      pointer.

    This also makes the libgo runtime more convergent with the gc
    runtime.

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

From-SVN: r274678

5 years ago[AArch64] Use scvtf fbits option where appropriate
Joel Hutton [Mon, 19 Aug 2019 16:55:20 +0000 (16:55 +0000)]
[AArch64] Use scvtf fbits option where appropriate

gcc/ChangeLog:
2019-08-19  Joel Hutton  <Joel.Hutton@arm.com>

* config/aarch64/aarch64-protos.h (aarch64_fpconst_pow2_recip): New prototype
* config/aarch64/aarch64.c (aarch64_fpconst_pow2_recip): New function
* config/aarch64/aarch64.md (*aarch64_<su_optab>cvtf<fcvt_target><GPF:mode>2_mult): New pattern
(*aarch64_<su_optab>cvtf<fcvt_iesize><GPF:mode>2_mult): New pattern
* config/aarch64/constraints.md (Dt): New constraint
* config/aarch64/predicates.md (aarch64_fpconst_pow2_recip): New predicate

gcc/testsuite/ChangeLog:
2019-08-19  Joel Hutton  <Joel.Hutton@arm.com>

* gcc.target/aarch64/fmul_scvtf_1.c: New test.

From-SVN: r274676

5 years agoAdd --with-static-standard-libraries to the top level
Tom Tromey [Mon, 19 Aug 2019 15:47:30 +0000 (15:47 +0000)]
Add --with-static-standard-libraries to the top level

gdb should normally not be linked with -static-libstdc++.  Currently
this has not caused problems, but it's incompatible with catching an
exception thrown from a shared library -- and a subsequent patch
changes gdb to do just this.

This patch adds a new --with-static-standard-libraries flag to the
top-level configure.  It defaults to "auto", which means enabled if
gcc is being built, and disabled otherwise.

ChangeLog
2019-08-19  Tom Tromey  <tom@tromey.com>

* configure: Rebuild.
* configure.ac: Add --with-static-standard-libraries.

From-SVN: r274673

5 years agore PR tree-optimization/91403 (GCC fails with ICE.)
Richard Biener [Mon, 19 Aug 2019 14:45:38 +0000 (14:45 +0000)]
re PR tree-optimization/91403 (GCC fails with ICE.)

2019-08-19  Richard Biener  <rguenther@suse.de>

PR tree-optimization/91403
* tree-scalar-evolution.c (follow_ssa_edge_binary): Inline
cases we can handle with tail-recursion...
(follow_ssa_edge_expr): ... here.  Do so.

From-SVN: r274672

5 years agoPR c++/91264 - detect modifying const objects in constexpr.
Marek Polacek [Mon, 19 Aug 2019 13:59:13 +0000 (13:59 +0000)]
PR c++/91264 - detect modifying const objects in constexpr.

* constexpr.c (modifying_const_object_error): New function.
(cxx_eval_call_expression): Set TREE_READONLY on a CONSTRUCTOR of
a const-qualified object after it's been fully constructed.
(modifying_const_object_p): New function.
(cxx_eval_store_expression): Detect modifying a const object
during constant expression evaluation.
(cxx_eval_increment_expression): Use a better location when building
up the store.
(cxx_eval_constant_expression) <case DECL_EXPR>: Mark a constant
object's constructor TREE_READONLY.

* g++.dg/cpp1y/constexpr-tracking-const1.C: New test.
* g++.dg/cpp1y/constexpr-tracking-const2.C: New test.
* g++.dg/cpp1y/constexpr-tracking-const3.C: New test.
* g++.dg/cpp1y/constexpr-tracking-const4.C: New test.
* g++.dg/cpp1y/constexpr-tracking-const5.C: New test.
* g++.dg/cpp1y/constexpr-tracking-const6.C: New test.
* g++.dg/cpp1y/constexpr-tracking-const7.C: New test.
* g++.dg/cpp1y/constexpr-tracking-const8.C: New test.
* g++.dg/cpp1y/constexpr-tracking-const9.C: New test.
* g++.dg/cpp1y/constexpr-tracking-const10.C: New test.
* g++.dg/cpp1y/constexpr-tracking-const11.C: New test.
* g++.dg/cpp1y/constexpr-tracking-const12.C: New test.
* g++.dg/cpp1y/constexpr-tracking-const13.C: New test.
* g++.dg/cpp1y/constexpr-tracking-const14.C: New test.

From-SVN: r274671

5 years agoUpdate BOZ constant documentation.
Mark Eggleston [Mon, 19 Aug 2019 08:53:49 +0000 (08:53 +0000)]
Update BOZ constant documentation.

In the section "BOZ Literal constants" delete paragraph about integer
overload errors when initialising integer variables with BOZ constants
as these no longer occur.

From-SVN: r274667

5 years ago[Ada] Fix documentation for stream oriented attributes
Bob Duff [Mon, 19 Aug 2019 08:37:39 +0000 (08:37 +0000)]
[Ada] Fix documentation for stream oriented attributes

2019-08-19  Bob Duff  <duff@adacore.com>

gcc/ada/

* doc/gnat_rm/implementation_advice.rst: Fix documentation for
stream oriented attributes.
* gnat_rm.texi: Regenerate.

From-SVN: r274666

5 years ago[Ada] Einfo: update comments for E_Function and E_Procedure
Gary Dismukes [Mon, 19 Aug 2019 08:37:34 +0000 (08:37 +0000)]
[Ada] Einfo: update comments for E_Function and E_Procedure

2019-08-19  Gary Dismukes  <dismukes@adacore.com>

gcc/ada/

* einfo.ads (E_Function, E_Procedure): Update comments to
reflect that Renamed_Entity is also used for nongeneric
subprograms.

From-SVN: r274665

5 years ago[Ada] Fix bogus compilation error with Elaborate_Body and -gnatN
Eric Botcazou [Mon, 19 Aug 2019 08:37:28 +0000 (08:37 +0000)]
[Ada] Fix bogus compilation error with Elaborate_Body and -gnatN

This fixes a bogus compilation error when a unit with SPARK_Mode
containing a pragma Elaborate_Body is with-ed by a generic unit
containing an inlined subprogram, and front-end inlining is enabled.

2019-08-19  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* sem_prag.adb (Is_Before_First_Decl): Deal with rewritten
pragmas.

gcc/testsuite/

* gnat.dg/elab8.adb, gnat.dg/elab8_gen.adb,
gnat.dg/elab8_gen.ads, gnat.dg/elab8_pkg.adb,
gnat.dg/elab8_pkg.ads: New testcase.

From-SVN: r274664

5 years ago[Ada] Suppress warnings on unreferenced parameters of dispatching ops
Bob Duff [Mon, 19 Aug 2019 08:37:23 +0000 (08:37 +0000)]
[Ada] Suppress warnings on unreferenced parameters of dispatching ops

If the -gnatwf switch is used to activate warnings on unreferenced
formal parameters, the warning is no longer given if the subprogram is
dispatching, because such warnings tend to be noise. It is quite common
to have a parameter that is necessary just because the subprogram is
overriding, or just because we need a controlling parameter for the
dispatch.

2019-08-19  Bob Duff  <duff@adacore.com>

gcc/ada/

* sem_warn.adb (Warn_On_Unreferenced_Entity): Suppress warning
on formal parameters of dispatching operations.

gcc/testsuite/

* gnat.dg/warn29.adb, gnat.dg/warn29.ads: New testcase.

From-SVN: r274663

5 years ago[Ada] Crash on object initialization that is call to expression function
Ed Schonberg [Mon, 19 Aug 2019 08:37:18 +0000 (08:37 +0000)]
[Ada] Crash on object initialization that is call to expression function

This patch fixes a compiler abort on an object declaration for a
class-wide type whose expression is a call to an expression function
that returns type extension.

2019-08-19  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_res.adb (Resolve_Call): A call to an expression function
freezes when expander is active, unless the call appears within
the body of another expression function,

gcc/testsuite/

* gnat.dg/expr_func9.adb: New testcase.

From-SVN: r274662

5 years ago[Ada] Conversion routines between GNAT.OS_Lib.OS_Time and long integer
Dmitriy Anisimkov [Mon, 19 Aug 2019 08:37:13 +0000 (08:37 +0000)]
[Ada] Conversion routines between GNAT.OS_Lib.OS_Time and long integer

The new routines convert back and forth between private type OS_Time and
a long integer which can be used in package Ada.Calendar.Conversions
routines to convert to Ada.Calendar.Time.

2019-08-19  Dmitriy Anisimkov  <anisimko@adacore.com>

gcc/ada/

* libgnat/s-os_lib.ads, libgnat/s-os_lib.adb (To_Ada, To_C): New
routines.

From-SVN: r274661

5 years ago[Ada] Incorrect code for -gnateV switch
Bob Duff [Mon, 19 Aug 2019 08:37:09 +0000 (08:37 +0000)]
[Ada] Incorrect code for -gnateV switch

This patch corrects the code generated by the -gnateV switch in the case
of a private type whose full type is a modular type, removing spurious
run-time failures.

In addition, this corrects the initialization of exception occurrences
in exception handlers to avoid leaving data uninitialized, which caused
-gnateV to raise spurious errors.

2019-08-19  Bob Duff  <duff@adacore.com>

gcc/ada/

* exp_attr.adb (Attribute_Valid): Correct the handling of
private types where the full type is modular. System.Address is
an example. Otherwise, we convert uncheckedly to a signed type,
so we get an incorrect range 0 .. -1, for which all values will
fail.  The 'Valid attribute is illegal for such types, but we
generate such illegal attribute_references for 'Valid_Scalars,
and we generate 'Valid_Scalars when the -gnateV switch is used.
Rename Btyp --> PBtyp to avoid hiding the outer Btyp, which was
confusing.
* libgnat/a-except.adb: Set the Exception_Raised component.
Otherwise, we have incorrect reads of invalid data.

gcc/testsuite/

* gnat.dg/valid_scalars2.adb: New testcase.

From-SVN: r274660

5 years ago[Ada] Import documentation from the RM for various runtime units
Pierre-Marie de Rodat [Mon, 19 Aug 2019 08:37:03 +0000 (08:37 +0000)]
[Ada] Import documentation from the RM for various runtime units

2019-08-19  Pierre-Marie de Rodat  <derodat@adacore.com>

gcc/ada/

* libgnat/a-cgaaso.ads, libgnat/a-cgarso.ads,
libgnat/a-cogeso.ads, libgnat/a-contai.ads,
libgnat/a-locale.ads: Import documentation from the RM.

From-SVN: r274659

5 years ago[Ada] Generate ada_target_properties
Jerome Guitton [Mon, 19 Aug 2019 08:36:58 +0000 (08:36 +0000)]
[Ada] Generate ada_target_properties

Generate target-dependent info into a file named ada_target_properties.
This information is used by tools for static analysis: they need to know
the size of standard types for a given run-time library. This metadata
is meant to be saved at the root of the run-time directory.

2019-08-19  Jerome Guitton  <guitton@adacore.com>

gcc/ada/

* Makefile.rtl (system.o): New target to add generation of
target properties.
* gcc-interface/Makefile.in (install-gnatlib): Install
ada_target_properties.

From-SVN: r274658

5 years ago[Ada] Lift restriction on instantiations that are compilation units
Eric Botcazou [Mon, 19 Aug 2019 08:36:53 +0000 (08:36 +0000)]
[Ada] Lift restriction on instantiations that are compilation units

This change lifts the restriction that was still present in the new
on-demand instantiation scheme for the body of generics instantiated in
non-main units.

The instantiations that are compilation units were still dealt with in
the old-fashioned way, that is to say the decision of instantiating the
body was still made up front during the analysis of the instance
declaration, instead of being deferred until after a call to an inlined
subprogram is encountered.

This should save a few more cycles when full inlining across units is
enabled, but there should otherwise be no functional changes.

2019-08-19  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* inline.adb (Add_Inlined_Body): Do not special-case instances
that are compilation units.
(Add_Pending_Instantiation): Likewise.
(Instantiate_Body): Skip instantiations that are compilation
units and have already been performed.
* sem_ch12.adb (Needs_Body_Instantiated): Do not special-case
instances that are compilation units.
(Load_Parent_Of_Generic): Be prepared for parent that is a
compilation unit but whose instantiation node has not been
replaced.

gcc/testsuite/

* gnat.dg/generic_inst12.adb, gnat.dg/generic_inst12_pkg1.adb,
gnat.dg/generic_inst12_pkg1.ads,
gnat.dg/generic_inst12_pkg2.ads: New testcase.

From-SVN: r274657

5 years ago[Ada] Further cleanup in inlining machinery
Eric Botcazou [Mon, 19 Aug 2019 08:36:48 +0000 (08:36 +0000)]
[Ada] Further cleanup in inlining machinery

This adds missing boilerplate stuff.  No functional changes.

2019-08-19  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* inline.adb (Initialize, Lock): Deal with
Called_Pending_Instantiations.

From-SVN: r274656

5 years ago[Ada] Legality of protected subp. implementing interface operations
Ed Schonberg [Mon, 19 Aug 2019 08:36:44 +0000 (08:36 +0000)]
[Ada] Legality of protected subp. implementing interface operations

This patch refines the predicate that implements rule in RM 9.4 (11.9/2)

Compiling b94.ads must yield:

   b94.ads:11:17: illegal overriding of subprogram inherited from interface
   b94.ads:11:17: first formal of "N" declared at line 8 must be of mode
     "out", "in out" or access-to-variable

----
package B94 is

   type Prot2_Int is protected interface;
   procedure  J (PI : in     Prot2_Int; N : in Integer)  is null;
   procedure  K (PI : in out Prot2_Int; N : in Integer)  is null;
   procedure  L (PI :    out Prot2_Int; N : in Integer)  is null;
   procedure  M (PI : access Prot2_Int; N : in Integer)  is null;
   procedure  N (PI : access constant Prot2_Int; N : in Integer)  is null;

   protected type Protected_2 is new Prot2_Int with
      procedure N (N : in Integer);                   -- ERROR: {7;1}
   end Protected_2;

end B94;

2019-08-19  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

* sem_ch6.adb (Check_Synchronized_Overriding): Complete
predicate that applies legality check in 9.4 (11.9/2): if an
inherited subprogram is implemented by a protected procedure or
entry, its first paarameter must be out, in_out or
access_to_varible.

From-SVN: r274655

5 years ago[Ada] Buffer reading overflow in dispatch table initialization
Javier Miranda [Mon, 19 Aug 2019 08:36:39 +0000 (08:36 +0000)]
[Ada] Buffer reading overflow in dispatch table initialization

For tagged types not defined at library level that derive from library
level tagged types the compiler may generate code to initialize their
dispatch table of predefined primitives copying from the parent type
data stored in memory after the dispatch table of the parent; that is,
at runtime the initialization of dispatch tables overflows reading the
parent dispatch table.

This problem does not affect the execution of the program since the
target dispatch table always has enough space to store the extra data,
and after such copy the compiler generates code to complete the
initialization of the dispatch table.

The following test must compile and execute without errors.

package pkg_a is
   type Root is tagged null record;
end pkg_a;

with pkg_a;
procedure main is
   type Derived is new pkg_a.Root with null record;  -- Test
begin
   null;
end main;

Command: gnatmake -q main -fsanitize=address; ./main

2019-08-19  Javier Miranda  <miranda@adacore.com>

gcc/ada/

PR ada/65696
* exp_atag.ads, exp_atag.adb (Build_Inherit_Predefined_Prims):
Adding formal to specify how many predefined primitives are
inherited from the parent type.
* exp_disp.adb (Number_Of_Predefined_Prims): New subprogram.
(Make_Secondary_DT): Compute the number of predefined primitives
of all tagged types (including tagged types not defined at
library level).  Previously we unconditionally relied on the
Max_Predef_Prims constant value when building the dispatch
tables of tagged types not defined at library level (thus
consuming more memory for their dispatch tables than required).
(Make_DT): Compute the number of predefined primitives that must
be inherited from their parent type when building the dispatch
tables of tagged types not defined at library level. Previously
we unconditionally relied on the Max_Predef_Prims constant value
when building the dispatch tables of tagged types not defined at
library level (thus copying more data than required from the
parent type).

From-SVN: r274654

5 years ago[Ada] Process type extensions for -gnatw.h
Bob Duff [Mon, 19 Aug 2019 08:36:35 +0000 (08:36 +0000)]
[Ada] Process type extensions for -gnatw.h

This patch enables gap detection in type extensions.

With the -gnatw.h switch, on 64-bit machines,
the following test should get warnings:

gcc -c gaps.ads -gnatw.h
gaps.ads:16:07: warning: 48-bit gap before component "Comp2"
gaps.ads:17:07: warning: 8-bit gap before component "Comp3"

package Gaps is
   type Integer_16 is mod 2**16;

   type TestGap is tagged record
      Comp1 : Integer_16;
   end record;
   for TestGap use record
      Comp1 at 0 + 8 range 0..15;
   end record;

   type TestGap2 is new TestGap with record
      Comp2  : Integer_16;
      Comp3  : Integer_16;
   end record;
   for TestGap2 use record
      Comp2 at 08 + 8 range 0..15;
      Comp3 at 11 + 8 range 0..15;
   end record;

end Gaps;

2019-08-19  Bob Duff  <duff@adacore.com>

gcc/ada/

* sem_ch13.adb (Record_Hole_Check): Procedure to check for holes
that incudes processing type extensions. A type extension is
processed by first calling Record_Hole_Check recursively on the
parent type to compute the bit number after the last component
of the parent.

From-SVN: r274653

5 years ago[Ada] Improve warnings about "too few elements" and "too many elements"
Gary Dismukes [Mon, 19 Aug 2019 08:36:30 +0000 (08:36 +0000)]
[Ada] Improve warnings about "too few elements" and "too many elements"

When warning about length-check failures detected at compile time that
are flagged with "too few elements" or "too many elements", the compiler
now gives an additional message indicating the number of elements
expected by the context versus how many are present in the conflicting
expression (such as an aggregate that has too few or too many
components).

The test below reports the following warnings when compiled with this command:

$ gcc -c -gnatj78 length_warnings.adb

length_warnings.adb:6:09: warning: too few elements for subtype of
                          "Boolean_Array" defined at line 5, expected 10
                          elements; found 9 elements, "Constraint_Error" will
                          be raised at run time
length_warnings.adb:10:09: warning: too few elements for subtype of
                           "Boolean_Array" defined at line 9, expected 2
                           elements; found 1 element, "Constraint_Error" will
                           be raised at run time
length_warnings.adb:14:09: warning: too many elements for subtype of
                           "Boolean_Array" defined at line 13, expected 10
                           elements; found 11 elements, "Constraint_Error"
                           will be raised at run time
length_warnings.adb:18:09: warning: too many elements for subtype of
                           "Boolean_Array" defined at line 17, expected 0
                           elements; found 1 element, "Constraint_Error" will
                           be raised at run time
length_warnings.adb:22:09: warning: too many elements for subtype of
                           "Boolean_Array" defined at line 21, expected 1
                           element; found 2 elements, "Constraint_Error" will
                           be raised at run time

procedure Length_Check_Warnings is

   type Boolean_Array is array (Natural range <>) of Boolean;

   Bits_A : Boolean_Array (1 .. 10)
     := (True, True, True, True, True, True, True, True, True);
   -- Too few elements

   Bits_B : Boolean_Array (1 .. 2)
     := (1 => False);
   -- Too few elements

   Bits_C : Boolean_Array (1 .. 10)
     := (True, True, True, True, True, True, True, True, True, True, True);
   -- Too many elements

   Bits_D : Boolean_Array (1 .. 0)
     := (1 => True);
   -- Too many elements

   Bits_E : Boolean_Array (1 .. 1)
     := (True, False);
   -- Too many elements

begin
   null;
end Length_Check_Warnings;

2019-08-19  Gary Dismukes  <dismukes@adacore.com>

gcc/ada/

* checks.adb (Length_Mismatch_Info_Message): New function in
Selected_Length_Checks to return a message indicating the
element counts for the mismatched lengths for a failed
compile-time length check.
(Plural_Or_Singular_Ending): Support function in
Length_Mismatch_Info_Message to return either "" or "s", for
concatenating to the end of words.
(Selected_Length_Checks): Pass the result of
Length_Mismatch_Info_Message as an extra warning message to
Compile_Time_Constraint_Error to indicate the mismatched lengths
for a failed compile-time length check.
* sem_util.ads (Compile_Time_Constraint_Error): Add an optional
message formal (Extra_Msg), defaulted to the empty string.
* sem_util.adb (Compile_Time_Constraint_Error): Output an extra
message following the main warning message (when Extra_Msg is
not the empty string).

From-SVN: r274652

5 years ago[Ada] Enable use of GNAT.Sockets for VxWorks RTP
Patrick Bernardi [Mon, 19 Aug 2019 08:36:26 +0000 (08:36 +0000)]
[Ada] Enable use of GNAT.Sockets for VxWorks RTP

The recent introduction of GNAT.Sockets IPv6 support broke support for
VxWorks RTPs due to the use of internal VxWorks kernel calls. This patch
rectifies this by using the VxWorks public API for these routines.

The following RTP should compile successfully on a Development profile
VxWorks kernel that includes the INCLUDE_GETNAMEINFO component:

with GNAT.Sockets;      use GNAT.Sockets;

procedure IPvX is
   procedure Print_Address_Info
     (Host, Serv   : String;
      Family       : Family_Type := Family_Unspec)
   is
      Addresses : Address_Info_Array :=
        Get_Address_Info
          (Host, Serv, Family,
           Passive      => False,
           Numeric_Host => False);
   begin
      Sort (Addresses, IPv6_TCP_Preferred'Access);
   end Print_Address_Info;

begin
   Print_Address_Info ("localhost", "ssh");
end IPvX;

2019-08-19  Patrick Bernardi  <bernardi@adacore.com>

gcc/ada/

* socket.c: Removed the redefinition of getaddrinfo, getnameinfo
and freeaddrinfo to internal VxWorks kernel calls because they
are, well, internal kernel calls and cannot be called from RTPs.
VxWorks provides the necessary components to call these routines
directly.

From-SVN: r274651

5 years ago[Ada] Fix incorrect stub generation for types in instances
Eric Botcazou [Mon, 19 Aug 2019 08:36:21 +0000 (08:36 +0000)]
[Ada] Fix incorrect stub generation for types in instances

This fixes a fallout of a recent change clearing the
Is_Generic_Actual_Type on the implicit full view of a private actual
type in an instance.  This flag is used to help disambiguating formal
types instantiated on the same actual type within an instance, but it
should be cleared outside the instance to let the usual disambiguation
rules apply again to these types outside the instance.

This in particular means that Exp_Dist cannot rely on it to detect
subtypes representing generic actual types, hence the need for the new
predicate.

2019-08-19  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

* exp_dist.adb (Is_Generic_Actual_Subtype): New predicate.
(Build_From_Any_Call, Build_To_Any_Call, Build_TypeCode_Call):
Use it instead of Is_Generic_Actual_Type flag to detect subtypes
representing generic actual types.

From-SVN: r274650