platform/upstream/gcc.git
4 years ago[Ada] Put_Image: Implement for private types with full real type
Bob Duff [Mon, 30 Mar 2020 14:16:49 +0000 (10:16 -0400)]
[Ada] Put_Image: Implement for private types with full real type

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

gcc/ada/

* exp_imgv.adb (Expand_Image_Attribute): Allow private types.
Put_Image generates Image for numeric types, and private types
whose full type is numeric. This requires the Conversion_OK flag
for integer and floating-point types. For fixed point, we need
the extra conversion.
* exp_put_image.adb (Build_Elementary_Put_Image_Call): Remove
special handling of real types.
(Enable_Put_Image): Enable for reals.

4 years ago[Ada] Put_Image improvements for strings
Bob Duff [Mon, 30 Mar 2020 14:14:27 +0000 (10:14 -0400)]
[Ada] Put_Image improvements for strings

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

gcc/ada/

* exp_attr.adb (Put_Image): Use underlying type for strings.
Remove unchecked union processing.
* exp_put_image.adb (Tagged_Put_Image_Enabled): Use -gnatd_z to
enable default Put_Image for tagged types.  This allows testing
that feature.
(Build_String_Put_Image_Call): Set Conversion_OK flag.
(Make_Component_List_Attributes): Remove unchecked union
processing.
(Enable_Put_Image): Disable for unchecked unions.  Enable for
nonscalar types (which were mistakenly disabled in earlier
changes).
* debug.adb: Document -gnatd_z switch.
* libgnat/s-putima.adb (Put_Image_String, Put_Image_Wide_String,
Put_Image_Wide_Wide_String): Double double-quote characters.
Forget about special handling of control characters for now --
that's rare enough to not be a priority, and it's not clear what
the right thing to do is anyway.
* namet.adb: Minor: Improve debugger-friendliness.
* sinfo.ads: Minor: Add "???" comment.

4 years ago[Ada] Remove unreferenced and dubious Is_Renaming_Declaration
Piotr Trojanek [Wed, 25 Mar 2020 19:04:54 +0000 (20:04 +0100)]
[Ada] Remove unreferenced and dubious Is_Renaming_Declaration

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

gcc/ada/

* sem_util.ads, sem_util.adb (Is_Renaming_Declaration): Remove.

4 years ago[Ada] Link failure with call to expression function in precondition
Ed Schonberg [Mon, 30 Mar 2020 12:26:27 +0000 (08:26 -0400)]
[Ada] Link failure with call to expression function in precondition

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

gcc/ada/

* freeze.adb (Freeze_Expression): When traversing the tree
looking for the proper insertion point for the freeze node of an
entity that is declared in an outer scope, set the candidate
subprogram body node properly.  Previous code has an off-by-one
error.

4 years ago[Ada] Implement AI12-0077 Has_Same_Storage on objects of size zero
Eric Botcazou [Mon, 30 Mar 2020 10:38:01 +0000 (12:38 +0200)]
[Ada] Implement AI12-0077 Has_Same_Storage on objects of size zero

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

gcc/ada/

