aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2022-05-12[Ada] Remove front-end SJLJ processingArnaud Charlet70-512/+40
We no longer use the so called front-end SJLJ exception mechanism, so get rid of it. gcc/ada/ * ali.adb, ali.ads, bcheck.adb, exp_ch11.adb, fe.h, gnat1drv.adb, opt.adb, opt.ads, targparm.adb, targparm.ads, lib-writ.adb: Get rid of Frontend_Exceptions processing. * libgnat/system-aix.ads, libgnat/system-darwin-arm.ads, libgnat/system-darwin-ppc.ads, libgnat/system-darwin-x86.ads, libgnat/system-djgpp.ads, libgnat/system-dragonfly-x86_64.ads, libgnat/system-freebsd.ads, libgnat/system-hpux-ia64.ads, libgnat/system-hpux.ads, libgnat/system-linux-alpha.ads, libgnat/system-linux-arm.ads, libgnat/system-linux-hppa.ads, libgnat/system-linux-ia64.ads, libgnat/system-linux-m68k.ads, libgnat/system-linux-mips.ads, libgnat/system-linux-ppc.ads, libgnat/system-linux-riscv.ads, libgnat/system-linux-s390.ads, libgnat/system-linux-sh4.ads, libgnat/system-linux-sparc.ads, libgnat/system-linux-x86.ads, libgnat/system-lynxos178-ppc.ads, libgnat/system-lynxos178-x86.ads, libgnat/system-mingw.ads, libgnat/system-qnx-aarch64.ads, libgnat/system-rtems.ads, libgnat/system-solaris-sparc.ads, libgnat/system-solaris-x86.ads, libgnat/system-vxworks-arm-rtp-smp.ads, libgnat/system-vxworks-arm-rtp.ads, libgnat/system-vxworks-arm.ads, libgnat/system-vxworks-e500-kernel.ads, libgnat/system-vxworks-e500-rtp-smp.ads, libgnat/system-vxworks-e500-rtp.ads, libgnat/system-vxworks-ppc-kernel.ads, libgnat/system-vxworks-ppc-rtp-smp.ads, libgnat/system-vxworks-ppc-rtp.ads, libgnat/system-vxworks-x86-kernel.ads, libgnat/system-vxworks-x86-rtp-smp.ads, libgnat/system-vxworks-x86-rtp.ads, libgnat/system-vxworks7-aarch64-rtp-smp.ads, libgnat/system-vxworks7-aarch64.ads, libgnat/system-vxworks7-arm-rtp-smp.ads, libgnat/system-vxworks7-arm.ads, libgnat/system-vxworks7-e500-kernel.ads, libgnat/system-vxworks7-e500-rtp-smp.ads, libgnat/system-vxworks7-e500-rtp.ads, libgnat/system-vxworks7-ppc-kernel.ads, libgnat/system-vxworks7-ppc-rtp-smp.ads, libgnat/system-vxworks7-ppc-rtp.ads, libgnat/system-vxworks7-ppc64-kernel.ads, libgnat/system-vxworks7-ppc64-rtp-smp.ads, libgnat/system-vxworks7-x86-kernel.ads, libgnat/system-vxworks7-x86-rtp-smp.ads, libgnat/system-vxworks7-x86-rtp.ads, libgnat/system-vxworks7-x86_64-kernel.ads, libgnat/system-vxworks7-x86_64-rtp-smp.ads: Remove Frontend_Exceptions line. * gcc-interface/decl.cc, gcc-interface/trans.cc (gnat_to_gnu_entity, gnat_to_gnu_subprog_type, gigi, gnat_to_gnu): Remove Front_End_SJLJ processing and always assume Back_End_Exceptions.
2022-05-12[Ada] Make debug printouts more robustBob Duff18-187/+178
This patch improves some debug printouts so that they avoid crashing on invalid data. In addition, the relevant code uses Global_Name_Buffer all over the place. This patch cleans up some of those uses, in particular ones in the same code as the robustness changes, and code called by that code. gcc/ada/ * namet.ads, namet.adb (Write_Name_For_Debug): New more-robust version of Write_Name. (Destroy_Global_Name_Buffer): New procedure to help detect bugs related to use of Global_Name_Buffer. Misc cleanup and comment improvements. E.g. we don't need to document every detail of debugging printouts, especially since they can change. * uname.ads, uname.adb (Write_Unit_Name_For_Debug): New more-robust version of Write_Unit_Name. (Get_Unit_Name_String): Pass buffer in, instead of using the global variable. Misc cleanup. Remove the "special fudge", which is apparently not needed, and anyway the comment "the %s or %b has already been eliminated" seems wrong. (Write_Unit_Name): Call the new version of Get_Unit_Name_String. * errout.adb (Set_Msg_Insertion_Unit_Name): Call the new version of Get_Unit_Name_String. We pass the global variable here, because it's too much trouble to disentangle such uses in Errout. * sem_util.ads, sem_util.adb, sem_dist.adb (Get_Library_Unit_Name): New version of Get_Library_Unit_Name_String that avoids usage of the global variable. * casing.ads, casing.adb, exp_prag.adb, exp_util.adb (Set_All_Upper_Case): Remove. There is no need for a wrapper here -- code is clearer without it. * treepr.adb (Print_Name): Call Write_Name_For_Debug, which deals with No_Name (etc), rather than duplicating that here. Note that the call to Get_Name_String was superfluous. (Tree_Dump): Call Write_Unit_Name_For_Debug instead of Write_Unit_Name, which crashes if not Is_Valid_Name. * erroutc.ads: Improve comments. * erroutc.adb (Set_Msg_Name_Buffer): Call Destroy_Global_Name_Buffer to detect potential bugs where it incorrectly looks at the global variable. * sinput.adb (Write_Location): Call Write_Name_For_Debug instead of Write_Name, so it won't blow up on invalid data. * sinput.ads: Improve comments; remove some verbosity. * libgnat/s-imagef.adb: Fix typo in comment.
2022-05-12[Ada] Add ghost code to facilitate proof with SPARKYannick Moy2-0/+17
Proof of generic units for Long_Long_Long_Unsigned instantiations is harder for provers, as they have to deal with larger values. Add ghost code to make the proof easier. gcc/ada/ * libgnat/s-imageu.adb (Set_Image_Unsigned): Add lemma. * libgnat/s-valueu.adb (Scan_Raw_Unsigned): Add assertion.
2022-05-12[Ada] Remove use of use-clauses in loaded runtime unitsYannick Moy4-14/+30
The spec of runtime units that may be loaded by the compiler should not contain use-clauses, for visibility to be correctly handled. Remove use-clauses that were introduced for the ghost big integers unit as part of the proof of runtime units. gcc/ada/ * libgnat/s-aridou.ads: Remove use-clause, add renames and subtypes. * libgnat/s-exponn.ads: Same. * libgnat/s-expont.ads: Same. * libgnat/s-widthu.ads: Same.
2022-05-12[Ada] Fix support for ISO-8859-15 and IBM CP 850 encodingEtienne Servais1-2/+4
In ISO-8859-15, code for "lower y with diaeresis" is used for the upper case. In IBM CP 850, upper and lower o with stroke were missing. gcc/ada/ * csets.adb (Fold_Latin_9): Fix y with diaeresis. (Fold_IBM_PC_850): Fix o with stroke.
2022-05-12[Ada] Remove redundant guard against Any_StringPiotr Trojanek1-1/+0
A sequence of checks for a valid Boolean argument fails when applied to Any_String because its component is not of a Boolean type. The explicit guard was unnecessary; it was only needed when a First_Index applied to Any_String would crash, but this was fixed soon after this guard was added. Cleanup related to recent fixes for resolution of Boolean operators. gcc/ada/ * sem_type.adb (Valid_Boolean_Arg): Remove redundant guard.
2022-05-12[Ada] Accept raise expressions as operands of boolean operatorsPiotr Trojanek1-0/+1
This patch restores the previous behaviour of a recently rewritten routine Sem_Ch4.Find_Boolean_Types for boolean operators where one of the operands is a raise-expression, e.g.: (raise Program_Error or else (X /= Y)) This change is required for the Entity field of the "or else" operator to be set. For GNAT it doesn't matter, but GNATprove requires this field to be set. The affected call sequence starts at Find_Boolean_Types, goes via Check_Right_Argument and Check_Boolean_Pair to Valid_Boolean_Arg, which ultimately guards a call to Add_One_Interp. gcc/ada/ * sem_type.adb (Valid_Boolean_Arg): Operands of Raise_Type are valid boolean arguments.
2022-05-12[Ada] Plug loophole in Possible_Type_For_Conditional_ExpressionEric Botcazou1-0/+4
We need to check that the designated subprograms of access-to-subprogram types are subtype conformant before registering a common interpretation. gcc/ada/ * sem_ch4.adb (Possible_Type_For_Conditional_Expression): Add test for subtype conformance in the cases of access-to-subprogram types.
2022-05-12[Ada] Adapt CodePeer analysis of GNAT to changes in dependenciesYannick Moy1-0/+2
New dependencies in s-imagei are causing issues for CodePeer analysis of GNAT source and libs. Updating the setup. gcc/ada/ * libgnat/s-imagef.adb: Justify false message from CodePeer.
2022-05-12[Ada] Revamp analysis of conditional expressionsEric Botcazou2-93/+396
The current implementation is skewed toward the first dependent expression and does not look into the interpretations of the others if the first one is not overloaded, which can create spurious ambiguities. And more precise error messages are now given if the types of the dependent expressions are not compatible. gcc/ada/ * sem_ch4.adb (Analyze_Case_Expression): Rewrite. (Analyze_If_Expression): Likewise. (Possible_Type_For_Conditional_Expression): New function. * sem_type.adb (Specific_Type): Retur the base type in more cases.
2022-05-12[Ada] Proof of 'Image support for signed integersYannick Moy17-32/+786
Prove System.Image_I, similarly to the proof done for System.Image_U. The contracts make the connection between the result of Image_Integer, the available space computed with System.Width_U and the result of 'Value as computed by Value_Integer. I/O units that now depend on non-pure units are also marked not Pure anymore. gcc/ada/ * libgnat/s-imagef.adb: Adapt to new signature of Image_I, by providing ghost imported subprograms. For now, no contract is used on these subprograms, as System.Image_F is not proved. * libgnat/s-imagef.ads: Add modular type Uns as formal parameter, to use in defining Int_Params for instantiating Image_I. * libgnat/s-imagei.adb: Add contracts and ghost code. * libgnat/s-imagei.ads: Replace Int formal parameter by package Int_Params, which bundles type Int and Uns with ghost subprograms. Add contracts. * libgnat/s-imfi128.ads: Adapt to new formal of Image_F. * libgnat/s-imfi32.ads: Adapt to new formal of Image_F. * libgnat/s-imfi64.ads: Adapt to new formal of Image_F. * libgnat/s-imgint.ads: Adapt to new formals of Image_I. * libgnat/s-imglli.ads: Adapt to new formals of Image_I. * libgnat/s-imgllli.ads: Adapt to new formals of Image_I. * libgnat/s-valint.ads: Adapt to new formals of Value_I. * libgnat/s-vallli.ads: Adapt to new formals of Value_I. * libgnat/s-valllli.ads: Adapt to new formals of Value_I. * libgnat/s-valuei.adb (Prove_Scan_Only_Decimal_Ghost): New ghost lemma. * libgnat/s-valuei.ads: New formal parameters to prove the new lemma. * libgnat/s-valuti.ads (Int_Params): Define a generic package to be used as a trait-like formal parameter in Image_I and other generics that need to instantiate Image_I. * libgnat/s-widthu.ads (Big_10): Qualify the 10 literal.
2022-05-12[Ada] Rewrite Sem_Ch4.Find_Boolean_TypesEric Botcazou1-74/+68
Using a straight implementation like the one in Find_Arithmetic_Types. gcc/ada/ * sem_ch4.adb (Find_Arithmetic_Types): Use local variables. (Find_Boolean_Types): Rewrite modeled on Find_Arithmetic_Types.
2022-05-12[Ada] Introduce hardbool Machine_Attribute for AdaAlexandre Oliva4-27/+175
Implement and document hardened booleans, from nonstandard boolean types with representation clauses to the extra validity checking performed on boolean types annotated with the "hardbool" Machine_Attribute pragma. gcc/ada/ * doc/gnat_rm/security_hardening_features.rst (Hardened Booleans): New. * exp_util.adb (Adjust_Condition): Perform validity checking on hardbool-annotated types even with -gnatVT. * gnat_rm.texi: Regenerate. * gcc-interface/utils.cc (gnat_internal_attribute_table): Ignore hardbool.
2022-05-12[Ada] Fix scope of block in expanded protected entry bodyPiotr Trojanek1-1/+2
We expand protected entry body into procedure with a nested block. The scope of this block is naturally the enclosing procedure. However, the scope field was wrongly set to the entity of the enclosing procedure body (i.e. E_Subprogram_Body); now it is set to the entity of the enclosing procedure spec (i.e. E_Procedure). In general, the scope field should always points to spec, even for entities that are syntactically nested within a program unit body. The scope set to E_Subprogram_Body entity was only accepted because in gigi we had a protection for that, but this protection is now removed. This patch fixes a regression in a ravenscar testsuite test (c_rf02_06), where GNAT was crashing when compiling in configurable runtime mode with restriction No_Exception_Propagation. gcc/ada/ * exp_ch9.adb (Build_Protected_Entry): Set scope of the nested block to spec and not the body of the procedure created for a protected entry.
2022-05-12[Ada] Fix typo in commentEtienne Servais1-1/+1
gcc/ada/ * sem_ch3.adb (Find_Type_Of_Object): Remove duplicate "i" in comment.
2022-05-12[Ada] Fix style checking rule for square brackets in Ada 2022 and aboveMarc Poulhiès8-40/+52
The square bracket syntax introduced in Ada 2022 was incorrectly handled by the style checker and incorrect spacing was enforced. The issue was in part caused by the wide character syntax (support removed starting from Ada 2022) that treats the square bracket as a valid identifier character. gcc/ada/ * csets.adb (Initialize): Only treat square bracket as valid identifier character for Ada versions prior to Ada 2022. * style.ads (Check_Left_Paren): Rename... (Check_Left_Paren_Square_Bracket): ...to this. * styleg.adb (Check_Left_Bracket): Rename... (Check_Left_Paren_Square_Bracket): ...to this. * styleg.ads (Check_Left_Paren): Rename... (Check_Left_Paren_Square_Bracket): ...to this. * scng.adb (Scan): Add check for spacing around left square bracket and use new name for Check_Left_Paren_Square_Bracket. * libgnat/a-szmzco.ads (Control_Ranges, Graphic_Ranges) (Letter_Ranges, Decimal_Digit_Ranges, ISO_646_Ranges) (Character_Ranges): Fix style (remove extra space). * libgnat/a-swmwco.ads (Control_Ranges, Graphic_Ranges) (Letter_Ranges, Decimal_Digit_Ranges, ISO_646_Ranges) (Character_Ranges): Likewise. * opt.adb (Set_Config_Switches): Remove [ from Identifier_Char set.
2022-05-12[Ada] Fix remaining asymmetry in Specific_TypeEric Botcazou1-7/+16
gcc/ada/ * sem_type.adb (Specific_Type): Add swapped cases for interfaces.
2022-05-12[Ada] Fix typos in syntax for implementation-defined pragmasPiotr Trojanek2-8/+8
Documentation cleanup. Spotted while looking at description of configuration pragmas. gcc/ada/ * doc/gnat_rm/implementation_defined_pragmas.rst: (Export_Object, Import_Object, Short_Descriptors): Fix pragma syntax specification. * gnat_rm.texi: Regenerate.
2022-05-12[Ada] Reuse generic string hash for invocation signaturesPiotr Trojanek1-11/+9
Use a generic string hash routine for hashing of invocation signatures. The System.String_Hash unit was added to GNAT in 2009 and shouldn't cause any bootstrap problems these days. To be safe, we don't use the GNAT.String_Hash renaming, which was added later. Cleanup related to a new restriction No_Uninitialized_Local_Scalars, which will also rely on GNAT hash tables. Semantics is unaffected. gcc/ada/ * ali.adb (Hash): Reuse GNAT.String_Hash.Hash and don't pollute the Name_Id table.
2022-05-12[Ada] Document Aggregate_Individually_Assign as a configuration pragmaPiotr Trojanek2-0/+2
Pragma Aggregate_Individually_Assign was apparently forgotten to be listed in the GNAT User's Guide as a configuration pragma. gcc/ada/ * doc/gnat_ugn/the_gnat_compilation_model.rst (Configuration Pragmas): Add Aggregate_Individually_Assign; otherwise the list is complete except for some obsoleted pragmas, which most likely are intentionally omitted. * gnat_ugn.texi: Regenerate.
2022-05-12libgomp nvptx plugin: Split 'PLUGIN_NVPTX_DYNAMIC' into ↵Thomas Schwinge6-22/+52
'PLUGIN_NVPTX_INCLUDE_SYSTEM_CUDA_H' and 'PLUGIN_NVPTX_LINK_LIBCUDA' Including the GCC-shipped 'include/cuda/cuda.h' vs. system <cuda.h> and 'dlopen'ing the CUDA Driver library vs. linking it are separate concerns. libgomp/ * plugin/Makefrag.am: Handle 'PLUGIN_NVPTX_DYNAMIC'. * plugin/configfrag.ac (PLUGIN_NVPTX_DYNAMIC): Change 'AC_DEFINE_UNQUOTED' into 'AM_CONDITIONAL'. * plugin/plugin-nvptx.c: Split 'PLUGIN_NVPTX_DYNAMIC' into 'PLUGIN_NVPTX_INCLUDE_SYSTEM_CUDA_H' and 'PLUGIN_NVPTX_LINK_LIBCUDA'. * Makefile.in: Regenerate. * config.h.in: Likewise. * configure: Likewise.
2022-05-12libgomp plugins: Don't 'AC_SUBST' and 'AC_DEFINE_UNQUOTED' for 'PLUGIN_GCN', ↵Thomas Schwinge5-32/+2
'PLUGIN_NVPTX' Nothing ever used these. libgomp/ * plugin/configfrag.ac: Don't 'AC_SUBST' and 'AC_DEFINE_UNQUOTED' for 'PLUGIN_GCN', 'PLUGIN_NVPTX'. * Makefile.in: Regenerate. * config.h.in: Likewise. * configure: Likewise. * testsuite/Makefile.in: Likewise.
2022-05-12tree-optimization/105562 - avoid uninit diagnostic with better FRERichard Biener3-9/+40
We can avoid some uninit diagnostics by making FRE disambiguate against CLOBBERs since any aliasing there would invoke undefined behavior for a read we are looking up. 2022-05-12 Richard Biener <rguenther@suse.de> PR tree-optimization/105562 * tree-ssa-sccvn.cc (vn_reference_lookup_3): Disambiguate against all CLOBBER defs if there's not an obvious must-alias and we are not doing redundant store elimination. (vn_walk_cb_data::redundant_store_removal_p): New field. (vn_reference_lookup_pieces): Initialize it. (vn_reference_lookup): Add argument to specify if we are doing redundant store removal. (eliminate_dom_walker::eliminate_stmt): Specify we do. * tree-ssa-sccvn.h (vn_reference_lookup): Adjust. * g++.dg/warn/uninit-pr105562.C: New testcase.
2022-05-12c++: Support module language-decl semanticsNathan Sidwell4-0/+50
In modules purview, one can attach a declaration to the global module (i.e. not the named module in whence the declaration appears), using a language declaration: export module Foo; extern "C++" void *operator new (std::size_t); This implements those semantics. gcc/cp/ * parser.cc (cp_parser_linkage_specification): Implement global module attachment semantics. gcc/testsuite/ * g++.dg/modules/lang-3_a.C: New. * g++.dg/modules/lang-3_b.C: New. * g++.dg/modules/lang-3_c.C: New.
2022-05-12i386: Add combine splitter to transform pxor/pcmpeqb/pmovmskb/cmp 0xffff to ↵Haochen Jiang3-0/+44
ptest. gcc/ChangeLog: PR target/104371 * config/i386/sse.md (vi1avx2const): New define_mode_attr. (pxor/pcmpeqb/pmovmskb/cmp 0xffff to ptest splitter): New define_split pattern. gcc/testsuite/ChangeLog: PR target/104371 * gcc.target/i386/pr104371-1.c: New test. * gcc.target/i386/pr104371-2.c: Ditto.
2022-05-12openmp: Add omp_all_memory support (C/C++ only so far)Jakub Jelinek20-36/+817
The ugly part is that OpenMP 5.1 made omp_all_memory a reserved identifier which isn't allowed to be used anywhere but in the depend clause, this is against how everything else has been handled in OpenMP so far (where some identifiers could have special meaning in some OpenMP clauses or pragmas but not elsewhere). The patch handles it by making it a conditional keyword (for -fopenmp only) and emitting a better diagnostics when it is used in a primary expression. Having a nicer diagnostics when e.g. trying to do int omp_all_memory; or int *omp_all_memory[10]; etc. would mean changing too many spots and hooking into name lookups to reject declaring any such symbols would be too ugly and I'm afraid there are way too many spots where one can introduce a name (variables, functions, namespaces, struct, enum, enumerators, template arguments, ...). Otherwise, the handling is quite simple, normal depend clauses lower into addresses of variables being handed over to the library, for omp_all_memory I'm using NULL pointers. omp_all_memory can only be used with inout or out depend kinds and means that a task is dependent on all previously created sibling tasks that have any dependency (of any depend kind) and that any later created sibling tasks will be dependent on it if they have any dependency. 2022-05-12 Jakub Jelinek <jakub@redhat.com> gcc/ * gimplify.cc (gimplify_omp_depend): Don't build_fold_addr_expr if null_pointer_node. (gimplify_scan_omp_clauses): Likewise. * tree-pretty-print.cc (dump_omp_clause): Print null_pointer_node as omp_all_memory. gcc/c-family/ * c-common.h (enum rid): Add RID_OMP_ALL_MEMORY. * c-omp.cc (c_finish_omp_depobj): Don't build_fold_addr_expr if null_pointer_node. gcc/c/ * c-parser.cc (c_parse_init): Register omp_all_memory as keyword if flag_openmp. (c_parser_postfix_expression): Diagnose uses of omp_all_memory in postfix expressions. (c_parser_omp_variable_list): Handle omp_all_memory in depend clause. * c-typeck.cc (c_finish_omp_clauses): Handle omp_all_memory keyword in depend clause as null_pointer_node, diagnose invalid uses. gcc/cp/ * lex.cc (init_reswords): Register omp_all_memory as keyword if flag_openmp. * parser.cc (cp_parser_primary_expression): Diagnose uses of omp_all_memory in postfix expressions. (cp_parser_omp_var_list_no_open): Handle omp_all_memory in depend clause. * semantics.cc (finish_omp_clauses): Handle omp_all_memory keyword in depend clause as null_pointer_node, diagnose invalid uses. * pt.cc (tsubst_omp_clause_decl): Pass through omp_all_memory. gcc/testsuite/ * c-c++-common/gomp/all-memory-1.c: New test. * c-c++-common/gomp/all-memory-2.c: New test. * c-c++-common/gomp/all-memory-3.c: New test. * g++.dg/gomp/all-memory-1.C: New test. * g++.dg/gomp/all-memory-2.C: New test. libgomp/ * libgomp.h (struct gomp_task): Add depend_all_memory member. * task.c (gomp_init_task): Initialize depend_all_memory. (gomp_task_handle_depend): Handle omp_all_memory. (gomp_task_run_post_handle_depend_hash): Clear parent->depend_all_memory if equal to current task. (gomp_task_maybe_wait_for_dependencies): Handle omp_all_memory. * testsuite/libgomp.c-c++-common/depend-1.c: New test. * testsuite/libgomp.c-c++-common/depend-2.c: New test. * testsuite/libgomp.c-c++-common/depend-3.c: New test.
2022-05-11testsuite: Update Wconversion testcase check type.jiawei1-1/+1
Some compiler target like arm-linux\riscv\power\s390x\xtensa-gcc handle char as unsigned char, then there are no warnings occur and got FAIL cases. Just change the type char into explicit signed char to keep the feature consistency. gcc/testsuite/ChangeLog: * c-c++-common/Wconversion-1.c: Update type.
2022-05-12Daily bump.GCC Administrator12-1/+532
2022-05-11analyzer: fix memory leaksDavid Malcolm4-18/+39
These leaks all relate to logging within -fdump-analyzer[-stderr] or are one-time leaks; seen with valgrind. gcc/analyzer/ChangeLog: * checker-path.cc (state_change_event::get_desc): Call maybe_free on label_text temporaries. * diagnostic-manager.cc (diagnostic_manager::prune_for_sm_diagnostic): Likewise. * engine.cc (exploded_graph::~exploded_graph): Fix leak of m_per_point_data and m_per_call_string_data values. Simplify cleanup of m_per_function_stats and m_per_point_data values. (feasibility_state::maybe_update_for_edge): Fix leak of result of superedge::get_description. * region-model-manager.cc (region_model_manager::~region_model_manager): Move cleanup of m_setjmp_values to match the ordering of the fields within region_model_manager. Fix leak of values within m_repeated_values_map, m_bits_within_values_map, m_asm_output_values_map, and m_const_fn_result_values_map. Signed-off-by: David Malcolm <dmalcolm@redhat.com>
2022-05-11tree: introduce range adaptor for TREE_VECPatrick Palka4-45/+41
This patch implements a simple tree wrapper, named tree_vec_range, which lets us idiomatically loop over all the elements of a TREE_VEC using a C++11 range-based for loop: // v is a TREE_VEC for (tree e : tree_vec_range (v)) ... This is similar to the existing tree-based range adaptors ovl_range and lkp_range added to the C++ FE in r12-340-g3307b9a07a3c51. This patch also converts some existing loops over TREE_VEC within the C++ FE to use tree_vec_range / range-for. gcc/cp/ChangeLog: * constraint.cc (tsubst_parameter_mapping): Convert loop over TREE_VEC into a range-based for loop using tree_vec_range. * pt.cc (iterative_hash_template_arg): Likewise. (template_parms_level_to_args): Likewise. (deducible_template_args): Likewise. (check_undeduced_parms): Likewise. (dependent_type_p_r): Likewise. (value_dependent_expression_p) <case NONTYPE_ARGUMENT_PACK>: Likewise. (dependent_template_arg_p): Likewise. * tree.cc (cp_walk_subtrees) <case NONTYPE_ARGUMENT_PACK>: Likewise. gcc/ChangeLog: * tree.h (TREE_VEC_BEGIN): Define. (TREE_VEC_END): Correct 'length' member access. (class tree_vec_range): Define.
2022-05-11c++: lambda template in requires [PR105541]Jason Merrill3-6/+15
Since the patch for PR103408, the template parameters for the lambda in this test have level 1 instead of 2, and we were treating null template args as 1 level of arguments, so tsubst_template_parms decided it had nothing to do. Fixed by distinguishing between <> and no args at all, which is what we have in our "substitution" in a requires-expression. PR c++/105541 gcc/cp/ChangeLog: * cp-tree.h (TMPL_ARGS_DEPTH): 0 for null args. * parser.cc (cp_parser_enclosed_template_argument_list): Use 0-length TREE_VEC for <>. gcc/testsuite/ChangeLog: * g++.dg/cpp2a/lambda-requires1.C: New test.
2022-05-11c++: fix arm-eabi bootstrap [PR105567]Jason Merrill2-2/+12
Since my r13-112, in the template we were changing 'return' to 'return this' on cdtor_returns_this targets, and then getting confused by that when instantiating. So only make that change at instantiation time. PR bootstrap/105567 gcc/cp/ChangeLog: * typeck.cc (check_return_expr): Don't mess with ctor return value while parsing a template. gcc/testsuite/ChangeLog: * g++.dg/template/ctor10.C: New test.
2022-05-11Fortran: fix error recovery on invalid array sectionHarald Anlauf2-2/+10
gcc/fortran/ChangeLog: PR fortran/105230 * expr.cc (find_array_section): Correct logic to avoid NULL pointer dereference on invalid array section. gcc/testsuite/ChangeLog: PR fortran/105230 * gfortran.dg/pr105230.f90: New test. Co-authored-by: Steven G. Kargl <kargl@gcc.gnu.org>
2022-05-11rs6000: Remove <Fv>Segher Boessenkool1-52/+46
The <Fv> mode iterator always expands to "wa". 2022-05-11 Segher Boessenkool <segher@kernel.crashing.org> * config/rs6000/rs6000.md: Use wa instead of <Fv>.
2022-05-11rs6000: Remove <Ff>Segher Boessenkool1-60/+57
The <Ff> mode iterator can just use "d" always. 2022-05-11 Segher Boessenkool <segher@kernel.crashing.org> * config/rs6000/rs6000.md: Use d instead of <Ff>.
2022-05-11rs6000: Delete RS6000_CONSTRAINT_fSegher Boessenkool3-16/+5
Constraint "f" is always exactly the same as constraint "d", so we do not need RS6000_CONSTRAINT_f. 2022-05-11 Segher Boessenkool <segher@kernel.crashing.org> * config/rs6000/constraints.md (register_constraint "f"): Use RS6000_CONSTRAINT_d. * config/rs6000/rs6000.cc (rs6000_debug_reg_global): Do not handle RS6000_CONSTRAINT_f. (rs6000_init_hard_regno_mode_ok): Ditto. Reorder and simplify a bit. * config/rs6000/rs6000.h (r6000_reg_class_enum): Delete RS6000_CONSTRAINT_d.
2022-05-11Use variadic template functions for the gimple_build forwardersRichard Biener1-34/+11
The following consolidates the forwarders to gimple_build with UNKNOWN_LOCATION by using two variadic template functions. This makes the code visually less disturbing and is in preparation of adding more forwarders with different stmt insertion schemes. 2022-05-11 Richard Biener <rguenther@suse.de> * gimple-fold.h (gimple_build): Use variadic template functions for the gimple_build API forwarders without location_t argument.
2022-05-11middle-end/70090: Register __bdos for sanitizers if necessarySiddhesh Poyarekar1-8/+16
The asan initializer registers __builtin_object_size for languages that don't have it, e.g. Fortran. Register __builtin_dynamic_object_size too (we need both because __builtin_dynamic_object_size computation may involve generating __builtin_object_size as a fallback) so that gfortran.dg/ubsan/bind-c-intent-out-2.f90 does not crash anymore. gcc/ChangeLog: PR middle-end/70090 * asan.cc (initialize_sanitizer_builtins): Register __builtin_dynamic_object_size if necessary. Signed-off-by: Siddhesh Poyarekar <siddhesh@gotplt.org>
2022-05-11[c++] Add module attachmentNathan Sidwell6-79/+114
This adds module attachment as a distinct flag to 'in module purview'. A declaration may have neither or both (as before), but can also have just the 'in [named-module] purview', which was previously not representable. This new state allows some cleanup of redeclarations (particularly the builtins), which was a little warty. Some other internal APIs get similarly clarified. gcc/cp/ * cp-tree.h (DECL_MODULE_ATTACH_P): New. (struct lang_decl_base): Add module_attach_p flag. * decl.cc (duplicate_decls): Rework module redeclaration checking. * module.cc (trees_out::lang_decl_bools): Write attach flag. (trees_in::lang_decl_bools): ... and read it back. (trees_out::decl_value): Rework module attachment handling. (trees_in::decl_value): Rename local var to reflect meaning. (trees_in::key_mergeable): Likewise. (get_originating_module): Use DECL_MODULE_ATTACH_P. No need to special-case mangling. (module_may_redeclare): Reimplement. (set_originating_module): Deal with attachment. * name-lookup.cc (maybe_record_mergeable_decl): Deal with attachment. (mergeable_namespace_slots): Likewise. (do_nonmember_using_decl): Likewise. * name-lookup.h (mergeable_namespace_slots): Adjust parm meaning. * ptree.cc (cxx_print_decl): Adjust purview & attach printing.
2022-05-11rtl-optimization/105559 - avoid quadratic behavior in delete_insn_and_edgesRichard Biener1-1/+1
When the insn to delete is a debug insn there's no point in figuring out whether it might be the last real insn and thus we have to purge dead edges. 2022-05-11 Richard Biener <rguenther@suse.de> PR rtl-optimization/105559 * cfgrtl.cc (delete_insn_and_edges): Only perform search to BB_END for non-debug insns.
2022-05-11Implement some of fold_binary_op_with_conditional_arg in match.pdRichard Biener4-4/+44
The following allows (c != 0 ? 0 : 100) != 0 to be simplified as c != 0 as fold_binary_op_with_conditional_arg would have done via forwprop and GENERIC folding. Likewise it allows to combine (a != 0) != 0 directly via match.pd instead of only via forwprop and again fold_binary_op_with_conditional_arg. The patterns do not fully implement all cases of fold_binary_op_with_conditional_arg, some aspects like "any of the operands simplify" cannot currently be expressed. 2022-05-11 Richard Biener <rguenther@suse.de> * generic-match-head.cc: Include tree-eh.h. * match.pd ((cond ...) cmp X): New simplification inspired by fold_binary_op_with_conditional_arg. (eq/ne (cmp ...) true/false): Likewise. * gcc.dg/tree-ssa/pr61839_1.c: Adjust. * gcc.dg/tree-ssa/vrp24.c: Likewise.
2022-05-11libgomp: Remove unused '--with-hsa-runtime', '--with-hsa-runtime-include', ↵Thomas Schwinge5-98/+2
'--with-hsa-runtime-lib' With recent commit 2e309a4eff80e55b53d32d26926a2a94eabfea21 "libgomp testsuite: Don't amend 'LD_LIBRARY_PATH' for system-provided HSA Runtime library", and commit d6adba307508c75f1ccb2121eb1a43c9ab1d4056 "libgomp GCN plugin: Clean up unused references to system-provided HSA Runtime library", the last uses of '--with-hsa-runtime' etc. are gone. gcc/ * doc/install.texi: Don't document '--with-hsa-runtime', '--with-hsa-runtime-include', '--with-hsa-runtime-lib'. libgomp/ * plugin/configfrag.ac: Remove '--with-hsa-runtime', '--with-hsa-runtime-include', '--with-hsa-runtime-lib' processing. * Makefile.in: Regenerate. * configure: Likewise. * testsuite/Makefile.in: Likewise.
2022-05-11libgomp GCN plugin: Clean up always-empty 'PLUGIN_GCN_CPPFLAGS', ↵Thomas Schwinge5-22/+7
'PLUGIN_GCN_LDFLAGS' After recent commit d6adba307508c75f1ccb2121eb1a43c9ab1d4056 "libgomp GCN plugin: Clean up unused references to system-provided HSA Runtime library", these aren't set anymore. libgomp/ * plugin/Makefrag.am (libgomp_plugin_gcn_la_CPPFLAGS): Don't consider 'PLUGIN_GCN_CPPFLAGS'. (libgomp_plugin_gcn_la_LDFLAGS): Don't consider 'PLUGIN_GCN_LDFLAGS'. * plugin/configfrag.ac (PLUGIN_GCN_CPPFLAGS, PLUGIN_GCN_LDFLAGS): Remove. * Makefile.in: Regenerate. * configure: Likewise. * testsuite/Makefile.in: Likewise.
2022-05-11libgomp GCN plugin: Clean up unused references to system-provided HSA ↵Thomas Schwinge2-20/+0
Runtime library This is only active if GCC is 'configure'd with '--with-hsa-runtime=[...]' or '--with-hsa-runtime-include=[...]', '--with-hsa-runtime-lib=[...]' -- which nobody really is doing, as far as I can tell. Originally changed for the libgomp HSA plugin in commit b8d89b03db5f212919e4571671ebb4f5f8b1e19d (r242749) "Remove build dependence on HSA run-time", and later propagated into the GCN plugin, these are no longer built against system-provided HSA Runtime library. Instead, unconditionally built against the GCC-shipped 'include/hsa*.h' header files, and at run time does 'dlopen("libhsa-runtime64.so.1")'. It thus doesn't make sense to consider references to system-provided HSA Runtime library during libgomp GCN plugin build. libgomp/ * plugin/configfrag.ac (HSA_RUNTIME_CPPFLAGS) (HSA_RUNTIME_LDFLAGS): Remove. * configure: Regenerate.
2022-05-11libgomp testsuite: Don't amend 'LD_LIBRARY_PATH' for system-provided HSA ↵Thomas Schwinge2-5/+0
Runtime library This is only active if GCC is 'configure'd with '--with-hsa-runtime=[...]' or '--with-hsa-runtime-lib=[...]' -- which nobody really is doing, as far as I can tell. 'libgomp/testsuite/lib/libgomp.exp:libgomp_init' states: # For build-tree testing, also consider the library paths used for builing. # For installed testing, we assume all that to be provided in the sysroot. if { $blddir != "" } { [...] global hsa_runtime_lib if { $hsa_runtime_lib != "" } { append always_ld_library_path ":$hsa_runtime_lib" } } However, the libgomp GCN plugin is unconditionally built against the GCC-shipped 'include/hsa*.h' header files, and at run time does 'dlopen("libhsa-runtime64.so.1")', so there is no system-provided HSA Runtime library "used for builing". It thus doesn't make sense to amend 'LD_LIBRARY_PATH' for system-provided HSA Runtime library. libgomp/ * testsuite/lib/libgomp.exp (libgomp_init): Don't 'append always_ld_library_path ":$hsa_runtime_lib"'. * testsuite/libgomp-test-support.exp.in (hsa_runtime_lib): Don't set.
2022-05-11docs: document --with-zstdMartin Liska1-0/+5
PR other/105527 gcc/ChangeLog: * doc/install.texi: Document the configure option --with-zstd.
2022-05-11i386: simplify cpu_feature handlingMartin Liska2-62/+67
The patch removes unneeded loops for cpu_features2 and CONVERT_EXPR that can be simplified with NOP_EXPR. gcc/ChangeLog: * common/config/i386/cpuinfo.h (has_cpu_feature): Directly compute index in cpu_features2. (set_cpu_feature): Likewise. * config/i386/i386-builtins.cc (fold_builtin_cpu): Also remove loop for cpu_features2 and use NOP_EXPRs.
2022-05-11[Ada] Proof of 'Image support for unsigned integersYannick Moy27-186/+793
Prove System.Image_U, making the connection with the space available in the string as computed with System.Width_U and the functions that support the other direction of 'Value in System.Value_U. The units that support 'Image cannot be marked Pure anymore, as they now depend on non-pure units. gcc/ada/ * libgnat/s-imaged.ads: Remove Pure. * libgnat/s-imagef.ads: Remove Pure. * libgnat/s-imager.ads: Remove Pure. * libgnat/s-imageu.adb: Add ghost code. * libgnat/s-imageu.ads: Add contracts. * libgnat/s-imde128.ads: Remove Pure. * libgnat/s-imde32.ads: Remove Pure. * libgnat/s-imde64.ads: Remove Pure. * libgnat/s-imfi128.ads: Remove Pure. * libgnat/s-imfi32.ads: Remove Pure. * libgnat/s-imfi64.ads: Remove Pure. * libgnat/s-imgflt.ads: Remove Pure. * libgnat/s-imglfl.ads: Remove Pure. * libgnat/s-imgllf.ads: Remove Pure. * libgnat/s-imglllu.ads: Instantiate with ghost subprograms. * libgnat/s-imgllu.ads: Instantiate with ghost subprograms. * libgnat/s-imgrea.ads: Remove Pure. * libgnat/s-imguns.ads: Instantiate with ghost subprograms. * libgnat/s-imguti.ads: Remove Pure. * libgnat/s-valueu.adb (Prove_Iter_Scan_Based_Number_Ghost, Prove_Scan_Only_Decimal_Ghost): New lemmas. * libgnat/s-valueu.ads (Uns_Option): Do not make type ghost to be able to use it as formal in instantiations. (Only_Decimal_Ghost): New ghost query. (Prove_Iter_Scan_Based_Number_Ghost, Prove_Scan_Only_Decimal_Ghost): New lemmas. * libgnat/s-widlllu.ads: Adapt to changes in Width_U. * libgnat/s-widllu.ads: Adapt to changes in Width_U. * libgnat/s-widthu.adb: Change generic function in generic package in order to complete the postcondition. Tighten the upper bound on the result by 1. * libgnat/s-widthu.ads: Same. * libgnat/s-widuns.ads: Adapt to changes in Width_U. * gcc-interface/Make-lang.in: Add dependencies on a-nubinu, a-numeri.ads and a-widuns.ads.
2022-05-11[Ada] Sort Detect_Blocking alphabetically among names and pragmasPiotr Trojanek1-2/+2
In GNAT User's Guide section about configuration pragmas the Detect_Blocking has been recently moved to an alphabetic order. This patch moves the its Name_Id and Pragma_Is in the source code to match this order. gcc/ada/ * snames.ads-tmpl (Detect_Blocking): Move after Default_Storage_Pool.
2022-05-11[Ada] Fix Compile_Time_(Error|Warning) as non-configuration pragmasPiotr Trojanek2-13/+4
Uses of Compile_Time_Error and Compile_Time_Warning as configuration pragmas were detected with a custom check in semantic analysis. Now they are detected with an existing general check in parser. gcc/ada/ * sem_prag.adb (Analyze_Pragma): Remove custom check for Compile_Time_Error and Compile_Time_Warning pragmas. * snames.ads-tmpl (Compile_Time_Error, Compile_Time_Warning): Move beyond Last_Configuration_Pragma_Name.