aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2020-07-11ChangeLog: add missing Bugzilla PR.David Edelsohn1-0/+1
2020-07-11value-range: Fix handling of POLY_INT_CST anti-ranges [PR96146]Richard Sandiford2-19/+48
The range infrastructure has code to decompose POLY_INT_CST ranges to worst-case integer bounds. However, it had the fundamental flaw (obvious in hindsight) that it applied to anti-ranges too, meaning that a range 2+2X would end up with a range of ~[2, +INF], i.e. [-INF, 1]. This patch decays to varying in that case instead. I'm still a bit uneasy about this. ISTM that in terms of generality: SSA_NAME => POLY_INT_CST => INTEGER_CST => ADDR_EXPR I.e. an SSA_NAME could store a POLY_INT_CST and a POLY_INT_CST could store an INTEGER_CST (before canonicalisation). POLY_INT_CST is also “as constant as” ADDR_EXPR (well, OK, only some ADDR_EXPRs are run-time rather than link-time constants, whereas all POLY_INT_CSTs are, but still). So it seems like we should at least be able to treat POLY_INT_CST as symbolic. On the other hand, I don't have any examples in which that would be useful. gcc/ PR tree-optimization/96146 * value-range.cc (value_range::set): Only decompose POLY_INT_CST bounds to integers for VR_RANGE. Decay to VR_VARYING for anti-ranges involving POLY_INT_CSTs. gcc/testsuite/ PR tree-optimization/96146 * gcc.target/aarch64/sve/acle/general/pr96146.c: New test.
2020-07-10RISC-V: Fix regular expression in target-specific testSimon Cook1-1/+1
Some square brackets were missing escape characters, causing DejaGnu to try and call a proc with the name "at". gcc/testsuite/ChangeLog: * gcc.target/riscv/read-thread-pointer.c: Fix escaping on regular expression.
2020-07-11Daily bump.GCC Administrator6-1/+587
2020-07-10aix: only create named section for VAR_DECL or FUNCTION_DECLDavid Edelsohn1-1/+1
get_constant_section() can be passed constant-like non-DECLs, such as CONSTRUCTOR or STRING_CST, which make DECL_SECTION_NAME unhappy (asserted in symtab_node::get). This patch ensures that xcoff select section only invokes resolve_unique_section() for DECLs. gcc/ChangeLog 2020-07-10 David Edelsohn <dje.gcc@gmail.com> * config/rs6000/rs6000.c (rs6000_xcoff_select_section): Only create named section for VAR_DECL or FUNCTION_DECL.
2020-07-10c: Add C2X BOOL_MAX and BOOL_WIDTH to limits.hJoseph Myers3-0/+40
C2X adds BOOL_MAX and BOOL_WIDTH macros to <limits.h>. As GCC only supports values 0 and 1 for _Bool (regardless of the number of bits in the representation, other bits are padding bits and if any of them are nonzero, the representation is a trap representation), the values of those macros can just be hardcoded directly in <limits.h> rather than needing corresponding predefined macros. Bootstrapped with no regressions on x86_64-pc-linux-gnu. gcc/ * glimits.h [__STDC_VERSION__ > 201710L] (BOOL_MAX, BOOL_WIDTH): New macros. gcc/testsuite/ * gcc.dg/c11-bool-limits-1.c, gcc.dg/c2x-bool-limits-1.c: New tests.
2020-07-10rs6000: Add execution tests for mma builtins [v4]Aaron Sawdey4-0/+429
This patch adds execution tests that use the MMA builtins and check for the right answer, and new tests that checks whether __builtin_cpu_supports and __builtin_cpu_is return sane answers for power10. 2020-06-30 Rajalakshmi Srinivasaraghavan <rajis@linux.vnet.ibm.com> Aaron Sawdey <acsawdey@linux.ibm.com> gcc/testsuite/ * gcc.target/powerpc/p10-identify.c: New file. * gcc.target/powerpc/p10-arch31.c: New file. * gcc.target/powerpc/mma-single-test.c: New file. * gcc.target/powerpc/mma-double-test.c: New file.
2020-07-10Improve shrink wrapping debug outputAlexander Popov1-1/+6
Currently if requires_stack_frame_p() returns true for some insn, the shrink-wrapping debug output contains only the number of a block containing that insn. But it is very useful to see the particular insn that requires the prologue. Let's call print_rtl_single to display that insn in the following pass dump. gcc/ * shrink-wrap.c (try_shrink_wrapping): Improve debug output.
2020-07-10PR fortran/95980 - ICE in get_unique_type_string, at fortran/class.c:485Harald Anlauf4-7/+31
In SELECT TYPE, the argument may be an incorrectly specified unlimited CLASS variable. Avoid NULL pointer dereferences for clean error recovery. gcc/fortran/ PR fortran/95980 * class.c (gfc_add_component_ref, gfc_build_class_symbol): Add checks for NULL pointer dereference. * primary.c (gfc_variable_attr): Likewise. * resolve.c (resolve_variable, resolve_assoc_var) (resolve_fl_var_and_proc, resolve_fl_variable_derived) (resolve_symbol): Likewise.
2020-07-10PR fortran/96086 - ICE in gfc_match_select_rank, at fortran/match.c:6645Harald Anlauf3-3/+14
Handle NULL pointer dereference on SELECT RANK with an invalid assumed-rank array declaration. gcc/fortran/ PR fortran/96086 * match.c (gfc_match_select_rank): Catch NULL pointer dereference. * resolve.c (resolve_assoc_var): Catch NULL pointer dereference that may occur after an illegal declaration.
2020-07-10libgo: update to Go 1.14.4 releaseIan Lance Taylor1-1/+1
Reviewed-on: https://go-review.googlesource.com/c/gofrontend/+/241999
2020-07-10expr: Move reduce_bit_field target mode check [PR96151]Richard Sandiford1-4/+5
In some cases, expand_expr_real_2 prefers to use the mode of the caller-suggested target instead of the mode of the expression when passing values to reduce_to_bit_field_precision. E.g.: else if (target == 0) op0 = convert_to_mode (mode, op0, TYPE_UNSIGNED (TREE_TYPE (treeop0))); else { convert_move (target, op0, TYPE_UNSIGNED (TREE_TYPE (treeop0))); op0 = target; } where “op0” might not have “mode” for the “else” branch, but does for all the others. reduce_to_bit_field_precision discards the suggested target if it has the wrong mode. This patch moves that to expand_expr_real_2 instead (conditional on reduce_bit_field). gcc/ PR middle-end/96151 * expr.c (expand_expr_real_2): When reducing bit fields, clear the target if it has a different mode from the expression. (reduce_to_bit_field_precision): Don't do that here. Instead assert that the target already has the correct mode.
2020-07-10arm: Treat GNU and Advanced SIMD vectors as distinct [PR92789, PR95726]Richard Sandiford3-15/+79
This is an arm version of aarch64 patch r11-1741. The approach is essentially identical, not much more than s/aarch64/arm/. To recap, PR95726 is about template look-up for things like: foo<float vecf __attribute__((vector_size(16)))> foo<float32x4_t> The immediate cause of the problem is that the hash function usually returns different hashes for these types, yet the equality function thinks they are equal. This then raises the question of how the types are supposed to be treated. The answer we chose for AArch64 was that the GNU vector type should be treated as distinct from float32x4_t, but that each type should implicitly convert to the other. This would mean that, as far as the PR is concerned, the hashing function is right to (sometimes) treat the types differently and the equality function is wrong to treat them as the same. The most obvious way to enforce the type difference is to use a target-specific type attribute. That on its own is enough to fix the PR. The difficulty is deciding whether the knock-on effects are acceptable. One obvious effect is that GCC then rejects: typedef float vecf __attribute__((vector_size(16))); vecf x; float32x4_t &z = x; on the basis that the types are no longer reference-compatible. For AArch64 we took the approach that this was the correct behaviour. It is also consistent with current Clang. A trickier question is whether: vecf x; float32x4_t y; … c ? x : y … should be valid, and if so, what its type should be [PR92789]. As explained in the comment in the testcase, GCC and Clang both accepted this, but GCC chose the “then” type while Clang chose the “else” type. This can lead to different mangling for (probably artificial) corner cases, as seen for “sel1” and “sel2” in the testcase. Adding the attribute makes GCC reject the conditional expression as ambiguous. For AArch64 we took the approach that this too is the correct behaviour, for the reasons described in the testcase. However, it does seem to have the potential to break existing code. gcc/ PR target/92789 PR target/95726 * config/arm/arm.c (arm_attribute_table): Add "Advanced SIMD type". (arm_comp_type_attributes): Check that the "Advanced SIMD type" attributes are equal. * config/arm/arm-builtins.c: Include stringpool.h and attribs.h. (arm_mangle_builtin_vector_type): Use the mangling recorded in the "Advanced SIMD type" attribute. (arm_init_simd_builtin_types): Add an "Advanced SIMD type" attribute to each Advanced SIMD type, using the mangled type as the attribute's single argument. gcc/testsuite/ PR target/92789 PR target/95726 * g++.target/arm/pr95726.C: New test.
2020-07-10RS6000, add VSX mask manipulation supportCarl Love8-1/+899
gcc/ChangeLog 2020-07-09 Carl Love <cel@us.ibm.com> * config/rs6000/vsx.md (VSX_MM): New define_mode_iterator. (VSX_MM4): New define_mode_iterator. (vec_mtvsrbmi): New define_insn. (vec_mtvsr_<mode>): New define_insn. (vec_cntmb_<mode>): New define_insn. (vec_extract_<mode>): New define_insn. (vec_expand_<mode>): New define_insn. (define_c_enum unspec): Add entries UNSPEC_MTVSBM, UNSPEC_VCNTMB, UNSPEC_VEXTRACT, UNSPEC_VEXPAND. * config/rs6000/altivec.h ( vec_genbm, vec_genhm, vec_genwm, vec_gendm, vec_genqm, vec_cntm, vec_expandm, vec_extractm): Add defines. * config/rs6000/rs6000-builtin.def: Add defines BU_P10_2, BU_P10_1. (BU_P10_1): Add definitions for mtvsrbm, mtvsrhm, mtvsrwm, mtvsrdm, mtvsrqm, vexpandmb, vexpandmh, vexpandmw, vexpandmd, vexpandmq, vextractmb, vextractmh, vextractmw, vextractmd, vextractmq. (BU_P10_2): Add definitions for cntmbb, cntmbh, cntmbw, cntmbd. (BU_P10_OVERLOAD_1): Add definitions for mtvsrbm, mtvsrhm, mtvsrwm, mtvsrdm, mtvsrqm, vexpandm, vextractm. (BU_P10_OVERLOAD_2): Add defition for cntm. * config/rs6000/rs6000-call.c (rs6000_expand_binop_builtin): Add checks for CODE_FOR_vec_cntmbb_v16qi, CODE_FOR_vec_cntmb_v8hi, CODE_FOR_vec_cntmb_v4si, CODE_FOR_vec_cntmb_v2di. (altivec_overloaded_builtins): Add overloaded argument entries for P10_BUILTIN_VEC_MTVSRBM, P10_BUILTIN_VEC_MTVSRHM, P10_BUILTIN_VEC_MTVSRWM, P10_BUILTIN_VEC_MTVSRDM, P10_BUILTIN_VEC_MTVSRQM, P10_BUILTIN_VEC_VCNTMBB, P10_BUILTIN_VCNTMBB, P10_BUILTIN_VCNTMBH, P10_BUILTIN_VCNTMBW, P10_BUILTIN_VCNTMBD, P10_BUILTIN_VEXPANDMB, P10_BUILTIN_VEXPANDMH, P10_BUILTIN_VEXPANDMW, P10_BUILTIN_VEXPANDMD, P10_BUILTIN_VEXPANDMQ, P10_BUILTIN_VEXTRACTMB, P10_BUILTIN_VEXTRACTMH, P10_BUILTIN_VEXTRACTMW, P10_BUILTIN_VEXTRACTMD, P10_BUILTIN_VEXTRACTMQ. (builtin_function_type): Add case entries for P10_BUILTIN_MTVSRBM, P10_BUILTIN_MTVSRHM, P10_BUILTIN_MTVSRWM, P10_BUILTIN_MTVSRDM, P10_BUILTIN_MTVSRQM, P10_BUILTIN_VCNTMBB, P10_BUILTIN_VCNTMBH, P10_BUILTIN_VCNTMBW, P10_BUILTIN_VCNTMBD, P10_BUILTIN_VEXPANDMB, P10_BUILTIN_VEXPANDMH, P10_BUILTIN_VEXPANDMW, P10_BUILTIN_VEXPANDMD, P10_BUILTIN_VEXPANDMQ. * config/rs6000/rs6000-builtin.def (altivec_overloaded_builtins): Add entries for MTVSRBM, MTVSRHM, MTVSRWM, MTVSRDM, MTVSRQM, VCNTM, VEXPANDM, VEXTRACTM. gcc/testsuite/ChangeLog 2020-07-09 Carl Love <cel@us.ibm.com> * gcc.target/powerpc/vsx_mask-count-runnable.c: New test case. * gcc.target/powerpc/vsx_mask-expand-runnable.c: New test case. * gcc.target/powerpc/vsx_mask-extract-runnable.c: New test case. * gcc.target/powerpc/vsx_mask-move-runnable.c: New test case.
2020-07-10rs6000: Fix __builtin_altivec_mask_for_load to use correct typeBill Seurer, 507-253-3502, seurer@us.ibm.com1-1/+5
gcc/ChangeLog: PR target/95581 * config/rs6000/rs6000-call.c: Add new type v16qi_ftype_pcvoid. (altivec_init_builtins) Change __builtin_altivec_mask_for_load to use v16qi_ftype_pcvoid with correct number of parameters.
2020-07-10testsuite: Fix WPA scanning.Martin Liska1-2/+2
gcc/testsuite/ChangeLog: PR gcov-profile/96148 * lib/scanwpaipa.exp: Fix wpa dump file suffix the same way as other in the file.
2020-07-10c++: Support non-type template parms of union type.Jason Merrill3-9/+34
Another thing newly allowed by P1907R1. The ABI group has discussed representing unions with designated initializers, and has separately specified how to represent designators; this patch implements both. gcc/cp/ChangeLog: * tree.c (structural_type_p): Allow unions. * mangle.c (write_expression): Express unions with a designator. libiberty/ChangeLog: * cp-demangle.c (cplus_demangle_operators): Add di, dx, dX. (d_expression_1): Handle di and dX. (is_designated_init, d_maybe_print_designated_init): New. (d_print_comp_inner): Use d_maybe_print_designated_init. * testsuite/demangle-expected: Add designator tests. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/nontype-class-union1.C: New test.
2020-07-10c++: Allow floating-point template parms in C++20.Jason Merrill12-59/+89
P1907R1 made various adjustments to non-type template parameters, notably introducing the notion of "structural type". I implemented an early version of that specification in r10-4426, but it was adjusted in the final paper to allow more. This patch implements allowing template parameters of floating-point type; still to be implemented are unions and subobjects. gcc/cp/ChangeLog: * pt.c (convert_nontype_argument): Handle REAL_TYPE. (invalid_nontype_parm_type_p): Allow all structural types. * tree.c (structural_type_p): Use SCALAR_TYPE_P. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/pr81246.C: No error in C++20. * g++.dg/cpp0x/variadic74.C: No error in C++20. * g++.dg/cpp1z/nontype-auto3.C: No error in C++20. * g++.dg/template/crash106.C: No error in C++20. * g++.dg/template/crash119.C: No error in C++20. * g++.dg/template/nontype12.C: No error in C++20. * g++.dg/template/void3.C: Don't require follow-on message. * g++.dg/template/void7.C: Don't require follow-on message. * g++.dg/template/void9.C: Don't require follow-on message.
2020-07-10c++: [[no_unique_address]] fixes. [PR96105]Jason Merrill4-7/+92
We were wrongly checking is_empty_class on the result of strip_array_types rather than the actual field type. We weren't considering the alignment of the data member. We needed to handle unions the same way as layout_nonempty_base_or_field. gcc/cp/ChangeLog: PR c++/96105 PR c++/96052 PR c++/95976 * class.c (check_field_decls): An array of empty classes is not an empty data member. (layout_empty_base_or_field): Handle explicit alignment. Fix union handling. gcc/testsuite/ChangeLog: PR c++/96105 PR c++/96052 PR c++/95976 * g++.dg/cpp2a/no_unique_address4.C: New test. * g++.dg/cpp2a/no_unique_address5.C: New test. * g++.dg/cpp2a/no_unique_address6.C: New test.
2020-07-10x86: Check TARGET_AVX512VL when enabling FMAH.J. Lu1-1/+4
Check TARGET_AVX512VL when enabling FMA to avoid gcc.target/i386/avx512er-vrsqrt28ps-3.c:25:1: error: unrecognizable insn: (insn 29 28 30 6 (set (reg:V8SF 108) (fma:V8SF (reg:V8SF 106) (reg:V8SF 105) (reg:V8SF 110))) when TARGET_AVX512VL isn't enabled. PR target/96144 * config/i386/i386-expand.c (ix86_emit_swsqrtsf): Check TARGET_AVX512VL when enabling FMA.
2020-07-10arm: Implement Armv8.1-M low overhead loopsAndrea Corallo16-6/+459
gcc/ChangeLog 2020-06-18 Andrea Corallo <andrea.corallo@arm.com> Mihail-Calin Ionescu <mihail.ionescu@arm.com> Iain Apreotesei <iain.apreotesei@arm.com> * config/arm/arm-protos.h (arm_target_insn_ok_for_lob): New prototype. * config/arm/arm.c (TARGET_INVALID_WITHIN_DOLOOP): Define. (arm_invalid_within_doloop): Implement invalid_within_doloop hook. (arm_target_insn_ok_for_lob): New function. * config/arm/arm.h (TARGET_HAVE_LOB): Define macro. * config/arm/thumb2.md (*doloop_end_internal, doloop_begin) (dls_insn): Add new patterns. (doloop_end): Modify to select LR when LOB is available. * config/arm/unspecs.md: Add new unspec. * doc/sourcebuild.texi (arm_v8_1_lob_ok) (arm_thumb2_ok_no_arm_v8_1_lob): Document new target supports options. gcc/testsuite/ChangeLog 2020-06-18 Andrea Corallo <andrea.corallo@arm.com> Mihail-Calin Ionescu <mihail.ionescu@arm.com> Iain Apreotesei <iain.apreotesei@arm.com> * gcc.target/arm/lob.h: New header. * gcc.target/arm/lob1.c: New testcase. * gcc.target/arm/lob2.c: Likewise. * gcc.target/arm/lob3.c: Likewise. * gcc.target/arm/lob4.c: Likewise. * gcc.target/arm/lob5.c: Likewise. * gcc.target/arm/lob6.c: Likewise. * gcc.target/arm/unsigned-extend-2.c: Do not run when generating low loop overhead. * gcc.target/arm/ivopts.c: Fix check for low loop overhead. * lib/target-supports.exp (check_effective_target_arm_v8_1_lob) (check_effective_target_arm_thumb2_ok_no_arm_v8_1_lob): New procs.
2020-07-10[Ada] Revert mistaken negation related to references to labelsPiotr Trojanek1-2/+2
gcc/ada/ * sem_ch8.adb (Find_Direct_Name): Fix code to match the comment.
2020-07-10[Ada] Add warning for overlays changing scalar storage orderEric Botcazou1-4/+6
gcc/ada/ * sem_ch13.adb (Analyze_Attribute_Definition_Clause) <Address>: Issue an unconditional warning for an overlay that changes the scalar storage order.
2020-07-10[Ada] Fix detection of actual parameters for procedure callsPiotr Trojanek1-10/+24
gcc/ada/ * sem_ch8.adb (Is_Actual_Parameter): Fix processing when parent is a procedure call statement; extend comment.
2020-07-10[Ada] Ada2020: AI12-0368 Declare expressions can be staticBob Duff4-22/+122
gcc/ada/ * sem_res.adb (Resolve_Expression_With_Actions): Check the rules of AI12-0368, and mark the declare expression as static or known at compile time as appropriate. * sem_ch4.adb: Minor reformatting. * libgnat/a-stoufo.ads, libgnat/a-stoufo.adb: Allow up to 9 replacement parameters. I'm planning to use this in the test case for this ticket.
2020-07-10[Ada] Spurious error on parameterless acccess_to_subprogramEd Schonberg2-2/+9
gcc/ada/ * exp_ch3.adb (Build_Access_Subprogram_Wrapper_Body): Create a proper signature when the access type denotes a parameterless subprogram. * exp_ch6.adb (Expand_Call): Handle properly a parameterless indirect call when the corresponding access type has contracts.
2020-07-10[Ada] Further improve the expansion of array aggregatesEric Botcazou1-73/+125
gcc/ada/ * exp_aggr.adb (Convert_To_Positional): Add Dims local variable and pass it in calls to Is_Flat and Flatten. (Check_Static_Components): Pass Dims in call to Is_Static_Element. (Nonflattenable_Next_Aggr): New predicate. (Flatten): Add Dims parameter and Expr local variable. Call Nonflattenable_Next_Aggr in a couple of places. In the case when an Others choice is present, check that the element is either static or a nested aggregate that can be flattened, before disregarding the replication limit for elaboration purposes. Check that a nested array is flattenable in the case of a multidimensional array in any position. Remove redundant check in the Others case and pass Dims in call to Is_Static_Element. Use Expr variable. (Is_Flat): Change type of Dims parameter from Int to Nat. (Is_Static_Element): Add Dims parameter. Replace tests on literals with call to Compile_Time_Known_Value. If everything else failed and the dimension is 1, preanalyze the expression before calling again Compile_Time_Known_Value on it. Return true for null. (Late_Expansion): Do not expand further if the assignment to the target can be done directly by the back end.
2020-07-10[Ada] Preserve casing of output filesArnaud Charlet2-41/+51
gcc/ada/ * osint-c.adb (Set_File_Name): Preserve casing of file. * osint.adb (File_Names_Equal): New. (Executable_Name): Use File_Equal instead of Canonical_Case_File_Name.
2020-07-10[Ada] Fix memory leak in routine Wait_On_SocketPascal Obry1-7/+15
gcc/ada/ * libgnat/g-socket.adb (Wait_On_Socket): Fix memory leaks and file descriptor leaks. A memory leak was created each time the routine was called without a selector (Selector = Null). Also, in case of exception in the routine a memory leak and descriptor leak was created as the created file selector was not closed.
2020-07-10[Ada] Minor style fixesPascal Obry1-8/+10
gcc/ada/ * libgnat/g-socket.adb: Minor style fixes.
2020-07-10[Ada] Potentially unevaluated nested expressionsJavier Miranda1-92/+119
gcc/ada/ * sem_util.adb (Immediate_Context_Implies_Is_Potentially_Unevaluated): New subprogram. (Is_Potentially_Unevaluated): Do not stop climbing the tree on the first candidate subexpression; required to handle nested expressions.
2020-07-10[Ada] Reformatting and typo correctionsGary Dismukes5-67/+68
gcc/ada/ * exp_aggr.adb, exp_spark.adb, sem_ch13.ads, sem_ch13.adb, snames.ads-tmpl: Minor reformatting and typo fixes.
2020-07-10[Ada] Fix detection of volatile properties in SPARKYannick Moy1-0/+8
gcc/ada/ * sem_util.adb (Has_Enabled_Property): Add handling of non-variable objects.
2020-07-10[Ada] Cleanup excessive conditions in Check_CompletionPiotr Trojanek1-15/+17
gcc/ada/ * sem_ch3.adb (Check_Completion): Refactor chained if-then-elsif-... statement to be more like a case statement (note: we can't simply use case statement because of Is_Intrinsic_Subprogram in the first condition).
2020-07-10[Ada] Remove references to non-existing E_Protected_ObjectPiotr Trojanek4-21/+2
gcc/ada/ * einfo.ads (E_Protected_Object): Enumeration literal removed. * lib-xref.ads (Xref_Entity_Letters): Remove reference to removed literal. * sem_ch3.adb (Check_Completion): Likewise. * sem_util.adb (Has_Enabled_Property): Likewise.
2020-07-10[Ada] Use small limit for aggregates inside subprogramsArnaud Charlet14-174/+196
gcc/ada/ * exp_aggr.adb (Max_Aggregate_Size): Use small limit for aggregate inside subprograms. * sprint.adb (Sprint_Node_Actual [N_Object_Declaration]): Do not print the initialization expression if the No_Initialization flag is set. * sem_util.ads, sem_util.adb (Predicate_Enabled): New. * exp_ch4.adb (Expand_N_Type_Conversion): Code cleanup and apply predicate check consistently. * exp_ch6.adb (Expand_Actuals.By_Ref_Predicate_Check): Ditto. * sem_ch3.adb (Analyze_Object_Declaration): Ditto. * exp_ch3.adb (Build_Assignment): Revert handling of predicate check for allocators with qualified expressions, now handled in Freeze_Expression directly. * sem_aggr.adb: Fix typos. * checks.adb: Code refactoring: use Predicate_Enabled. (Apply_Predicate_Check): Code cleanup. * freeze.adb (Freeze_Expression): Freeze the subtype mark before a qualified expression on an allocator. * exp_util.ads, exp_util.adb (Within_Internal_Subprogram): Renamed Predicate_Check_In_Scope to clarify usage, refine handling of predicates within init procs which should be enabled when the node comes from source. * sem_ch13.adb (Freeze_Entity_Checks): Update call to Predicate_Check_In_Scope.
2020-07-10[Ada] Small cleanup throughout Exp_Ch4Eric Botcazou1-33/+32
gcc/ada/ * exp_ch4.adb (Expand_Array_Comparison): Reformat. (Expand_Concatenate): Use standard size values directly and use Standard_Long_Long_Unsigned instead of RE_Long_Long_Unsigned. (Expand_Modular_Op): Use Standard_Long_Long_Integer in case the modulus is larger than Integer. (Expand_N_Op_Expon): Use standard size value directly. (Narrow_Large_Operation): Use Uint instead of Nat for sizes and use a local variable for the size of the type. (Get_Size_For_Range): Return Uint instead of Nat. (Is_OK_For_Range): Take Uint instead of Nat.
2020-07-10[Ada] Spurious error in generic dispatching constructor callJavier Miranda1-1/+2
gcc/ada/ * exp_ch6.adb (Make_Build_In_Place_Iface_Call_In_Allocator): Build the internal anonymous access type using as a reference the designated type imposed by the context (instead of using the return type of the called function).
2020-07-10[Ada] Fix assertion failure on (in-)out function parameterYannick Moy1-0/+1
gcc/ada/ * sem_res.adb (Resolve_Actuals): Protect call to Is_Valued_Procedure.
2020-07-10[Ada] Revert too late setting of Ekind on discriminantsPiotr Trojanek1-3/+6
gcc/ada/ * sem_ch3.adb (Process_Discriminants): Revert recent change to location of Set_Ekind; detect effectively volatile discriminants by their type only.
2020-07-10[Ada] Add global contracts to Ada.Numerics.Big_Numbers librariesJoffrey Huguet2-76/+135
gcc/ada/ * libgnat/a-nbnbin.ads, libgnat/a-nbnbre.ads: Add global contract (Global => null) to all functions.
2020-07-10[Ada] Part of implementation of AI12-0212: container aggregatesEd Schonberg8-2/+460
gcc/ada/ * aspects.ads: Add Aspect_Aggregate. * exp_aggr.adb (Expand_Container_Aggregate): Expand positional container aggregates into separate initialization and insertion operations. * sem_aggr.ads (Resolve_Container_Aggregate): New subprogram. * sem_aggr.adb (Resolve_Container_Aggregate): Parse aspect aggregate, establish element types and key types if present, and resolve aggregate components. * sem_ch13.ads (Parse_Aspect_Aggregate): Public subprogram used in validation, resolution and expansion of container aggregates * sem_ch13.adb (Parse_Aspect_Aggregate): Retrieve names of primitives specified in aspect specification. (Validate_Aspect_Aggregate): Check legality of specified operations given in aspect specification, before nane resolution. (Resolve_Aspect_Aggregate): At freeze point resolve operations and verify that given operations have the required profile. * sem_res.adb (Resolve): Call Resolve_Aspect_Aggregate if aspect is present for type. * snames.ads-tmpl: Add names used in aspect Aggregate: Empty, Add_Named, Add_Unnamed, New_Indexed, Assign_Indexed.
2020-07-10[Ada] Make System.Generic_Bignums more flexibleArnaud Charlet8-394/+625
gcc/ada/ * Makefile.rtl (GNATRTL_NONTASKING_OBJS): Add s-shabig.o. * libgnat/s-shabig.ads: New file to share definitions. * libgnat/s-genbig.ads, libgnat/s-genbig.adb: Reorganized to make it more generic and flexible in terms of memory allocation and data structure returned. (To_String): Moved to System.Generic_Bignums to allow sharing this code. (Big_And, Big_Or, Big_Shift_Left, Big_Shift_Right): New. * libgnat/s-bignum.adb, libgnat/s-bignum.ads: Adapt to new System.Generic_Bignums spec. * libgnat/a-nbnbin.adb: Likewise. (To_String): Moved to System.Generic_Bignums to allow sharing this code. * libgnat/a-nbnbre.adb (Normalize): Fix handling of Num = 0 leading to an exception.
2020-07-10[Ada] Fix crash on quantified expression in expression function (2)Eric Botcazou1-2/+3
gcc/ada/ * freeze.adb (Freeze_Expr_Types): Replace call to Find_Aspect with call to Find_Value_Of_Aspect and adjust accordingly.
2020-07-10[Ada] Fix crash on quantified expression in expression functionEric Botcazou2-0/+17
gcc/ada/ * einfo.adb (Write_Field24_Name): Handle E_Loop_Parameter. * freeze.adb (Freeze_Expr_Types): Freeze the iterator type used as Default_Iterator of the name of an N_Iterator_Specification node.
2020-07-10[Ada] Fix internal error on if-expression in call returning tagged typeEric Botcazou3-6/+34
gcc/ada/ * checks.adb (Determine_Range): Deal with Min and Max attributes. * exp_ch6.adb (Expand_Call_Helper): When generating code to pass the accessibility level to the caller in the case of an actual which is an if-expression, also remove the nodes created after the declaration of the dummy temporary. * sem_ch6.adb (Analyze_Subprogram_Body_Helper): Use Natural as the type of the minimum accessibility level object.
2020-07-10[Ada] Fix failing assertions related to volatile objectsPiotr Trojanek3-8/+15
gcc/ada/ * sem_ch3.adb (Process_Discriminants): Set Ekind of the processed discriminant entity before passing to Is_Effectively_Volatile, which was crashing on a failed assertion. * sem_prag.adb (Analyze_External_Property_In_Decl_Part): Prevent call to No_Caching_Enabled with entities other than variables, which was crashing on a failed assertion. (Analyze_Pragma): Style cleanups. * sem_util.adb (Is_Effectively_Volatile): Enforce comment with an assertion; prevent call to No_Caching_Enabled with entities other than variables. (Is_Effectively_Volatile_Object): Only call Is_Effectively_Volatile on objects, not on types. (No_Caching_Enabled): Enforce comment with an assertion.
2020-07-10[Ada] Remove use of debug flag -gnatdF for GNATproveYannick Moy1-7/+1
gcc/ada/ * debug.adb: Update comments to free usage of -gnatdF.
2020-07-10[Ada] Reuse SPARK expansion of attribute Update for delta_aggregatePiotr Trojanek1-160/+198
gcc/ada/ * exp_spark.adb (Expand_SPARK_Delta_Or_Update): Refactored from Expand_SPARK_N_Attribute_Reference; rewrite into N_Aggregate or N_Delta_Aggregate depending on what is being rewritten. (Expand_SPARK_N_Delta_Aggregate): New routine to expand delta_aggregate. (Expand_SPARK_N_Attribute_Reference): Call the refactored routine.
2020-07-10[Ada] Fix expansion of 'Update with multiple choices in GNATprovePiotr Trojanek1-9/+57
gcc/ada/ * exp_spark.adb (Expand_SPARK_N_Attribute_Reference): Fix expansion of attribute Update.