aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2022-05-10libiberty: fix type in allocationMartin Liska1-4/+4
The allocation function alloc_f is called for nsize items where each is of type void *. libiberty/ChangeLog: * hashtab.c (htab_empty): Use void * type instead of void **. (htab_expand): Likewise. Co-Authored-By: Alan Modra <amodra@gmail.com>
2022-05-10libiberty: fix bad replacement.Martin Liska1-2/+0
libiberty/ChangeLog: * random.c: Remove 'define PTR'.
2022-05-10Remove non-ANSI C macros in ansidecl.h.Martin Liska1-26/+2
include/ChangeLog: * ansidecl.h (PTR): Remove. (const): Likewise. (volatile): Likewise. (signed): Likewise.
2022-05-10libiberty: stop using PTR macroMartin Liska24-117/+117
include/ChangeLog: * hashtab.h (HTAB_EMPTY_ENTRY): Use void * instead PTR. (HTAB_DELETED_ENTRY): Likewise. libiberty/ChangeLog: * alloca.c (C_alloca): Use void * instead PTR. * calloc.c (malloc): Likewise. (bzero): Likewise. (calloc): Likewise. * hashtab.c (find_empty_slot_for_expand): Likewise. (eq_pointer): Likewise. (htab_create_alloc_ex): Likewise. (htab_create_typed_alloc): Likewise. (htab_set_functions_ex): Likewise. (htab_delete): Likewise. (htab_empty): Likewise. (htab_expand): Likewise. (htab_find_with_hash): Likewise. (htab_find): Likewise. (htab_find_slot_with_hash): Likewise. (htab_find_slot): Likewise. (htab_remove_elt): Likewise. (htab_remove_elt_with_hash): Likewise. (htab_clear_slot): Likewise. (htab_traverse_noresize): Likewise. (htab_traverse): Likewise. (htab_hash_string): Likewise. (iterative_hash): Likewise. (hash_pointer): Likewise. * memchr.c (memchr): Likewise. * memcmp.c (memcmp): Likewise. * memcpy.c (memcpy): Likewise. * memmove.c (memmove): Likewise. * mempcpy.c (memcpy): Likewise. (mempcpy): Likewise. * memset.c (memset): Likewise. * objalloc.c (malloc): Likewise. (free): Likewise. (objalloc_create): Likewise. (_objalloc_alloc): Likewise. (objalloc_free_block): Likewise. * random.c (PTR): Likewise. (void): Likewise. (initstate): Likewise. (setstate): Likewise. * regex.c: Likewise. * spaces.c (malloc): Likewise. (free): Likewise. * stpcpy.c (memcpy): Likewise. * strdup.c (malloc): Likewise. (memcpy): Likewise. * strerror.c (malloc): Likewise. (memset): Likewise. * strndup.c (malloc): Likewise. (memcpy): Likewise. * strsignal.c (malloc): Likewise. (memset): Likewise. * vasprintf.c (malloc): Likewise. * vprintf-support.c: Likewise. * xatexit.c (malloc): Likewise. * xmalloc.c (xmalloc): Likewise. (xcalloc): Likewise. (xrealloc): Likewise. * xmemdup.c (xmemdup): Likewise.
2022-05-10RISC-V: Provide `fmin'/`fmax' RTL patternsMaciej W. Rozycki17-0/+214
As at r2.2 of the RISC-V ISA specification[1] (equivalent to version 2.0 of the "F" and "D" standard architecture extensions for single-precision and double-precision floating-point respectively) the FMIN and FMAX machine instructions fully match our requirement for the `fminM3' and `fmaxM3' standard RTL patterns: "For FMIN and FMAX, if at least one input is a signaling NaN, or if both inputs are quiet NaNs, the result is the canonical NaN. If one operand is a quiet NaN and the other is not a NaN, the result is the non-NaN operand." suitably for the IEEE 754-2008 `minNum' and `maxNum' operations. However we only define `sminM3' and `smaxM3' standard RTL patterns to produce the FMIN and FMAX machine instructions, which in turn causes the `__builtin_fmin' and `__builtin_fmax' family of intrinsics to emit the corresponding libcalls rather than the relevant machine instructions. This is according to earlier revisions of the RISC-V ISA specification, which we however do not support anymore, as from commit 4b81528241ca ("RISC-V: Support version controling for ISA standard extensions"). As from r20190608 of the RISC-V ISA specification (equivalent to version 2.2 of the "F" and "D" standard ISA extensions for single-precision and double-precision floating-point respectively) the definition of the FMIN and FMAX machine instructions has been updated[2]: "Defined the signed-zero behavior of FMIN.fmt and FMAX.fmt, and changed their behavior on signaling-NaN inputs to conform to the minimumNumber and maximumNumber operations in the proposed IEEE 754-201x specification." and specifically[3]: "Floating-point minimum-number and maximum-number instructions FMIN.S and FMAX.S write, respectively, the smaller or larger of rs1 and rs2 to rd. For the purposes of these instructions only, the value -0.0 is considered to be less than the value +0.0. If both inputs are NaNs, the result is the canonical NaN. If only one operand is a NaN, the result is the non-NaN operand. Signaling NaN inputs set the invalid operation exception flag, even when the result is not NaN." Consequently for forwards compatibility with r20190608+ hardware we cannot use the FMIN and FMAX machine instructions unconditionally even where the ISA level of r2.2 has been specified with the `-misa-spec=2.2' option where operation would be different between ISA revisions, that is the handling of signaling NaN inputs. Therefore provide new `fmin<mode>3' and `fmax<mode>3' patterns removing the need to emit libcalls with the `__builtin_fmin' and `__builtin_fmax' family of intrinsics, however limit them to where `-fno-signaling-nans' is in effect, deferring to other code generation strategies otherwise as applicable. Use newly-defined UNSPECs as the operation codes so that the patterns are only ever used if referred to by their names, as there is no RTL expression defined for the IEEE 754-2008 `minNum' and `maxNum' operations. References: [1] "The RISC-V Instruction Set Manual, Volume I: User-Level ISA", Document Version 2.2, May 7, 2017, Section 8.3 "NaN Generation and Propagation", p. 48 [1] "The RISC-V Instruction Set Manual, Volume I: Unprivileged ISA", Document Version 20190608-Base-Ratified, June 8, 2019, "Preface", p. ii [2] same, Section 11.6 "Single-Precision Floating-Point Computational Instructions", p. 66 gcc/ * config/riscv/riscv.md (UNSPEC_FMIN, UNSPEC_FMAX): New constants. (fmin<mode>3, fmax<mode>3): New insns. gcc/testsuite/ * gcc.target/riscv/fmax-snan.c: New test. * gcc.target/riscv/fmax.c: New test. * gcc.target/riscv/fmaxf-snan.c: New test. * gcc.target/riscv/fmaxf.c: New test. * gcc.target/riscv/fmin-snan.c: New test. * gcc.target/riscv/fmin.c: New test. * gcc.target/riscv/fminf-snan.c: New test. * gcc.target/riscv/fminf.c: New test. * gcc.target/riscv/smax-ieee.c: New test. * gcc.target/riscv/smax.c: New test. * gcc.target/riscv/smaxf-ieee.c: New test. * gcc.target/riscv/smaxf.c: New test. * gcc.target/riscv/smin-ieee.c: New test. * gcc.target/riscv/smin.c: New test. * gcc.target/riscv/sminf-ieee.c: New test. * gcc.target/riscv/sminf.c: New test.
2022-05-10Use gimple-match folding in fold_build_cond_exprRichard Biener1-35/+11
The following cleans up if-conversions fold_build_cond_expr to use gimple-match folding instead of GENERIC folding. 2022-05-10 Richard Biener <rguenther@suse.de> * tree-if-conv.cc (fold_build_cond_expr): Use match-and-simplify to simplify the condition. (ifcvt_follow_ssa_use_edges): Remove. (predicate_scalar_phi): Use follow_all_ssa_edges.
2022-05-10Make 'c-c++-common/goacc/kernels-decompose-pr100400-1-*.c' behave ↵Thomas Schwinge2-7/+11
consistently, regardless of checking level Fix-up for commit c14ea6a72fb1ae66e3d32ac8329558497c6e4403 "Catch 'GIMPLE_DEBUG' misbehavior in OpenACC 'kernels' decomposition [PR100400, PR103836, PR104061]". For C++ compilation of 'c-c++-common/goacc/kernels-decompose-pr100400-1-2.c', we first emit a 'sorry' diagnostic, and then a 'gcc_unreachable' (or 'internal_error', see below) diagnostic, but for example, for '--enable-checking=release' (thus, '!CHECKING_P'), the second one may actually be turned into a 'confused by earlier errors, bailing out' diagnostic. (See 'gcc/diagnostic.cc:diagnostic_report_diagnostic': "When not checking, ICEs are converted to fatal errors when an error has already occurred.") Thus, make 'c-c++-common/goacc/kernels-decompose-pr100400-1-2.c' behave consistently via '-Wfatal-errors', and thus only matching the 'sorry' diagnostic. For example, for '--enable-checking=no' (thus, '!ENABLE_ASSERT_CHECKING'), a call to 'gcc_unreachable' cannot be assumed emit an 'internal_error'-like diagnostic, so explicitly call 'internal_error' in 'gcc/omp-oacc-kernels-decompose.cc:visit_loops_in_gang_single_region', in the 'GIMPLE_OMP_FOR' case, to avoid regressing 'c-c++-common/goacc/kernels-decompose-pr100400-1-3.c', and 'c-c++-common/goacc/kernels-decompose-pr100400-1-4.c'. PR middle-end/100400 gcc/ * omp-oacc-kernels-decompose.cc (visit_loops_in_gang_single_region) <GIMPLE_OMP_FOR>: Explicitly call 'internal_error'. gcc/testsuite/ * c-c++-common/goacc/kernels-decompose-pr100400-1-2.c: Specify '-Wfatal-errors'.
2022-05-10Fix up 'libgomp.fortran/use_device_addr-5.f90' multi-device testingThomas Schwinge1-1/+1
Fix-up for recent commit r13-116-g3f8c389fe90bf565a6221a46bb7fb745dd4c1510 "OpenMP: Fix use_device_{addr,ptr} with in-data-sharing arg", where we currently get: libgomp: use_device_ptr pointer wasn't mapped FAIL: libgomp.fortran/use_device_addr-5.f90 -O execution test libgomp/ * testsuite/libgomp.fortran/use_device_addr-5.f90: Fix up multi-device testing.
2022-05-10[c++] Disambiguate ModuleKind flagsNathan Sidwell5-82/+76
In modules, 'attached to global module' nearly always means 'not in module purview'. Also the implementation treats, 'in global module && in module purview' as meaning 'header unit'. The ModuleKind flags reflected that. The 'nearly always' means there are cases that the first condition is not invariant, and that of course invalidates the second equivalence. This disambiguates the ModuleKind flags to allow that 'not quite', and separate out header-unitness from the GMF & purview flags combination. 1) Separate out named-module vs header-unit from the MODULE/GLOBAL flags. 2) Replace the MODULE/GLOBAL flags with PURVIEW & ATTACH flags. 3) Adjust the parser state handling. Lays ground-work for language-declaration changes. gcc/cp/ * cp-tree.h (enum module_kind_bits): Disambiguate purview, attach, named module vs header-unit. (global_purview_p, not_module_p): Delete. (named_module_p): New. (header_module_p, module_purview_p): Adjust. (module_attach_p, named_module_purview_p): New. * decl.cc (duplicate_decls): Adjust. * module.cc (declare_module, preprocessed_module): Adjust. * name-lookup.cc (init_global_partition): Adjust. (get_fixed_binding_slot, pushdecl): Adjust. * parser.cc (cp_parser_module_declaration): Adjust. (cp_parser_import_declaration, cp_parser_declaration): Adjust.
2022-05-10middle-end/105537 - debug processingRichard Biener3-28/+57
The following makes sure to have a consistent state of flag_var_tracking_assignments with the distributed handling in process_options and finish_options by moving everything to finish_options which also restores diagnostics for -g0 -fvar-tracking which was lost with previous changes. 2022-05-10 Richard Biener <rguenther@suse.de> PR middle-end/105537 * toplev.cc (process_options): Move flag_var_tracking handling ... * opts.cc (finish_options): ... here. * gcc.dg/torture/pr105537.c: New testcase.
2022-05-10libgcov: use proper type for n_functionsMartin Liska1-1/+1
gcov_info::n_functions type is initialized by generated code in build_info_type: /* n_functions */ field = build_decl (BUILTINS_LOCATION, FIELD_DECL, NULL_TREE, get_gcov_unsigned_t ()); It uses gcov_unsigned_t, but the struct definition in libgcov.h uses unsigned type. That brings troubled on 16-bit targets. PR gcov-profile/105535 libgcc/ChangeLog: * libgcov.h (struct gcov_info): Use gcov_unsigned_t for n_functions. Co-Authored-By: Hans-Peter Helfert <peter-helfert@t-online.de>
2022-05-10Replace PTR with 'void *' in compiler.Martin Liska10-18/+18
gcc/ada/ChangeLog: * gcc-interface/decl.cc (compare_field_bitpos): Use void * instead PTR. * gcc-interface/utils2.cc (compare_elmt_bitpos): Likewise. gcc/ChangeLog: * basic-block.h (struct basic_block_d): Use void * instead PTR. * cfgloop.h: Likewise. * cgraph.h: Likewise. * gengtype-state.cc (state_ident_by_name): Likewise. (record_type): Likewise. (read_state_already_seen_type): Likewise. * gengtype.cc (dump_type): Likewise. (input_file_by_name): Likewise. (main): Likewise. * ggc-common.cc (ggc_cleared_alloc_ptr_array_two_args): Likewise. * ipa-utils.h (struct ipa_dfs_info): Likewise. * plugin.cc (htab_hash_plugin): Likewise.
2022-05-10Properly use opts in finish_optionsRichard Biener2-30/+41
When code was moved from process_options to finish_options it was not properly adjusted to look at and alter the opts set passed to the function but continued to modify the global options set. The following rectifies this and makes sure the same mistake isn't repeated by poisoning global_options{,_set}. 2022-05-10 Richard Biener <rguenther@suse.de> * flags.h (dwarf_debuginfo_p): Add opts argument, guard API with !GENERATOR_FILE. * opts.cc (global_options): Poison. (global_options_set): Likewise. (finish_options): Refer to options via opts.
2022-05-10Avoid andb %dil when optimizing for size.Roger Sayle3-7/+37
The simple test case below has the unfortunate property that on x86_64, it is larger when compiled with -Os than when compiled with -O2. int foo(char x) { return (x & 123) != 0; } The issue is x86's complex instruction encoding, where andb $XX,%dil requires more bytes than andl $XX,%edi. This patch adds logic to i386.md's *testqi_1_maybe_si and *andqi_2_maybe_si define_insn patterns to prefer the shorter SImode alternative when optimizing for size. 2022-05-10 Uroš Bizjak <ubizjak@gmail.com> Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog * config/i386/i386.md (*testqi_1_maybe_si): Prefer shorter SImode alternative when optimizing for size and the immediate operand is const_0_to_127_operand. (*andqi_2_maybe_si): Likewise. * config/i386/predicates.md (const_0_to_127_operand): New predicate. gcc/testsuite/ChangeLog * gcc.target/i386/and-1.c: New test case.
2022-05-10Improved constant folding for scalar evolution.Roger Sayle2-6/+32
This patch adds a small (follow-up) optimization to chrec_apply for linear chrecs to clean-up the final value expressions sometimes generated by GCC's scalar evolution pass. The transformation of A+(X-1)*A into A*X is usually unsafe with respect to overflow (see PR92712), and so can't be performed by match.pd (or fold-const). However, during scalar evolution's evaluation of recurrences it's known that X-1 can't be negative (in fact X-1 is unsigned even when A is signed), hence this optimization can be applied. Interestingly, this expression does get simplified in later passes once the range of X-1 is bounded by VRP, but that occurs long after the decision of whether to perform final value replacement, which is based on the complexity of this expression. The motivating test case is the optimization of the loop (from comment int square(int x) { int result = 0; for (int i = 0; i < x; ++i) result += x; return result; } which is currently optimized, with final value replacement to: final value replacement: with expr: (int) ((unsigned int) x_3(D) + 4294967295) * x_3(D) + x_3(D) but with this patch it first gets simplified further: final value replacement: with expr: x_3(D) * x_3(D) 2022-05-10 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog * tree-chrec.cc (chrec_apply): Attempt to fold the linear chrec "{a, +, a} (x-1)" as "a*x", as the number of loop iterations, x-1, can't be negative. gcc/testsuite/ChangeLog * gcc.dg/tree-ssa/pr65855-2.c: New test case.
2022-05-10[Ada] Export Is_Expression_Function predicate for use in gigiEric Botcazou2-1/+5
gcc/ada/ * fe.h (Is_Expression_Function): Declare. * sem_util.ads (Is_Expression_Function): Add warning line.
2022-05-10[Ada] Optimize nonstandard boolean validity checkingAlexandre Oliva1-1/+5
Validity checking of enumerations with nonstandard representation starts by checking the value range, then calling _rep_to_pos to verify that the value itself is valid. The value range check is thus redundant and inefficient: the _rep_to_pos call is normally inlined when optimizing for speed and the range check slows down the fast path; it is unnecesary and undesirable when optimizing for size, and just unnecessary when not optimizing. This patch thus drops the range check for nonstandard boolean types. gcc/ada/ * exp_attr.adb (Expand_N_Attribute_Reference) <Attribute_Valid>: Drop redundant range check for nonstandard booleans.
2022-05-10[Ada] Optimize nonstandard boolean conversionsAlexandre Oliva2-10/+30
This patch improves the generated code for nonstandard boolean types. One of the improvements extends the code that avoids converting back to the nonstandard boolean type an expression computed as standard boolean, when it will be converted to a(nother) nonstandard boolean type. The other improvement involves using the literal representation constants in an If_Expression instead of dereferencing the T'Val array when converting to a (nonstandard) boolean type. Avoiding the array dereference enables the compiler middle-end to propagate the constants and perform optimizations based on them, to the point of obviating the improvement above. Unfortunately, the code generated with this alternate expansion tends to be slightly larger if it turns out to not enable any further optimization, though it's most certainly faster, especially on targets with conditional moves, more so if "store flag" is slow, as on x86. Still, the array dereference is more straightforward and shorter, so I've arranged for this alternate expansion to be used only when optimizing for speed. gcc/ada/ * exp_util.adb (Adjust_Result_Type): Leave result in Standard.Boolean if it's going to be converted to another boolean type. * exp_ch4.adb (Expand_N_Type_Conversion): When optimizing, convert to nonstandard booleans with an if_expression with boolean literals.
2022-05-10[Ada] Handle non-standard booleans in if_expression conditionAlexandre Oliva1-0/+4
We failed to call Adjust_Condition for the condition expression of an if_expression, so non-standard booleans were expanded like standard booleans, disregarding representation clauses. Fixed. gcc/ada/ * exp_ch4.adb (Expand_N_If_Expression): Call Adjust_Condition to handle non-standard booleans.
2022-05-10[Ada] Incorrect ineffective use type clause warningJustin Squirek1-109/+72
This patch fixes an issue in the compiler whereby a use_type_clause incorrectly gets flagged as ineffective when the use of it comes after a generic package instantiation where the installation of private use clauses are required and one such clause references the same type. gcc/ada/ * sem_ch8.adb (Use_One_Type): Remove code in charge of setting Current_Use_Clause when Id is known to be redundant, and modify the printing of errors associated with redundant use type clauses so that line number gets included in more cases.
2022-05-10[Ada] Simplify call to overloaded Earlier_In_Extended_UnitPiotr Trojanek1-1/+1
We have two variants of Earlier_In_Extended_Unit that take either Node_Id or Source_Ptr values. The caller can simply use another variant and not explicitly convert parameters. Code cleanup; semantics is unaffected. gcc/ada/ * sem_warn.adb (Check_Unset_Reference): Use variant of Earlier_In_Extended_Unit that calls Sloc internally.
2022-05-10[Ada] Remove repeated conversions between Source_Ptr and IntPiotr Trojanek5-11/+7
Both Source_Ptr and Int are integer types (and even happen to have equal ranges). Their values can be calculated without converting back-and-forth, e.g.: Int (Loc1) - Int (Loc2) can be written simply as: Int (Loc1 - Loc2) Code cleanup related to handling of references to unset objects. Offending occurrences found with various invocations of grep. gcc/ada/ * par-ch10.adb, scng.adb, sem_res.adb, sinfo-utils.adb, treepr.adb: Simplify calculations with Source_Ptr and Loc values.
2022-05-10[Ada] Fix style in resolution of expression with actionsPiotr Trojanek1-0/+16
gcc/ada/ * sem_res.adb (Resolve_Expression_With_Actions): Fix style in nested routines.
2022-05-10[Ada] Reuse Is_Rewrite_Substitution where possiblePiotr Trojanek8-21/+15
Replace comparisons of Original_Node with semantically equivalent but high-level calls to Is_Rewrite_Substitution. Offending occurrences found with: $ grep -n "Original_Node (\([A-Za-z_]\+\)) /\?= \1" *.adb Code cleanup only; semantics is unaffected. gcc/ada/ * atree.adb, exp_ch6.adb, exp_ch9.adb, ghost.adb, sem_ch3.adb, sem_ch4.adb, sem_res.adb, sem_util.adb: Use Is_Rewrite_Substitution where possible.
2022-05-10[Ada] Cleanup detection of No_Elist with No and PresentPiotr Trojanek9-21/+21
Replace equality and inequality operators with calls to No and Present. Offending occurrences found with: $ grep -n " /\?= No_Elist" *.adb Code cleanup only; semantics is unaffected. gcc/ada/ * exp_ch11.adb, exp_ch5.adb, exp_prag.adb, gnat_cuda.adb, sem_ch12.adb, sem_ch3.adb, sem_ch6.adb, sem_util.adb, treepr.adb: Replace /= and = operators with No and Present, respectively.
2022-05-10[Ada] Prevent search for references in postconditions from going too farPiotr Trojanek1-0/+5
Add a standard prevention against climbing the entire compilation unit. Cleanup only; behaviour of the compiler is unaffected. gcc/ada/ * sem_warn.adb (Within_Postcondition): Guard against search going too far.
2022-05-10[Ada] Remove tiny and incomplete optimization for unset referencesPiotr Trojanek1-9/+0
Code cleanup; behaviour is unaffected. gcc/ada/ * sem_warn.adb (Check_Unset_Reference): The early test was only saving time of calls to Original_Node, Comes_From_Source and Nkind, which are all quick and cheap.
2022-05-10[Ada] Cleanup unnecessary declare block in Check_Unreachable_CodePiotr Trojanek1-102/+98
Cleanup related to static detection of references to uninitialized variables. Semantics is unaffected. gcc/ada/ * sem_ch5.adb (Check_Unreachable_Code): Remove inner declare block; refill code and comments.
2022-05-10[Ada] Refine iteration from entities to formalsPiotr Trojanek1-12/+12
When matching formal parameters from spec and body it is cleaner and more efficient to iterate with First_Formal/Next_Formal and not with First_Entity/Next_Entity. The previous iteration could unintentionally pick entities from within the subprogram body, e.g. objects declared within the subprogram. gcc/ada/ * sem_ch6.adb (Analyze_Subprogram_Body_Helper): Replace First_Entity/Next_Entity with First_Formal/Next_Formal; rename E1/E2 to F1/F2.
2022-05-10[Ada] Check declare and qualified expressions for unset referencesPiotr Trojanek2-6/+6
Detection of references to unset (uninitialized) objects requires calls to Check_Unset_Reference on every subexpression of a composite statement and expression. For declare and qualified expressions this was done only when they occurred within another composite statement/expression. gcc/ada/ * sem_res.adb (Resolve_Declare_Expression): Check expression for references to unset objects. (Resolve_Qualified_Expression): Likewise. * sem_warn.adb (Check_Unset_Reference): Remove handling of declare and qualified expressions; clarify comment for type conversions.
2022-05-10[Ada] Check if- and case-expressions for unset referencesPiotr Trojanek1-0/+6
Detection of references to unset (uninitialized) objects requires calls to Check_Unset_Reference on every subexpression of a composite statement and expression. This was missing for if-expressions and incomplete for case-expressions. gcc/ada/ * sem_res.adb (Resolve_Case_Expression): Check alternative expressions for references to unset objects. (Resolve_If_Expression): Check condition, then and else expressions for references to unset objects.
2022-05-10[Ada] Fix a couple of typosKévin Le Gouguec4-8/+7
gcc/ada/ * doc/gnat_rm/implementation_defined_attributes.rst, doc/gnat_ugn/the_gnat_compilation_model.rst: Fix typos. * gnat_rm.texi, gnat_ugn.texi: Regenerate.
2022-05-10[Ada] Fix typo in comment for Is_Predicate_StaticEtienne Servais1-1/+1
gcc/ada/ * sem_ch13.adb (Is_Predicate_Static): Fix typo in comment.
2022-05-10[Ada] Fix indentation to follow uniform style across runtime unitsYannick Moy2-47/+53
gcc/ada/ * libgnat/s-valuei.adb: Fix indentation. * libgnat/s-valuei.ads: Same.
2022-05-10[Ada] Accept Structural in aspect Subprogram_Variant and pragma Loop_VariantClaire Dross4-25/+64
Add a new form of variants to ensure termination of loops or recursive subprograms. Structural variants correspond to objects which designate a part of the data-structure they used to designate in the previous loop iteration or recursive call. They only imply termination if the data-structure is acyclic, which is the case in SPARK but not in Ada in general. The fact that these variants are correct is only verified formally by the proof tool and not by the compiler or dynamically at execution like other forms of variants. gcc/ada/ * snames.ads-tmpl: Add "Structural" as a name. * sem_prag.adb: (Analyze_Pragma): Accept modifier "Structural" in pragmas Loop_Variant and Subprogram_Variant. Check that items associated to Structural occur alone in the pragma associations. (Analyze_Subprogram_Variant_In_Decl_Part): Idem. * exp_prag.adb (Expand_Pragma_Loop_Variant): Discard structural variants. (Expand_Pragma_Subprogram_Variant): Idem. gcc/testsuite/ * gnat.dg/loopvar.adb: Update expected error message.
2022-05-10[Ada] Proof of System.Val_Int at gold levelClaire Dross5-22/+289
gcc/ada/ * libgnat/s-valint.ads: Add SPARK_Mode and pragma to ignore assertions in instance and add additional ghost parameters to the instance of Value_I. * libgnat/s-vallli.ads: Idem. * libgnat/s-valllli.ads: Idem. * libgnat/s-valuei.ads, libgnat/s-valuei.adb: New generic parameters for ghost functions from System.Valueu. Add functional contracts.
2022-05-10[Ada] Fix hiding of user-defined operator that is not a homographEric Botcazou4-91/+19
This adds a missing test for the presence of a homograph when applying the RM 8.4(10) clause about the visibility of operators, and removes resolution code made obsolete by the change. There is also a fixlet for a previously undetected ambiguity in the runtime. gcc/ada/ * sem_res.adb (Resolve_Eqyality_Op): Remove obsolete code. (Resolve_Op_Not): Likewise. * sem_type.adb (Disambiguate): Add missing test for RM 8.4(10). * libgnat/s-dwalin.adb (Enable_Cache): Fix ambiguity. (Symbolic_Address): Likewise. gcc/testsuite/ * gnat.dg/equal7.adb: Add expected error messages (code is now illegal).
2022-05-10[Ada] Fix oversight for case expression in Eval_Integer_LiteralEric Botcazou1-1/+1
The intent of the entry test is to treat conditional expressions, that is to say if-expression and case-expression, alike and to require that a second condition be true for them. But an N_Case_Expression_Alternative is not an N_Subexpr so this second condition was short-circuited for this node. gcc/ada/ * sem_eval.adb (Eval_Integer_Literal): Fix oversight in entry test.
2022-05-10[Ada] Avoid repeated conversions from Int to Char_CodePiotr Trojanek1-8/+10
When expanding aggregates like "(others => 'x')" into strings we repeated conversion from Int to Char_Code for every character. Now we convert once and use the Char_Code directly. Cleanup related to handling characters in GNATprove counterexamples; semantics is unaffected. gcc/ada/ * exp_aggr.adb (Expand_N_Aggregate): Replace UI_To_Int with UI_To_CC; replace magic literals with high-level routines that recognise wide and wide wide characters; reorder if-then-elsif condition, because we don't have a routine to detect wide wide characters.
2022-05-10[Ada] Reject numeric literals with too big exponentsEtienne Servais1-0/+9
While the compiler can compute numeric literal with arbitrary large exponents, this may take ages and is most likely a typo. Better emit an error when we certainly expect it to take long. The chosen threshold takes about 100s to compute. gcc/ada/ * scng.adb (Nlit): Error on big UI_Scale.
2022-05-10[Ada] Replace variables with constants in expanded code for task namesPiotr Trojanek1-6/+12
Using constants instead of variables is cleaner both in human-written and auto-generated code. Cleanup related to handling of character values in SPARK counterexamples, which just like the code for names of tasks create N_Character_Literal nodes. gcc/ada/ * exp_util.adb (Build_Task_Array_Image): Declare expanded objects as constants. (Build_Task_Image_Prefix): Likewise. (Build_Task_Record_Image): Likewise.
2022-05-10[Ada] Fix incorrect range computationMarc Poulhiès1-13/+40
When the type range [Lo, Hi] and the computed expression range [Lor, Hir] are disjoint, the range-constraining logic breaks and returns an incorrect range. For example, when Lo<Hi<Lor<Hir, it currently returns [Lor, Hi]. Instead, return the computed range. The current constraining logic would require returning the base type's bounds. However, this would miss an opportunity to warn about out of range values for some cases (e.g. when type's upper bound is equal to base type upper bound). The alternative of always returning the computed values, even when ranges are intersecting, has unwanted effects (mainly useless constraint checks are inserted) in the Enable_Overflow_Check and Apply_Scalar_Range_Check as these bounds have a special interpretation. gcc/ada/ * checks.adb (Determine_Range): Fix range refining.
2022-05-10[Ada] Failure compiling "for ... of" loop over a sliceSteve Baird1-8/+18
In some cases involving a "for ... of" loop (not to be confused with the more common "for ... in" loop) iterating over a slice, compilation would fail with an internal compiler error. gcc/ada/ * sem_util.adb (Get_Actual_Subtype): If a new subtype is built, do not freeze it if Expander_Active is False. The idea here is to avoid generating an unwanted Freeze_Node for a subtype that has been conjured up solely for purposes of preanalysis.
2022-05-10[Ada] Fix comment about building names in task arraysPiotr Trojanek1-5/+5
Cleanup related to handling of character values in SPARK counterexamples, which just like the code for names in task arrays create N_Character_Literal nodes. gcc/ada/ * exp_util.adb (Build_Task_Array_Image): Fix style in the structure of generated code; add Pref'Length as the component of the Sum initialization expression.
2022-05-10[Ada] Simplify conversion from Character to Char_CodePiotr Trojanek6-17/+17
Replace "Char_Code (Character'Pos (...))" with "Get_Char_Code (...)". The Get_Char_Code routine is inlined, so there is no performance penalty when it is called with static actual parameters. The N_Character_Literal has field Char_Literal_Value of type Unat, but we should really only store there values from Char_Code type (e.g. there are no characters with negative ASCII codes). It seems cleaner to use UI_From_CC and not a more general UI_From_Int when setting the character literal values. Cleanup related to handling of character values in SPARK counterexamples, which just like the code for names in task arrays create N_Character_Literal nodes. gcc/ada/ * exp_prag.adb (Expand_Pragma_Import_Or_Interface): Use Get_Char_Code. * exp_util.adb (Build_Task_Array_Image): Simplify conversion to Char_Code. (Build_Task_Image_Prefix): Likewise. (Build_Task_Record_Image): Likewise. * cstand.adb (Create_Standard): Use UI_From_Int instead of UI_From_CC. * exp_ch11.adb (Expand_N_Exception_Declaration): Likewise. * sem_res.adb (Patch_Up_Value): Likewise. * stringt.adb (Write_String_Table_Entry): Use Get_Char_Code.
2022-05-10Fix internal error with vectorization on SPARCEric Botcazou2-2/+33
This is a regression present since the 10.x series, but the underlying issue has been there since the TARGET_VEC_PERM_CONST hook was implemented, in the form of an ICE when expanding a constant VEC_PERM_EXPR in V4QI, while the back-end only supports V8QI constant VEC_PERM_EXPRs. gcc/ PR target/105292 * config/sparc/sparc.cc (sparc_vectorize_vec_perm_const): Return true only for 8-byte vector modes. gcc/testsuite/ * gcc.target/sparc/20220510-1.c: New test.
2022-05-10middle-end/70090: Dynamic sizes for -fsanitize=object-sizeSiddhesh Poyarekar2-6/+52
Use __builtin_dynamic_object_size to get object sizes for ubsan. gcc/ChangeLog: PR middle-end/70090 * ubsan.cc (ubsan_expand_objsize_ifn): Allow non-constant SIZE. (instrument_object_size): Get dynamic object size expression. gcc/testsuite/ChangeLog: PR middle-end/70090 * gcc.dg/ubsan/object-size-dyn.c: New test. Signed-off-by: Siddhesh Poyarekar <siddhesh@gotplt.org>
2022-05-10c++: fix arm-eabi crash building libstdc++ [PR105529]Jason Merrill5-45/+36
My recent change to cxx_eval_store_expression asserts that the target and value can only end up having different types in the case of an empty base; this was crashing arm-eabi compilers because in that ABI [cd]tors return *this, and weren't converting it to void* first. This also shares the 'return this' code between the three places it occurs. Thanks to Marek for the tests. PR c++/105529 gcc/cp/ChangeLog: * decl.cc (maybe_return_this): Replace... (finish_constructor_body, finish_destructor_body): ...these. (finish_function_body): Call it. * optimize.cc (build_delete_destructor_body): Call it. * cp-tree.h (maybe_return_this): Declare. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/constexpr-dtor13.C: New test. * g++.dg/cpp2a/constexpr-dtor14.C: New test.
2022-05-10rs6000: avoid peeking eof after __vectorJiufu Guo2-4/+11
There is a rare corner case: where vector is followed only by one valid identifer and the ";" which is near the end of the file. Like the case in PR101168: using vdbl = __vector double; #define BREAK 1 For this case, "vector double" is followed by CPP_SEMICOLON and then EOF. There is no more tokens need to check for this case. PR preprocessor/101168 gcc/ChangeLog: * config/rs6000/rs6000-c.cc (rs6000_macro_to_expand): Avoid empty identifier. gcc/testsuite/ChangeLog: * g++.target/powerpc/pr101168.C: New test.
2022-05-10Daily bump.GCC Administrator11-1/+556