* exp_attr.adb (Expand_N_Attribute_Reference) <Has_Same_Storage>:
Do not do superfluous work.  Add the condition (X'Size /= 0) on
both paths and turn binary AND into short-circuit AND THEN.

4 years ago[Ada] Update 'Loop_Entry checking to match changes in 'Old rules.
Steve Baird [Fri, 27 Mar 2020 22:50:29 +0000 (15:50 -0700)]
[Ada] Update 'Loop_Entry checking to match changes in 'Old rules.

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

gcc/ada/

* sem_attr.adb (Analyze_Attribute): In the Loop_Entry case,
replace a call to Statically_Denotes_Object with a call to
Statically_Names_Object and clean up the preceding comment.

4 years ago[Ada] Use uniform type resolution for membership tests
Eric Botcazou [Sun, 29 Mar 2020 13:42:31 +0000 (15:42 +0200)]
[Ada] Use uniform type resolution for membership tests

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

gcc/ada/

* sem_res.adb (Resolve_Set_Membership): Remove local variable.
In the non-overloaded case, call Intersect_Types on the left
operand and the first alternative to get the resolution type.
But test the subtype of the left operand to give the warning.

4 years agoRISC-V: Suppress warning for signed and unsigned integer comparison.
Kito Cheng [Mon, 15 Jun 2020 03:51:13 +0000 (11:51 +0800)]
RISC-V: Suppress warning for signed and unsigned integer comparison.

gcc/ChangeLog:

* config/riscv/riscv.c (riscv_gen_gpr_save_insn): Change type to
unsigned for i.
(riscv_gpr_save_operation_p): Change type to unsigned for i and
len.

4 years agoOptimize multiplication for V8QI,V16QI,V32QI under TARGET_AVX512BW.
liuhongt [Wed, 3 Jun 2020 09:25:47 +0000 (17:25 +0800)]
Optimize multiplication for V8QI,V16QI,V32QI under TARGET_AVX512BW.

2020-06-13   Hongtao Liu  <hongtao.liu@intel.com>

gcc/ChangeLog:
PR target/95488
* config/i386/i386-expand.c (ix86_expand_vecmul_qihi): New
function.
* config/i386/i386-protos.h (ix86_expand_vecmul_qihi): Declare.
* config/i386/sse.md (mul<mode>3): Drop mask_name since
there's no real simd int8 multiplication instruction with
mask. Also optimize it under TARGET_AVX512BW.
(mulv8qi3): New expander.

gcc/testsuite/ChangeLog:
* gcc.target/i386/avx512bw-pr95488-1.c: New test.
* gcc.target/i386/avx512bw-pr95488-2.c: Ditto.
* gcc.target/i386/avx512vl-pr95488-1.c: Ditto.
* gcc.target/i386/avx512vl-pr95488-2.c: Ditto.

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

4 years agoAvoid crash when global symbol table is empty with -fdump-fortran-global.
Thomas Koenig [Sun, 14 Jun 2020 15:37:49 +0000 (17:37 +0200)]
Avoid crash when global symbol table is empty with -fdump-fortran-global.

This just avoids a crash with -fdump-fortran-global when the
global symbol table is empty.  This is strictly a developer's
option, no user impact.

gcc/fortran/ChangeLog:

2020-06-14  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR fortran/42122
* dump-parse-tree.c (gfc_dump_global_symbols):  If the symroot is
empty, just output "empty".

4 years agoPR fortran/95088 - Buffer overflows with PDTs, submodules and long symbols
Harald Anlauf [Sun, 14 Jun 2020 14:12:47 +0000 (16:12 +0200)]
PR fortran/95088 - Buffer overflows with PDTs, submodules and long symbols

With PDTs (parameterized derived types) and submodules, name mangling
results in variably long internal symbols.  Instead of using a fixed-size
intermediate buffer, which is actually not really needed, just use a
pointer to strings.

2020-06-14  Harald Anlauf  <anlauf@gmx.de>

gcc/fortran/
PR fortran/95088
* class.c (get_unique_type_string): Replace use of fixed size
buffer by internally passing a pointer to strings.

4 years agoAlways use locations from get and put arguments for error messages.
Thomas Koenig [Sun, 14 Jun 2020 12:39:03 +0000 (14:39 +0200)]
Always use locations from get and put arguments for error messages.

A simple and obvios patch - the error location was taken
from a variable that was not initialized for optional
variables.

gcc/fortran/ChangeLog:

* check.c (gfc_check_random_seed): Always use locations
from get and put arguments for error messages.

gcc/testsuite/ChangeLog:

* gfortran.dg/random_seed_4.f90: New test.

4 years agoWhen avoiding double deallocation, look at namespace, expression and component.
Thomas Koenig [Sun, 14 Jun 2020 11:01:24 +0000 (13:01 +0200)]
When avoiding double deallocation, look at namespace, expression and component.

Our finalization handling is a mess.  Really, we should get to try and get
this fixed for gcc 11.

In the meantime, here is a patch which fixes a regression I introduced
when fixing a regression with a memory leak.  The important thing
here is to realize that we do not need to finalize (and deallocate)
multiple times for the same expression and the same component
in the same namespace.  It might cause code size regressions, but
better big code than wrong code...

gcc/fortran/ChangeLog:

PR fortran/94109
* class.c (finalize_component): Return early if finalization has
already happened for expression and component within namespace.
* gfortran.h (gfc_was_finalized): New type.
(gfc_namespace): Add member was_finalzed.
(gfc_expr): Remove finalized.
* symbol.c (gfc_free_namespace): Free was_finalized.

gcc/testsuite/ChangeLog:

PR fortran/94109
* gfortran.dg/finalize_34.f90: Adjust free counts.
* gfortran.dg/finalize_36.f90: New test.

4 years agod: Fix line lengths after mechanical field renames.
Iain Buclaw [Sun, 14 Jun 2020 09:42:01 +0000 (11:42 +0200)]
d: Fix line lengths after mechanical field renames.

gcc/d/ChangeLog:

* expr.cc (ExprVisitor::visit (AssocArrayLiteralExp *)): Fix line
lengths, no functional change.
* typeinfo.cc (TypeInfoVisitor::layout_interfaces): Likewise.
(layout_classinfo_interfaces): Likewise.

4 years agotestsuite: Re-add gdc.test prefix in test names (PR testsuite/95575)
Iain Buclaw [Sun, 14 Jun 2020 09:02:52 +0000 (11:02 +0200)]
testsuite: Re-add gdc.test prefix in test names (PR testsuite/95575)

gcc/testsuite/ChangeLog:

PR testsuite/95575
* lib/gdc-utils.exp (gdc-do-test): Re-add $subdir link and inclusion
in filename.

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

4 years agoCorrect test to avoid failures in ILP32.
Martin Sebor [Sat, 13 Jun 2020 17:29:01 +0000 (11:29 -0600)]
Correct test to avoid failures in ILP32.

Amends: PR middle-end/95353 - spurious -Wstringop-overflow writing to a trailing array plus offset.

gcc/testsuite/ChangeLog:
* gcc.dg/builtin-stringop-chk-5.c: Make assertions independent of
data model.

4 years agoRemove failing test case accidentally committed.
Thomas Koenig [Sat, 13 Jun 2020 09:40:52 +0000 (11:40 +0200)]
Remove failing test case accidentally committed.

When committing 0cfc34ad1293a5e19f1dc67c461c58d99222ac9d, I
accidentylly committed gcc/testsuite/gfortran.dg/finalize_36.f90 .
This removes this, again.

gcc/testsuite/ChangeLog:

* gfortran.dg/finalize_36.f90: Remove accidentally
committed test case.

4 years agoDisable -Wstringop-overflow warning after checking code path of caller.
Thomas Koenig [Sat, 13 Jun 2020 08:04:33 +0000 (10:04 +0200)]
Disable -Wstringop-overflow warning after checking code path of caller.

The warning that is disabled, only on this single line, has been
inspected and found to be not applicable; it is known that the size
of the buffer is safe.

libgfortran/ChangeLog:

2020-06-13  Thomas Koenig  <tkoenig@gcc.gnu.org>

PR libfortran/95313
* io/write.c (ztoa_big): Disable -Wstringop-overflow for one
line.

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

4 years agoruntime: fix arenaBaseOffset for aix/ppc
Clément Chigot [Tue, 9 Jun 2020 09:36:01 +0000 (11:36 +0200)]
runtime: fix arenaBaseOffset for aix/ppc

The arenaBaseOffset modifications was aimed only for aix/ppc64.

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

4 years agogo.test: update issue4085b.go to version from Go 1.13
Ian Lance Taylor [Fri, 12 Jun 2020 21:00:11 +0000 (14:00 -0700)]
go.test: update issue4085b.go to version from Go 1.13

This lets the test pass on AIX.

Not updating to master because we get slightly different error messages,
so that is a more complex change.

4 years agotsan: Add param to disable func-entry-exit instrumentation
Marco Elver [Wed, 10 Jun 2020 14:21:21 +0000 (16:21 +0200)]
tsan: Add param to disable func-entry-exit instrumentation

Adds param tsan-instrument-func-entry-exit, which controls if
__tsan_func_{entry,exit} calls should be emitted or not. The default
behaviour is to emit the calls.

This may be required by alternative race detection runtimes. One such
runtime is the Kernel Concurrency Sanitizer (KCSAN):

https://github.com/google/ktsan/wiki/KCSAN

After this change, GCC should satisfy all requirements for KCSAN:

https://lore.kernel.org/lkml/20200515150338.190344-7-elver@google.com/

gcc/ChangeLog:

* gimplify.c (gimplify_function_tree): Optimize and do not emit
IFN_TSAN_FUNC_EXIT in a finally block if we do not need it.
* params.opt: Add --param=tsan-instrument-func-entry-exit=.
* tsan.c (instrument_memory_accesses): Make
fentry_exit_instrument bool depend on new param.

gcc/testsuite/ChangeLog:

* c-c++-common/tsan/func_entry_exit.c: New test.
* c-c++-common/tsan/func_entry_exit_disabled.c: New test.

4 years agoAdd .clang-tidy to git ignored.
Martin Liska [Fri, 12 Jun 2020 14:02:18 +0000 (16:02 +0200)]
Add .clang-tidy to git ignored.

Installed as obvious.

ChangeLog:

* .gitignore: Add .clang-tidy.

4 years agotestcase for shared DR alignment
Richard Biener [Fri, 12 Jun 2020 11:02:56 +0000 (13:02 +0200)]
testcase for shared DR alignment

This adds a reduced C testcase from libgomp.fortran/examples-4/target-1.f90
and libgomp.fortran/examples-4/target_data-1.f90 FAILs, showing a case
of SLP instance stmt sharing that affects the shared dataref alignment
info.

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

* gcc.dg/vect/bb-slp-44.c: New testcase.

4 years agovect: Fix an ICE in vect_loop_versioning [PR95570]
Fei Yang [Fri, 12 Jun 2020 10:37:00 +0000 (11:37 +0100)]
vect: Fix an ICE in vect_loop_versioning [PR95570]

In the test case for PR95570, the only data reference in the loop is a
gather-statter access.  Scalar evolution analysis for this data reference
failed, so DR_STEP is NULL_TREE.  This leads to the segmentation fault.
We should filter out scatter-gather access in vect_enhance_data_refs_alignment.

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

gcc/
PR tree-optimization/95570
* tree-vect-data-refs.c (vect_relevant_for_alignment_p): New function.
(vect_verify_datarefs_alignment): Call it to filter out data references
in the loop whose alignment is irrelevant.
(vect_get_peeling_costs_all_drs): Likewise.
(vect_peeling_supportable): Likewise.
(vect_enhance_data_refs_alignment): Likewise.

gcc/testsuite/

PR tree-optimization/95570
* gcc.dg/vect/pr95570.c: New test.

4 years agofix vectorizable_condition ICE with EXTRACT_LAST_REDUCTION
Richard Biener [Fri, 12 Jun 2020 10:06:53 +0000 (12:06 +0200)]
fix vectorizable_condition ICE with EXTRACT_LAST_REDUCTION

The previous reorg missed a guard around the else clause access.

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

PR tree-optimization/95633
* tree-vect-stmts.c (vectorizable_condition): Properly
guard the vec_else_clause access with EXTRACT_LAST_REDUCTION.

4 years agolibstdc++: Improve tests for std::atomic_flag
Jonathan Wakely [Fri, 12 Jun 2020 09:33:37 +0000 (10:33 +0100)]
libstdc++: Improve tests for std::atomic_flag

The tests for clear() and test_and_set() didn't cover all cases.

* testsuite/29_atomics/atomic_flag/clear/1.cc: Also test clear()
when the value is currently set.
* testsuite/29_atomics/atomic_flag/test_and_set/explicit.cc:
Actually check the return value.
* testsuite/29_atomics/atomic_flag/test_and_set/implicit.cc:
Likewise.

4 years agolibstdc++: Make std::atomic_flag::test members const
Jonathan Wakely [Fri, 12 Jun 2020 09:22:05 +0000 (10:22 +0100)]
libstdc++: Make std::atomic_flag::test members const

Also fix the tests so they run without an explicit -std=gnu++2a in the
RUNTESTFLAGS, and test the new function on const-qualified objects.

* include/bits/atomic_base.h (atomic_flag::test): Add missing
const qualifiers.
* testsuite/29_atomics/atomic_flag/test/explicit.cc: Add
dg-options and verify results of test function.
* testsuite/29_atomics/atomic_flag/test/implicit.cc: Likewise.

4 years ago[Ada] Fix anonymous-to-named access type implicit conversion legality checking
Steve Baird [Fri, 27 Mar 2020 18:56:40 +0000 (11:56 -0700)]
[Ada] Fix anonymous-to-named access type implicit conversion legality checking

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

gcc/ada/

* sem_res.adb (Valid_Conversion): The simpler cases of
violations of the aforementioned 8.6 rule are already handled
correctly. These include cases where the operand of the type
conversion is an access parameter or a stand-alone object of an
anonymous access type. Add code to detect violations where the
operand of the type conversion is an access discriminant whose
accessibility level is tied to one of the other simpler cases.
This is implemented in a new function,
Valid_Conversion.Is_Discrim_Of_Bad_Access_Conversion_Argument,
which is called in place of the previous test.

4 years ago[Ada] Enable Put_Image in pre-Ada-2020 modes
Bob Duff [Fri, 27 Mar 2020 12:26:19 +0000 (08:26 -0400)]
[Ada] Enable Put_Image in pre-Ada-2020 modes

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

gcc/ada/

* exp_attr.adb (Put_Image): Remove assertion. This assertion is
False in mixed-Ada-version programs.
* exp_put_image.adb (Tagged_Put_Image_Enabled): New flag to make
it easy to experiment with Put_Image on tagged types. False in
this version.
(Enable_Put_Image): Enable in pre-2020.  Workarounds: Disable
for tagged types if Tagged_Put_Image_Enabled is False. Disable
for access-to-subprogram types.  Disable if errors have been
detected, or Sink is unavailable.
(Preload_Sink): Move all conditionals here, from Sem_Ch10, so
they can be nearby related code in Enable_Put_Image.  Load Sink
only if we have seen a tagged type.  This removes the dilemma
about calling Preload_Sink when compiling the compiler, which
caused unwanted dependences.
* exp_put_image.ads (Preload_Sink): New formal Compilation_Unit,
needed to move all conditionals here, from Sem_Ch10.
* libgnat/a-stouut.adb (Put_UTF_8): Make this suitable for
inlining, so we don't get warnings about inlining in some tests.
And so it can be inlined!
* opt.ads (Tagged_Seen): New flag (see Preload_Sink).
* scng.adb (Scan): Set new Tagged_Seen flag.
* sem_ch10.adb (Analyze_Compilation_Unit): Move conditionals and
comments regarding Preload_Sink into Preload_Sink.

4 years ago[Ada] AI12-0074 View conversions and out parameters passed by copy
Arnaud Charlet [Thu, 26 Mar 2020 09:53:30 +0000 (05:53 -0400)]
[Ada] AI12-0074 View conversions and out parameters passed by copy

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

gcc/ada/

* sem_res.adb (Resolve_Actuals): Check for AI12-0074.

4 years ago[Ada] Bump secondary stack alignment factor in full runtimes
Olivier Hainque [Tue, 24 Mar 2020 08:49:29 +0000 (08:49 +0000)]
[Ada] Bump secondary stack alignment factor in full runtimes

2020-06-12  Olivier Hainque  <hainque@adacore.com>

gcc/ada/

* libgnat/s-secsta.ads (Memory_Alignment): New constant, memory
alignment for chunks and allocated blocks. Initialize to
Standard'Maximum_Alignment * 2.
(Chunk_Memory): Use it.
* libgnat/s-secsta.adb (Round_Up): Likewise.

4 years ago[Ada] Alphabetic ordering for name and pragmas
Piotr Trojanek [Wed, 25 Mar 2020 17:59:04 +0000 (18:59 +0100)]
[Ada] Alphabetic ordering for name and pragmas

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

gcc/ada/

* par-prag.adb: Fix ordering.
* snames.ads-tmpl (Name_Test_Case, Pragma_Test_Case): Likewise.
* sem_prag.adb (Sig_Flags): Likewise.

4 years ago[Ada] Fix handling of Ada 83 OUT parameter rule
Arnaud Charlet [Wed, 25 Mar 2020 17:39:46 +0000 (13:39 -0400)]
[Ada] Fix handling of Ada 83 OUT parameter rule

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

gcc/ada/

* sem_res.adb (Resolve_Entity_Name): Fix handling of expressions
containing array attributes wrt Ada 83 detection.

4 years ago[Ada] Implement AI12-0369
Steve Baird [Mon, 23 Mar 2020 23:20:17 +0000 (16:20 -0700)]
[Ada] Implement AI12-0369

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

gcc/ada/

* sem_util.ads, sem_util.adb: Define 3 new Boolean-valued
functions - Statically_Denotes_Entity,
Statically_Denotes_Object, and Statically_Names_Object. The
first two were taken from sem_attr.adb. The term "statically
names" is defined in the Ada RM and the new function
Statically_Names_Object is intended to reflect that definition,
or more precisely, as described in a comment in the code, to
reflect the expected future definition of that term.
* sem_attr.adb: Delete functions Statically_Denotes_Object and
Statically_Denotes_Entity; these two functions have been moved
to package Sem_Util. Replace call to Statically_Denotes_Object
with a call to Statically_Names_Object as per AI12-0217 (a
binding interpretation, so no Ada_Version check).
* exp_ch9.adb (Expand_Entry_Barrier.Is_Simple_Barrier): Change
name of function (it was previously Is_Simple_Barrier_Name)
because the function should return True in the case of a static
expression; implement this requirement.  Change function to
include a call to Statically_Names_Object so that, for Ada_2020
and later, it will return True for appropriate subcomponent
names.
(Expand_Entry_Barrier.Is_Pure_Barrier): Handle
N_Indexed_Component and N_Selected_Component cases by calling
Statically_Names_Object.
(Expand_Entry_Barrier): Reorganize to treat Simple_Barriers and
Pure_Barriers more uniformly.  Prevent cascaded errors.

4 years ago[Ada] Compiler locks up with -gnatX and formal subprogram with aspects
Ed Schonberg [Wed, 25 Mar 2020 16:49:13 +0000 (12:49 -0400)]
[Ada] Compiler locks up with -gnatX and formal subprogram with aspects

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

gcc/ada/

* sem_ch12.adb (Find_Matching_Actual): Add guard on search loops
to detect a compilation error when using a compiler built
without assertions.
(Instantiate_Formal_Subprogram): Create a new subprogram name
for the actual only if formal has contract aspects and expansion
is enabled.

4 years ago[Ada] Improve code generated for assignment of dynamic record aggregates
Eric Botcazou [Tue, 24 Mar 2020 13:57:09 +0000 (14:57 +0100)]
[Ada] Improve code generated for assignment of dynamic record aggregates

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

gcc/ada/

* exp_aggr.adb: Add with and use clauses for Sem_Mech.
(Get_Base_Object): New function to get the base object of a node.
(In_Place_Assign_OK): Add Target_Object parameter.  Deal with a
qualified expression on entry.  Remove short-circuit for array
aggregates with a single "others" choice.  Do not look into the
components of the aggregate if the parent is an allocator.
(Check_Component): Add T_OK parameter and rewrite.
(Safe_Component): Invoke Check_Component with T_OK set to False.
(Convert_To_Assignments): Try to use an in-place assignment for
any target; for that, call Get_Base_Object on the target and pass
the result to In_Place_Assign_OK.
(Expand_Array_Aggregate): Use Parent_Kind and Parent_Node more
consistently.  For an assignment, call Get_Base_Object on the
target and pass the result to In_Place_Assign_OK.

4 years ago[Ada] Don't correct socket timeout on Windows Server 2019
Dmitriy Anisimkov [Mon, 23 Mar 2020 10:16:51 +0000 (16:16 +0600)]
[Ada] Don't correct socket timeout on Windows Server 2019

2020-06-12  Dmitriy Anisimkov  <anisimko@adacore.com>

gcc/ada/

* socket.c (__gnat_minus_500ms): Use GetVersionEx to detect
Windows Server version.
* libgnat/g-sothco.ads (Minus_500ms_Windows_Timeout): Remade to
Boolean constant.
* libgnat/g-socket.adb (Set_Socket_Option): Use
Minus_500ms_Windows_Timeout constant instead of function call.

4 years ago[Ada] AI12-0350 Swap for Indefinite_Holders
Arnaud Charlet [Mon, 23 Mar 2020 08:49:13 +0000 (04:49 -0400)]
[Ada] AI12-0350 Swap for Indefinite_Holders

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

gcc/ada/

* libgnat/a-coinho.ads, libgnat/a-coinho.adb,
libgnat/a-coinho__shared.ads, libgnat/a-coinho__shared.adb
(Swap): New procedure.

4 years ago[Ada] Fix handling of subprograms declared in a protected body
Arnaud Charlet [Tue, 24 Mar 2020 08:40:18 +0000 (04:40 -0400)]
[Ada] Fix handling of subprograms declared in a protected body

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

gcc/ada/

* exp_ch6.adb (Expand_N_Subprogram_Declaration): Do nothing for
a subprogram declared in a protected body.
* exp_ch9.ads, exp_ch9.adb
(Build_Private_Protected_Declaration): Moved to sem_ch6.adb.
(Expand_N_Protected_Body): Do nothing for a subprogram declared
in a protected body.
* sem_ch6.adb (Build_Internal_Protected_Declaration): Moved from
exp_ch9.adb and renamed and fixed to ensure in particular that
such subprograms have convention Intrinsic and have no protected
version.
(Analyze_Subprogram_Body_Helper): Call
Build_Internal_Protected_Declaration.
(Move_Pragmas): Moved up and merged with the more general
version from Build_Private_Protected_Declaration. We only want
to copy selected pragmas, most pragmas are not suitable for a
copy on the spec.

4 years ago[Ada] Diagnose illegal overriding indicators in protected bodies
Ed Schonberg [Mon, 23 Mar 2020 21:44:29 +0000 (17:44 -0400)]
[Ada] Diagnose illegal overriding indicators in protected bodies

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

gcc/ada/

* sem_ch6.adb (Check_Overriding_Indicatior): Reject an
overriding indicator on a subprogram declared within a protected
body.

4 years ago[Ada] Reuse Is_Entry where possible
Piotr Trojanek [Mon, 23 Mar 2020 23:04:11 +0000 (00:04 +0100)]
[Ada] Reuse Is_Entry where possible

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

gcc/ada/

* contracts.adb, einfo.adb, sem_ch4.adb, sem_ch6.adb,
sem_res.adb, sem_util.adb: Replace Ekind_In with Is_Entry.

4 years ago[Ada] Detect overlapping actuals in entry calls
Piotr Trojanek [Mon, 23 Mar 2020 22:39:10 +0000 (23:39 +0100)]
[Ada] Detect overlapping actuals in entry calls

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

gcc/ada/

* sem_res.adb (Resolve_Entry_Call): Add call to
Warn_On_Overlapping_Actuals.

4 years ago[Ada] ACATS 4.2Q - BDD2007
Arnaud Charlet [Sat, 21 Mar 2020 16:34:20 +0000 (12:34 -0400)]
[Ada] ACATS 4.2Q - BDD2007

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

gcc/ada/

* aspects.ads (Is_Representation_Aspect): New array.
* sem_ch13.adb (Analyze_Aspect_Specifications): Check
13.1(9.2/5) for representation aspects.

gcc/testsuite/

* gnat.dg/rep_clause8.adb: Update error location.

4 years ago[Ada] Put_Image: preload type Sink, change what types have it enabled
Bob Duff [Mon, 23 Mar 2020 16:40:45 +0000 (12:40 -0400)]
[Ada] Put_Image: preload type Sink, change what types have it enabled

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

gcc/ada/

* exp_put_image.ads, exp_put_image.adb (Preload_Sink): Procedure
for preloading type Sink.  This has the side effect of loading
various dependents, including Ada.Strings.UTF_Encoding.
(Enable_Put_Image): Disable Put_Image in pre-2020 versions of
Ada.  This limitation can probably be lifted later.  Enable for
tagged types except in predefined units.  Disable for CPP types;
Put_Image is legal, just prints the type name.
* sem_attr.adb (Check_Put_Image_Attribute): Don't complain about
Put_Image of CPP types; instead call the "unknown" version of
Put_Image.
* sem_ch10.adb (Analyze_Compilation_Unit): Call Preload_Sink.

4 years ago[Ada] Remove redundant iterations in checks for overlapping actuals
Piotr Trojanek [Wed, 18 Mar 2020 17:38:12 +0000 (18:38 +0100)]
[Ada] Remove redundant iterations in checks for overlapping actuals

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

gcc/ada/

* sem_warn.adb (Warn_On_Overlapping_Actuals): Simplify.

4 years ago[Ada] Remove suppression for overlapping actuals in internal units
Piotr Trojanek [Wed, 18 Mar 2020 17:25:41 +0000 (18:25 +0100)]
[Ada] Remove suppression for overlapping actuals in internal units

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

gcc/ada/

* sem_warn.adb (Warn_On_Overlapping_Actuals): Remove suppression
for internal units.

4 years ago[Ada] ACATS 4.1Q - CDD2A04 - RLS not followed
Arnaud Charlet [Sat, 21 Mar 2020 19:03:58 +0000 (15:03 -0400)]
[Ada] ACATS 4.1Q - CDD2A04 - RLS not followed

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

gcc/ada/

* exp_strm.adb (Build_Elementary_Input_Call): Add support for 24
bits elementary types.
* rtsfind.ads: Add 24 bits integer streaming routines.
* sem_ch13.adb (Analyze_Attribute_Definition_Clause
[Attribute_Stream_Size]): Add support for 24 bits elementary
types.
* libgnat/s-stratt.ads, libgnat/s-stratt.adb,
libgnat/s-stratt__xdr.adb: Add support for signed and unsigned
24 bits integers.

4 years ago[Ada] Simplify getting discriminant value from a list of constraints
Piotr Trojanek [Fri, 13 Mar 2020 20:32:25 +0000 (21:32 +0100)]
[Ada] Simplify getting discriminant value from a list of constraints

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

gcc/ada/

* sem_ch3.adb (Get_Discr_Value): Cleanup.

4 years ago[Ada] Implement AI12-0175 Preelaborable packages with address clauses
Eric Botcazou [Fri, 20 Mar 2020 22:00:32 +0000 (23:00 +0100)]
[Ada] Implement AI12-0175 Preelaborable packages with address clauses

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

gcc/ada/

* rtsfind.ads (RTU_Id): Add System_Address_To_Access_Conversions.
* sem_elab.adb (Elaboration_Phase_Active): Alphabetize.
(Finalize_All_Data_Structures): Likewise.
(Error_Preelaborated_Call): New procedure.
(Build_Call_Marker): Set Is_Preelaborable_Call flag in marker.
(Build_Access_Marker): Likewise.
(Build_Subprogram_Invocation): Likewise.
(Build_Task_Activation): Likewise.
(Check_Preelaborated_Call): Return when the call is preelaborable.
Call Error_Preelaborated_Call to give the error otherwise.
(Check_Elab_Call): Likewise.
* sem_util.adb (Is_Preelaborable_Function): New predicate.
(Is_Non_Preelaborable_Construct.Visit): Recurse on the
Explicit_Actual_Parameter field of N_Parameter_Association.
(Is_Non_Preelaborable_Construct.Visit_Subexpression): In Ada 2020,
for a call to a preelaborable function, visit the parameter list;
otherwise, raise Non_Preelaborable exception.
(Is_Preelaborable_Construct): Likewise, but recursively check the
parameters instead and return false upon failure, otherwise true.
* sinfo.ads (Is_Preelaborable_Call): New flag in call marker nodes.
(Is_Preelaborable_Call): New inline function.
(Set_Is_Preelaborable_Call): New inline procedure.
* sinfo.adb (Is_Preelaborable_Call): New inline function.
(Set_Is_Preelaborable_Call): New inline procedure.

4 years ago[Ada] Remove unnecessary use_clause from stringt.ads
Bob Duff [Sat, 21 Mar 2020 21:29:21 +0000 (17:29 -0400)]
[Ada] Remove unnecessary use_clause from stringt.ads

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

gcc/ada/

* stringt.ads: Remove "use System;".

4 years ago[Ada] Small cleanup in handling of Ada 2012 implicit dereferences
Eric Botcazou [Sat, 21 Mar 2020 12:25:45 +0000 (13:25 +0100)]
[Ada] Small cleanup in handling of Ada 2012 implicit dereferences

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

gcc/ada/

* sem_ch4.adb (Try_Container_Indexing): Replace call to
First_Discriminant by Get_Reference_Discriminant to get the
reference discriminant.
* sem_ch13.adb (Check_Indexing_Functions): Likewise.
* sem_ch5.adb (Preanalyze_Range): Call Get_Reference_Discriminant
to get the reference discriminant.
* sem_util.adb (Is_OK_Variable_For_Out_Formal): Treat all
Ada 2012 implicit dereferences in only one place.
(Is_Variable): Minor tweak.

4 years ago[Ada] Compiler crash on instance with overloaded actual and aspects
Ed Schonberg [Fri, 20 Mar 2020 13:24:49 +0000 (09:24 -0400)]
[Ada] Compiler crash on instance with overloaded actual and aspects

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

gcc/ada/

* sem_ch12.adb (Has_Contracts): New predicate to check whether a
formal subprogram carries an aspect specification for a pre- or
postcondition.
(Build_Subprogram_Wrappers): If actual is overloaded, create a
new name to be used in call inside wrapper body. This names
carries the interpretations of the actual, and is resolved when
the body is analyzed.
(Build_Subprogram_Body_Wrapper): Use this generated name in
call.
(Build_Subprogram_Decl_Wrapper): Build profile of wrapper from
the profile of formal, and reset type entities for subsequent
analysis.

4 years ago[Ada] Put_Image attribute
Bob Duff [Thu, 19 Mar 2020 22:17:36 +0000 (18:17 -0400)]
[Ada] Put_Image attribute

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

gcc/ada/

* debug.adb: Remove usage of -gnatd_z.
* exp_attr.adb, exp_put_image.ads, exp_put_image.adb: Clean up
the enable/disable code. If Put_Image is disabled for a type,
systematically call the "unknown" version.  Improve comments.
Consolidate workarounds.  Remove usage of -gnatd_z.

4 years ago[Ada] Fix typos in comments
Eric Botcazou [Thu, 19 Mar 2020 21:12:09 +0000 (22:12 +0100)]
[Ada] Fix typos in comments

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

gcc/ada/

* sem_elab.adb: Fix typos in comments.

4 years ago[Ada] Missing accessibility error on object in type conversion
Justin Squirek [Thu, 19 Mar 2020 20:59:30 +0000 (16:59 -0400)]
[Ada] Missing accessibility error on object in type conversion

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

gcc/ada/

* sem_util.adb (Object_Access_Level): Add processing of implicit
dereferences.

4 years ago[Ada] Ada2020: update Big_Numbers.* specs
Bob Duff [Wed, 18 Mar 2020 21:17:58 +0000 (17:17 -0400)]
[Ada] Ada2020: update Big_Numbers.* specs

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

gcc/ada/

* libgnat/a-nbnbin.adb, libgnat/a-nbnbin.ads,
libgnat/a-nbnbin__gmp.adb, libgnat/a-nbnbre.adb,
libgnat/a-nbnbre.ads: Update Put_Image, and uncomment the aspect
specification.  Add pragmas Ada_2020.
* libgnat/a-stouut.ads, libgnat/a-stteou.ads: Add Preelaborate,
because the Big_Numbers packages have Preelaborate, and now
depend on these Text_Output packages.

4 years ago[Ada] Implement AI12-0269 No_Return for functions
Eric Botcazou [Wed, 18 Mar 2020 22:13:20 +0000 (23:13 +0100)]
[Ada] Implement AI12-0269 No_Return for functions

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

gcc/ada/

* einfo.ads (No_Return): Document it for all subprograms.
* einfo.adb (Set_No_Return): Adjust assertion accordingly.
* sem_ch3.adb (Check_Abstract_Overriding): Implement the
check prescribed by RM 6.5.1(6/2) here instead of...
(Derive_Subprogram): Adjust comment accordingly.
* sem_disp.adb (Override_Dispatching_Operation): ...here.
Remove superfluous return statement.
* sem_ch6.adb (Check_No_Return_Expression): New procedure.
(Analyze_Function_Return): Call it to implement the check
prescribed by AI12-0269 for simple return statements of
No_Return functions, and also checks extended statements.
(Analyze_Return_Statement): Only give an error on a return
statement in No_Return procedures.  Use idiomatic form.
* sem_ch8.adb (Analyze_Subprogram_Renaming): Adjust error
message for No_Return renaming subprogram.
* sem_prag.adb (Analyze_Pragma) <Pragma_No_Return>: Accept
it on functions and generic functions in Ada 2020.

4 years agomatch any program name when pruning collect messages
Alexandre Oliva [Fri, 12 Jun 2020 08:08:33 +0000 (05:08 -0300)]
match any program name when pruning collect messages

When collect* programs have an executable suffix, they may include it
in their outputs.  Match them when pruning gcc output, making room for
other program names to print them.

for  gcc/testsuite/ChangeLog

* lib/prune.exp (prune_gcc_output): Match any executable name
in collect messages.

4 years agoFix few -Wformat-diag warnings.
Martin Liška [Thu, 11 Jun 2020 08:43:36 +0000 (10:43 +0200)]
Fix few -Wformat-diag warnings.

Ready for master?

Thanks,
Martin

gcc/ChangeLog:

* cgraphunit.c (process_symver_attribute): Wrap weakref keyword.
* dbgcnt.c (dbg_cnt_set_limit_by_index): Do not print extra new
line.
* lto-wrapper.c (merge_and_complain): Wrap option names.

4 years agovect: Factor out and rename some functions/macros
Kewen Lin [Fri, 12 Jun 2020 06:14:40 +0000 (01:14 -0500)]
vect: Factor out and rename some functions/macros

Power supports vector memory access with length (in bytes) instructions.
Like existing fully masking for SVE, it is another approach to vectorize
the loop using partially-populated vectors.

As Richard Sandiford suggested, we should share the codes in approaches
with partial vectors if possible.  This patch is to:
  1) factor out two functions:
     - vect_min_prec_for_max_niters
     - vect_known_niters_smaller_than_vf.
  2) rename four functions:
     - vect_iv_limit_for_full_masking
     - check_load_store_masking
     - vect_set_loop_condition_masked
     - vect_set_loop_condition_unmasked
  3) rename macros LOOP_VINFO_MASK_COMPARE_TYPE and LOOP_VINFO_MASK_IV_TYPE.

