1. 23 May, 2018 23 commits
    • [Ada] Missing legality check on iterator over formal container · ac450fb2
      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
    • [Ada] Fix implementation of utility for finding enclosing declaration · fd82aeff
      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
    • [Ada] Suspension and elaboration warnings/checks · 0c9849e1
      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
    • [Ada] Restrict initialization of External_Tag and Expanded_Name · 51ab2a39
      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
    • [Ada] Fix of some permission rules of pointers in SPARK · 6734617c
      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
    • [Ada] Crash on predicate involving qualified expression in instance · a0fa5497
      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
    • [Ada] Suppression of elaboration-related warnings · a0f3668c
      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
    • [Ada] Suppression of elaboration-related warnings · 48688534
      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
    • [Ada] Remove obsolete stuff from repinfo.adb · 6e6e00ff
      2018-05-23  Eric Botcazou  <ebotcazou@adacore.com>
      
      gcc/ada/
      
      	* repinfo.adb (List_Type_Info): Remove obsolete stuff.
      
      From-SVN: r260579
      Eric Botcazou committed
    • [Ada] Suppression of elaboration-related warnings · 162ed06f
      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
    • [Ada] Minor reformatting · 53b30c73
      2018-05-23  Piotr Trojanek  <trojanek@adacore.com>
      
      gcc/ada/
      
      	* einfo.ads: Minor reformatting.
      
      From-SVN: r260577
      Piotr Trojanek committed
    • [Ada] Compiler fails to reject illegal store of anonymous_access_to_subprogram · 728fedc2
      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
    • [Ada] Turn off length expansion in CodePeer mode · 87843c83
      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
    • [Ada] Build-in-place aggregates and Address clauses · 32677654
      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
    • [Ada] Minor reformatting · 95872381
      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
    • [Ada] Initialize_Scalars optimization causes spurious runtime check failure · 40016fa7
      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
    • [Ada] Minor reformatting · 3d581777
      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… · 72cfbeae
      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
    • re PR tree-optimization/85822 (Maybe wrong code in VRP since r249150) · ad4f3f5d
      PR tree-optimization/85822
      
      From-SVN: r260566
      Yury Gribov committed
    • tree-ssa-sccvn.c (vn_reference_lookup_3): Handle arbitrary memset constants via… · b72feab8
      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
    • PR c++/81420 - not extending temporary lifetime. · 3423a64d
      	* 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
    • PR c++/85866 - error with .* in default template arg. · 0d2e69cb
      	* pt.c (tsubst_copy_and_build): Handle partial instantiation.
      
      From-SVN: r260562
      Jason Merrill committed
    • Daily bump. · 72082018
      From-SVN: r260561
      GCC Administrator committed
  2. 22 May, 2018 17 commits
    • re PR fortran/85841 ([F2018] reject deleted features) · 872b6afd
      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
    • PR middle-end/85359 - duplicate -Wstringop-overflow for a strcmp call with a nonstring pointer · 36537a1c
      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
    • Don't mark IFUNC resolver as only called directly · aab778d3
      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
    • [AArch64] Recognize a missed usage of a sbfiz instruction · 58c2ad42
      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
    • re PR fortran/85841 ([F2018] reject deleted features) · 927a0091
      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
    • Fix typo in a comment. · 39c71bc3
      From-SVN: r260543
      Martin Sebor committed
    • PR c/85623 - strncmp() warns about attribute 'nonstring' incorrectly in -Wstringop-overflow · d677a8b6
      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
    • [AArch64, patch] Refactor of aarch64-ldpstp · 9b56ec11
      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
    • [AArch64] Merge stores of D-register values with different modes · dfe1da23
      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 · 9f855c10
      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
    • pr85862.c: Rename to... · f141b40a
      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
    • [Ada] Missing warning for unreferenced formals in expression functions · 3f89eb7f
      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
    • [Ada] Don't define HAVE_ADJUST_CONTEXT_FOR_RAISE on VxWorks7 for AArch64 · 143a4acd
      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
    • [Ada] Fix Reraise_Occurrence of Foreign_Exception · f6904af0
      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
    • [Ada] Crash on partial initialization of controlled component · 02db8169
      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
    • [Ada] Fix retrieval of number of CPUs on QNX · 9820b389
      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
    • [Ada] Fix the signal trampoline on QNX · 817659c5
      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