- 23 May, 2018 23 commits
-
-
This patch adds a check on an iterator over a GNAT-specific formal container, when the iterator specification includes a subtype indication that must be compatible with the element type of the container. 2018-05-23 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * sem_ch5.adb (Analyze_Iterator_Specification): If a subtype indication is present, verify its legality when the domain of iteration is a GNAT-specific formal container, as is already done for arrays and predefined containers. gcc/testsuite/ * gnat.dg/iter1.adb, gnat.dg/iter1.ads: New testcase. From-SVN: r260587
Ed Schonberg committed -
This utility is used in GNATprove to find when a node is inside a named number declaration, and this case was not properly handled. Now fixed. There is no impact on compilation. 2018-05-23 Yannick Moy <moy@adacore.com> gcc/ada/ * sem_util.adb (Enclosing_Declaration): Fix the case of a named number declaration, which was not taken into account. From-SVN: r260586
Yannick Moy committed -
This patch modifies the static elaboration model to stop the inspection of a task body when it contains a synchronous suspension call and restriction No_Entry_Calls_In_Elaboration_Code or switch -gnatd_s is in effect. ------------ -- Source -- ------------ -- suspension.ads package Suspension is procedure ABE; task type Barrier_Task_1; task type Barrier_Task_2; task type Object_Task_1; task type Object_Task_2; end Suspension; -- suspension.adb with Ada.Synchronous_Barriers; use Ada.Synchronous_Barriers; with Ada.Synchronous_Task_Control; use Ada.Synchronous_Task_Control; package body Suspension is Bar : Synchronous_Barrier (Barrier_Limit'Last); Obj : Suspension_Object; task body Barrier_Task_1 is OK : Boolean; begin Wait_For_Release (Bar, OK); ABE; end Barrier_Task_1; task body Barrier_Task_2 is procedure Block is OK : Boolean; begin Wait_For_Release (Bar, OK); end Block; begin Block; ABE; end Barrier_Task_2; task body Object_Task_1 is begin Suspend_Until_True (Obj); ABE; end Object_Task_1; task body Object_Task_2 is procedure Block is begin Suspend_Until_True (Obj); end Block; begin Block; ABE; end Object_Task_2; function Elaborator return Boolean is BT_1 : Barrier_Task_1; BT_2 : Barrier_Task_2; OT_1 : Object_Task_1; OT_2 : Object_Task_2; begin return True; end Elaborator; Elab : constant Boolean := Elaborator; procedure ABE is begin null; end ABE; end Suspension; -- main.adb with Suspension; procedure Main is begin null; end Main; ---------------------------- -- Compilation and output -- ---------------------------- $ gnatmake -q -gnatd_s main.adb suspension.adb:23:07: warning: cannot call "ABE" before body seen suspension.adb:23:07: warning: Program_Error may be raised at run time suspension.adb:23:07: warning: body of unit "Suspension" elaborated suspension.adb:23:07: warning: function "Elaborator" called at line 51 suspension.adb:23:07: warning: local tasks of "Elaborator" activated suspension.adb:23:07: warning: procedure "ABE" called at line 23 suspension.adb:39:07: warning: cannot call "ABE" before body seen suspension.adb:39:07: warning: Program_Error may be raised at run time suspension.adb:39:07: warning: body of unit "Suspension" elaborated suspension.adb:39:07: warning: function "Elaborator" called at line 51 suspension.adb:39:07: warning: local tasks of "Elaborator" activated suspension.adb:39:07: warning: procedure "ABE" called at line 39 2018-05-23 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * debug.adb: Switch -gnatd_s is now used to stop elaboration checks on synchronized suspension. * rtsfind.ads: Add entries for units Ada.Synchronous_Barriers and Ada.Synchronous_Task_Control and routines Suspend_Until_True and Wait_For_Release. * sem_elab.adb: Document switch -gnatd_s. (In_Task_Body): New routine. (Is_Potential_Scenario): Code cleanup. Stop the traversal of a task body when the current construct denotes a synchronous suspension call, and restriction No_Entry_Calls_In_Elaboration_Code or switch -gnatd_s is in effect. (Is_Synchronous_Suspension_Call): New routine. * switch-c.adb (Scan_Front_End_Switches): Switch -gnatJ now sets switch -gnatd_s. From-SVN: r260585
Hristian Kirtchev committed -
2018-05-23 Javier Miranda <miranda@adacore.com> gcc/ada/ * exp_disp.adb (Make_DT): Restrict the initialization of External_Tag and Expanded_Name to an empty string to the case where both pragmas apply (i.e. No_Tagged_Streams and Discard_Names), since restricted runtimes are compiled with pragma Discard_Names. * doc/gnat_rm/implementation_defined_pragmas.rst, doc/gnat_rm/implementation_defined_characteristics.rst: Add documentation. * gnat_rm.texi: Regenerate. From-SVN: r260584
Javier Miranda committed -
This commit fixes bugs in the code that implements the rules for safe pointers in SPARK. This only affects SPARK tools, not compilation. * Global variables should be handled differently compared to parameters. The whole tree of an in global variable has the permission Read-Only. In contrast, an in parameter has the permission Read-Only for the first level and Read-Write permission for suffixes. * The suffix X of Integer'image(X) was not analyzed correctly. * The instruction X'img was not dealt with. * Shallow aliased types which are not initialized are now allowed and analyzed. Dealing with function inlining is not handled correctly yet. 2018-05-23 Maroua Maalej <maalej@adacore.com> gcc/ada/ * sem_spark.adb: Fix of some permission rules of pointers in SPARK. From-SVN: r260583
Maroua Maalej committed -
This patch inhibits the generation of freeze nodes when pre-analyzing the domain of iteration of an Ada2012 loop that appears as a quantified expression in a predicate for an array type. This prevents a back-end abort on an invisible freeze node that would otherwise appear in an unexpanded code sequence. The following must compile quietly: ---- with Id_Manager; package My_Id_Manager is new Id_Manager (Max_Id_Type => 100_000, Max_Key_Count => 100); ---- generic Max_Id_Type : Positive; Max_Key_Count : Positive; package Id_Manager is type Unique_Id_Type is new Integer range 0 .. Max_Id_Type; Undefined_Id : constant Unique_Id_Type := 0; type Key_Count is new Integer range 0 .. Max_Key_Count; subtype Key_Index is Key_Count range 1 .. Key_Count'Last; type Key_Array is array (Key_Index range <>) of Unique_Id_Type with Predicate => Key_Array'First = 1; type Id_Manager_State (Capacity : Key_Count) is private; procedure Display_Objects (TheObject : Id_Manager_State); private type Id_Manager_State (Capacity : Key_Count) is record Id_Key : Key_Array (1 .. Capacity) := (others => Undefined_Id); Key_Size : Key_Count := 0; end record; end Id_Manager; ---- package body Id_Manager is procedure Display_Objects (TheObject : Id_Manager_State) is begin for Item of TheObject.Id_Key loop null; end loop; end Display_Objects; end Id_Manager; 2018-05-23 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * sem_ch5.adb (Preanalyze_Range): The pre-analysis of the domain of iteration of an Ada2012 loop is performed to determine the type of the domain, but full analysis is performed once the loop is rewritten as a while-loop during expansion. The pre-analysis suppresses expansion; it must also suppress the generation of freeze nodes, which may otherwise appear in the wrong scope before rewritting. From-SVN: r260582
Ed Schonberg committed -
This patch updates the documentation section on suppressing elaboration warnings. No change in behavior, no need for a test. 2018-05-23 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * sem_elab.adb: Update the section on suppressing elaboration warnings. From-SVN: r260581
Hristian Kirtchev committed -
This patch modifies the effects of pragma Warnings (Off, ...) to suppress elaboration warnings related to an entity. 2018-05-23 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * einfo.adb (Is_Elaboration_Checks_OK_Id): Use predicate Is_Elaboration_Target. (Is_Elaboration_Target): New routine. (Is_Elaboration_Warnings_OK_Id): Use predicate Is_Elaboration_Target. (Set_Is_Elaboration_Checks_OK_Id): Use predicate Is_Elaboration_Target. (Set_Is_Elaboration_Warnings_OK_Id): Use predicate Is_Elaboration_Target. * einfo.ads: Add new synthesized attribute Is_Elaboration_Target along with occurrences in nodes. (Is_Elaboration_Target): New routine. * sem_prag.adb (Analyze_Pragma): Suppress elaboration warnings when an elaboration target is subject to pragma Warnings (Off, ...). gcc/testsuite/ * gnat.dg/elab5.adb, gnat.dg/elab5_pkg.adb, gnat.dg/elab5_pkg.ads: New testcase. From-SVN: r260580
Hristian Kirtchev committed -
2018-05-23 Eric Botcazou <ebotcazou@adacore.com> gcc/ada/ * repinfo.adb (List_Type_Info): Remove obsolete stuff. From-SVN: r260579
Eric Botcazou committed -
This patch changes the behavior of elaboration-related warnings as follows: * If a scenario or a target has [elaboration] warnings suppressed, then any further elaboration-related warnings along the paths rooted at the scenario are also suppressed. * Elaboration-related warnings related to task activation can now be suppressed when either the task object, task type, or the activation call have [elaboration] warnings suppressed. * Elaboration-related warnings related to calls can now be suppressed when either the target or the call have [elaboration] warnings suppressed. * Elaboration-related warnings related to instantiations can now be suppressed when the instantiation has [elaboration] warnings suppressed. The patch also cleans up the way the state of the Processing phase is updated with each new node along a path. It is now preferable to update the state in routines Process_Conditional_ABE_Activation_Impl Process_Conditional_ABE_Call Process_Conditional_ABE_Instantiation rather than within their language-specific versions. 2018-05-23 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * einfo.adb: Flag304 is now Is_Elaboration_Warnings_OK_Id. (Is_Elaboration_Warnings_OK_Id): New routine. (Set_Is_Elaboration_Warnings_OK_Id): New routine. (Write_Entity_Flags): Output Flag304. * einfo.ads: Add new attribute Is_Elaboration_Warnings_OK_Id along with occurrences in entities. (Is_Elaboration_Warnings_OK_Id): New routine along with pragma Inline. (Set_Is_Elaboration_Warnings_OK_Id): New routine along with pragma Inline. * sem_attr.adb (Analyze_Access_Attribute): Capture the state of elaboration warnings. * sem_ch3.adb (Analyze_Object_Declaration): Capture the state of elaboration warnings. * sem_ch6.adb (Analyze_Abstract_Subprogram_Declaration): Capture the state of elaboration warnings. (Analyze_Subprogram_Body_Helper): Capture the state of elaboration warnings. (Analyze_Subprogram_Declaration): Capture the state of elaboration warnings. * sem_ch9.adb (Analyze_Entry_Declaration): Capture the state of elaboration warnings. (Analyze_Single_Task_Declaration): Capture the state of elaboration warnings. (Analyze_Task_Type_Declaration): Capture the state of elaboration warnings. * sem_ch12.adb (Analyze_Generic_Package_Declaration): Capture the state of elaboration warnings. (Analyze_Generic_Subprogram_Declaration): Capture the state of elaboration warnings. * sem_elab.adb: Add a section on suppressing elaboration warnings. Type Processing_Attributes includes component Suppress_Warnings intended to suppress any elaboration warnings along a path in the graph. Update Initial_State to include a value for this component. Types Target_Attributes and Task_Attriutes include component Elab_Warnings_OK to indicate whether the target or task has elaboration warnings enabled. component Elab_Warnings_OK. (Build_Access_Marker): Propagate attribute Is_Elaboration_Warnings_OK_Node from the attribute to the generated call marker. (Extract_Instantiation_Attributes): Set the value for Elab_Warnings_OK. (Extract_Target_Attributes): Set the value for Elab_Warnings_OK. (Extract_Task_Attributes): Set the value for Elab_Warnings_OK. (Process_Conditional_ABE_Access): Suppress futher elaboration warnings when already in this mode or when the attribute or target have warnings suppressed. (Process_Conditional_ABE_Activation_Impl): Do not emit any diagnostics if warnings are suppressed. (Process_Conditional_ABE_Call): Suppress further elaboration warnings when already in this mode, or the target or call have warnings suppressed. (Process_Conditional_ABE_Call_Ada): Do not emit any diagnostics if warnings are suppressed. (Process_Conditional_ABE_Call_SPARK): Do not emit any diagnostics if warnings are suppressed. (Process_Conditional_ABE_Instantiation): Suppress further elaboration warnings when already in this mode or when the instantiation has warnings suppressed. (Process_Conditional_ABE_Instantiation_Ada): Do not emit any diagnostics if warnings are suppressed. (Process_Conditional_ABE_Variable_Assignment_Ada): Use the more specific Is_Elaboration_Warnings_OK_Id rather than Warnings_Off. (Process_Conditional_ABE_Variable_Assignment_SPARK): Use the more specific Is_Elaboration_Warnings_OK_Id rather than Warnings_Off. (Process_Task_Object): Suppress further elaboration warnings when already in this mode, or when the object, activation call, or task type have warnings suppressed. Update the processing state to indicate that the path goes through a task body. * sinfo.adb (Is_Elaboration_Warnings_OK_Node): Accept attribute references. (Set_Is_Elaboration_Warnings_OK_Node): Accept attribute references. * sinfo.ads: Attribute Is_Elaboration_Warnings_OK_Node now applies to attribute references. gcc/testsuite/ * gnat.dg/elab4.adb, gnat.dg/elab4_pkg.adb, gnat.dg/elab4_pkg.ads: New testcase. From-SVN: r260578
Hristian Kirtchev committed -
2018-05-23 Piotr Trojanek <trojanek@adacore.com> gcc/ada/ * einfo.ads: Minor reformatting. From-SVN: r260577
Piotr Trojanek committed -
GNAT properly rejects an attempt to assign an access_to_subprogram formal to a local variable, according to accessibiiity rules. This patch forces the same behavior on the use of such a formal in an object declaration. Compiling store_anon.adb must yield: store_anon.adb:7:35: illegal attempt to store anonymous access to subprogram store_anon.adb:7:35: value has deeper accessibility than any master (RM 3.10.2 (13)) store_anon.adb:7:35: use named access type for "P" instead of access parameter ---- package Store_Anon is procedure Store (P : not null access procedure); procedure Invoke; end Store_Anon; ---- package body Store_Anon is type P_Ptr is access procedure; Stored : P_Ptr; procedure Store (P : not null access procedure) is Illegal : constant P_Ptr := P; begin -- Store Stored := Illegal; end Store; procedure Invoke is -- Empty begin -- Invoke Stored.all; end Invoke; end Store_Anon; 2018-05-23 Ed Schonberg <schonberg@adacore.com> gcc/ada/ * sem_ch3.adb (Analyze_Object_Declaration): If expression is an anonymous_access_to_ subprogram formal, apply a conversion to force an accsssibility check that will fail statically, enforcing 3.10.2 (13). From-SVN: r260576
Ed Schonberg committed -
2018-05-23 Daniel Mercier <mercier@adacore.com> gcc/ada/ * gnat1drv.adb: Turn off length expansion in CodePeer mode. From-SVN: r260575
Daniel Mercier committed -
This patch fixes a bug in which if a limited volatile variable with an Address aspect is initialized with a build-in-place aggregate containing build-in-place function calls, the compiler can crash. 2018-05-23 Bob Duff <duff@adacore.com> gcc/ada/ * freeze.adb: (Check_Address_Clause): Deal with build-in-place aggregates in addition to build-in-place calls. gcc/testsuite/ * gnat.dg/addr10.adb: New testcase. From-SVN: r260574
Bob Duff committed -
2018-05-23 Bob Duff <duff@adacore.com> gcc/ada/ * einfo.ads: Minor reformatting. * sem_ch3.adb: Likewise. * sinfo.ads: Likewise. From-SVN: r260573
Bob Duff committed -
This patch suppresses the optimization of scalar arrays when pragma Initialize_Scalars is in effect if the component type is subject to predicates. Since the scalar array is initialized with invalid values, these values may violate the predicate or a validity check within the predicate. ------------ -- Source -- ------------ -- gnat.adc pragma Initialize_Scalars; -- types.ads with System; use System; package Types is type Byte is mod System.Storage_Unit; subtype Inter_Byte is Byte; function Always_OK (B : Inter_Byte) return Boolean is (True); function Is_OK (B : Inter_Byte) return Boolean is (Always_OK (B)); subtype Final_Byte is Byte with Predicate => Is_OK (Final_Byte); type Bytes is array (1 .. 5) of Final_Byte; Obj : Bytes; end Types; -- main.adb with Types; use Types; procedure Main is begin null; end Main; ----------------- -- Compilation -- ----------------- $ gnatmake -q -gnata -gnatVa main.adb $ ./main 2018-05-23 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * exp_ch3.adb (Default_Initialize_Object): Do not optimize scalar array initialization when the component type has predicates. * exp_ch4.adb (Expand_N_Allocator): Do not optimize scalar array allocation when the component type has predicates. From-SVN: r260572
Hristian Kirtchev committed -
2018-05-23 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * einfo.adb, exp_disp.adb, sem_ch3.adb, sem_ch6.adb, sem_prag.adb: Minor reformatting. From-SVN: r260571
Hristian Kirtchev committed -
re PR middle-end/85874 (gcc points to wrong location when displaying warning for strict overflow warning) 2018-05-23 Richard Biener <rguenther@suse.de> PR middle-end/85874 * tree-data-ref.c (create_runtime_alias_checks): Defer and ignore overflow warnings. * gcc.dg/Wstrict-overflow-27.c: New testcase. From-SVN: r260569
Richard Biener committed -
PR tree-optimization/85822 From-SVN: r260566
Yury Gribov committed -
tree-ssa-sccvn.c (vn_reference_lookup_3): Handle arbitrary memset constants via native_interpret_expr. 2018-05-23 Richard Biener <rguenther@suse.de> * tree-ssa-sccvn.c (vn_reference_lookup_3): Handle arbitrary memset constants via native_interpret_expr. * gcc.dg/tree-ssa/ssa-fre-65.c: New testcase. From-SVN: r260565
Richard Biener committed -
* call.c (extend_ref_init_temps_1): Handle ARRAY_REF. * class.c (build_base_path): Avoid redundant move of an rvalue. From-SVN: r260563
Jason Merrill committed -
* pt.c (tsubst_copy_and_build): Handle partial instantiation. From-SVN: r260562
Jason Merrill committed -
From-SVN: r260561
GCC Administrator committed
-
- 22 May, 2018 17 commits
-
-
2018-05-22 Janus Weil <janus@gcc.gnu.org> PR fortran/85841 * gfortran.dg/pr30667.f: Add option "-std=legacy". From-SVN: r260555
Janus Weil committed -
gcc/ChangeLog: PR middle-end/85359 * builtins.c (expand_builtin_strcpy): Call maybe_warn_nonstring_arg only when expasion succeeds. (expand_builtin_strcmp): Same. (expand_builtin_strncmp): Same. gcc/testsuite/ChangeLog: PR middle-end/85359 * gcc.dg/attr-nonstring.c: New test. From-SVN: r260550
Martin Sebor committed -
Since IFUNC resolver is called indirectly, don't mark IFUNC resolver as only called directly. This patch adds ifunc_resolver to cgraph_node, sets ifunc_resolver for ifunc attribute and checks ifunc_resolver instead of looking up ifunc attribute. gcc/ PR target/85345 * cgraph.h (cgraph_node::create): Set ifunc_resolver for ifunc attribute. (cgraph_node::create_alias): Likewise. (cgraph_node::get_availability): Check ifunc_resolver instead of looking up ifunc attribute. * cgraphunit.c (maybe_diag_incompatible_alias): Likewise. * varasm.c (do_assemble_alias): Likewise. (assemble_alias): Likewise. (default_binds_local_p_3): Likewise. * cgraph.h (cgraph_node): Add ifunc_resolver. (cgraph_node::only_called_directly_or_aliased_p): Return false for IFUNC resolver. * lto-cgraph.c (input_node): Set ifunc_resolver for ifunc attribute. * symtab.c (symtab_node::verify_base): Verify that ifunc_resolver is equivalent to lookup_attribute ("ifunc", DECL_ATTRIBUTES (decl)). (symtab_node::binds_to_current_def_p): Check ifunc_resolver instead of looking up ifunc attribute. gcc/testsuite/ PR target/85345 * gcc.target/i386/pr85345.c: New test. From-SVN: r260547
H.J. Lu committed -
A customer reported the following missed opportunities to combine a couple instructions into a sbfiz. int sbfiz32 (int x) { return x << 29 >> 10; } long sbfiz64 (long x) { return x << 58 >> 20; } This gets converted to the following pattern: (set (reg:SI 98) (ashift:SI (sign_extend:SI (reg:HI 0 x0 [ xD.3334 ])) (const_int 6 [0x6]))) Currently, gcc generates the following: sbfiz32: lsl x0, x0, 29 asr x0, x0, 10 ret sbfiz64: lsl x0, x0, 58 asr x0, x0, 20 ret It could generate this instead: sbfiz32: sbfiz w0, w0, 19, 3 ret sbfiz64:: sbfiz x0, x0, 38, 6 ret The unsigned versions already generate ubfiz for the same code, so the lack of a sbfiz pattern may have been an oversight. This particular sbfiz pattern shows up in both CPU2006 (~ 80 hits) and CPU2017 (~ 280 hits). It's not a lot, but seems beneficial in any case. No significant performance differences, probably due to the small number of occurrences or cases outside hot areas. gcc/ChangeLog: 2018-05-22 Luis Machado <luis.machado@linaro.org> gcc/ * config/aarch64/aarch64.md (*ashift<mode>_extv_bfiz): New pattern. gcc/testsuite/ChangeLog: 2018-05-22 Luis Machado <luis.machado@linaro.org> gcc/testsuite/ * gcc.target/aarch64/lsl_asr_sbfiz.c: New test. From-SVN: r260546
Luis Machado committed -
2018-05-22 Janus Weil <janus@gcc.gnu.org> PR fortran/85841 * gfortran.dg/gomp/appendix-a/a.6.1.f90: Replace dg-options by dg-additional-options. * gfortran.dg/graphite/block-2.f: Ditto. * gfortran.dg/graphite/id-19.f: Ditto. * gfortran.dg/vect/Ofast-pr50414.f90: Ditto. * gfortran.dg/vect/cost-model-pr34445a.f: Ditto. * gfortran.dg/vect/pr52580.f: Ditto. From-SVN: r260544
Janus Weil committed -
From-SVN: r260543
Martin Sebor committed -
gcc/ChangeLog: PR c/85623 * calls.c (maybe_warn_nonstring_arg): Use string length to set or ajust the presumed bound on an operation to avoid unnecessary warnings. gcc/testsuite/ChangeLog: PR c/85623 * c-c++-common/attr-nonstring-3.c: Adjust. * c-c++-common/attr-nonstring-4.c: Adjust. * c-c++-common/attr-nonstring-6.c: New test. From-SVN: r260541
Martin Sebor committed -
This patch removes a lot of duplicated code in aarch64-ldpstp.md. The patterns that did not previously generate a base register now do not check for aarch64_mem_pair_operand in the pattern. This has been extracted to a check in aarch64_operands_ok_for_ldpstp. All patterns in the file used to have explicit switching code to swap loads and stores that were in the wrong order. This has been extracted into aarch64_operands_ok_for_ldpstp as a final operation after all the checks have been performed. 2018-05-22 Jackson Woodruff <jackson.woodruff@arm.com> Kyrylo Tkachov <kyrylo.tkachov@arm.com> * config/aarch64/aarch64-ldpstp.md: Replace uses of aarch64_mem_pair_operand with memory_operand and delete operand swapping code. * config/aarch64/aarch64.c (aarch64_operands_ok_for_ldpstp): Add check for legitimate_address. (aarch64_gen_adjusted_ldpstp): Swap operands where appropriate. (aarch64_swap_ldrstr_operands): New. * config/aarch64/aarch64-protos.h (aarch64_swap_ldrstr_operands): Define prototype. Co-Authored-By: Kyrylo Tkachov <kyrylo.tkachov@arm.com> From-SVN: r260539
Jackson Woodruff committed -
This patch merges loads and stores from D-registers that are of different modes. Code like this: typedef int __attribute__((vector_size(8))) vec; struct pair { vec v; double d; } Now generates a store pair instruction: void assign (struct pair *p, vec v) { p->v = v; p->d = 1.0; } Whereas previously it generated two `str` instructions. This patch also merges storing of double zero values with long integer values: struct pair { long long l; double d; } void foo (struct pair *p) { p->l = 10; p->d = 0.0; } Now generates a single store pair instruction rather than two `str` instructions. The patch basically generalises the mode iterators on the patterns in aarch64.md and the peepholes in aarch64-ldpstp.md to take all combinations of pairs of modes so, while it may be a large-ish patch, it does fairly mechanical stuff. 2018-05-22 Jackson Woodruff <jackson.woodruff@arm.com> Kyrylo Tkachov <kyrylo.tkachov@arm.com> * config/aarch64/aarch64.md: New patterns to generate stp and ldp. (store_pair_sw, store_pair_dw): New patterns to generate stp for single words and double words. (load_pair_sw, load_pair_dw): Likewise. (store_pair_sf, store_pair_df, store_pair_si, store_pair_di): Delete. (load_pair_sf, load_pair_df, load_pair_si, load_pair_di): Delete. * config/aarch64/aarch64-ldpstp.md: Modify peephole for different mode ldpstp and add peephole for merged zero stores. Likewise for loads. * config/aarch64/aarch64.c (aarch64_operands_ok_for_ldpstp): Add size check. (aarch64_gen_store_pair): Rename calls to match new patterns. (aarch64_gen_load_pair): Rename calls to match new patterns. * config/aarch64/aarch64-simd.md (load_pair<mode>): Rename to... (load_pair<DREG:mode><DREG2:mode>): ... This. (store_pair<mode>): Rename to... (vec_store_pair<DREG:mode><DREG2:mode>): ... This. * config/aarch64/iterators.md (DREG, DREG2, DX2, SX, SX2, DSX): New mode iterators. (V_INT_EQUIV): Handle SImode. * config/aarch64/predicates.md (aarch64_reg_zero_or_fp_zero): New predicate. * gcc.target/aarch64/ldp_stp_6.c: New. * gcc.target/aarch64/ldp_stp_7.c: New. * gcc.target/aarch64/ldp_stp_8.c: New. Co-Authored-By: Kyrylo Tkachov <kyrylo.tkachov@arm.com> From-SVN: r260538
Jackson Woodruff committed -
PR tree-optimization/85826 - ICE in gimple-ssa-warn-restruct on a variable-length struct gcc/ChangeLog: PR tree-optimization/85826 * gimple-ssa-warn-restrict.c (builtin_memref::builtin_memref): Avoid assuming that a DECL necesarily has a constant size. gcc/testsuite/ChangeLog: PR tree-optimization/85826 * gcc.dg/Wrestrict-17.c: New test. From-SVN: r260537
Martin Sebor committed -
2018-05-22 Richard Sandiford <richard.sandiford@linaro.org> gcc/testsuite/ * gcc.dg/torture/pr85862.c: Rename to... * gcc.dg/torture/pr85852.c: ...this. From-SVN: r260536
Richard Sandiford committed -
This patch fixes an issue whereby the compiler failed to properly warn against unreferenced formal parameters when analyzing expression functions. 2018-05-22 Justin Squirek <squirek@adacore.com> gcc/ada/ * sem_ch6.adb (Analyze_Expression_Function): Propagate flags from the original function spec into the generated function spec due to expansion of expression functions during analysis. (Analyze_Subprogram_Body_Helper): Modify check on formal parameter references from the body to the subprogram spec in the case of expression functions because of inconsistances related to having a generated body. * libgnarl/s-osinte__android.ads: Flag parameters as unused. * libgnarl/s-osinte__lynxos178e.ads: Likewise. * libgnarl/s-osinte__qnx.adb: Likewise. * libgnarl/s-osinte__qnx.ads: Likewise. gcc/testsuite/ * gnat.dg/warn14.adb: New testcase. From-SVN: r260535
Justin Squirek committed -
2018-05-22 Doug Rupp <rupp@adacore.com> gcc/ada/ * init.c (HAVE_ADJUST_CONTEXT_FOR_RAISE): Don't define on VxWorks7 for AArch64. From-SVN: r260534
Doug Rupp committed -
In a sequence like (d) (c) (b) (a) c++ raises <-- Ada calls c++, <-- c++ call Ada <-- Ada calls exception others handler and handles c++ gets foreign c++ exception exception and re-raises the original exception raised on the C++ world at (d) couldn't be caught as a regular c++ exception at (b) when the re-raise performed at (c) is done with an explicit call to Ada.Exceptions.Reraise_Occurrence. Indeed, the latter just re-crafted a new Ada-ish occurence and the nature and contents of the original exception object were lost. This patch fixes this by refining Reraise_Occurrence to be more careful with exceptions in the course of a propagation, just resuming propagation of the original object. From the set of soures below, compilation and execution with: g++ -c bd.cc && gnatmake -f -g a.adb -largs bd.o --LINK=g++ && ./a is expected to output: foreign exception caught, reraising ... b() caught x = 5 ---- // bd.cc extern "C" { extern void c(); void b (); void d (); } void b () { try { c(); } catch (int x) { printf ("b() caught x = %d\n", x); } } void d () { throw (5); } -- a.adb with C; procedure A is procedure B; pragma Import (Cpp, B); begin B; end; -- c.ads procedure C; pragma Export (C, C, "c"); -- c.adb with Ada.Exceptions; use Ada.Exceptions; with System.Standard_Library; with Ada.Unchecked_Conversion; with Ada.Text_IO; use Ada.Text_IO; procedure C is package SSL renames System.Standard_Library; use type SSL.Exception_Data_Ptr; function To_Exception_Data_Ptr is new Ada.Unchecked_Conversion (Exception_Id, SSL.Exception_Data_Ptr); procedure D; pragma Import (Cpp, D); Foreign_Exception : aliased SSL.Exception_Data; pragma Import (Ada, Foreign_Exception, "system__exceptions__foreign_exception"); begin D; exception when E : others => if To_Exception_Data_Ptr (Exception_Identity (E)) = Foreign_Exception'Unchecked_access then Put_Line ("foreign exception caught, reraising ..."); Reraise_Occurrence (E); end if; end; 2018-05-22 Olivier Hainque <hainque@adacore.com> gcc/ada/ * libgnat/a-except.adb (Exception_Propagation.Propagate_Exception): Expect an Exception_Occurence object, not an Access. (Complete_And_Propagate_Occurrence): Adjust accordingly. (Raise_From_Signal_Handler): Likewise. (Reraise_Occurrence_No_Defer): If we have a Machine_Occurrence available in the provided occurrence object, just re-propagate the latter as a bare "raise;" would do. * libgnat/a-exexpr.adb (Propagate_Exception): Adjust to spec change. * libgnat/a-exstat.adb (String_To_EO): Initialize X.Machine_Occurrence to null, to mark that the occurrence we're crafting from the stream contents is not being propagated (yet). From-SVN: r260533
Olivier Hainque committed -
This patch modifies the late expansion of record aggregates to ensure that the generated code which handles a controlled component initialized by a function call is inserted in line with the rest of the initialization code, rather than before the record aggregate. This way the function call has proper access to the discriminants of the object being created. 2018-05-22 Hristian Kirtchev <kirtchev@adacore.com> gcc/ada/ * exp_aggr.adb (Initialize_Ctrl_Record_Component): Insert the generated code for a transient component in line with the rest of the initialization code, rather than before the aggregate. This ensures that the component has proper visibility of the discriminants. gcc/testsuite/ * gnat.dg/controlled8.adb: New testcase. From-SVN: r260532
Hristian Kirtchev committed -
Although the sysconf SC_NPROCESSORS_ONLN is also defined by the API, the only documented way to retrieve the number of CPUs is by using the syspage. This also better organise the QNX-specific macros in adaint.c 2018-05-22 Jerome Lambourg <lambourg@adacore.com> gcc/ada/ * adaint.c: Reorganize QNX-specific macros, use syspage to retreive the number of CPUs. From-SVN: r260531
Jerome Lambourg committed -
The trampoline now properly restores the link register as well as the stack pointer. As a minor optimisation, now only callee-saved registers are restored: the scratch registers don't need that. 2018-05-22 Jerome Lambourg <lambourg@adacore.com> gcc/ada/ * sigtramp-qnx.c: Properly restore link register in signal trampoline. From-SVN: r260530
Jerome Lambourg committed
-