Bootstrapped/regtested on aarch64-linux-gnu.

gcc/ChangeLog:

* tree-vect-loop-manip.c (vect_set_loop_controls_directly): Rename
LOOP_VINFO_MASK_COMPARE_TYPE to LOOP_VINFO_RGROUP_COMPARE_TYPE.  Rename
LOOP_VINFO_MASK_IV_TYPE to LOOP_VINFO_RGROUP_IV_TYPE.
(vect_set_loop_condition_masked): Renamed to ...
(vect_set_loop_condition_partial_vectors): ... this.  Rename
LOOP_VINFO_MASK_COMPARE_TYPE to LOOP_VINFO_RGROUP_COMPARE_TYPE.  Rename
vect_iv_limit_for_full_masking to vect_iv_limit_for_partial_vectors.
(vect_set_loop_condition_unmasked): Renamed to ...
(vect_set_loop_condition_normal): ... this.
(vect_set_loop_condition): Rename vect_set_loop_condition_unmasked to
vect_set_loop_condition_normal.  Rename vect_set_loop_condition_masked
to vect_set_loop_condition_partial_vectors.
(vect_prepare_for_masked_peels): Rename LOOP_VINFO_MASK_COMPARE_TYPE
to LOOP_VINFO_RGROUP_COMPARE_TYPE.
* tree-vect-loop.c (vect_known_niters_smaller_than_vf): New, factored
out from ...
(vect_analyze_loop_costing): ... this.
(_loop_vec_info::_loop_vec_info): Rename mask_compare_type to
compare_type.
(vect_min_prec_for_max_niters): New, factored out from ...
(vect_verify_full_masking): ... this.  Rename
vect_iv_limit_for_full_masking to vect_iv_limit_for_partial_vectors.
Rename LOOP_VINFO_MASK_COMPARE_TYPE to LOOP_VINFO_RGROUP_COMPARE_TYPE.
Rename LOOP_VINFO_MASK_IV_TYPE to LOOP_VINFO_RGROUP_IV_TYPE.
(vectorizable_reduction): Update some dumpings with partial
vectors instead of fully-masked.
(vectorizable_live_operation): Likewise.
(vect_iv_limit_for_full_masking): Renamed to ...
(vect_iv_limit_for_partial_vectors): ... this.
* tree-vect-stmts.c (check_load_store_masking): Renamed to ...
(check_load_store_for_partial_vectors): ... this.  Update some
dumpings with partial vectors instead of fully-masked.
(vectorizable_store): Rename check_load_store_masking to
check_load_store_for_partial_vectors.
(vectorizable_load): Likewise.
* tree-vectorizer.h (LOOP_VINFO_MASK_COMPARE_TYPE): Renamed to ...
(LOOP_VINFO_RGROUP_COMPARE_TYPE): ... this.
(LOOP_VINFO_MASK_IV_TYPE): Renamed to ...
(LOOP_VINFO_RGROUP_IV_TYPE): ... this.
(vect_iv_limit_for_full_masking): Renamed to ...
(vect_iv_limit_for_partial_vectors): this.
(_loop_vec_info): Rename mask_compare_type to rgroup_compare_type.
Rename iv_type to rgroup_iv_type.

