aboutsummaryrefslogtreecommitdiff
path: root/gcc
AgeCommit message (Collapse)AuthorFilesLines
2024-08-01AArch64: Add Neoverse N3 and Cortex-A725 core definition and cost modelTamar Christina5-2/+251
This adds a cost model and core definition for Neoverse N3 and Cortex-A725. It also makes Cortex-A725 use the Neoverse N3 cost model. gcc/ChangeLog: * config/aarch64/aarch64-cores.def (neoverse-n3, cortex-a725): New. * config/aarch64/aarch64-tune.md: Regenerate. * config/aarch64/tuning_models/neoversen3.h: New file. * config/aarch64/aarch64.cc: Use it. * doc/invoke.texi: Document it.
2024-08-01AArch64: Add Neoverse V3AE core definition and cost modelTamar Christina5-2/+250
This adds a cost model and core definition for Neoverse V3AE. gcc/ChangeLog: * config/aarch64/aarch64-cores.def (neoverse-v3ae): New. * config/aarch64/aarch64-tune.md: Regenerate. * config/aarch64/tuning_models/neoversev3ae.h: New file. * config/aarch64/aarch64.cc: Use it. * doc/invoke.texi: Document it.
2024-08-01AArch64: Add Neoverse V3 core definition and cost modelTamar Christina5-2/+251
This adds a cost model and core definition for Neoverse V3. It also makes Cortex-X4 use the Neoverse V3 cost model. gcc/ChangeLog: * config/aarch64/aarch64-cores.def (cortex-x4): Update. (neoverse-v3): New. * config/aarch64/aarch64-tune.md: Regenerate. * config/aarch64/tuning_models/neoversev3.h: New file. * config/aarch64/aarch64.cc: Use it. * doc/invoke.texi: Document it.
2024-08-01AArch64: Update Neoverse V2 cost model to release costsTamar Christina2-20/+20
This updates the cost for Neoverse V2 to reflect the updated Software Optimization Guide. It also makes Cortex-X3 use the Neoverse V2 cost model. gcc/ChangeLog: * config/aarch64/aarch64-cores.def (cortex-x3): Use Neoverse-V2 costs. * config/aarch64/tuning_models/neoversev2.h: Update costs.
2024-08-01match: Fix wrong code due to `(a ? e : f) !=/== (b ? e : f)` patterns [PR116120]Andrew Pinski6-8/+120
When this pattern was converted from being only dealing with 0/-1, we missed that if `e == f` is true then the optimization is wrong and needs an extra check for that. This changes the patterns to be: /* (a ? x : y) != (b ? x : y) --> (a^b & (x != y)) ? TRUE : FALSE */ /* (a ? x : y) == (b ? x : y) --> (a^b & (x != y)) ? FALSE : TRUE */ /* (a ? x : y) != (b ? y : x) --> (a^b | (x == y)) ? FALSE : TRUE */ /* (a ? x : y) == (b ? y : x) --> (a^b | (x == y)) ? TRUE : FALSE */ Also this can't be done if the X can be a NaNs either. Since that changes the value there too. This still produces better code than the original case and in many cases (x != y) will still reduce to either false or true. With this change we also need to make sure `a`, `b` and the resulting types are all the same for the same reason as the previous patch. I updated (well added) to the testcases to make sure there are the right amount of comparisons left. Changes since v1: * v2: Fixed the testcase names and fixed dg-run to be `dg-do run`. Added a check for HONORS_NANS too. Bootstrapped and tested on x86_64-linux-gnu with no regressions. PR tree-optimization/116120 gcc/ChangeLog: * match.pd (`(a ? x : y) eq/ne (b ? x : y)`): Add test for `x != y` in result. (`(a ? x : y) eq/ne (b ? y : x)`): Add test for `x == y` in result. gcc/testsuite/ChangeLog: * g++.dg/tree-ssa/pr111150.C: Add extra checks on the test. * gcc.dg/tree-ssa/pr111150-1.c: Likewise. * gcc.dg/tree-ssa/pr111150.c: Likewise. * g++.dg/torture/pr116120-1.C: New test. * g++.dg/torture/pr116120-2.C: New test. Signed-off-by: Andrew Pinski <quic_apinski@quicinc.com>
2024-08-01ada: Fix computation of new size when reallocating unbounded stringYannick Moy1-1/+1
The procedure Realloc_For_Chunk which is used to reallocate an unbounded string when needed may lead in theory to an overflow, due to the use of variable S_Length denoting the current allocated length instead of Source.Last denoting the current string length. Now fixed. This has no effect in practice since the only targets that use this version of Ada.Strings.Unbounded do not have enough memory to make it possible to have an overflow here. gcc/ada/ * libgnat/a-strunb.adb (Realloc_For_Chunk): Fix computation of new size.
2024-08-01ada: Update contracts on Strings librariesYannick Moy3-29/+27
The contracts of Ada.Strings.Bounded.To_String and Ada.Strings.Fixed.Delete are updated to reflect the standard spec and to allow proof of callers. gcc/ada/ * libgnat/a-strbou.ads (To_String): Add a postcondition to state the value of bounds of the returned string, which helps with proof of callers. * libgnat/a-strfix.adb (Delete): Fix implementation to produce correct result in all cases. For example, returned string should always have a lower bound of 1, which was not respected in one case. This was not detected by proof, since this code was dead according to the too strict precondition. * libgnat/a-strfix.ads (Delete): State the correct precondition from standard which allows a value of Through beyond the last valid index, and also restricts values of From from below. Update the Contract_Cases accordingly to allow new values of parameters.
2024-08-01ada: Accept duplicate SPARK_Mode pragmas in configuration filesPiotr Trojanek1-8/+0
For consistency, we now accept duplicate SPARK_Mode pragmas in configuration files just like we accept other duplicate pragas there. gcc/ada/ * sem_prag.adb (Analyze_Pragma): Don't check for duplicate SPARK_Mode pragmas in configuration files.
2024-08-01ada: Crash on access attribute with overloaded prefix denoting reference objectGary Dismukes1-1/+36
The compiler fails to accept an access attribute where the prefix is the name of an object of a user-defined reference type, and is not prepared to deal with the possibility of overloaded prefixes other than subprogram cases. Such a prefix can either represent the reference object directly, or it can be interpreted as an implicit dereferencing of the object's reference value, depending on the expected type. Special handling for this kind of prefix is added alongside the normal handling for overloaded prefixes of access attributes. gcc/ada/ * sem_attr.adb (Resolve_Attribute, Attribute_*Access): Resolve overloaded prefixes that denote objects of reference types, determining whether to use the prefix object directly, or expand it as an explicit dereference.
2024-08-01ada: Fix oversight in documentation of At_End_ProcEric Botcazou1-6/+6
It is documented for N_Subprogram_Body_Stub instead of N_Subprogram_Body. gcc/ada/ * sinfo.ads (N_Block_Statement): Move At_End_Proc to the end of slot list and alphabetize flag list. (N_Subprogram_Body): Add At_End_Proc. (N_Package_Body): Move At_End_Proc to the end of slot list. (N_Subprogram_Body_Stub): Remove At_End_Proc.
2024-08-01ada: Deconstruct workarounds for quantified expressions in contractsPiotr Trojanek1-44/+2
Apparently we can always safely set the type of a loop parameter from its discrete subtype definition. It looks like the conditional setting was only necessary when preconditions were expanded into dedicated procedures, but we no longer use this expansion. gcc/ada/ * sem_ch5.adb (Analyze_Loop_Parameter_Specification): Unconditionally set the type of loop parameter.
2024-08-01ada: Style fixes: remove blank lines following 'begin' keywordsGhjuvan Lacambre24-30/+0
The GNAT style guide specifies that there must not be blank lines after 'begin' keywords. gcc/ada/ * backend_utils.adb (Scan_Common_Back_End_Switch): Remove blank line. * errout.adb (Output_JSON_Message): Likewise. * erroutc.adb (Set_Msg_Char): Likewise. * exp_aggr.adb (Two_Dim_Packed_Array_Handled): Likewise. * exp_pakd.adb (Expand_Packed_Address_Reference): Likewise. (Expand_Packed_Bit_Reference): Likewise. (Expand_Packed_Boolean_Operator): Likewise. (Expand_Packed_Element_Reference): Likewise. (Expand_Packed_Eq): Likewise. (Expand_Packed_Not): Likewise. * exp_prag.adb (Build_Dim3_Declaration): Likewise. * exp_strm.adb (Build_Elementary_Input_Call): Likewise. * freeze.adb (Find_Aspect_No_Parts): Likewise. (Get_Aspect_No_Parts_Value): Likewise. * gen_il-gen.adb (Compile): Likewise. * gnat1drv.adb (Adjust_Global_Switches): Likewise. * gnat_cuda.adb (Expand_CUDA_Package): Likewise. * gnatchop.adb (Read_File): Likewise. * gnatls.adb (Get_Runtime_Path): Likewise. * make.adb (Binding_Phase): Likewise. * par-ch11.adb (P_Exception_Choice): Likewise. * par-ch5.adb (P_Loop_Parameter_Specification): Likewise. * par-ch6.adb (Is_Extended): Likewise. * sem_attr.adb (Check_Dereference): Likewise. * sem_ch12.adb (Build_Subprogram_Decl_Wrapper): Likewise. * sem_ch3.adb (Build_Itype_Reference): Likewise. * sem_prag.adb (Validate_Compile_Time_Warning_Errors): Likewise. * sem_res.adb (Resolve_Declare_Expression): Likewise. * sem_util.adb (Build_Default_Subtype): Likewise. * sprint.adb (Sprint_Paren_Comma_List): Likewise.
2024-08-01ada: Restrict string interpolation to single string literalJavier Miranda3-38/+6
gcc/ada/ * par-ch2.adb (P_Interpolated_String_Literal): remove support of multi-line string literals. * doc/gnat_rm/gnat_language_extensions.rst: Update documentation. * gnat_rm.texi: Regenerate.
2024-08-01ada: Use ?j? in Output_Obsolescent_Entity_Warnings messagesViljar Indus1-9/+10
These messages are conditionally activated only when -gnatwj (Warn_On_Obsolescent_Feature) is activated. They should use the switch specific insertion character instead. gcc/ada/ * sem_warn.adb (Output_Obsolescent_Entity_Warnings): use the ?j? in warning messages.
2024-08-01ada: Fix crash in quantified expression expansionRonan Desplanques1-4/+24
Before this patch, the compiler failed to handle the case where the for loop created by expansion of a quantified expression required cleanup handlers. gcc/ada/ * sem_ch5.adb (Analyze_Loop_Parameter_Specification): Fix test for expanded quantified expression context. (Is_Expanded_Quantified_Expr): New function.
2024-08-01ada: Fix bug in resolution of Ghost_PredicateBob Duff3-6/+9
This patch fixes a failure of name resolution when a range attribute reference appears in a Ghost_Predicate and the ghost policy is Ignore. gcc/ada/ * sem_ch13.adb (Add_Predicate): Remove the premature "return;". Ghost code needs to be processed by later code in this procedure even when ignored; otherwise the second pass of name resolution fails much later. However, protect Set_SCO_Pragma_Enabled and Add_Condition with "if not Is_Ignored_Ghost_Pragma"; these parts should not happen if the ghost code is Ignored. * libgnat/interfac__2020.ads (Unsigned_8): Minor reformatting. * libgnat/interfac.ads (IEEE_Extended_Float): Minor comment improvement.
2024-08-01ada: Define No_Return flag only for subprogramsEric Botcazou3-6/+7
...instead of defining it for all entities. gcc/ada/ * einfo.ads (No_Return): Change description and adjust accordingly. * gen_il-gen-gen_entities.adb (Entity_Kind): Remove No_Return. (Subprogram_Kind): Add No_Return. (Generic_Subprogram_Kind): Likewise. * sem_ch6.adb (Analyze_Return_Statement): Adjust No_Return test.
2024-08-01ada: Implement full relaxed finalization semantics for controlled objectsEric Botcazou11-95/+287
These semantics state that the compiler is permitted to enforce none of the guarantees specified by the RM 7.6.1(14/1) and following subclauses, and to instead just let the exception be propagated upward. The guarantees impose a significant overhead in terms of complexity and run-time performance compared to similar constructs in other languages, and the goal is to reduce it significantly, if not eliminate it totally: for example, untagged record types declared with the Finalizable aspect, the relaxed finalization semantics and inline Initialize/Adjust/Finalize primitives, and used with abort disabled: pragma Restrictions (No_Abort_Statements); pragma Restrictions (Max_Asynchronous_Select_Nesting => 0); pragma Restrictions (No_Asynchronous_Control); should behave like simple C++ classes. The implementation morally boils down to undoing the changes made a few months ago to the support of finalization for controlled objects, i.e. to getting rid of the added linked list and the associated indirection for controlled objects with relaxed finalization semantics. But, in order to keep a unified processing for both kinds of controlled objects and not to bring back the issues addressed by the aforementioned changes, the work is split between the front-end and the code generator: the front-end drops the linked list and the code generator is in charge of eliminating the indirection with the help of the optimizer. gcc/ada/ * doc/gnat_rm/gnat_language_extensions.rst (Generalized Finalization): Update status. * einfo.ads (Has_Relaxed_Finalization): Add more details. * exp_ch4.adb (Process_Transients_In_Expression): Invoke Make_Finalize_Call_For_Node instead of building the call. * exp_ch5.adb (Expand_N_Assignment_Statement): Do not set up an exception handler around the assignment for a controlled type with relaxed finalization semantics. Streamline the code implementing the protection against aborts and do not use an At_End handler for a controlled type with relaxed finalization semantics. * exp_ch7.ads (Make_Finalize_Call_For_Node): New function. * exp_ch7.adb (Finalize_Address_For_Node): New function renaming. (Set_Finalize_Address_For_Node): New procedure renaming. (Attach_Object_To_Master_Node): Also attach the Finalize_Address primitive to the Master_Node statically. (Build_Finalizer): Add Has_Strict_Ctrl_Objs local variable. Insert back the body of the finalizer at the end of the statement list in the non-package case and restore the associated support code to that effect. When all the controlled objects have the relaxed finalization semantics, do not create a Finalization_Master and finalize the objects directly instead. (Processing_Actions): Add Strict parameter and use it to set the Has_Strict_Ctrl_Objs variable. (Process_Declarations): Make main loop more robust and adjust calls to Processing_Actions. (Make_Finalize_Address_Body): Mark the primitive as inlined if the type has relaxed finalization semantics. (Make_Finalize_Call_For_Node): New function. * sem_ch6.adb (Check_Statement_Sequence): Skip subprogram bodies. * libgnat/s-finpri.ads (Finalize_Object): Add Finalize_Address parameter. (Master_Node): Remove superfluous qualification. * libgnat/s-finpri.adb (Attach_Object_To_Node): Likewise. (Finalize_Master): Adjust calls to Finalize_Object. (Finalize_Object): Add Finalize_Address parameter and assert that it is equal to the component of the node. Use the Object_Address component as guard. (Suppress_Object_Finalize_At_End): Clear Object_Address component. * gnat_rm.texi: Regenerate. * gnat_ugn.texi: Regenerate.
2024-08-01ada: Put back -G for binderArnaud Charlet4-1/+15
gcc/ada/ * bindgen.adb (Gen_Main): Put back support for -G * bindusg.adb (Display): Put back line for -G * opt.ads (CCG_Mode): Update doc * switch-b.adb (Scan_Binder_Switches): Put back support for -G
2024-08-01ada: exp_pakd.adb: disable packed expansions in CodePeer_ModeGhjuvan Lacambre1-0/+34
A previous commit disabled the removal of the Component_Size aspect from GNAT's tree when in CodePeer_Mode. This effectively resulted in CodePeer not ignoring Component_Size anymore. As a side effect, GNAT started expanding packed operations on array types from their high-level representations to operations operating on bits. It wasn't caught during the original testing, but this actually confuses CodePeer. We thus need to disable expansion of packed operations while in CodePeer_Mode. gcc/ada/ * exp_pakd.adb (Expand_Bit_Packed_Element_Set): Disable expansion in CodePeerMode. (Expand_Packed_Address_Reference): Likewise. (Expand_Packed_Bit_Reference): Likewise. (Expand_Packed_Boolean_Operator): Likewise. (Expand_Packed_Element_Reference): Likewise. (Expand_Packed_Eq): Likewise. (Expand_Packed_Not): Likewise.
2024-08-01ada: Check default value aspects before resolving their expressionsPiotr Trojanek1-112/+117
Check expressions of aspects Default_Value and Default_Component_Value for references to the annotated types just before resolving these expressions. This patch fixes both an asymmetry in processing of those aspects and adds a missing check in GNATprove on aspect Default_Component_Value. gcc/ada/ * sem_ch13.adb (Check_Aspect_Too_Late): Move routine to top-level. (Resolve_Aspect_Expressions): Check aspects Default_Value and Default_Component_Value before resolving their expressions.
2024-08-01ada: Fix freezing of Default_Value expressionsPiotr Trojanek1-2/+6
This patch fixes an infinite loop in freezing that occurred when expression of the Default_Value aspect includes a declare expression with an object of the annotated type. gcc/ada/ * sem_ch13.adb (Check_Aspect_Too_Late): Prevent freezing during preanalysis.
2024-08-01ada: Remove Must_Not_Freeze flags from default value expressionsPiotr Trojanek1-2/+0
This is a code cleanup and apparently has no impact on the behavior. The Must_Not_Freeze is saved/set/restored by Preanalyze_Spec_Expression, so it doesn't need to be set before calling that routine and apparently doesn't need to be set after that calling that routine either. gcc/ada/ * sem_ch13.adb (Resolve_Aspect_Expression): Don't set Must_Not_Freeze before preanalyzing spec expressions.
2024-08-01ada: Change "missing overriding indicator" message from error to warningSteve Baird1-2/+3
There is no RM rule requiring an overriding indicator in the case where this message is generated; such a rule was discussed many years ago in an AI, but that AI was never approved. So generate a warning message instead of an error message. And don't even do that if we are in an instance (warning a user they should change the source of an instance seems unlikely to be helpful, at least in this case). gcc/ada/ * sem_disp.adb (Check_Dispatching_Operation): When calling Error_Msg_NE to generate a "missing overriding indicator" message, generate a warning message instead of an error message (and update comment to describe this new behavior).
2024-08-01ada: Miscomputed bounds for inner null array aggregatesJavier Miranda1-4/+2
gcc/ada/ * sem_aggr.adb (Collect_Aggr_Bounds): Adjust previous patch to store the bounds of inner null aggregates in the itype; required generate the runtime check of ARM 4.3.3(30).
2024-08-01ada: Followup on previous change for -gnatcegArnaud Charlet3-198/+55
gcc/ada/ * osint-c.ads, osint-c.adb (Create_C_File, Close_C_File, Delete_C_File): Put back, needed by LLVM based CCG. * exp_unst.adb (Unnest_Subprogram): Complete previous change by removing now dead code and corresponding ??? comment.
2024-08-01ada: Missing adjust of controlled component initialized from container aggregateGary Dismukes1-2/+4
In the case of controlled components initialized by a container aggregate, the compiler was suppressing the call to the needed Adjust operation, because it was suppressed for all aggregates. But container aggregates aren't built in place, so target adjustment should still be done in that case. gcc/ada/ * exp_ch3.adb (Build_Record_Init_Proc.Build_Assignment): Do the component adjustment in the case of initialization by a container aggregate.
2024-08-01ada: Fix internal error on limited aggregate in nested conditional expressionEric Botcazou2-35/+66
This is a fallout of an earlier fix to Is_Build_In_Place_Aggregate_Return that made it take into account intermediate conditional expressions, but turned out to work only for a single nesting level of them. The fix reuses the delayed expansion mechanism recently extended to deal with conditional expressions in a straightforward way. gcc/ada/ * exp_aggr.adb (Convert_To_Assignments): Set Expansion_Delayed on intermediate conditional expressions for BIP aggregate returns too. * exp_ch4.adb (Expand_N_Case_Expression): Also deal with delayed expansion in the return case. (Expand_N_If_Expression): Likewise.
2024-08-01ada: Operator visibility bug in static expression functionsSteve Baird1-0/+1
In some cases, an expanded name refering to a predefined operator (such as Some_Package."+") occurring in a static expression function would be incorrectly rejected with a message saying that the operator is not directly visible (which, while True, does not make the reference illegal). gcc/ada/ * sem_ch4.adb (Is_Effectively_Visible_Opertor): Return True if Checking_Potentially_Static_Expression is True. The accompanying comment says True is returned "if there is a reason it is ok for Is_Visible_Operator to return False"; if Checking_Potentially_Static_Expression is true, that is such a reason.
2024-08-01ada: Stop ignoring Component_Size attribute in CodePeer_ModeGhjuvan Lacambre1-18/+0
This piece of code was introduced in 2011 in order to prevent spurious false positives from appearing on specific code patterns making use of Component_Size. It seems that now this piece of code is causing small false positives instead of preventing them, so let's remove it. gcc/ada/ * sem_ch13.adb (Analyze_Attribute_Definition_Clause): Stop ignoring Component_Size attribute in CodePeer_Mode.
2024-08-01ada: Fix test for wrapping loop parameter specRonan Desplanques1-10/+6
This patches fixes a problem where cleanup statements would be missing for some cases of loop parameter specifications that allocate on the secondary stack. gcc/ada/ * sem_ch5.adb (Prepare_Param_Spec_Loop): Fix criterion for wrapping loop statements into blocks.
2024-08-01ada: Remove support for bodies in -gnatcegArnaud Charlet37-2230/+267
The support for generating C for Ada code is moved to GNAT LLVM. Keep support for generating header files from Ada spec files which is the remaining usage of -gnatceg. gcc/ada/ * bindgen.adb, bindusg.adb, debug.adb, einfo.ads, exp_aggr.adb, exp_attr.adb, exp_ch11.adb, exp_ch3.adb, exp_ch4.adb, exp_ch6.adb, exp_ch7.adb, exp_ch8.adb, exp_dbug.adb, exp_dbug.ads, exp_intr.adb, exp_unst.adb, exp_util.adb, exp_util.ads, freeze.adb, gen_il-fields.ads, gen_il-gen-gen_entities.adb, gnat1drv.adb, inline.adb, opt.ads, osint-c.adb, osint-c.ads, sem_attr.adb, sem_ch12.adb, sem_ch3.adb, sem_ch4.adb, sem_ch6.adb, sem_elab.adb, sem_res.adb, sinfo.ads, snames.ads-tmpl, switch-b.adb, switch-c.adb: Major clean up to remove C code generation for bodies.
2024-08-01ada: Allow making empty aggregates positionalRonan Desplanques4-19/+57
This patch makes Exp_Aggr.Convert_To_Positional accepts appropriate empty aggregates. The end goal is to remove violations of the No_Elaboration_Code restriction in some cases of library-level array objects. gcc/ada/ * exp_aggr.adb (Flatten): Do not reject empty aggregates. Adjust criterion for emitting warning about ineffective others clause. * sem_aggr.adb (Array_Aggr_Subtype): Fix typo. Add handling of aggregates that were converted to positional form. (Resolve_Aggregate): Tweak criterion for transforming into a string literal. (Resolve_Array_Aggregate): Tweak criterion for reusing existing bounds of aggregate. (Retrieve_Aggregate_Bounds): New procedure. * sem_util.adb (Has_Static_Empty_Array_Bounds): New function. * sem_util.ads (Has_Static_Empty_Array_Bounds): Likewise.
2024-08-01ada: Couple of cleanups in finalization machineryEric Botcazou3-41/+25
This removes a parameter and a variable that are entirely determined by another parameter and another variable respectively. gcc/ada/ * exp_ch7.ads (Build_Finalizer): Remove Top_Decls parameter. * exp_ch7.adb (Build_Finalizer): Likewise. Rename Counter_Val into Count, replace Has_Ctrl_Objs local variable by expression function, remove Spec_Decls local variable and do not reset Finalizer_Decls. (Expand_Cleanup_Actions): Adjust call to Build_Finalizer. (Expand_N_Package_Body): Likewise. (Expand_N_Package_Declaration): Likewise. * inline.adb (Cleanup_Scopes): Likewise.
2024-08-01ada: Remove obsolete workaroundEric Botcazou4-37/+21
It is possible to call the "+" operator of System.Storage_Elements directly as done for example in Expand_Interface_Thunk. gcc/ada/ * exp_ch7.adb (Make_Address_For_Finalize): Generate a direct call to the "+" operator of System.Storage_Elements. (Make_Finalize_Address_Stmts): Likewise. * rtsfind.ads (RE_Id): Remove RE_Add_Offset_To_Address. (RE_Unit_Table): Remove entry for RE_Add_Offset_To_Address. * libgnat/s-finpri.ads (Add_Offset_To_Address): Delete. * libgnat/s-finpri.adb (Add_Offset_To_Address): Likewise.
2024-08-01testsuite: Add filters for default_packed targets [PR116155]Dimitar Dimitrov6-9/+9
A few recent C++ test cases are assuming non-zero structure field padding. Consequently they fail for targets defaulting to packed structure layout. Fix by adding the necessary DejaGnu filters. There are no test result changes for x86_64-pc-linux-gnu: $ dg-cmp-results.sh -v -v "" pre-g++.sum post-g++.sum -> No differences. The tests for pru-unknown-elf changed from FAIL to UNSUPPORTED. PR testsuite/116155 gcc/testsuite/ChangeLog: * g++.dg/abi/nsdmi-aggr1a.C: Disable test for effective default_packed targets. * g++.dg/abi/nullptr-align2.C: Ignore warning for default_packed targets. * g++.dg/cpp1z/aligned-new9.C: Disable test for effective default_packed targets. * g++.dg/cpp2a/bit-cast5.C: Ignore dg-error for default_packed targets. * g++.dg/pr53037-1.C: Match any default packing value. * g++.dg/warn/Wpadded-1.C: Ignore warning for default_packed targets. Signed-off-by: Dimitar Dimitrov <dimitar@dinux.eu>
2024-08-01gccrs: Add a test for inherent impl type name resolvePierre-Emmanuel Patry1-0/+5
A previous bug with name resolution 2.0 was caused by an incorrectly resolved inherent impl name. This test shall highlight the behavior and prevent regression. gcc/testsuite/ChangeLog: * rust/compile/name_resolution25.rs: New test. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
2024-08-01gccrs: Visit type during resolution of inherent implPierre-Emmanuel Patry1-0/+1
Inherent impl has a type it applies to. This type was not visited and thus not resolved. gcc/rust/ChangeLog: * resolve/rust-default-resolver.cc (DefaultResolver::visit): Visit inherent impl type. Signed-off-by: Pierre-Emmanuel Patry <pierre-emmanuel.patry@embecosm.com>
2024-08-01gccrs: borrowck: Bump copyright noticeJakub Dupak7-5/+41
gcc/rust/ChangeLog: * checks/errors/borrowck/ffi-polonius/src/gccrs_ffi.rs: Bump copyright. * checks/errors/borrowck/ffi-polonius/src/lib.rs: Bump copyright. * checks/errors/borrowck/polonius/rust-polonius-ffi.h: Bump copyright. * checks/errors/borrowck/polonius/rust-polonius.h: Bump copyright. * checks/errors/borrowck/rust-bir-dump.cc: Bump copyright. * checks/errors/borrowck/rust-bir-fact-collector.h: Bump copyright. * checks/errors/borrowck/rust-bir-free-region.h: Bump copyright. Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2024-08-01gccrs: borrowck: Remove block braces to satisfy GNU styleJakub Dupak6-121/+56
gcc/rust/ChangeLog: * checks/errors/borrowck/rust-bir-dump.cc (renumber_places): Remove unecessary braces. (Dump::go): Remove unecessary braces. (Dump::visit): Remove unecessary braces. (Dump::visit_scope): Remove unecessary braces. * checks/errors/borrowck/rust-bir-fact-collector.h (class FactCollector): Remove unecessary braces. (points): Remove unecessary braces. * checks/errors/borrowck/rust-bir-free-region.h: Remove unecessary braces. * checks/errors/borrowck/rust-bir-place.h: Remove unecessary braces. * checks/errors/borrowck/rust-borrow-checker.cc (BorrowChecker::go): Remove unecessary braces. * checks/errors/borrowck/rust-function-collector.h: Remove unecessary braces. Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2024-08-01gccrs: borrowck: Fact collectorJakub Dupak2-0/+898
This is the main Polonius based logic which creates the information Polonius needs from BIR. It is largly guessed and rever engineered, so some aspects are probably wrong. gcc/rust/ChangeLog: * checks/errors/borrowck/rust-bir-fact-collector.h: New file. * checks/errors/borrowck/rust-borrow-checker.cc (BorrowChecker::go): Enable fact collection. Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2024-08-01gccrs: borrowck: Regions in BIRJakub Dupak8-275/+610
gcc/rust/ChangeLog: * checks/errors/borrowck/rust-bir-place.h (struct Lifetime): Extended regions and loans. (struct Loan): Representation of loan (result of borrowing) * checks/errors/borrowck/rust-bir-builder-expr-stmt.cc (ExprStmtBuilder::visit): Fix let stmt handling. * checks/errors/borrowck/rust-bir-builder-pattern.h: improved pattern translation * checks/errors/borrowck/rust-bir-builder-internal.h: region binding * checks/errors/borrowck/rust-bir-builder-expr-stmt.h (class ExprStmtBuilder): Region support. (class RenumberCtx): Region support. * checks/errors/borrowck/rust-bir-builder.h (class Builder): Region support. * checks/errors/borrowck/rust-bir-dump.cc (get_lifetime_name): Region support. (renumber_places): Region support. (Dump::go): Region support. (Dump::visit): Region support. (Dump::visit_lifetime): Region support. (Dump::visit_scope): Region support. * checks/errors/borrowck/rust-bir.h (class AbstractExpr): Region support. (struct Function): Region support. (class BorrowExpr): Region support. (class CallExpr): Region support. Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2024-08-01gccrs: borrowck: extract regions from types using VAJakub Dupak3-19/+140
Biggybag on variance analysis to extract regions of fields from ADT regions. gcc/rust/ChangeLog: * typecheck/rust-tyty-variance-analysis-private.h (class FieldVisitorCtx): Region extraction. * typecheck/rust-tyty-variance-analysis.cc (query_field_regions): Region extraction. (FieldVisitorCtx::collect_regions): Region extraction. (FieldVisitorCtx::add_constraints_from_ty): Region extraction. (FieldVisitorCtx::add_constraints_from_region): Region extraction. (FieldVisitorCtx::add_constrints_from_param): Region extraction. * typecheck/rust-tyty-variance-analysis.h (query_field_regions): Region extraction. Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2024-08-01gccrs: borrowck: Free region representationJakub Dupak1-0/+107
gcc/rust/ChangeLog: * checks/errors/borrowck/rust-bir-free-region.h: New file. Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2024-08-01gccrs: borrowck: Polonius FFIJakub Dupak6-0/+596
Rust part is not build and not invoked at this point. gcc/rust/ChangeLog: * checks/errors/borrowck/ffi-polonius/Cargo.toml: New file. * checks/errors/borrowck/ffi-polonius/src/gccrs_ffi.rs: New file. * checks/errors/borrowck/ffi-polonius/src/gccrs_ffi_generated.rs: New file. * checks/errors/borrowck/ffi-polonius/src/lib.rs: New file. * checks/errors/borrowck/polonius/rust-polonius-ffi.h: New file. * checks/errors/borrowck/polonius/rust-polonius.h: New file. Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2024-08-01gccrs: borrowck: BIR: make BIR visitor constJakub Dupak4-22/+26
gcc/rust/ChangeLog: * checks/errors/borrowck/rust-bir-dump.cc (Dump::visit): const visitor * checks/errors/borrowck/rust-bir-dump.h: const visitor * checks/errors/borrowck/rust-bir-visitor.h: const visitor * checks/errors/borrowck/rust-bir.h: const getter Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2024-08-01gccrs: borrowck: BIR: emit movesJakub Dupak7-80/+103
gcc/rust/ChangeLog: * checks/errors/borrowck/rust-bir-builder-expr-stmt.cc (ExprStmtBuilder::visit): Emit moves. * checks/errors/borrowck/rust-bir-builder-internal.h: Emit moves. * checks/errors/borrowck/rust-bir-builder-lazyboolexpr.h: Emit moves. * checks/errors/borrowck/rust-bir-dump.cc (Dump::visit_move_place): Emit moves. (Dump::visit): Emit moves. * checks/errors/borrowck/rust-bir-place.h (struct Place): Emit moves. * checks/errors/borrowck/rust-bir-visitor.h: Emit moves. * checks/errors/borrowck/rust-bir.h (enum class): Emit moves. (class AbstractExpr): Emit moves. (BasicBlock::is_terminated): Emit moves. Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2024-08-01gccrs: borrowck: BIR: scope handlingJakub Dupak5-37/+188
gcc/rust/ChangeLog: * checks/errors/borrowck/rust-bir-builder-expr-stmt.cc (ExprStmtBuilder::setup_loop): Loop handling. (ExprStmtBuilder::visit): Handle scopes. * checks/errors/borrowck/rust-bir-builder-internal.h (struct BuilderContext): Handle scopes. * checks/errors/borrowck/rust-bir-dump.cc (Dump::go): Dump scopes. (Dump::visit): Add scopes dump. (Dump::indent): Add indentation logic. (Dump::visit_scope): Dump scope. * checks/errors/borrowck/rust-bir-dump.h: Dump methods. * checks/errors/borrowck/rust-bir-place.h (std::numeric_limits::max): Scope constants. (struct Scope): Scope representation. (class PlaceDB): Scope tracking. Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2024-08-01gccrs: borrowck: BIR: Place tree traverse APIJakub Dupak1-0/+23
gcc/rust/ChangeLog: * checks/errors/borrowck/rust-bir-place.h: Create place tree traverse API. Signed-off-by: Jakub Dupak <dev@jakubdupak.com>
2024-08-01gccrs: borrowck: BIR: use callable APIJakub Dupak1-18/+5
gcc/rust/ChangeLog: * checks/errors/borrowck/rust-bir-builder-expr-stmt.cc (ExprStmtBuilder::visit): Use callable API Signed-off-by: Jakub Dupak <dev@jakubdupak.com>