aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2020-06-12[Ada] Implement AI12-0175 Preelaborable packages with address clausesEric Botcazou5-19/+181
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.
2020-06-12[Ada] Remove unnecessary use_clause from stringt.adsBob Duff1-1/+1
2020-06-12 Bob Duff <duff@adacore.com> gcc/ada/ * stringt.ads: Remove "use System;".
2020-06-12[Ada] Small cleanup in handling of Ada 2012 implicit dereferencesEric Botcazou4-46/+13
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.
2020-06-12[Ada] Compiler crash on instance with overloaded actual and aspectsEd Schonberg1-18/+69
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.
2020-06-12[Ada] Put_Image attributeBob Duff4-29/+34
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.
2020-06-12[Ada] Fix typos in commentsEric Botcazou1-12/+12
2020-06-12 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * sem_elab.adb: Fix typos in comments.
2020-06-12[Ada] Missing accessibility error on object in type conversionJustin Squirek1-1/+12
2020-06-12 Justin Squirek <squirek@adacore.com> gcc/ada/ * sem_util.adb (Object_Access_Level): Add processing of implicit dereferences.
2020-06-12[Ada] Ada2020: update Big_Numbers.* specsBob Duff7-31/+41
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[Ada] Implement AI12-0269 No_Return for functionsEric Botcazou7-25/+101
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-12match any program name when pruning collect messagesAlexandre Oliva1-2/+2
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-12Fix few -Wformat-diag warnings.Martin Liška3-8/+8
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-12vect: Factor out and rename some functions/macrosKewen Lin4-93/+128
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-12recog: Use parameter packs for operator()Richard Sandiford1-35/+5
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-11x86: Add UNSPECV_PATCHABLE_AREAH.J. Lu11-56/+296
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-12Daily bump.GCC Administrator6-1/+564
2020-06-11c++: constrained class template friend [PR93467]Patrick Palka4-0/+60
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-11PR fortran/95611 - ICE in access_attr_decl, at fortran/decl.c:9075Harald Anlauf2-1/+8
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-11PR fortran/95544 - Fix ICE in NULL() argument to intrinsicsHarald Anlauf4-12/+46
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-11coroutines: Handle lambda closure pointers like 'this'.Iain Sandoe1-18/+5
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-11Testsuite: Mark check_effective_target_exceptions_enabled test as C++ test ↵Tamar Christina1-0/+1
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-11PR fortran/95503 - Fix ICE in gfc_is_simply_contiguous, at fortran/expr.c:5844Harald Anlauf2-1/+10
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-11PR95331 - Unlimited polymorphic arrays have wrong bounds.José Rui Faustino de Sousa2-4/+172
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-11aix: xfail pure-virtual1.C expects weak __cxa_pure_virtualDavid Edelsohn1-0/+1
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-11Fix formatting in rs6000.c.Martin Liska1-1/+1
gcc/ChangeLog: * config/rs6000/rs6000.c (rs6000_density_test): Fix GNU coding style.
2020-06-11aix: Don't implicitly include inttypes.hDavid Edelsohn1-0/+4
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-11rs6000: skip debug info statementsMartin Liska1-0/+3
gcc/ChangeLog: PR target/95627 * config/rs6000/rs6000.c (rs6000_density_test): Skip debug statements.
2020-06-11Wrong array section bounds when passing to an intent-in pointer dummy.José Rui Faustino de Sousa4-106/+219
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-11Patch to Bug 94022 - Array slices of assumed-size arrays.José Rui Faustino de Sousa2-0/+134
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[Ada] Fix missing insertion of explicit dereference in instanceEric Botcazou1-0/+11
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[Ada] Fix assertion failure on entry call through unchecked conversionEric Botcazou1-7/+4
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[Ada] Make libgnat/a-nbnbin__gmp.adb compileBob Duff1-30/+23
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[Ada] Refine type of a routine parameter from Node_Id to Entity_IdPiotr Trojanek1-2/+2
2020-06-11 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * sem_aggr.adb (Get_Value): Refine type of the Compon parameter.
2020-06-11[Ada] Refine type of a counter-like variablePiotr Trojanek1-1/+1
2020-06-11 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * sem_aggr.adb (Resolve_Record_Aggregate): Refine type of Others_Box.
2020-06-11[Ada] Iterate with procedural version of Next routine where possiblePiotr Trojanek15-33/+33
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[Ada] Fix wrong access to large bit-packed arrays with reverse SSOEric Botcazou4-14/+64
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[Ada] Update SPARK RM rule numbers after removing a redundant rulePiotr Trojanek4-10/+10
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[Ada] Additional warnings on overlapping actuals of composite typesEd Schonberg1-109/+138
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[Ada] Allow specifying volatility refinement aspects for typesSteve Baird10-184/+647
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[Ada] Avoid "others => <>" association in resolved record aggregatesPiotr Trojanek1-11/+5
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[Ada] Put_Image attributeBob Duff3-8/+22
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[Ada] Skip unnecessary iterations over constraint expressionsPiotr Trojanek1-1/+4
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[Ada] Move duplicated routines for building itypes to Sem_UtilPiotr Trojanek4-213/+231
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[Ada] Refine type for sorting case-choices tablesPiotr Trojanek1-6/+4
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[Ada] Create constrained itypes for nested record aggregatesPiotr Trojanek1-63/+101
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[Ada] Consolidate handling of implicit dereferences into semantic analysisEric Botcazou13-366/+174
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[Ada] Remove a dubious optimization for Object Specific Data dispatchingPiotr Trojanek3-69/+4
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[Ada] Make Object Specific Dispatch tables constantPiotr Trojanek1-0/+1
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[Ada] Remove useless code in Backend_Processing_PossiblePiotr Trojanek1-1/+0
2020-06-11 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * exp_aggr.adb (Backend_Processing_Possible): Remove useless call.
2020-06-11[Ada] Fix punctuation in comment of Building_Static_Dispatch_TablesPiotr Trojanek1-6/+6
2020-06-11 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * opt.ads (Building_Static_Dispatch_Tables): Fix punctuation in comment.
2020-06-11[Ada] AI12-0356 Root_Storage_Pool_With_Subpools & Preelaborable_InitArnaud Charlet1-0/+2
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.