4 years agorecog: Use parameter packs for operator()
Richard Sandiford [Fri, 12 Jun 2020 07:16:48 +0000 (08:16 +0100)]
recog: Use parameter packs for operator()

This patch uses parameter packs to define insn_gen_fn::operator().
I guess in some ways it's C++-ification for its own sake, but it does
make things simpler and removes the current artificial limit of 16
arguments.

Note that the call is still strongly typed: all arguments have to have
implicit conversions to rtx.  Error messages for bad arguments look
reasonable.

I'm sure there are more elegant ways of getting the function type,
but this version at least fits on one line, so I didn't try too
hard to find an alternative.

2020-06-12  Richard Sandiford  <richard.sandiford@arm.com>

gcc/
* recog.h (insn_gen_fn::f0, insn_gen_fn::f1, insn_gen_fn::f2)
(insn_gen_fn::f3, insn_gen_fn::f4, insn_gen_fn::f5, insn_gen_fn::f6)
(insn_gen_fn::f7, insn_gen_fn::f8, insn_gen_fn::f9, insn_gen_fn::f10)
(insn_gen_fn::f11, insn_gen_fn::f12, insn_gen_fn::f13)
(insn_gen_fn::f14, insn_gen_fn::f15, insn_gen_fn::f16): Delete.
(insn_gen_fn::operator()): Replace overloaded definitions with
a parameter-pack version.

