aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2022-09-05analyzer: strcpy semanticsTim Lange5-3/+133
This patch adds modelling for the semantics of strcpy in the simple case where the analyzer is able to infer a concrete string size. Regrtested on Linux x86_64. 2022-09-04 Tim Lange <mail@tim-lange.me> gcc/analyzer/ChangeLog: * region-model-impl-calls.cc (region_model::impl_call_strcpy): Handle the constant string case. * region-model.cc (region_model::get_string_size): New function to get the string size from a region or svalue. * region-model.h (class region_model): Add get_string_size. gcc/testsuite/ChangeLog: * gcc.dg/analyzer/out-of-bounds-4.c: New test. * gcc.dg/analyzer/strcpy-3.c: New test.
2022-09-05analyzer: return a concrete offset for cast_regionsTim Lange3-0/+20
This patch fixes a bug where maybe_fold_sub_svalue did not fold the access of a single char from a string to a char when the offset was zero because get_relative_concrete_offset did return false for cast_regions. Regrtested on Linux x86_64. 2022-09-04 Tim Lange <mail@tim-lange.me> gcc/analyzer/ChangeLog: * region.cc (cast_region::get_relative_concrete_offset): New overloaded method. * region.h: Add cast_region::get_relative_concrete_offset. gcc/testsuite/ChangeLog: * gcc.dg/analyzer/fold-string-to-char.c: New test.
2022-09-05RISC-V: Fix division instructions for `m` with `zmmul` extension.Kito Cheng2-7/+3
gcc/ChangeLog: * config/riscv/riscv.cc (riscv_option_override): Fix wrong condition for MASK_DIV and simplify incompatible checking. * config/riscv/riscv.md (muldi3): Adding parentheses.
2022-09-05aarch64: Suggest an -mcpu option when user passes CPU name to -marchKyrylo Tkachov2-0/+18
This small patch helps users who confuse -march and -mcpu on AArch64. Sometimes users pass -march with a CPU name, where they most likely wanted to use -mcpu, which would select the right architecture features *and* tune for their desired CPU. Currently we'll just error out with an unkown architecture message and list the valid architecture options. With this patch we check if their string matches a known CPU and suggest they use an -mcpu option instead. So compiling with -march=neoverse-n1 will now give the error: cc1: error: unknown value 'neoverse-n1' for '-march' cc1: note: valid arguments are: armv8-a armv8.1-a armv8.2-a armv8.3-a armv8.4-a armv8.5-a armv8.6-a armv8.7-a armv8.8-a armv8-r armv9-a cc1: note: did you mean '-mcpu=neoverse-n1'? Bootstrapped and tested on aarch64-none-linux-gnu. gcc/ChangeLog: * config/aarch64/aarch64.cc (aarch64_validate_march): Check if invalid arch string is a valid -mcpu string and emit hint. gcc/testsuite/ChangeLog: * gcc.target/aarch64/spellcheck_10.c: New test.
2022-09-05RISC-V: Support Zmmul extensionLiaoShihua7-16/+70
gcc/ChangeLog: * common/config/riscv/riscv-common.cc: Add Zmmul. * config/riscv/riscv-opts.h (MASK_ZMMUL): New. (TARGET_ZMMUL): Ditto. * config/riscv/riscv.cc (riscv_option_override):Ditto. * config/riscv/riscv.md: Add Zmmul * config/riscv/riscv.opt: Ditto. gcc/testsuite/ChangeLog: * gcc.target/riscv/zmmul-1.c: New test. * gcc.target/riscv/zmmul-2.c: New test.
2022-09-05Remove MAX_SWITCH_CASES limitRichard Biener4-23/+8
The following removes the MAX_SWITCH_CASES limit to fight quadraticness when looking up case labels from edges. Instead use the {start,end}_recording_case_labels facility for that. For it to be usable I've exported get_cases_for_edge from tree-cfg.cc. * tree-cfg.h (get_cases_for_edge): Declare. * tree-cfg.cc (get_cases_for_edge): Export. * tree-ssa-uninit.cc (execute_late_warn_uninitialized): Start and end recording case labels. * gimple-predicate-analysis.cc (MAX_SWITCH_CASES): Remove. (predicate::init_from_control_deps): Use get_cases_for_edge.
2022-09-05Unify MAX_POSTDOM_CHECK and --param uninit-control-dep-attemptsRichard Biener1-17/+12
The following unifies both limits, in particular the MAX_POSTDOM_CHECK tends to be too low and is not user-controllable. * gimple-predicate-analysis.cc (MAX_POSTDOM_CHECK): Remove. (compute_control_dep_chain): Move uninit-control-dep-attempts checking where it also counts the post-dominator check invocations.
2022-09-05debug () for predicatesRichard Biener2-34/+52
The following adds a debug () member to the predicate class. * gimple-predicate-analysis.h (predicate::debug): New. (predicate::dump): Add FILE * argument, add base overload. * gimple-predicate-analysis.cc (debug): New. (dump_pred_info): Add FILE * argument. (dump_pred_chain): Likewise. (predicate::dump): Split out preamble into overload. Add FILE * argument. (predicate::debug): New. (predicate::simplify): Adjust. (predicate::normalize): Likewise. (predicate::init_from_control_deps): Likewise.
2022-09-05aarch64: Remove lazy SIMD builtin initialisationRichard Sandiford4-34/+1
At one time the aarch64 port registered the Advanced SIMD builtins lazily, when we first encountered a set of target flags that includes +simd. These days we always initialise them at start-up, temporarily forcing a conducive set of flags if necessary. This patch removes some vestiges of the old way of doing things. gcc/ * config/aarch64/aarch64-protos.h (aarch64_init_simd_builtins): Remove prototype. * config/aarch64/aarch64-builtins.cc (aarch64_simd_builtins_initialized_p): Delete. (aarch64_init_simd_builtins): Make static. Remove protection against multiple calls. * config/aarch64/aarch64-c.cc (aarch64_pragma_target_parse): Remove lazy SIMD builtin initialization. * config/aarch64/aarch64.cc (aarch64_option_valid_attribute_p): Likewise.
2022-09-05LoongArch: add -mdirect-extern-access optionXi Ruoyao6-0/+41
As a new target, LoongArch does not use copy relocation as it's problematic in some circumstances. One bad consequence is we are emitting GOT for all accesses to all extern objects with default visibility. The use of GOT is not needed in statically linked executables, OS kernels etc. The GOT entry just wastes space, and the GOT access just slow down the execution in those environments. Before -mexplicit-relocs, we used "-Wa,-mla-global-with-pcrel" to tell the assembler not to use GOT for extern access. But with -mexplicit-relocs, we have to opt the logic in GCC. The name "-mdirect-extern-access" is learnt from x86 port. gcc/ChangeLog: * config/loongarch/genopts/loongarch.opt.in: Add -mdirect-extern-access option. * config/loongarch/loongarch.opt: Regenerate. * config/loongarch/loongarch.cc (loongarch_symbol_binds_local_p): Return true if TARGET_DIRECT_EXTERN_ACCESS. (loongarch_option_override_internal): Complain if -mdirect-extern-access is used with -fPIC or -fpic. * doc/invoke.texi: Document -mdirect-extern-access for LoongArch. gcc/testsuite/ChangeLog: * gcc.target/loongarch/direct-extern-1.c: New test. * gcc.target/loongarch/direct-extern-2.c: New test.
2022-09-05Merge branch 'master' into devel/sphinxMartin Liska2-8/+8
2022-09-05docs: rename DEBUGGER_REGISTER_NUMBER in texiMartin Liska2-8/+8
gcc/ChangeLog: * doc/tm.texi.in: Rename DEBUGGER_REGISTER_NUMBER to DEBUGGER_REGNO. * doc/tm.texi: Regenerate.
2022-09-05Merge branch 'master' into devel/sphinxMartin Liska739-19310/+23045
2022-09-05rename DBX_REGISTER_NUMBER to DEBUGGER_REGNOMartin Liska81-231/+200
gcc/ada/ChangeLog: * sigtramp-vxworks-target.h: Rename DBX_REGISTER_NUMBER to DEBUGGER_REGNO. gcc/ChangeLog: * config/aarch64/aarch64-protos.h (aarch64_dbx_regno): Rename DBX_REGISTER_NUMBER to DEBUGGER_REGNO. (aarch64_debugger_regno): Likewise. * config/aarch64/aarch64.cc (aarch64_dbx_regno): Likewise. (aarch64_debugger_regno): Likewise. * config/aarch64/aarch64.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. (DWARF_FRAME_REGNUM): Likewise. * config/alpha/alpha.h (DWARF_FRAME_REGNUM): Likewise. * config/arc/arc.cc (arc_init_reg_tables): Likewise. * config/arc/arc.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/arm/arm-protos.h (arm_dbx_regno): Likewise. (arm_debugger_regno): Likewise. * config/arm/arm.cc (arm_dbx_regno): Likewise. (arm_debugger_regno): Likewise. * config/arm/arm.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/bfin/bfin.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/c6x/c6x.cc: Likewise. * config/c6x/c6x.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/cris/cris.h (enum reg_class): Likewise. (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/csky/csky.cc (enum reg_class): Likewise. * config/csky/csky.h (DWARF_FRAME_REGNUM): Likewise. (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/frv/frv.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/gcn/gcn-hsa.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/gcn/gcn.cc (print_operand): Likewise. * config/i386/bsd.h (ASM_QUAD): Likewise. * config/i386/cygming.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. (DWARF_FRAME_REGNUM): Likewise. * config/i386/darwin.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/djgpp.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/dragonfly.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/freebsd.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/gas.h: Likewise. * config/i386/gnu-user.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/i386.cc (enum reg_class): Likewise. * config/i386/i386.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/i386elf.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/iamcu.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/lynx.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/netbsd-elf.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/nto.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/openbsdelf.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/sysv4.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/vxworks.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/i386/x86-64.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/ia64/ia64-protos.h (ia64_dbx_regno): Likewise. (ia64_debugger_regno): Likewise. * config/ia64/ia64.cc (ia64_output_function_prologue): Likewise. (ia64_dbx_regno): Likewise. (ia64_debugger_regno): Likewise. (process_cfa_adjust_cfa): Likewise. (process_cfa_register): Likewise. (ia64_asm_unwind_emit): Likewise. * config/ia64/ia64.h: Likewise. * config/ia64/sysv4.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/lm32/lm32.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/m32c/m32c.cc (m32c_eh_return_stackadj_rtx): Likewise. * config/m32c/m32c.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/m68k/linux.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/m68k/m68k.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. (__transfer_from_trampoline): Likewise. * config/m68k/m68kelf.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/m68k/netbsd-elf.h (M68K_STATIC_CHAIN_REG_NAME): Likewise. (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/microblaze/microblaze.cc (microblaze_option_override): Likewise. * config/microblaze/microblaze.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. (GP_DBX_FIRST): Likewise. (GP_DEBUGGER_FIRST): Likewise. * config/mips/vxworks.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/mmix/mmix-protos.h (mmix_dbx_regno): Likewise. (mmix_debugger_regno): Likewise. * config/mmix/mmix.cc (mmix_dbx_regno): Likewise. (mmix_debugger_regno): Likewise. * config/mmix/mmix.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/nds32/nds32-protos.h (nds32_dbx_regno): Likewise. (nds32_debugger_regno): Likewise. * config/nds32/nds32.cc (nds32_dbx_regno): Likewise. (nds32_debugger_regno): Likewise. (nds32_use_blocks_for_constant_p): Likewise. * config/nds32/nds32.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/nvptx/nvptx.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/or1k/or1k.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/pa/pa32-regs.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/pa/pa64-regs.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/rs6000/rs6000-protos.h (rs6000_dbx_regno): Likewise. (rs6000_debugger_regno): Likewise. * config/rs6000/rs6000.cc (rs6000_dbx_regno): Likewise. (rs6000_debugger_regno): Likewise. * config/rs6000/rs6000.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. (DWARF2_FRAME_REG_OUT): Likewise. * config/s390/s390.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/sh/elf.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/sh/linux.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/sh/sh.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. (SH_DBX_REGISTER_NUMBER): Likewise. (SH_DEBUGGER_REGNO): Likewise. * config/visium/visium.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/xtensa/elf.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/xtensa/linux.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/xtensa/uclinux.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * config/xtensa/xtensa-protos.h (xtensa_dbx_regno): Likewise. (xtensa_debugger_regno): Likewise. * config/xtensa/xtensa.cc (xtensa_dbx_regno): Likewise. (xtensa_debugger_regno): Likewise. * config/xtensa/xtensa.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. * defaults.h (DBX_REGISTER_NUMBER): Likewise. (DEBUGGER_REGNO): Likewise. (DWARF_FRAME_REGNUM): Likewise. * doc/tm.texi: Likewise. * doc/tm.texi.in: Likewise. * dwarf2out.cc (dbx_reg_number): Likewise. (debugger_reg_number): Likewise. (reg_loc_descriptor): Likewise. (multiple_reg_loc_descriptor): Likewise. (mem_loc_descriptor): Likewise. * except.cc: Likewise.
2022-09-05[Ada] Move check for null array aggregates to expansionPiotr Trojanek3-21/+22
Despite recent changes to runtime checks for null array aggregates, GNATprove still struggles with N_Raise_Constraint_Error nodes inserted into AST by aggregate resolution. The ultimate fix is to move these checks to expansion (which is disabled in GNATprove mode) and explicitly emit a proof check in the GNATprove backend. gcc/ada/ * exp_aggr.adb (Check_Bounds): Move code and comment related to check for null array aggregate from Resolve_Null_Array_Aggregate. * sem_aggr.ads (Is_Null_Aggregate): Move spec from unit body. * sem_aggr.adb (Resolve_Null_Array_Aggregate): Move check to expansion.
2022-09-05[Ada] Fix inconsistent building of itypes for null array aggregatesPiotr Trojanek1-23/+31
To analyze Ada 2022 null array aggregates we introduced a dedicated routine and bypassed the code for ordinary array aggregates. However, the types for the array indexes created by this dedicated routine differed from the types created for ordinary array aggregates, i.e. itypes for null array aggregates were associated with the array subtype declaration, while itypes for ordinary array aggregates were associated with the aggregate itself. These differences cause trouble for various routines in GNATprove. This patch reduces the special handling of null array aggregates and reuses the building of itypes for ordinary array aggregates. gcc/ada/ * sem_aggr.adb (Array_Aggr_Subtype): Bypass call to Collect_Aggr_Bound with dedicated code for null array aggregates. (Resolve_Array_Aggregate): Remove special handling of null array aggregates. (Resolve_Array_Aggregate): Create bounds, but let Array_Aggr_Subtype create itype entities.
2022-09-05[Ada] Fix insertion of a runtime check for null array aggregatePiotr Trojanek1-4/+2
A null array aggregate of Ada 2022 requires a conditional runtime check that was inserted as an if-statement. While gigi can handle statements inserted into a list of declarations, in GNATprove such a statement will cause a crash. It is better to insert a conditional raise node, which is properly handled by both gigi and GNATprove. gcc/ada/ * sem_aggr.adb (Resolve_Null_Array_Aggregate): Insert check as a Raise_Constraint_Error node and not an If_Statement.
2022-09-05[Ada] Cleanup iteration over aggregate component associationsPiotr Trojanek1-4/+2
Code cleanup related to fixes for iterated component associations in GNATprove ; semantics is unaffected. gcc/ada/ * sem_aggr.adb (Resolve_Container_Aggregate): Style cleanup. (Resolve_Record_Aggregate): Remove redundant guard.
2022-09-05[Ada] Remove VMS specific routine that is no longer referencedPiotr Trojanek2-18/+0
Code cleanup related to resctrition No_Local_Allocators. gcc/ada/ * exp_util.ads (Entry_Names_OK): Remove spec. * exp_util.adb (Entry_Names_OK): Remove body.
2022-09-05[Ada] Single-element Append performance improvementSteve Baird2-39/+49
Ada.Containers.Vectors has two Append procedures that take an Element value; one takes a Count parameter and one does not (the count is implicitly one for the latter). For the former version, there was code that took a faster path if certain conditions were met and otherwise took a slower path; one of the prerequisite conditions for this was Count = 1. For the latter version, no such special-case detection was performed; the more general code was always executed. Move the special-case detection/handling code from the former version into the latter and change the former version to simply call the latter version if Count = 1. Also apply same change to Ada.Containers.Indefinite_Vectors. gcc/ada/ * libgnat/a-coinve.adb, libgnat/a-convec.adb (Append): If the Append that takes an Element and a Count is called with Count = 1, then call the Append that does not take a Count parameter; otherwise call the code that handles the general case. Move the special case detection/handling code that was formerly in that version of Append into the version that does not take a Count parameter, so that now both versions get the performance benefit.
2022-09-05[Ada] Create internal type for null array aggregate as an itypePiotr Trojanek1-2/+4
Internal type created for the null array aggregate of Ada 2022 was created as a temporary entity and then flagged as internal, but it is better to create this type directly as an itype. In particular, when the null array aggregate appears in a spec expression, its type declaration will not be attached to the AST. An itype will have Associated_Node_For_Itype, so that the context of the type can be recovered, which is what GNATprove does. gcc/ada/ * sem_aggr.adb (Resolve_Null_Array_Aggregate): Create internal type for the aggregate as an itype.
2022-09-05[Ada] Remove no longer referenced GNATprove utility routine for itypesPiotr Trojanek2-18/+0
Code cleanup related to itypes for Ada 2022 null array aggregates. Remove routine that was added in 2011 but is not referenced by GNATprove since 2015. gcc/ada/ * sem_util.ads (Itype_Has_Declaration): Remove spec. * sem_util.adb (Itype_Has_Declaration): Remove body.
2022-09-05[Ada] Bad Default_Initial_Condition check for a not-default-initialized objectSteve Baird1-0/+1
No Default_Initial_Condition check should be generated for an object declaration that has an explicit initial value. Previously this was implemented by testing the Has_Init_Expression flag, but this only works if the object declaration was created by the parser (since only the parser sets that attribute, at least currently). gcc/ada/ * exp_ch3.adb (Expand_N_Object_Declaration): In deciding whether to emit a DIC check, we were previously testing the Has_Init_Expression flag. Continue to test that flag as before, but add a test for the syntactic presence of an initial value in the object declaration. This new test would not supersede the old test in the case where an explicit initial value has been eliminated as part of some tree transformation.
2022-09-05[Ada] Fix detection of unused warning suppressionPiotr Trojanek2-3/+5
The comment for Warnings_Off says: "clients should generally not test this flag directly, but instead use function Has_Warnings_Off". Primarily a code cleanup, as this only affects minor a corner case. gcc/ada/ * sem_ch13.adb (Validate_Unchecked_Conversions): Use Has_Warnings_Off. * sem_elab.adb (Check_Internal_Call_Continue): Likewise.
2022-09-05[Ada] Small cleanup in body of System.Value_REric Botcazou1-9/+20
This is mostly stylistic but also adds a couple of missing comments. gcc/ada/ * libgnat/s-valuer.adb (Scan_Decimal_Digits): Consistently avoid initializing local variables. (Scan_Integral_Digits): Likewise. (Scan_Raw_Real): Likewise and add a couple of comments.
2022-09-05[Ada] Fix bogus discriminant check failure for type with predicateEric Botcazou1-133/+134
This reorders the processing in Freeze_Entity_Checks so that building the predicate functions, which first requires building discriminated checking functions for record types with a variant part, is done after processing and checking this variant part. gcc/ada/ * sem_ch13.adb (Freeze_Entity_Checks): Build predicate functions only after checking the variant part of a record type, if any.
2022-09-05[Ada] Detect expansion of iterated component associations into loopsPiotr Trojanek1-3/+3
Iterated component associations are expanded into loops, which GNAT should detect as violating restriction No_Implicit_Loops; same for iterated element associations and delta array aggregates. Part of cleanups for correct handling of iterated component associations in SPARK. gcc/ada/ * exp_aggr.adb (Two_Pass_Aggregate_Expansion): Expand into implicit rather than ordinary loops, to detect violations of restriction No_Implicit_Loops. (Generate_Loop): Likewise for delta array aggregates.
2022-09-05[Ada] Fix double identifiers in iterated component associationPiotr Trojanek7-13/+41
The iterated_component_association grammar construct appears in Ada RM in two syntactic forms: with iterator_specification and with defining_identifier. This is now properly reflected in the GNAT AST, while previously we had two defining_identifiers regardless of the syntactic form. Cleanup related to handling of iterated_component_association in SPARK. Behavior of the compiler itself should not be affected. gcc/ada/ * exp_aggr.adb (Two_Pass_Aggregate_Expansion): Expand iterated component association with an unanalyzed copy of iterated expression. The previous code worked only because the expanded loop used both an analyzed copy of the iterator_specification and an analyzed copy of the iterated expression. Now the iterated expression is reanalyzed in the context of the expanded loop. * par-ch4.adb (Build_Iterated_Component_Association): Don't set defining identifier when iterator specification is present. * sem_aggr.adb (Resolve_Iterated_Association): Pick index name from the iterator specification. * sem_elab.adb (Traverse_Potential_Scenario): Handle iterated element association just like iterated component association. Not strictly part of this fix, but still worth for the completeness. * sem_res.adb (Resolve): Pick index name from the iterator specification, when present. * sem_util.adb (Traverse_More): For completeness, just like the change in Traverse_Potential_Scenario. * sinfo.ads (ITERATED_COMPONENT_ASSOCIATION): Fix and complete description. (ITERATED_ELEMENT_ASSOCIATION): Likewise.
2022-09-05[Ada] Suppress warnings in trivial subprograms with finalizationBob Duff1-3/+9
There are heuristics for suppressing warnings about unused objects in trivial cases. In particular, we try to suppress warnings here: function F (A : Integer) return Some_Type; X : Some_Type; begin raise Not_Yet_Implemented; return X; end F; But it doesn't work if Some_Type is controlled. This patch fixes that bug. gcc/ada/ * sem_ch6.adb (Analyze_Subprogram_Body_Helper): Use First_Real_Statement to deal with this case. Note that First_Real_Statement is likely to be removed as part of this ticket, so this is a temporary fix.
2022-09-05[Ada] Secondary stack and i-c*Arnaud Charlet1-5/+14
Extend the previous changes related to Ada.Tags trigerring a dependency on the secondary stack to various i-c* packages. gcc/ada/ * ali.adb (Scan_ALI): Special case i-c*.ali when setting Sec_Stack_Used.
2022-09-05[Ada] Enable Error_Msg_GNAT_Extension for mixed decl/stmtsBob Duff1-17/+8
Enable mixing of declarative items and statements under the -gnatX switch. The previous version used the -gnat2022 switch. In addition, change the error message so that it advertises the new feature when it is disabled. Instead of: declarations must come before "begin" we now say (without -gnatX): declarations mixed with statements is a GNAT-specific extension unit must be compiled with -gnatX or use pragma Extensions_Allowed (On) gcc/ada/ * par-ch5.adb (P_Sequence_Of_Statements): Call Error_Msg_GNAT_Extension to give the error message.
2022-09-05[Ada] Fix resolution of iterated component associationPiotr Trojanek1-45/+23
For iterator specification appearing inside an iterated component association, we just did ad-hoc, incomplete checks and delayed a proper analysis until the iterated component association is expanded into loop (and then reanalyzed). However, when the iterated component association is not expanded, e.g. because we are in semantic checking mode, GNATprove mode or inside a generic, then the AST lacked any processing or error reporting. This is fixed by reusing the existing analysis of iterator specifications, as they also appear in other constructs, e.g. in quantified expressions. gcc/ada/ * sem_aggr.adb (Resolve_Iterated_Component_Association): Split processing of cases with and without iterator specification; reuse analysis of iterator specification; improve diagnostics for premature usage of iterator index in discrete choices.
2022-09-05[Ada] Cleanup analysis of iterator specificationsPiotr Trojanek1-5/+4
Code cleanup; semantics is unaffected. gcc/ada/ * sem_ch5.adb (Check_Subtype_Definition): Remove redundant call to Present; style cleanup.
2022-09-05[Ada] Cleanup resolution of aggregates with mixed component associationsPiotr Trojanek1-3/+3
Code cleanup only; semantics is unaffected. gcc/ada/ * sem_aggr.adb (Resolve_Array_Aggregate): Change an inconsistent use of False into its local equivalent Failure.
2022-09-05[Ada] Cleanup resolution of iterated component associationPiotr Trojanek1-11/+11
Tune names of local entities. gcc/ada/ * sem_aggr.adb (Resolve_Iterated_Component_Association): Change generic name Ent to a more intuitive Scop; rename Remove_Ref to Remove_Reference, so it can be instantiated as a traversal routine with plural name.
2022-09-05[Ada] Cleanup analysis of quantified expressions with empty rangesPiotr Trojanek1-32/+27
Cleanup handling of quantified expressions before using it as an inspiration for fixing the handling of iterated component associations. Behavior is unaffected. gcc/ada/ * sem_ch4.adb (Is_Empty_Range): Move error reporting to the caller. (Analyze_Qualified_Expression): Move error reporting from Is_Empty_Range; add matching call to End_Scope before rewriting and returning.
2022-09-05[Ada] New gnatbind switch -kArnaud Charlet6-1/+49
This switch can be used to disable the effect of -F when using -n explicitly or implicitly. gcc/ada/ * bindgen.adb (Gen_Elab_Calls): Check for Check_Elaboration_Flags. * bindusg.adb (Display): Add -k. * opt.ads (Check_Elaboration_Flags): New. * switch-b.adb (Scan_Binder_Switches): Add processing of -k. * doc/gnat_ugn/building_executable_programs_with_gnat.rst: Add documentation for -k and -K. * gnat_ugn.texi: Regenerate.
2022-09-05[Ada] Code cleanupsArnaud Charlet1-17/+5
gcc/ada/ * treepr.adb: Remove local To_Lower and use the procedure version instead.
2022-09-05[Ada] Fix crash for Default_Initial_Condition on derived enumeration typeEric Botcazou8-311/+319
This fixes a crash on the declaration of a private derived enumeration type with the Default_Initial_Condition aspect and in the process makes a couple of related adjustments: 1) removes the early freezing of implicit character and numeric base types and 2) fixes an oversight in the implementation of delayed representation aspects. gcc/ada/ * aspects.ads (Delaying Evaluation of Aspect): Fix typos. * exp_ch3.adb (Freeze_Type): Do not generate Invariant and DIC procedures for internal types. * exp_util.adb (Build_DIC_Procedure_Body): Adjust comment. * freeze.adb (Freeze_Entity): Call Inherit_Delayed_Rep_Aspects for subtypes and derived types only after the base or parent type has been frozen. Remove useless freezing for first subtype. (Freeze_Fixed_Point_Type): Call Inherit_Delayed_Rep_Aspects too. * layout.adb (Set_Elem_Alignment): Deal with private types. * sem_ch3.adb (Build_Derived_Enumeration_Type): Build the implicit base as an itype and do not insert its declaration in the tree. (Build_Derived_Numeric_Type): Do not freeze the implicit base. (Derived_Standard_Character): Likewise. (Constrain_Enumeration): Inherit the chain of representation items instead of replacing it. * sem_ch13.ads (Inherit_Aspects_At_Freeze_Point): Add ??? comment. (Inherit_Delayed_Rep_Aspects): Declare. * sem_ch13.adb (Analyze_Aspects_At_Freeze_Point): Do not invoke Inherit_Delayed_Rep_Aspects. (Inherit_Aspects_At_Freeze_Point): Deal with private types. (Inherit_Delayed_Rep_Aspects): Move to library level.
2022-09-05[Ada] Cleanup expansion of attribute PriorityPiotr Trojanek3-41/+30
Semantically neutral cleanup after the main fix for expansion of attribute Priority. gcc/ada/ * einfo-utils.adb (Number_Entries): Refine type of a local variable. * exp_attr.adb (Expand_N_Attribute_Reference): Rename Conctyp to Prottyp; refactor repeated calls to New_Occurrence_Of; replace Number_Entries with Has_Entries. * exp_ch5.adb (Expand_N_Assignment_Statement): Likewise; remove Subprg variable (apparently copy-pasted from expansion of the attribute).
2022-09-05[Ada] Fix expansion of attribute PriorityPiotr Trojanek2-7/+12
gcc/ada/ * exp_attr.adb (Expand_N_Attribute_Reference): Fix detection of the enclosing protected type and of the enclosing protected subprogram. * exp_ch5.adb (Expand_N_Assignment_Statement): Likewise.
2022-09-05[Ada] Remove excessive guards against inserting empty lists of actionsPiotr Trojanek2-6/+2
Call to Insert_Actions with empty list does nothing, so there is no need to guard against such calls. Code cleanup; behavior is unaffected. gcc/ada/ * freeze.adb (Freeze_Itype): Remove excessive guard. * sem_ch5.adb (Analyze_Loop_Parameter_Specification): Likewise.
2022-09-05[Ada] Improve pretty-printing of iterated component associationsPiotr Trojanek1-3/+12
Pretty-printing used mostly in the debugger now handles more Ada 2022 syntax features. In particular, now it correctly handles expressions like "[for E of A when E /= X => E]". gcc/ada/ * sprint.adb (Sprint_Node_Actual): Handle iterator_specification within iterated_component_association and iterator_filter within iterator_specification.
2022-09-05[Ada] Fix syntax in documentationArnaud Charlet2-24/+6
Leading to a poorly formatted example section. gcc/ada/ * doc/gnat_ugn/gnat_and_program_execution.rst: Fix rest syntax * gnat_ugn.texi: Regenerate.
2022-09-05x86: Handle V8BF in expand_vec_perm_broadcast_1konglin14-9/+24
gcc/ChangeLog: PR target/106742 * config/i386/i386-expand.cc (ix86_expand_vector_init_duplicate): Handle V8BF mode. (expand_vec_perm_broadcast_1): Ditto. * config/i386/sse.md (avx512fmaskhalfmode): Add BF vector mode. (vec_set<mode>_0): Add @ to it. (@vec_set<mode>_0): Ditto. (vec_interleave_high<mode><mask_name>): Ditto. (@vec_interleave_high<mode><mask_name>): Ditto. (vec_interleave_low<mode><mask_name>): Ditto. (@vec_interleave_low<mode><mask_name>): Ditto. * config/i386/subst.md (SUBST_V): Add BF vector mode. gcc/testsuite/ChangeLog: * gcc.target/i386/pr106742.c: New test.
2022-09-05Be even more conservative in intersection of NANs.Aldy Hernandez1-19/+16
Intersecting two ranges where one is a NAN is keeping the sign bit of the NAN range. This is not correct as the sign bits may not match. I think the only time we're absolutely sure about the intersection of a NAN and something else, is when both are a NAN with exactly the same properties (sign bit). If we're intersecting two NANs of differing sign, we can decide later whether that's undefined or just a NAN with no known sign. For now I've done the latter. I'm still mentally working on intersections involving NANs, especially if we want to keep track of signbits. For now, let's be extra careful and only do things we're absolutely sure about. Later we may want to fold the intersect of [NAN,NAN] and say [3,5] with the posibility of NAN, to a NAN, but I'm not 100% sure. As I've said before, setting varying is always a safe choice, because it means we know nothing and ranger won't attempt to optimize anything. gcc/ChangeLog: * value-range.cc (early_nan_resolve): Remove. (frange::intersect): Handle NANs.
2022-09-05Daily bump.GCC Administrator4-1/+28
2022-09-04Fortran: Fix ICE with -fcheck=pointer [PR100136]José Rui Faustino de Sousa2-4/+42
gcc/fortran/ChangeLog: PR fortran/100136 * trans-expr.cc (gfc_conv_procedure_call): Add handling of pointer expressions. gcc/testsuite/ChangeLog: PR fortran/100136 * gfortran.dg/PR100136.f90: New test.
2022-09-04Do not clobber signbit when unioning a NAN.Aldy Hernandez1-4/+21
When unioning a known NAN and something else, we're dropping the properties of the NAN, particularly the sign. This fixes the oversight. With this patch, we should be keeping the sign bit up to date, even in the presence of NANs. gcc/ChangeLog: * value-range.cc (frange::union_): Do not drop properties when unioning a NAN with something else. (range_tests_signed_zeros): Add tests.
2022-09-04Add real_isdenormal.Aldy Hernandez2-6/+13
There are 6 idioms of the same check and I'd like to add more. It seems there are macros as well as functions for things like REAL_VALUE_ISINF and REAL_VALUE_NEGATIVE. I don't know if there was historical need for this duplicity, but I think it's cleaner if we start gravitating towards inline functions only. gcc/ChangeLog: * real.cc (encode_ieee_single): Use real_isdenormal. (encode_ieee_double): Same. (encode_ieee_extended): Same. (encode_ieee_quad): Same. (encode_ieee_half): Same. (encode_arm_bfloat_half): Same. * real.h (real_isdenormal): New.