Commit Graph

177554 Commits

Author SHA1 Message Date
Justin Squirek
695a27fbb7 [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.
2020-06-12 04:29:10 -04:00
Bob Duff
5fdf7945d9 [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.
2020-06-12 04:29:09 -04:00
Eric Botcazou
90e9751757 [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.
2020-06-12 04:29:08 -04:00
Alexandre Oliva
eda72164ad 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.
2020-06-12 05:08:33 -03:00
Martin Liška
47fe96341d
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.
2020-06-12 09:32:53 +02:00
Kewen Lin
04f0546e3e 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.
2020-06-12 02:18:20 -05:00
Richard Sandiford
3a179232a7 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.
2020-06-12 08:16:48 +01:00
H.J. Lu
3dcea658c9 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.
2020-06-11 20:45:19 -07:00
GCC Administrator
e68e80c8dd Daily bump. 2020-06-12 00:16:29 +00:00
Patrick Palka
11c7261128 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.
2020-06-11 16:33:41 -04:00
Jonathan Wakely
df665e568d 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.
2020-06-11 20:22:33 +01:00
Harald Anlauf
393ccb7256 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>
2020-06-11 21:07:49 +02:00
Harald Anlauf
7fd614ee81 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.
2020-06-11 20:29:45 +02:00
Iain Sandoe
1c140cfbfa 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.
2020-06-11 19:27:17 +01:00
Jonathan Wakely
b32eea9c0c 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.
2020-06-11 18:41:37 +01:00
Tamar Christina
8f896fe5cd 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.
2020-06-11 18:19:44 +01:00
Harald Anlauf
87af4f4045 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.
2020-06-11 15:48:56 +02:00
José Rui Faustino de Sousa
2ee70f5d16 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.
2020-06-11 15:16:37 +02:00
David Edelsohn
19019cd301 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.
2020-06-11 09:11:42 -04:00
Martin Liska
3b3ad4af02
Fix formatting in rs6000.c.
gcc/ChangeLog:

	* config/rs6000/rs6000.c (rs6000_density_test): Fix GNU coding
	style.
2020-06-11 15:00:45 +02:00
David Edelsohn
c61f678a4f 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.
2020-06-11 08:53:16 -04:00
Martin Liska
444035eafa
rs6000: skip debug info statements
gcc/ChangeLog:

	PR target/95627
	* config/rs6000/rs6000.c (rs6000_density_test): Skip debug
	statements.
2020-06-11 14:51:15 +02:00
José Rui Faustino de Sousa
2ff0f48819 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.
2020-06-11 14:21:38 +02:00
Martin Liska
be11812eef
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.
2020-06-11 13:57:10 +02:00
José Rui Faustino de Sousa
6a07010b77 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.
2020-06-11 13:25:59 +02:00
Eric Botcazou
419c355c7a [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.
2020-06-11 05:53:56 -04:00
Eric Botcazou
12ad5b9ccc [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.
2020-06-11 05:53:55 -04:00
Bob Duff
eedafec2f2 [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.
2020-06-11 05:53:54 -04:00
Piotr Trojanek
0bfa32f922 [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.
2020-06-11 05:53:53 -04:00
Piotr Trojanek
5c4adf10c5 [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.
2020-06-11 05:53:53 -04:00
Piotr Trojanek
cbbe41d1f7 [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.
2020-06-11 05:53:52 -04:00
Eric Botcazou
adffc36723 [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.
2020-06-11 05:53:51 -04:00
Piotr Trojanek
cf0a011c2b [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.
2020-06-11 05:53:50 -04:00
Ed Schonberg
eb85899d60 [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.
2020-06-11 05:53:49 -04:00
Steve Baird
4127ebece7 [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.
2020-06-11 05:53:48 -04:00
Piotr Trojanek
0c25b78380 [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.
2020-06-11 05:53:47 -04:00
Bob Duff
d84eb7c511 [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.
2020-06-11 05:53:46 -04:00
Piotr Trojanek
428d49a5a8 [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.
2020-06-11 05:53:45 -04:00
Piotr Trojanek
c5b55e683c [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.
2020-06-11 05:53:44 -04:00
Piotr Trojanek
38f44fd6af [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.
2020-06-11 05:53:44 -04:00
Piotr Trojanek
fc4c73488f [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.
2020-06-11 05:53:43 -04:00
Eric Botcazou
f715a5bd3f [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.
2020-06-11 05:53:42 -04:00
Piotr Trojanek
c7cb99f885 [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.
2020-06-11 05:53:41 -04:00
Piotr Trojanek
6dc5653584 [Ada] Make Object Specific Dispatch tables constant
2020-06-11  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* exp_disp.adb (Make_Secondary_DT): Internally generated OSD
	tables are now constant.
2020-06-11 05:53:40 -04:00
Piotr Trojanek
08380342a4 [Ada] Remove useless code in Backend_Processing_Possible
2020-06-11  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* exp_aggr.adb (Backend_Processing_Possible): Remove useless
	call.
2020-06-11 05:53:39 -04:00
Piotr Trojanek
c90f2b2ec5 [Ada] Fix punctuation in comment of Building_Static_Dispatch_Tables
2020-06-11  Piotr Trojanek  <trojanek@adacore.com>

gcc/ada/

	* opt.ads (Building_Static_Dispatch_Tables): Fix punctuation in
	comment.
2020-06-11 05:53:38 -04:00
Arnaud Charlet
0c1d3334c6 [Ada] AI12-0356 Root_Storage_Pool_With_Subpools & Preelaborable_Init
2020-06-11  Arnaud Charlet  <charlet@adacore.com>

gcc/ada/

	* libgnat/s-stposu.ads (Root_Storage_Pool_With_Subpools,
	Root_Subpool): Mark with Preelaborable_Initialization.
2020-06-11 05:53:38 -04:00
Javier Miranda
8c1bec899a [Ada] Crash on dispatching conditional entry call
2020-06-11  Javier Miranda  <miranda@adacore.com>

gcc/ada/

	* exp_ch9.adb (Expand_N_Conditional_Entry_Call): Replace call to
	New_Copy_List by calls to the new routine
	New_Copy_Separate_List.
	* sem_util.ads (New_Copy_Separate_List, New_Copy_Separate_Tree):
	New routines.

	* sem_util.adb (New_Copy_Separate_List, New_Copy_Separate_Tree):
	New routines.
	(New_Copy_Tree): Extend the machinery that detects syntactic
	nodes to handle lists of indentifiers with field More_Ids;
	otherwise such nodes are erroneously handled as semantic nodes.
	Copy aspect specifications attached to nodes.
	* sem_ch12.adb (Copy_Generic_Node): Protect reading attribute
	Etype.
2020-06-11 05:53:37 -04:00
Bob Duff
0dd9f1b83f [Ada] Fix unnesting crash with Predicate_Failure/no pred
2020-06-11  Bob Duff  <duff@adacore.com>

gcc/ada/

	* sem_ch13.adb (Analyze_Aspect_Specifications): Do not set the
	Has_Predicates flag when the Predicate_Failure aspect is seen.
	It is legal (but pointless) to use this aspect without a
	predicate.  If we set the flag, we generate a half-baked
	Predicate procedure, and if that procedure is nested, it causes
	unnesting to crash.
2020-06-11 05:53:36 -04:00
Bob Duff
a91b983325 [Ada] Put_Image attribute
2020-06-11  Bob Duff  <duff@adacore.com>

gcc/ada/

	* exp_put_image.adb (Build_Record_Put_Image_Procedure): Remove
	special processing of protected types, because those are handled
	by Build_Protected_Put_Image_Call.
	(Enable_Put_Image): Use the switch -gnatd_z to control enabling
	of Put_Image. Disable Put_Image for types in Remote_Types
	packages.
	* debug.adb: Document -gnatd_z switch.
	* exp_imgv.adb, libgnat/a-stteou.ads, opt.ads: Minor cleanups.
2020-06-11 05:53:35 -04:00