4 years agox86: Add UNSPECV_PATCHABLE_AREA
H.J. Lu [Mon, 3 Feb 2020 18:22:57 +0000 (10:22 -0800)]
x86: Add UNSPECV_PATCHABLE_AREA

Currently patchable area is at the wrong place.  It is placed immediately
after function label, before both .cfi_startproc and ENDBR.  This patch
adds UNSPECV_PATCHABLE_AREA for pseudo patchable area instruction and
changes ENDBR insertion pass to also insert patchable area instruction.
TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY is defined to avoid placing
patchable area before .cfi_startproc and ENDBR.

gcc/

PR target/93492
* config/i386/i386-features.c (rest_of_insert_endbranch):
Renamed to ...
(rest_of_insert_endbr_and_patchable_area): Change return type
to void. Add need_endbr and patchable_area_size arguments.
Don't call timevar_push nor timevar_pop.  Replace
endbr_queued_at_entrance with insn_queued_at_entrance.  Insert
UNSPECV_PATCHABLE_AREA for patchable area.
(pass_data_insert_endbranch): Renamed to ...
(pass_data_insert_endbr_and_patchable_area): This.  Change
pass name to endbr_and_patchable_area.
(pass_insert_endbranch): Renamed to ...
(pass_insert_endbr_and_patchable_area): This.  Add need_endbr
and patchable_area_size;.
(pass_insert_endbr_and_patchable_area::gate): Set and check
need_endbr and patchable_area_size.
(pass_insert_endbr_and_patchable_area::execute): Call
timevar_push and timevar_pop.  Pass need_endbr and
patchable_area_size to rest_of_insert_endbr_and_patchable_area.
(make_pass_insert_endbranch): Renamed to ...
(make_pass_insert_endbr_and_patchable_area): This.
* config/i386/i386-passes.def: Replace pass_insert_endbranch
with pass_insert_endbr_and_patchable_area.
* config/i386/i386-protos.h (ix86_output_patchable_area): New.
(make_pass_insert_endbranch): Renamed to ...
(make_pass_insert_endbr_and_patchable_area): This.
* config/i386/i386.c (ix86_asm_output_function_label): Set
function_label_emitted to true.
(ix86_print_patchable_function_entry): New function.
(ix86_output_patchable_area): Likewise.
(x86_function_profiler): Replace endbr_queued_at_entrance with
insn_queued_at_entrance.  Generate ENDBR only for TYPE_ENDBR.
Call ix86_output_patchable_area to generate patchable area if
needed.
(TARGET_ASM_PRINT_PATCHABLE_FUNCTION_ENTRY): New.
* config/i386/i386.h (queued_insn_type): New.
(machine_function): Add function_label_emitted.  Replace
endbr_queued_at_entrance with insn_queued_at_entrance.
* config/i386/i386.md (UNSPECV_PATCHABLE_AREA): New.
(patchable_area): New.

gcc/testsuite/

PR target/93492
* gcc.target/i386/pr93492-1.c: New test.
* gcc.target/i386/pr93492-2.c: Likewise.
* gcc.target/i386/pr93492-3.c: Likewise.
* gcc.target/i386/pr93492-4.c: Likewise.
* gcc.target/i386/pr93492-5.c: Likewise.

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

4 years agoc++: constrained class template friend [PR93467]
Patrick Palka [Thu, 11 Jun 2020 20:33:41 +0000 (16:33 -0400)]
c++: constrained class template friend [PR93467]

This fixes two issues in our handling of constrained class template
friend declarations.

The first issue is that we fail to set the constraints on the injected
class template declaration during tsubst_friend_class.

The second issue is that the template parameter levels within the parsed
constraints of a class template friend declaration are shifted if the
enclosing class is a template, and this shift leads to spurious
constraint mismatch errors in associate_classtype_constraints if the
friend declaration refers to an already declared class template.

gcc/cp/ChangeLog:

PR c++/93467
* constraint.cc (associate_classtype_constraints): If there is a
discrepancy between the current template depth and the template
depth of the original declaration, then adjust the template
parameter depth within the current constraints appropriately.
* pt.c (tsubst_friend_class): Substitute into and set the
constraints on the injected declaration.

gcc/testsuite/ChangeLog:

PR c++/93467
* g++.dg/cpp2a/concepts-friend6.C: New test.
* g++.dg/cpp2a/concepts-friend7.C: New test.

4 years agocontrib: Make prepare-commit-msg hook smarter for amends
Jonathan Wakely [Thu, 11 Jun 2020 19:22:17 +0000 (20:22 +0100)]
contrib: Make prepare-commit-msg hook smarter for amends

With this change the prepare-commit-msg hook can compare the log of a
commit being amended with the staged changes, and not run mklog.py
unnecessarily. This is controlled by a git config option,
gcc-config.mklog-hook-type.

contrib/ChangeLog:

* prepare-commit-msg: Use the gcc-config.mklog-hook-type Git
config key instead of the GCC_FORCE_MKLOG environment variable.
Optionally disable generating a new ChangeLog template for
amended commits when the existing log is still OK.

4 years agoPR fortran/95611 - ICE in access_attr_decl, at fortran/decl.c:9075
Harald Anlauf [Thu, 11 Jun 2020 19:03:48 +0000 (21:03 +0200)]
PR fortran/95611 - ICE in access_attr_decl, at fortran/decl.c:9075

When reporting a duplicate access specification of an operator, refer to
the proper symbol.

2020-06-11  Harald Anlauf <anlauf@gmx.de>

gcc/fortran/
PR fortran/95611
* decl.c (access_attr_decl): Use correct symbol in error message.

Co-Authored-By: Steven G. Kargl <kargl@gcc.gnu.org>
4 years agoPR fortran/95544 - Fix ICE in NULL() argument to intrinsics
Harald Anlauf [Thu, 11 Jun 2020 18:29:45 +0000 (20:29 +0200)]
PR fortran/95544 - Fix ICE in NULL() argument to intrinsics

Fortran 2018: An argument to an intrinsic procedure other than ASSOCIATED,
NULL, or PRESENT shall be a data object.  An EXPR_NULL is not a data
object.  Add checks for intrinsics.

2020-06-11  Steven G. Kargl  <kargl@gcc.gnu.org>
    Harald Anlauf  <anlauf@gmx.de>

gcc/fortran/
PR fortran/95544
* check.c (invalid_null_arg): Rename to gfc_invalid_null_arg.
(gfc_check_associated, gfc_check_kind, gfc_check_merge)
(gfc_check_shape, gfc_check_size, gfc_check_spread)
(gfc_check_transfer): Adjust.
(gfc_check_len_lentrim, gfc_check_trim): Check for NULL() argument.
* gfortran.h: Declare gfc_invalid_null_arg ().
* intrinsic.c (check_arglist): Check for NULL() argument.

4 years agocoroutines: Handle lambda closure pointers like 'this'.
Iain Sandoe [Thu, 11 Jun 2020 16:01:57 +0000 (17:01 +0100)]
coroutines: Handle lambda closure pointers like 'this'.

It was agreed amongst the implementors that the correct
interpretation of the standard is that lambda closure pointers
should be treated in the same manner as class object pointers.

gcc/cp/ChangeLog:

* coroutines.cc (instantiate_coro_traits): Pass a reference
to lambda closure objects to traits instantiation.
(morph_fn_to_coro): Likewise for promise parameter
preview and allocator lookup.

4 years agolibstdc++: Fix istream::ignore discarding too many chars (PR 94749)
Jonathan Wakely [Thu, 11 Jun 2020 17:41:37 +0000 (18:41 +0100)]
libstdc++: Fix istream::ignore discarding too many chars (PR 94749)

The current code assumes that if the next character in the stream is
equal to the delimiter then we stopped because we saw that delimiter,
and so discards it.  But in the testcase for the PR we stop because we
reached the maximum number of characters, and it's coincidence that the
next character equals the delimiter. We should not discard the next
character in that case.

The fix is to check that we haven't discarded __n characters already,
instead of checking whether the next character equals __delim. Because
we've already checked for EOF, if we haven't discarded __n yet then we
know we stopped because we saw the delimiter. On the other hand, if the
next character is the delimiter we don't know if that's why we stopped.

PR libstdc++/94749
* include/bits/istream.tcc (basic_istream::ignore(streamsize, CharT)):
Only discard an extra character if we didn't already reach the
maximum number.
* src/c++98/istream.cc (istream::ignore(streamsiz, char))
(wistream::ignore(streamsize, wchar_t)): Likewise.
* testsuite/27_io/basic_istream/ignore/char/94749.cc: New test.
* testsuite/27_io/basic_istream/ignore/wchar_t/94749.cc: New test.

4 years agoTestsuite: Mark check_effective_target_exceptions_enabled test as C++ test input.
Tamar Christina [Thu, 11 Jun 2020 17:19:44 +0000 (18:19 +0100)]
Testsuite: Mark check_effective_target_exceptions_enabled test as C++ test input.

The test in check_effective_target_exceptions_enabled uses a C++ keyword `throw`
and the test fails with a syntax error on any non-g++ test.  I now tell the
testsuite driver that this is a C++ input file so it runs it as such in all the
drivers.

gcc/testsuite/ChangeLog:

* lib/target-supports.exp (check_effective_target_exceptions_enabled):
Mark as C++ test input.

4 years agoPR fortran/95503 - Fix ICE in gfc_is_simply_contiguous, at fortran/expr.c:5844
Harald Anlauf [Thu, 11 Jun 2020 13:48:56 +0000 (15:48 +0200)]
PR fortran/95503 - Fix ICE in gfc_is_simply_contiguous, at fortran/expr.c:5844

The check for assigning a pointer that cannot be determined to be simply
contiguous at compile time to a contiguous pointer does not need to be
invoked if the lhs of the assignment is known to have conflicting attributes.

2020-06-11  Harald Anlauf  <anlauf@gmx.de>

gcc/fortran/
PR fortran/95503
* expr.c (gfc_check_pointer_assign): Skip contiguity check of rhs
of pointer assignment if lhs cannot be simply contiguous.

gcc/testsuite/
PR fortran/95503
* gfortran.dg/pr95503.f90: New test.

4 years agoPR95331 - Unlimited polymorphic arrays have wrong bounds.
José Rui Faustino de Sousa [Thu, 11 Jun 2020 13:15:25 +0000 (15:15 +0200)]
PR95331 - Unlimited polymorphic arrays have wrong bounds.

When iterating over a class array use the bounds provided by the
transformed descriptor (in sym->backend_decl) instead of the original
bounds of the array (in the descriptor passed in the class _data)
which are passed in se->expr.

The patch partially depends on the patch for PR52351 and PR85868, but
does not seems to break anything by itself.

gcc/fortran/ChangeLog:

2020-06-11  José Rui Faustino de Sousa  <jrfsousa@gmail.com>

PR fortran/95331
* trans-array.c (gfc_conv_array_ref): For class array dummy
arguments use the transformed descriptor in sym->backend_decl
instead of the original descriptor.

gcc/testsuite/ChangeLog:

2020-06-11  José Rui Faustino de Sousa  <jrfsousa@gmail.com>

PR fortran/95331
* gfortran.dg/PR95331.f90: New test.

4 years agoaix: xfail pure-virtual1.C expects weak __cxa_pure_virtual
David Edelsohn [Sat, 16 May 2020 15:40:21 +0000 (11:40 -0400)]
aix: xfail pure-virtual1.C expects weak __cxa_pure_virtual

The testcase expects __cxa_pure_virtual to be weak to avoid an
implicit dependency.  This does not occur on AIX, so expect this testcase
to fail on AIX.

gcc/testsuite/ChangeLog

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

* g++.dg/abi/pure-virtual1.C: XFAIL AIX.

4 years agoFix formatting in rs6000.c.
Martin Liska [Thu, 11 Jun 2020 12:59:47 +0000 (14:59 +0200)]
Fix formatting in rs6000.c.

gcc/ChangeLog:

* config/rs6000/rs6000.c (rs6000_density_test): Fix GNU coding
style.

4 years agoaix: Don't implicitly include inttypes.h
David Edelsohn [Wed, 10 Jun 2020 12:14:39 +0000 (08:14 -0400)]
aix: Don't implicitly include inttypes.h

AIX stdio.h implicitly includes inttypes.h, which explicitly conflicts
with the purpose of this testcase.  This patch conditionally adds a macro
definition that inhibits the implicit inclusion.

gcc/testsuite/ChangeLog

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

* gcc.dg/spellcheck-inttypes.c: Don't include inttypes.h on AIX.

4 years agors6000: skip debug info statements
Martin Liska [Thu, 11 Jun 2020 09:24:20 +0000 (11:24 +0200)]
rs6000: skip debug info statements

gcc/ChangeLog:

PR target/95627
* config/rs6000/rs6000.c (rs6000_density_test): Skip debug
statements.

4 years agoWrong array section bounds when passing to an intent-in pointer dummy.
José Rui Faustino de Sousa [Thu, 11 Jun 2020 12:14:30 +0000 (14:14 +0200)]
Wrong array section bounds when passing to an intent-in pointer dummy.

Add code to allow for the creation a new descriptor for array
sections with the correct one based indexing.

Rework the generated descriptors indexing (hopefully) fixing the
wrong offsets generated.

gcc/fortran/ChangeLog:

2020-06-11  José Rui Faustino de Sousa  <jrfsousa@gmail.com>

PR fortran/52351
PR fortran/85868
* trans-array.c (gfc_conv_expr_descriptor): Enable the
creation of a new descriptor with the correct one based
indexing for array sections.  Rework array descriptor
indexing offset calculation.

gcc/testsuite/ChangeLog:

2020-06-11  José Rui Faustino de Sousa  <jrfsousa@gmail.com>

PR fortran/52351
PR fortran/85868
* gfortran.dg/coarray_lib_comm_1.f90: Adjust match test for
the newly generated descriptor.
* gfortran.dg/PR85868A.f90: New test.
* gfortran.dg/PR85868B.f90: New test.

4 years agogit_update_version: add --current argument.
Martin Liska [Thu, 11 Jun 2020 11:34:53 +0000 (13:34 +0200)]
git_update_version: add --current argument.

The argument can be useful to update arbitrary branch, the changes
are added to git index and user is supposed to make a commit.

contrib/ChangeLog:

* gcc-changelog/git_update_version.py: Add --curent argument.

4 years agoPatch to Bug 94022 - Array slices of assumed-size arrays.
José Rui Faustino de Sousa [Thu, 11 Jun 2020 11:24:55 +0000 (13:24 +0200)]
Patch to Bug 94022 - Array slices of assumed-size arrays.

Make sure that when passing array sections of assumed-size arrays to
procedures expecting an assumed-rank array the upper bound of the
last dimension of the array section does not get improperly reset
to -1 to mark it has an assumed size array.

gcc/fortran/ChangeLog:

2020-06-11  José Rui Faustino de Sousa  <jrfsousa@gmail.com>

PR fortran/94022
* trans-expr.c (gfc_conv_procedure_call): In the case of
assumed-size arrays ensure that the reference is to a full array.

gcc/testsuite/ChangeLog:

2020-06-11  José Rui Faustino de Sousa  <jrfsousa@gmail.com>

PR fortran/94022
* gfortran.dg/PR94022.f90: New test.

4 years ago[Ada] Fix missing insertion of explicit dereference in instance
Eric Botcazou [Thu, 19 Mar 2020 13:50:32 +0000 (14:50 +0100)]
[Ada] Fix missing insertion of explicit dereference in instance

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

gcc/ada/

* sem_res.adb (Resolve_Implicit_Dereference): In an instance,
reset the type of the prefix if it is private before building
the dereference.

4 years ago[Ada] Fix assertion failure on entry call through unchecked conversion
Eric Botcazou [Thu, 19 Mar 2020 10:41:37 +0000 (11:41 +0100)]
[Ada] Fix assertion failure on entry call through unchecked conversion

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

gcc/ada/

* exp_util.adb (Safe_Unchecked_Type_Conversion): Add missing
Is_Type guard before calling Has_Discriminants on Etype.

4 years ago[Ada] Make libgnat/a-nbnbin__gmp.adb compile
Bob Duff [Wed, 18 Mar 2020 19:26:53 +0000 (15:26 -0400)]
[Ada] Make libgnat/a-nbnbin__gmp.adb compile

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

gcc/ada/

* libgnat/a-nbnbin__gmp.adb: There's no Optional_Big_Integer
anymore.  Invalid_Big_Integer is not used.
Greatest_Common_Divisor returns Big_Positive.

4 years ago[Ada] Refine type of a routine parameter from Node_Id to Entity_Id
Piotr Trojanek [Wed, 18 Mar 2020 23:08:36 +0000 (00:08 +0100)]
[Ada] Refine type of a routine parameter from Node_Id to Entity_Id

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

gcc/ada/

* sem_aggr.adb (Get_Value): Refine type of the Compon parameter.

4 years ago[Ada] Refine type of a counter-like variable
Piotr Trojanek [Wed, 18 Mar 2020 23:04:43 +0000 (00:04 +0100)]
[Ada] Refine type of a counter-like variable

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

gcc/ada/

* sem_aggr.adb (Resolve_Record_Aggregate): Refine type of
Others_Box.

4 years ago[Ada] Iterate with procedural version of Next routine where possible
Piotr Trojanek [Wed, 18 Mar 2020 22:57:10 +0000 (23:57 +0100)]
[Ada] Iterate with procedural version of Next routine where possible

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

gcc/ada/

* checks.adb, exp_ch7.adb, exp_ch9.adb, exp_smem.adb, lib.adb,
nlists.adb, sem.adb, sem_aggr.adb, sem_ch3.adb, sem_ch6.adb,
sem_ch8.adb, sem_dim.adb, sem_res.adb, sem_util.adb,
sem_warn.adb: Replace uses of Next function with procedure.

4 years ago[Ada] Fix wrong access to large bit-packed arrays with reverse SSO
Eric Botcazou [Tue, 17 Mar 2020 20:26:43 +0000 (21:26 +0100)]
[Ada] Fix wrong access to large bit-packed arrays with reverse SSO

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

gcc/ada/

* exp_pakd.ads: Add paragraph about scalar storage order.
* exp_pakd.adb (Install_PAT): Do not set the scalar storage
order of the PAT here but...
(Set_PB_Type): ...here instead and...
(Create_Packed_Array_Impl_Type): ...here as well.
* rtsfind.ads (RE_Id): Add RE_Rev_Packed_Bytes{1,2,4}.
(RE_Unit_Table): Likewise.
* libgnat/s-unstyp.ads (Rev_Packed_Bytes1): New derived type.
(Rev_Packed_Bytes2): Likewise.
(Rev_Packed_Bytes4): Likewise.

4 years ago[Ada] Update SPARK RM rule numbers after removing a redundant rule
Piotr Trojanek [Tue, 17 Mar 2020 20:10:18 +0000 (21:10 +0100)]
[Ada] Update SPARK RM rule numbers after removing a redundant rule

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

gcc/ada/

* sem_ch4.adb, sem_ch6.adb, sem_res.adb, sem_util.ads: Fix
references to SPARK RM 7.1.3 rule numbers.

4 years ago[Ada] Additional warnings on overlapping actuals of composite types
Ed Schonberg [Mon, 16 Mar 2020 15:25:14 +0000 (11:25 -0400)]
[Ada] Additional warnings on overlapping actuals of composite types

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

gcc/ada/

* sem_warn.adb (Warn_On_Overlapping_Actuals): Simplify code,
remove inner predicate Is_Covered_Formal, preserve warning for
two overlapping composite types when only one is writable, and
for two overlapping and writable elementary types.

4 years ago[Ada] Allow specifying volatility refinement aspects for types
Steve Baird [Fri, 31 Jan 2020 19:36:51 +0000 (11:36 -0800)]
[Ada] Allow specifying volatility refinement aspects for types

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

gcc/ada/

* contracts.adb (Add_Contract_Item): Support specifying
volatility refinement aspects for types.
(Analyze_Contracts): Add call to Analyze_Type_Contract in the
case of a contract for a type.
(Freeze_Contracts): Add call to Analyze_Type_Contract in the
case of a contract for a type.
(Check_Type_Or_Object_External_Properties): A new procedure
which performs the work that needs to be done for both object
declarations and types.
(Analyze_Object_Contract): Add a call to
Check_Type_Or_Object_External_Properties and remove the code in
this procedure which did much of the work that is now performed
by that call.
(Analyze_Type_Contract): Implement this new routine as nothing
more than a call to Check_Type_Or_Object_External_Properties.
* contracts.ads: Update comment for Add_Contract_To_Item because
types can have contracts.  Follow (questionable) precedent and
declare new routine Analyze_Type_Contract as visible (following
example of Analyze_Object_Contract), despite the fact that it is
never called from outside of the package where it is declared.
* einfo.adb (Contract, Set_Contract): Id argument can be a type;
support this case.
(Write_Field34_Name): Field name is "contract" for a type.
* einfo.ads: Update comment describing Contract attribute.
* sem_ch3.adb (Build_Derived_Numeric_Type): Is_Volatile should
return same answer for all subtypes of a given type. Thus, when
building the base type for something like type Volatile_1_To_10
is range 1 .. 10 with Volatile; that basetype should be marked
as being volatile.
(Access_Type_Declaration): Add SPARK-specific legality check
that the designated type of an access type shall be compatible
with respect to volatility with the access type.
* sem_ch12.adb (Check_Shared_Variable_Control_Aspects): Add
SPARK-specific legality check that an actual type parameter in
an instantiation shall be compatible with respect to volatility
with the corresponding formal type.
* sem_ch13.adb (Analyze_Aspect_Specifications): Perform checks
for aspect specs for the 4 volatility refinement aspects that
were already being performed for all language-defined aspects.
* sem_prag.adb (Analyze_External_Property_In_Decl_Part,
Analyze_Pragma): External properties (other than No_Caching) may
be specified for a type, including a generic formal type.
* sem_util.ads: Declare new subprograms - Async_Readers_Enabled,
Async_Writers_Enabled, Effective_Reads, Effective_Writes, and
Check_Volatility_Compatibility.
* sem_util.adb (Async_Readers_Enabled, Async_Writers_Enabled,
Effective_Reads, Effective_Writes): Initial implementation of
new functions for querying aspect values.
(Check_Volatility_Compatibility): New procedure intended for use
in checking all SPARK legality rules of the form "<> shall be
compatible with respect to volatility with <>".
(Has_Enabled_Property): Update comment because Item_Id can be a
type.  Change name of nested Variable_Has_Enabled_Property
function to Type_Or_Variable_Has_Enabled_Property; add a
parameter to that function because recursion may be needed,
e.g., in the case of a derived typ).  Cope with the case where
the argument to Has_Enabled_Property is a type.

4 years ago[Ada] Avoid "others => <>" association in resolved record aggregates
Piotr Trojanek [Tue, 17 Mar 2020 15:58:24 +0000 (16:58 +0100)]
[Ada] Avoid "others => <>" association in resolved record aggregates

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

gcc/ada/

* sem_aggr.adb (Add_Association): Add assertion about the formal
parameters.
(Propagate_Discriminants): Always add an explicit component
association, so that an "others => <>" association is never
needed.

4 years ago[Ada] Put_Image attribute
Bob Duff [Mon, 16 Mar 2020 19:22:25 +0000 (15:22 -0400)]
[Ada] Put_Image attribute

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

gcc/ada/

* exp_put_image.adb (Build_Elementary_Put_Image_Call): If the
underlying type is real, call Put_Image_Unknown.
(Build_Unknown_Put_Image_Call): Pass the type name to
Put_Image_Unknown.
* libgnat/s-putima.ads, libgnat/s-putima.adb
(Put_Image_Unknown): Add Type_Name parameter.  Remove
overly-detailed documentation of what it does; better to leave
it open.

4 years ago[Ada] Skip unnecessary iterations over constraint expressions
Piotr Trojanek [Fri, 13 Mar 2020 20:07:56 +0000 (21:07 +0100)]
[Ada] Skip unnecessary iterations over constraint expressions

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

gcc/ada/

* sem_ch3.adb (Build_Constrained_Array_Type,
Build_Constrained_Discriminated_Type): Skip unnecessary loop
iterations.

4 years ago[Ada] Move duplicated routines for building itypes to Sem_Util
Piotr Trojanek [Tue, 17 Mar 2020 13:16:28 +0000 (14:16 +0100)]
[Ada] Move duplicated routines for building itypes to Sem_Util

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

gcc/ada/

* sem_aggr.adb (Build_Constrained_Itype): Move to Sem_Util.
* sem_ch3.adb (Build_Subtype, Inherit_Predicate_Flags): Move...
* sem_util.adb (Build_Subtype): Here.  Add parameters for
references to objects previously declared in enclosing scopes.
(Inherit_Predicate_Flags): And here, because it is called by
Build_Subtype.
* sem_util.ads (Build_Overriding_Spec): Reorder alphabetically.
(Build_Subtype): Moved from Sem_Ch3; comments updated.
(Build_Constrained_Itype): Moved from Sem_Aggr; comments
updated.

4 years ago[Ada] Refine type for sorting case-choices tables
Piotr Trojanek [Tue, 17 Mar 2020 11:37:08 +0000 (12:37 +0100)]
[Ada] Refine type for sorting case-choices tables

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

gcc/ada/

* sem_aggr.adb (Case_Table_Type): Change index type from Nat to
Pos.

4 years ago[Ada] Create constrained itypes for nested record aggregates
Piotr Trojanek [Sat, 7 Mar 2020 21:59:24 +0000 (22:59 +0100)]
[Ada] Create constrained itypes for nested record aggregates

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

gcc/ada/

* sem_aggr.adb (Build_Constrained_Itype): Previously a declare
block, now a separate procedure; the only change is that now
New_Assoc_List might include components and an others clause,
which we ignore (while we deal with discriminants exactly as we
did before); extend a ??? comment about how this routine is
different from the Build_Subtype
(Resolve_Record_Aggregate): Create a constrained itype not just
for the outermost record aggregate, but for its inner record
aggregates as well.

4 years ago[Ada] Consolidate handling of implicit dereferences into semantic analysis
Eric Botcazou [Mon, 16 Mar 2020 18:28:47 +0000 (19:28 +0100)]
[Ada] Consolidate handling of implicit dereferences into semantic analysis

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

gcc/ada/

* checks.adb (Build_Discriminant_Checks): Build an explicit
dereference when the type is an access type.
* exp_atag.adb (Build_CW_Membership): Add explicit dereferences.
(Build_Get_Access_Level): Likewise.
(Build_Get_Alignment): Likewise.
(Build_Inherit_Prims): Likewise.
(Build_Get_Transportable): Likewise.
(Build_Set_Size_Function): Likewise.
* exp_ch3.adb (Build_Offset_To_Top_Function): Likewise.
* exp_ch4.adb (Expand_Allocator_Expression): Likewise.
(Expand_N_Indexed_Component ): Remove code dealing with implicit
dereferences.
(Expand_N_Selected_Component): Likewise.
(Expand_N_Slice): Likewise.
* exp_ch9.adb (Add_Formal_Renamings): Add explicit dereference.
(Expand_Accept_Declarations): Likewise.
(Build_Simple_Entry_Call): Remove code dealing with implicit
dereferences.
(Expand_N_Requeue_Statement): Likewise.
* exp_disp.adb (Expand_Dispatching_Call): Build an explicit
dereference when the controlling type is an access type.
* exp_spark.adb (Expand_SPARK_N_Selected_Component): Delete.
(Expand_SPARK_N_Slice_Or_Indexed_Component): Likewise.
(Expand_SPARK): Do not call them.
* sem_ch4.adb (Process_Implicit_Dereference_Prefix): Delete.
(Process_Indexed_Component): Call Implicitly_Designated_Type
to get the designated type for an implicit dereference.
(Analyze_Overloaded_Selected_Component): Do not insert an
explicit dereference here.
(Analyze_Selected_Component): Likewise.
(Analyze_Slice): Call Implicitly_Designated_Type to get the
designated type for an implicit dereference.
* sem_ch8.adb (Has_Components): New predicate extracted from...
(Is_Appropriate_For_Record): ...this.  Delete.
(Is_Appropriate_For_Entry_Prefix): Likewise.
(Analyze_Renamed_Entry): Deal with implicit dereferences.
(Find_Selected_Component): Do not insert an explicit dereference
here.  Call Implicitly_Designated_Type to get the designated type
for an implicit dereference.  Call Has_Components, Is_Task_Type
and Is_Protected_Type directly.  Adjust test for error.
* sem_res.adb (Resolve_Implicit_Dereference): New procedure.
(Resolve_Call): Call Resolve_Indexed_Component last.
(Resolve_Entry): Call Resolve_Implicit_Dereference on the prefix.
(Resolve_Indexed_Component): Call Implicitly_Designated_Type to
get the designated type for an implicit dereference and
Resolve_Implicit_Dereference on the prefix at the end.
(Resolve_Selected_Component): Likewise.
(Resolve_Slice): Likewise.  Do not apply access checks here.
* sem_util.ads (Implicitly_Designated_Type): Declare.
* sem_util.adb (Copy_And_Maybe_Dereference): Simplify.
(Implicitly_Designated_Type): New function.
(Object_Access_Level): Fix typo.
* sem_warn.adb (Check_Unset_Reference): Test Comes_From_Source
on the original node.

4 years ago[Ada] Remove a dubious optimization for Object Specific Data dispatching
Piotr Trojanek [Mon, 16 Mar 2020 20:29:27 +0000 (21:29 +0100)]
[Ada] Remove a dubious optimization for Object Specific Data dispatching

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

gcc/ada/

* exp_disp.adb: Minor reformatting.
* exp_aggr.adb (Is_Static_Dispatch_Table_Aggregate): Recognize
aggregates of the Ada.Tags.Object_Specific_Data type as static.
* sem_aggr.adb (Check_Static_Discriminated_Subtype): Deconstruct
and do not call it from Build_Constrained_Itype.