1. 11 Jan, 2018 25 commits
    • [Ada] Update description of restriction SPARK_05 with SPARK 2014 · a5b2e440
      2018-01-11  Yannick Moy  <moy@adacore.com>
      
      gcc/ada/
      
      	* doc/gnat_rm/standard_and_implementation_defined_restrictions.rst:
      	Update description of restriction SPARK_05 with SPARK 2014.
      	* gnat_rm.texi: Regenerate.
      
      From-SVN: r256498
      Yannick Moy committed
    • [Ada] Minor layout fix in documentation sources · 151af7d2
      2018-01-11  Vasiliy Fofanov  <fofanov@adacore.com>
      
      gcc/ada/
      
      	* doc/gnat_ugn/gnat_utility_programs.rst: Fix layout.
      
      From-SVN: r256497
      Vasiliy Fofanov committed
    • [Ada] Minor reformatting · 10fdda1c
      2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* exp_aggr.adb, exp_ch9.adb, exp_util.adb, sem_aggr.adb, sem_ch3.adb,
      	sem_res.adb, sem_util.adb: Minor reformatting.
      
      From-SVN: r256496
      Hristian Kirtchev committed
    • [Ada] Handling of pragma Predicate · 4d6000d7
      This patch fixes an omission in the processing of pragma Predicate, which
      should have the same semantics as the corresponding aspect, which is more
      commonly used.
      
      Executing
         gnatmake -q -gnata predicate
         predicate
      
      must yield:
      
         Even1 violated
         Even2 violated
      
      ----
      with Text_IO; use Text_IO;
      procedure Predicate is
      begin
         begin
            declare
               subtype Even1 is Integer;
               pragma Predicate (Even1, Even1 mod 2 = 0);
               X1 : constant Even1 := 1; --  This should fail first
            begin
               null;
            end;
         exception
            when Others => Put_Line ("Even1 violated");
         end;
      
         begin
            declare
               subtype Even2 is Integer with Predicate => Even2 mod 2 = 0;
               X2 : constant Even2 := 1; --  This should fail later, if reached
            begin
               null;
            end;
         exception
            when Others => Put_Line ("Even2 violated");
         end;
      end;
      
      2018-01-11  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_prag.adb (Analyze_Pragma, case Predicate): Indicate that the type
      	has a delayed aspect which must be processed at the point the type is
      	frozen. This mimics what is done when the predicate is provided by a
      	source aspect.
      
      From-SVN: r256495
      Ed Schonberg committed
    • [Ada] Enable sigtramp for aarch64-vx7 · 19fb0439
      2018-01-11  Doug Rupp  <rupp@adacore.com>
      
      gcc/ada/
      
      	* init.c (vxworks): Add macro checks for __aarch64__.
      
      From-SVN: r256494
      Doug Rupp committed
    • [Ada] Different runtime behavior of Predicate_Failure · 80631298
      This patch corrects the generation of predicate checks to handle the case where
      Predicate_Failure appears as a pragma.
      
      ------------
      -- Source --
      ------------
      
      --  main.adb
      
      with Ada.Assertions; use Ada.Assertions;
      with Ada.Exceptions; use Ada.Exceptions;
      with Ada.Text_IO;    use Ada.Text_IO;
      
      procedure Main is
         subtype Even_Asp is Integer
           with Predicate => Even_Asp mod 2 = 0,
                Predicate_Failure => "Even_Asp failed";
      
         subtype Even_Prag is Integer
           with Predicate => Even_Prag mod 2 = 0;
         pragma Predicate_Failure (Even_Prag, "Even_Prag failed");
      
      begin
         begin
            declare
               Val : constant Even_Asp := 1;
            begin
               Put_Line ("ERROR: Even_Asp: did not fail");
            end;
         exception
            when AE : Assertion_Error => Put_Line (Exception_Message (AE));
            when others => Put_Line ("ERROR: Even_Asp: raised unexpected error");
         end;
      
         begin
            declare
               Val : constant Even_Prag := 3;
            begin
               Put_Line ("ERROR: Even_Prag: did not fail");
            end;
         exception
            when AE : Assertion_Error => Put_Line (Exception_Message (AE));
            when others => Put_Line ("ERROR: Even_Prag: raised unexpected error");
         end;
      end Main;
      
      ----------------------------
      -- Compilation and output --
      ----------------------------
      
      $ gnatmake -q main.adb
      $ ./main
      Even_Asp failed
      Even_Prag failed
      
      2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* exp_util.adb (Add_Failure_Expression): New routine.
      	(Make_Predicate_Check): Reimplement the handling of Predicate_Failure.
      	* sem_util.adb (Is_Current_Instance): Code cleanup.
      
      From-SVN: r256493
      Hristian Kirtchev committed
    • [Ada] Integer overflow in SS_Allocate · 6a5e79b4
      This patch imposes a new check and rewrites existing ones to ensure operations
      involving SS_Ptr do not cause an Integer overflow. The Default_Sec_Stack_Size
      function was removed in the process to simplify System.Parameter.
      
      SS_Ptr was derived from the integer System.Parameters.Size_Type to ease the
      creation of objects of type SS_Stack by the binder and imposes a maximum
      secondary stack size of 2GB. In most cases, the user will not hit this limit as
      they cannot specify task stack sizes of more than 2GB via the Storage_Size and
      Secondary_Stack_Size pragmas. Additionally, most operating systems limit the
      primary stack size to less than 2GB, with defaults under 10MB. Linux is the
      rare exception where the user can unbound the primary stack.
      
      Executing the following:
      gnatmake -q overflow
      ./overflow
      
      must yield:
      
      raised STORAGE_ERROR : s-secsta.adb:140 explicit raise
      
      --  overflow.adb:
      
      with String_Pack;
      
      procedure Overflow is
      begin
         null;
      end Overflow;
      
      -- string_pack.ads:
      
      package String_Pack is
         function Return_Big_String return String;
      end String_Pack;
      
      -- string_pack.adb:
      
      with Ada.Strings.Fixed; use Ada.Strings.Fixed;
      
      package body String_Pack is
         function Return_Big_String return String is
         begin
            return Integer'Last * "P";
         end Return_Big_String;
      
         S : String := Return_Big_String;
      
      end String_Pack;
      
      2018-01-11  Patrick Bernardi  <bernardi@adacore.com>
      
      gcc/ada/
      
      	* libgnat/s-parame*.adb, libgnat/s-parame*.ads: Remove unneeded
      	Default_Sec_Stack_Size.
      	* libgnat/s-secsta.adb (SS_Allocate): Handle the fixed secondary stack
      	limit check so that the integer index does not overflow. Check the
      	dynamic stack allocation does not cause the secondary stack pointer to
      	overflow.
      	(SS_Info): Align colons.
      	(SS_Init): Cover the case when bootstraping with an old compiler that
      	does not set Default_SS_Size.
      
      From-SVN: r256492
      Patrick Bernardi committed
    • [Ada] Illegal protected calls in inherited pre/postconditions · 5cb78fb8
      AI12-0166 specifies that it is illegal for a pre/postcondition of a
      protected operation to contain an internal call to a protected function.
      This patch completes the implementation of this rule in the case the
      condition is inherited from a classwide condition of an abstract operation
      of an interface type.
      
      Compiling inheritpo.adb must yield:
      
         inheritpo.ads:9:04: instantiation error at line 6
         inheritpo.ads:9:04: internal call to "F" cannot appear
            in inherited precondition of protected operation "P"
         inheritpo.ads:9:04: instantiation error at line 7
         inheritpo.ads:9:04: internal call to "F" cannot appear
            in inherited precondition of protected operation "P"
      
      --
      package InheritPO is
      
         type T is limited interface;
         function F (X : T) return Boolean is abstract;
         procedure P (X : in out T) is abstract with
           Pre'Class  => X.F,
           Post'Class => X.F;
      
         protected type PT is new T with
           overriding function F return Boolean;
           overriding procedure P;
         end PT;
      
      end InheritPO;
      ----
      package body InheritPO is
         protected body PT is
           function F return Boolean is begin return True; end;
           procedure P is begin null; end;
         end PT;
      end InheritPO;
      
      2018-01-11  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_ch3.adb (Add_Internal_Interface_Entities): When checking the
      	legality of an inherited operation that may require overriding, ignore
      	primitive_wrappers that correspond to explicit operations that override
      	an interface primitive.
      
      	* exp_util.adb (Build_Class_Wide_Expression, Replace_Entity): If the
      	operation to which the class-wide expression applies is a protected op.
      	with a primitive_wrapper, verify that the updated inherited expression
      	does not contain an internal call to a protected function.  This
      	completes the implementation of AI12-0166.
      
      From-SVN: r256491
      Ed Schonberg committed
    • [Ada] Encoding of with clauses in ALI files · 94ce4941
      This patch modifies the encodings of with clauses in ALI files to adhere to the
      existing API. The encodigs are as follows:
      
         * Explicit with clauses are encoded on a 'W' line (same as before).
      
         * Implicit with clauses for ancestor units are encoded on a 'W' line (same
           as before).
      
         * Limited_with clauses are encoded on a 'Y' line (same as before).
      
         * ABE and RTSfind-related with clauses are encoded on a 'Z' line.
      
      ------------
      -- Source --
      ------------
      
      --  case_10_func.adb
      
      function Case_10_Func return Boolean is
      begin
         return True;
      end Case_10_Func;
      
      --  case_10_gen_func.ads
      
      generic
      function Case_10_Gen_Func return Boolean;
      
      --  case_10_gen_func.adb
      
      function Case_10_Gen_Func return Boolean is
      begin
         return True;
      end Case_10_Gen_Func;
      
      --  case_10_tasks.ads
      
      package Case_10_Tasks is
         task type Task_Typ is
         end Task_Typ;
      end Case_10_Tasks;
      
      --  case_10_tasks.adb
      
      package body Case_10_Tasks is
         task body Task_Typ is begin null; end Task_Typ;
      end Case_10_Tasks;
      
      --  case_10_gen.ads
      
      with Case_10_Func;
      with Case_10_Gen_Func;
      with Case_10_Tasks;
      
      generic
      package Case_10_Gen is
         Val : constant Boolean := Case_10_Func;
      
         function Inst is new Case_10_Gen_Func;
      
         Tsk : Case_10_Tasks.Task_Typ;
      end Case_10_Gen;
      
      --  case_10.ads
      
      with Case_10_Gen;
      
      package Case_10 is
         package Inst is new Case_10_Gen;
      end Case_10;
      
      ----------------------------
      -- Compilation and output --
      ----------------------------
      
      $ gcc -c case_10.ads
      $ grep "W " case_10.ali | sort
      $ grep "Z " case_10.ali | sort
      W case_10_gen%s		case_10_gen.ads		case_10_gen.ali
      Z case_10_func%b	case_10_func.adb	case_10_func.ali
      Z case_10_gen_func%s	case_10_gen_func.adb	case_10_gen_func.ali  ED
      Z case_10_tasks%s	case_10_tasks.adb	case_10_tasks.ali  AD
      Z system.soft_links%s	s-soflin.adb		s-soflin.ali
      Z system.tasking%s	s-taskin.adb		s-taskin.ali
      Z system.tasking.stages%s  s-tassta.adb		s-tassta.ali
      
      2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* ali.adb: Document the remaining letters available for ALI lines.
      	(Scan_ALI): A with clause is internal when it is encoded on a 'Z' line.
      	* ali.ads: Update type With_Record. Field
      	Implicit_With_From_Instantiation is no longer in use. Add field
      	Implicit_With.
      	* csinfo.adb (CSinfo): Remove the setup for attribute
      	Implicit_With_From_Instantiation.
      	* lib-writ.adb (Collect_Withs): Correct the logic which marks a unit as
      	either implicitly or explicitly withed.
      	(Is_Implicit_With_Clause): New routine.
      	(Write_ALI): Rename array Implicit_With to Has_Implicit_With to avoid
      	confusion with the with clause attribute by the same name.
      	(Write_With_Lines): Update the emission of 'W', 'Y', and 'Z' headers.
      	* rtsfind.adb (Maybe_Add_With): Code cleanup.
      	* sem_ch8.adb (Present_System_Aux): Code cleanup.
      	* sem_ch10.adb (Expand_With_Clause): Mark the with clause as generated
      	for a parent unit.
      	(Implicit_With_On_Parent): Mark the with clause as generated for a
      	parent unit.
      	* sem_ch12.adb (Inherit_Context): With clauses inherited by an
      	instantiation are no longer marked as Implicit_With_From_Instantiation
      	because they are already marked as implicit.
      	* sem_elab.adb (Ensure_Prior_Elaboration_Static): Remove the kludge
      	which marks implicit with clauses as related to an instantiation.
      	* sinfo.adb (Implicit_With_From_Instantiation): Removed.
      	(Parent_With): New routine.
      	(Set_Implicit_With_From_Instantiation): Removed.
      	(Set_Parent_With): New routine.
      	* sinfo.ads: Update the documentation of attribute Implicit_With.
      	Remove attribute Implicit_With_From_Instantiation along with
      	occurrences in nodes.  Add attribute Parent_With along with occurrences
      	in nodes.
      	(Implicit_With_From_Instantiation): Removed along with pragma Inline.
      	(Parent_With): New routine along with pragma Inline.
      	(Set_Implicit_With_From_Instantiation): Removed along with pragma Inline.
      	(Set_Parent_With): New routine along with pragma Inline.
      
      From-SVN: r256490
      Hristian Kirtchev committed
    • [Ada] Finding proper scope when inside entry body · 77519270
      This patch modifies routine Find_Enclosing_Scope which obtains the scope of an
      arbitrary node to return the unique defining entity of an enclosing body. This
      automatically takes care of the following corner cases:
      
         * The body is a subprogram body which does not complete a previous
           declaration. In this case the proper scope is the entity of the
           body.
      
         * The body is an entry body. Due to a limitation in the AST, the
           entry body does not store its correcponsing spec, but utilizes a
           roundabout way of obtaining it. Regardless of the limitation, the
           proper scope is the entity of the entry declaration.
      
      The issue was discovered during the development of the GNATprove tool and
      is not visible to end users. No simple test is available because this would
      require a debug session.
      
      2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* sem_util.adb (Find_Enclosing_Scope): Return the unique defining
      	entity when the enclosing construct is a body.
      
      From-SVN: r256489
      Hristian Kirtchev committed
    • [Ada] Aspect/pragma Secondary_Stack_Size can evaluate non-literals as zero · a40d9947
      This patch fixes the problem of aspect/pragma Secondary_Stack_Size expressions
      with non-literals evaluating as zero in static secondary stacks allocations.
      The aspect Secondary_Stack_Size is now converted to a pragma instead of an
      attribute as the attribute does not have visibility on the discriminant.
      Additionally, the discriminant of the corresponding record type is now
      referenced if the pragma expression contains a discriminant.
      
      No simple test available as the problem only impacts programs when
      System.Parameters.Sec_Stack_Dynamic = False
      
      2018-01-11  Patrick Bernardi  <bernardi@adacore.com>
      
      gcc/ada/
      
      	* exp_ch9.adb (Expand_N_Task_Type_Declaration): Simplified
      	Secondary_Stack_Size handling as a pragma is now generated for the
      	corresponding aspect instead of an attribute.  Pragma expression is
      	relocated instead of evaluated. Discriminant of the corresponding
      	record type is referenced rather than the type discriminant.
      	(Create_Secondary_Stack_For_Task, Make_Task_Create_Call): Update
      	Secondary_Stack_Size rep item checks to only look for the pragma rep.
      	* sem_ch13.adb (Analyze_One_Aspect): Transform
      	Aspect_Secondary_Stack_Size into a pragma instead of an attribute
      	because the attribute does not have visibility on a task type's
      	discriminants when the type's definition is expanded.
      	(Analyze_Attribute_Definition_Clause): Remove handling of
      	Attribute_Secondary_Stack_Size.
      	* snames.adb-tmpl, snames.ads-tmpl: Remove
      	Attribute_Secondary_Stack_Size, no longer used.
      
      From-SVN: r256488
      Patrick Bernardi committed
    • [Ada] Minor reformatting · 6b199a18
      2018-01-11  Justin Squirek  <squirek@adacore.com>
      
      gcc/ada/
      
      	* sem_ch8.adb: Minor comment fix.
      
      From-SVN: r256487
      Justin Squirek committed
    • [Ada] Missing finalization in case expression · 05344a33
      This patch modifies the processing of controlled transient objects within case
      expressions represented by an Expression_With_Actions node. The inspection of
      an individual action must continue in case it denotes a complex expression,
      such as a case statement, which in turn may contain additional transients.
      
      ------------
      -- Source --
      ------------
      
      --  pack.ads
      
      with Ada.Finalization; use Ada.Finalization;
      
      package Pack is
         function Next_Id return Natural;
      
         type Ctrl is new Controlled with record
            Id : Natural := 0;
         end record;
      
         procedure Adjust (Obj : in out Ctrl);
         procedure Finalize (Obj : in out Ctrl);
         procedure Initialize (Obj : in out Ctrl);
      
         function New_Ctrl return Ctrl;
      
         Empty : constant Ctrl := (Controlled with Id => 1);
      
         type Enum is (One, Two, Three);
      
         type Ctrl_Rec is record
            Comp : Ctrl;
            Kind : Enum;
         end record;
      
         procedure Proc (Obj : Ctrl_Rec);
      end Pack;
      
      --  pack.adb
      
      with Ada.Text_IO; use Ada.Text_IO;
      
      package body Pack is
         Id_Gen : Natural := 1;
      
         procedure Adjust (Obj : in out Ctrl) is
            Old_Id : constant Natural := Obj.Id;
            New_Id : Natural;
      
         begin
            if Old_Id = 0 then
               Put_Line ("  adj: ERROR already finalized");
            else
               New_Id := Old_Id * 100;
               Put_Line ("  adj: " & Old_Id'Img & " ->" & New_Id'Img);
               Obj.Id := New_Id;
            end if;
         end Adjust;
      
         procedure Finalize (Obj : in out Ctrl) is
            Old_Id : constant Natural := Obj.Id;
      
         begin
            if Old_Id = 0 then
               Put_Line ("  fin: ERROR already finalized");
            else
               Put_Line ("  fin: " & Old_Id'Img);
               Obj.Id := 0;
            end if;
         end Finalize;
      
         procedure Initialize (Obj : in out Ctrl) is
            New_Id : constant Natural := Next_Id;
         begin
            Put_Line ("  ini: " & New_Id'Img);
            Obj.Id := New_Id;
         end Initialize;
      
         procedure Proc (Obj : Ctrl_Rec) is
         begin
            Put_Line ("proc : " & Obj.Comp.Id'Img);
         end Proc;
      
         function Next_Id return Natural is
         begin
            Id_Gen := Id_Gen + 1;
            return Id_Gen;
         end Next_Id;
      
         function New_Ctrl return Ctrl is
            Obj : Ctrl;
         begin
            return Obj;
         end New_Ctrl;
      end Pack;
      
      --  main.adb
      
      with Ada.Text_IO; use Ada.Text_IO;
      with Pack;        use Pack;
      
      procedure Main is
         procedure Proc_Case_Expr (Mode : Enum) is
         begin
            Put_Line ("proc_case_expr: " & Mode'Img);
            Proc (case Mode is
                     when One   => (Kind => Two,   Comp => Empty),
                     when Two   => (Kind => Three, Comp => Empty),
                     when Three => (Kind => One,   Comp => New_Ctrl));
         end Proc_Case_Expr;
      
         procedure Proc_If_Expr (Mode : Enum) is
         begin
            Put_Line ("proc_if_expr: " & Mode'Img);
            Proc ((if    Mode = One then (Kind => Two,   Comp => Empty)
                   elsif Mode = Two then (Kind => Three, Comp => Empty)
                   else                  (Kind => One,   Comp => New_Ctrl)));
         end Proc_If_Expr;
      
      begin
         Proc_Case_Expr (One);
         Proc_Case_Expr (Two);
         Proc_Case_Expr (Three);
      
         Proc_If_Expr (One);
         Proc_If_Expr (Two);
         Proc_If_Expr (Three);
      end Main;
      
      ----------------------------
      -- Compilation and output --
      ----------------------------
      
      $ gnatmake -q main.adb
      $ ./main
      proc_case_expr: ONE
        adj:  1 -> 100
      proc :  100
        fin:  100
      proc_case_expr: TWO
        adj:  1 -> 100
      proc :  100
        fin:  100
      proc_case_expr: THREE
        ini:  2
        adj:  2 -> 200
        fin:  2
        adj:  200 -> 20000
      proc :  20000
        fin:  20000
        fin:  200
      proc_if_expr: ONE
        adj:  1 -> 100
      proc :  100
        fin:  100
      proc_if_expr: TWO
        adj:  1 -> 100
      proc :  100
        fin:  100
      proc_if_expr: THREE
        ini:  3
        adj:  3 -> 300
        fin:  3
        adj:  300 -> 30000
      proc :  30000
        fin:  30000
        fin:  300
        fin:  1
      
      2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* exp_ch4.adb (Process_Action): Do not abandon the inspection of an
      	individual action because the action may denote a complex expression,
      	such as a case statement, which in turn may contain additional
      	transient objects.
      
      From-SVN: r256486
      Hristian Kirtchev committed
    • [Ada] Crash on iterated_component_association in expression function · d940c627
      This patch improves on the handling of the Ada2020 construct Iterated_
      Component_Association in various contexts, when the expression involved
      is a record or array aggregate.
      
      Executing:
         gnatmake -gnatX -q main
         ./main
      
      must yield:
      
         123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
      
      ----
      with Text_IO; use Text_IO;
      with Exfor; use Exfor;
      procedure Main is
         Map : String := Table_ASCII;
      begin
         Put_Line (Map (50..91));
      end;
      ----
      package Exfor is
         function Table_ASCII return String is
            (for I in 1 .. Character'Pos (Character'Last) + 1 => Character'Val(I-1));
      end Exfor;
      
      2018-01-11  Ed Schonberg  <schonberg@adacore.com>
      
      gcc/ada/
      
      	* sem_aggr.adb (Resolve_Iterated_Component_Association): Perform
      	analysis on a copy of the expression with a copy of the index variable,
      	because full expansion will rewrite construct into a loop with the
      	original loop variable.
      	* exp_aggr.adb (Gen_Assign): Defer analysis and resolution if the
      	expression is an iterated component association. Full analysis takes
      	place when construct is rewritten as a loop.
      	(In_Place_Assign_OK, Safe_Component): An iterated_component_association
      	is not safe for in-place assignment.
      	* sem_util.adb (Remove_Entity): Handle properly the case of an isolated
      	entity with no homonym and no other entity in the scope.
      
      From-SVN: r256485
      Ed Schonberg committed
    • [Ada] Wrong column in sloc of "expect name" error for loop variant · c8f25817
      This patch corrects error messages printed when using the pragma Loop_Variant
      without a named argument from having an incorrect column number in some cases.
      
      2018-01-11  Justin Squirek  <squirek@adacore.com>
      
      gcc/ada/
      
      	* sem_prag.adb (Analyze_Pragma:Pragma_Loop_Variant): Modify error
      	message to be printed on the pragma argument identifier.
      
      gcc/testsuite/
      
      	* gnat.dg/loopvar.adb: New testcase.
      
      From-SVN: r256484
      Justin Squirek committed
    • [Ada] Inconsistent scope chain due to quantified expression · 51f3e4e1
      This patch corrects the minor decoration performed on invariant procedures in
      case the procedure is not inserted into the tree and analyzed. The decoration
      now constructs a proper first/next/last entity chain containing the single
      formal parameter which represents the object of the related type. The chain
      then ensures that any other entities generated by the [pre]analysis of the
      invariant expression will be properly added to the chain.
      
      The issue was discovered during the development of the GNATprove tool and
      is not visible to end users. No simple test is available because this would
      require a debug session.
      
      2018-01-11  Hristian Kirtchev  <kirtchev@adacore.com>
      
      gcc/ada/
      
      	* exp_util.adb (Build_Invariant_Procedure_Declaration): Set the last
      	entity of the generated invariant procedure in order to construct a
      	proper entity chain.
      
      From-SVN: r256483
      Hristian Kirtchev committed
    • [Ada] Fix minor comment issues · 593e3172
      2018-01-11  Piotr Trojanek  <trojanek@adacore.com>
      
      gcc/ada/
      
      	* sem_ch13.adb (Build_Predicate_Functions): Fix minor issues in
      	comment.
      
      From-SVN: r256482
      Piotr Trojanek committed
    • einfo.ads, einfo.adb (Activation_Record_Component, [...]): Allow E_Discriminant. · 89a4fa68
      2018-01-11  Arnaud Charlet  <charlet@adacore.com>
      
      gcc/ada/
      
      	* einfo.ads, einfo.adb (Activation_Record_Component,
      	Set_Activation_Record_Component, Set_Is_Uplevel_Referenced_Entity):
      	Allow E_Discriminant.
      
      From-SVN: r256481
      Arnaud Charlet committed
    • re PR tree-optimization/83189 (internal compiler error: in probability_in, at profile-count.h:1050) · 29c02e65
      
      	PR middle-end/83189
      	* gfortran.fortran-torture/compile/pr83189.f90: New testcase.
      	* tree-ssa-loop-manip.c (tree_transform_and_unroll_loop): Handle zero
      	profile.
      
      From-SVN: r256480
      Jan Hubicka committed
    • re PR rtl-optimization/83575 (ICE: verify_flow_info failed (error: multiple… · 3211aea2
      re PR rtl-optimization/83575 (ICE: verify_flow_info failed (error: multiple hot/cold transitions found))
      
      	PR middle-end/83575
      	* cfgrtl.c (rtl_verify_edges): Only verify fixability of partition
      	when in layout mode.
      	(cfg_layout_finalize): Do not verify cfg before we are out of layout.
      	* cfgcleanup.c (try_optimize_cfg): Only verify flow info when doing
      	partition fixup.
      
      	* gcc.c-torture/compile/pr83575.c: New testcase.
      
      From-SVN: r256479
      Jan Hubicka committed
    • aarch64-modes.def (V2HF): New VECTOR_MODE. · 27086ea3
      2018-01-10  Michael Collison  <michael.collison@arm.com>
      
      	* config/aarch64/aarch64-modes.def (V2HF): New VECTOR_MODE.
      	* config/aarch64/aarch64-option-extension.def: Add
      	AARCH64_OPT_EXTENSION of 'fp16fml'.
      	* config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins):
      	(__ARM_FEATURE_FP16_FML): Define if TARGET_F16FML is true.
      	* config/aarch64/predicates.md (aarch64_lane_imm3): New predicate.
      	* config/aarch64/constraints.md (Ui7): New constraint.
      	* config/aarch64/iterators.md (VFMLA_W): New mode iterator.
      	(VFMLA_SEL_W): Ditto.
      	(f16quad): Ditto.
      	(f16mac1): Ditto.
      	(VFMLA16_LOW): New int iterator.
      	(VFMLA16_HIGH): Ditto.
      	(UNSPEC_FMLAL): New unspec.
      	(UNSPEC_FMLSL): Ditto.
      	(UNSPEC_FMLAL2): Ditto.
      	(UNSPEC_FMLSL2): Ditto.
      	(f16mac): New code attribute.
      	* config/aarch64/aarch64-simd-builtins.def
      	(aarch64_fmlal_lowv2sf): Ditto.
      	(aarch64_fmlsl_lowv2sf): Ditto.
      	(aarch64_fmlalq_lowv4sf): Ditto.
      	(aarch64_fmlslq_lowv4sf): Ditto.
      	(aarch64_fmlal_highv2sf): Ditto.
      	(aarch64_fmlsl_highv2sf): Ditto.
      	(aarch64_fmlalq_highv4sf): Ditto.
      	(aarch64_fmlslq_highv4sf): Ditto.
      	(aarch64_fmlal_lane_lowv2sf): Ditto.
      	(aarch64_fmlsl_lane_lowv2sf): Ditto.
      	(aarch64_fmlal_laneq_lowv2sf): Ditto.
      	(aarch64_fmlsl_laneq_lowv2sf): Ditto.
      	(aarch64_fmlalq_lane_lowv4sf): Ditto.
      	(aarch64_fmlsl_lane_lowv4sf): Ditto.
      	(aarch64_fmlalq_laneq_lowv4sf): Ditto.
      	(aarch64_fmlsl_laneq_lowv4sf): Ditto.
      	(aarch64_fmlal_lane_highv2sf): Ditto.
      	(aarch64_fmlsl_lane_highv2sf): Ditto.
      	(aarch64_fmlal_laneq_highv2sf): Ditto.
      	(aarch64_fmlsl_laneq_highv2sf): Ditto.
      	(aarch64_fmlalq_lane_highv4sf): Ditto.
      	(aarch64_fmlsl_lane_highv4sf): Ditto.
      	(aarch64_fmlalq_laneq_highv4sf): Ditto.
      	(aarch64_fmlsl_laneq_highv4sf): Ditto.
      	* config/aarch64/aarch64-simd.md:
      	(aarch64_fml<f16mac1>l<f16quad>_low<mode>): New pattern.
      	(aarch64_fml<f16mac1>l<f16quad>_high<mode>): Ditto.
      	(aarch64_simd_fml<f16mac1>l<f16quad>_low<mode>): Ditto.
      	(aarch64_simd_fml<f16mac1>l<f16quad>_high<mode>): Ditto.
      	(aarch64_fml<f16mac1>l_lane_lowv2sf): Ditto.
      	(aarch64_fml<f16mac1>l_lane_highv2sf): Ditto.
      	(aarch64_simd_fml<f16mac>l_lane_lowv2sf): Ditto.
      	(aarch64_simd_fml<f16mac>l_lane_highv2sf): Ditto.
      	(aarch64_fml<f16mac1>lq_laneq_lowv4sf): Ditto.
      	(aarch64_fml<f16mac1>lq_laneq_highv4sf): Ditto.
      	(aarch64_simd_fml<f16mac>lq_laneq_lowv4sf): Ditto.
      	(aarch64_simd_fml<f16mac>lq_laneq_highv4sf): Ditto.
      	(aarch64_fml<f16mac1>l_laneq_lowv2sf): Ditto.
      	(aarch64_fml<f16mac1>l_laneq_highv2sf): Ditto.
      	(aarch64_simd_fml<f16mac>l_laneq_lowv2sf): Ditto.
      	(aarch64_simd_fml<f16mac>l_laneq_highv2sf): Ditto.
      	(aarch64_fml<f16mac1>lq_lane_lowv4sf): Ditto.
      	(aarch64_fml<f16mac1>lq_lane_highv4sf): Ditto.
      	(aarch64_simd_fml<f16mac>lq_lane_lowv4sf): Ditto.
      	(aarch64_simd_fml<f16mac>lq_lane_highv4sf): Ditto.
      	* config/aarch64/arm_neon.h (vfmlal_low_u32): New intrinsic.
      	(vfmlsl_low_u32): Ditto.
      	(vfmlalq_low_u32): Ditto.
      	(vfmlslq_low_u32): Ditto.
      	(vfmlal_high_u32): Ditto.
      	(vfmlsl_high_u32): Ditto.
      	(vfmlalq_high_u32): Ditto.
      	(vfmlslq_high_u32): Ditto.
      	(vfmlal_lane_low_u32): Ditto.
      	(vfmlsl_lane_low_u32): Ditto.
      	(vfmlal_laneq_low_u32): Ditto.
      	(vfmlsl_laneq_low_u32): Ditto.
      	(vfmlalq_lane_low_u32): Ditto.
      	(vfmlslq_lane_low_u32): Ditto.
      	(vfmlalq_laneq_low_u32): Ditto.
      	(vfmlslq_laneq_low_u32): Ditto.
      	(vfmlal_lane_high_u32): Ditto.
      	(vfmlsl_lane_high_u32): Ditto.
      	(vfmlal_laneq_high_u32): Ditto.
      	(vfmlsl_laneq_high_u32): Ditto.
      	(vfmlalq_lane_high_u32): Ditto.
      	(vfmlslq_lane_high_u32): Ditto.
      	(vfmlalq_laneq_high_u32): Ditto.
      	(vfmlslq_laneq_high_u32): Ditto.
      	* config/aarch64/aarch64.h (AARCH64_FL_F16SML): New flag.
      	(AARCH64_FL_FOR_ARCH8_4): New.
      	(AARCH64_ISA_F16FML): New ISA flag.
      	(TARGET_F16FML): New feature flag for fp16fml.
      	(doc/invoke.texi): Document new fp16fml option.
      
      2018-01-10  Michael Collison  <michael.collison@arm.com>
      
      	* config/aarch64/aarch64-builtins.c:
      	(aarch64_types_ternopu_imm_qualifiers, TYPES_TERNOPUI): New.
      	* config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins):
      	(__ARM_FEATURE_SHA3): Define if TARGET_SHA3 is true.
      	* config/aarch64/aarch64.h (AARCH64_FL_SHA3): New flags.
      	(AARCH64_ISA_SHA3): New ISA flag.
      	(TARGET_SHA3): New feature flag for sha3.
      	* config/aarch64/iterators.md (sha512_op): New int attribute.
      	(CRYPTO_SHA512): New int iterator.
      	(UNSPEC_SHA512H): New unspec.
      	(UNSPEC_SHA512H2): Ditto.
      	(UNSPEC_SHA512SU0): Ditto.
      	(UNSPEC_SHA512SU1): Ditto.
      	* config/aarch64/aarch64-simd-builtins.def
      	(aarch64_crypto_sha512hqv2di): New builtin.
      	(aarch64_crypto_sha512h2qv2di): Ditto.
      	(aarch64_crypto_sha512su0qv2di): Ditto.
      	(aarch64_crypto_sha512su1qv2di): Ditto.
      	(aarch64_eor3qv8hi): Ditto.
      	(aarch64_rax1qv2di): Ditto.
      	(aarch64_xarqv2di): Ditto.
      	(aarch64_bcaxqv8hi): Ditto.
      	* config/aarch64/aarch64-simd.md:
      	(aarch64_crypto_sha512h<sha512_op>qv2di): New pattern.
      	(aarch64_crypto_sha512su0qv2di): Ditto.
      	(aarch64_crypto_sha512su1qv2di): Ditto.
      	(aarch64_eor3qv8hi): Ditto.
      	(aarch64_rax1qv2di): Ditto.
      	(aarch64_xarqv2di): Ditto.
      	(aarch64_bcaxqv8hi): Ditto.
      	* config/aarch64/arm_neon.h (vsha512hq_u64): New intrinsic.
      	(vsha512h2q_u64): Ditto.
      	(vsha512su0q_u64): Ditto.
      	(vsha512su1q_u64): Ditto.
      	(veor3q_u16): Ditto.
      	(vrax1q_u64): Ditto.
      	(vxarq_u64): Ditto.
      	(vbcaxq_u16): Ditto.
      	* config/arm/types.md (crypto_sha512): New type attribute.
      	(crypto_sha3): Ditto.
      	(doc/invoke.texi): Document new sha3 option.
      
      2018-01-10  Michael Collison  <michael.collison@arm.com>
      
      	* config/aarch64/aarch64-builtins.c:
      	(aarch64_types_quadopu_imm_qualifiers, TYPES_QUADOPUI): New.
      	* config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins):
      	(__ARM_FEATURE_SM3): Define if TARGET_SM4 is true.
      	(__ARM_FEATURE_SM4): Define if TARGET_SM4 is true.
      	* config/aarch64/aarch64.h (AARCH64_FL_SM4): New flags.
      	(AARCH64_ISA_SM4): New ISA flag.
      	(TARGET_SM4): New feature flag for sm4.
      	* config/aarch64/aarch64-simd-builtins.def
      	(aarch64_sm3ss1qv4si): Ditto.
      	(aarch64_sm3tt1aq4si): Ditto.
      	(aarch64_sm3tt1bq4si): Ditto.
      	(aarch64_sm3tt2aq4si): Ditto.
      	(aarch64_sm3tt2bq4si): Ditto.
      	(aarch64_sm3partw1qv4si): Ditto.
      	(aarch64_sm3partw2qv4si): Ditto.
      	(aarch64_sm4eqv4si): Ditto.
      	(aarch64_sm4ekeyqv4si): Ditto.
      	* config/aarch64/aarch64-simd.md:
      	(aarch64_sm3ss1qv4si): Ditto.
      	(aarch64_sm3tt<sm3tt_op>qv4si): Ditto.
      	(aarch64_sm3partw<sm3part_op>qv4si): Ditto.
      	(aarch64_sm4eqv4si): Ditto.
      	(aarch64_sm4ekeyqv4si): Ditto.
      	* config/aarch64/iterators.md (sm3tt_op): New int iterator.
      	(sm3part_op): Ditto.
      	(CRYPTO_SM3TT): Ditto.
      	(CRYPTO_SM3PART): Ditto.
      	(UNSPEC_SM3SS1): New unspec.
      	(UNSPEC_SM3TT1A): Ditto.
      	(UNSPEC_SM3TT1B): Ditto.
      	(UNSPEC_SM3TT2A): Ditto.
      	(UNSPEC_SM3TT2B): Ditto.
      	(UNSPEC_SM3PARTW1): Ditto.
      	(UNSPEC_SM3PARTW2): Ditto.
      	(UNSPEC_SM4E): Ditto.
      	(UNSPEC_SM4EKEY): Ditto.
      	* config/aarch64/constraints.md (Ui2): New constraint.
      	* config/aarch64/predicates.md (aarch64_imm2): New predicate.
      	* config/arm/types.md (crypto_sm3): New type attribute.
      	(crypto_sm4): Ditto.
      	* config/aarch64/arm_neon.h (vsm3ss1q_u32): New intrinsic.
      	(vsm3tt1aq_u32): Ditto.
      	(vsm3tt1bq_u32): Ditto.
      	(vsm3tt2aq_u32): Ditto.
      	(vsm3tt2bq_u32): Ditto.
      	(vsm3partw1q_u32): Ditto.
      	(vsm3partw2q_u32): Ditto.
      	(vsm4eq_u32): Ditto.
      	(vsm4ekeyq_u32): Ditto.
      	(doc/invoke.texi): Document new sm4 option.
      
      2018-01-10  Michael Collison  <michael.collison@arm.com>
      
      	* config/aarch64/aarch64-arches.def (armv8.4-a): New architecture.
      	* config/aarch64/aarch64.h (AARCH64_ISA_V8_4): New ISA flag.
      	(AARCH64_FL_FOR_ARCH8_4): New.
      	(AARCH64_FL_V8_4): New flag.
      	(doc/invoke.texi): Document new armv8.4-a option.
      
      2018-01-10  Michael Collison  <michael.collison@arm.com>
      
      	* config/aarch64/aarch64-c.c (aarch64_update_cpp_builtins):
      	(__ARM_FEATURE_AES): Define if TARGET_AES is true.
      	(__ARM_FEATURE_SHA2): Define if TARGET_SHA2 is true.
      	* config/aarch64/aarch64-option-extension.def: Add
      	AARCH64_OPT_EXTENSION of 'sha2'.
      	(aes): Add AARCH64_OPT_EXTENSION of 'aes'.
      	(crypto): Disable sha2 and aes if crypto disabled.
      	(crypto): Enable aes and sha2 if enabled.
      	(simd): Disable sha2 and aes if simd disabled.
      	* config/aarch64/aarch64.h (AARCH64_FL_AES, AARCH64_FL_SHA2):
      	New flags.
      	(AARCH64_ISA_AES, AARCH64_ISA_SHA2): New ISA flags.
      	(TARGET_SHA2): New feature flag for sha2.
      	(TARGET_AES): New feature flag for aes.
      	* config/aarch64/aarch64-simd.md:
      	(aarch64_crypto_aes<aes_op>v16qi): Make pattern
      	conditional on TARGET_AES.
      	(aarch64_crypto_aes<aesmc_op>v16qi): Ditto.
      	(aarch64_crypto_sha1hsi): Make pattern conditional
      	on TARGET_SHA2.
      	(aarch64_crypto_sha1hv4si): Ditto.
      	(aarch64_be_crypto_sha1hv4si): Ditto.
      	(aarch64_crypto_sha1su1v4si): Ditto.
      	(aarch64_crypto_sha1<sha1_op>v4si): Ditto.
      	(aarch64_crypto_sha1su0v4si): Ditto.
      	(aarch64_crypto_sha256h<sha256_op>v4si): Ditto.
      	(aarch64_crypto_sha256su0v4si): Ditto.
      	(aarch64_crypto_sha256su1v4si): Ditto.
      	(doc/invoke.texi): Document new aes and sha2 options.
      
      From-SVN: r256478
      Michael Collison committed
    • PR tree-optimization/83781 - Bootstrap failed on x86 with --with-arch=corei7 · 1bfd6a00
      PR tree-optimization/83781 - Bootstrap failed on x86 with --with-arch=corei7
        --with-cpu=corei7
      
      gcc/ChangeLog:
      	* gimple-fold.c (get_range_strlen): Avoid treating arrays of pointers
      	as string arrays.
      
      gcc/testsuite/ChangeLog:
      	* gcc.dg/strlenopt-42.c: New test.
      
      From-SVN: r256477
      Martin Sebor committed
    • re PR tree-optimization/83501 (strlen(a) not folded after strcpy(a, "...")) · 05ef3173
      2018-01-11  Martin Sebor  <msebor@gmail.com>
      	    Prathamesh Kulkarni  <prathamesh.kulkarni@linaro.org>
      
      	PR tree-optimization/83501
      	PR tree-optimization/81703
      
      	* tree-ssa-strlen.c (get_string_cst): Rename...
      	(get_string_len): ...to this.  Handle global constants.
      	(handle_char_store): Adjust.
      
      testsuite/
      	* gcc.dg/strlenopt-39.c: New test-case.
      	* gcc.dg/pr81703.c: Likewise.
      
      Co-Authored-By: Prathamesh Kulkarni <prathamesh.kulkarni@linaro.org>
      
      From-SVN: r256475
      Martin Sebor committed
    • debug/dwarf: formStrp uses a 64-bit value for 64-bit DWARF · 84057372
          
          No test as the only system I know that uses 64-bit DWARF is AIX.
          
          Backport of https://golang.org/cl/84379, which will be in Go 1.11.
          Backporting now for AIX support in gccgo.
          
          Reviewed-on: https://go-review.googlesource.com/87296
      
      From-SVN: r256474
      Ian Lance Taylor committed
    • Daily bump. · b33b5363
      From-SVN: r256472
      GCC Administrator committed
  2. 10 Jan, 2018 15 commits
    • decl.c (gnat_to_gnu_component_type): Apply the check for atomic access once the… · af95bb26
      decl.c (gnat_to_gnu_component_type): Apply the check for atomic access once the component size is taken into account...
      
      	* gcc-interface/decl.c (gnat_to_gnu_component_type): Apply the check
      	for atomic access once the component size is taken into account and
      	also do it if the component type is Atomic or Volatile_Full_Access.
      
      From-SVN: r256465
      Eric Botcazou committed
    • re PR fortran/82367 (ICE with deferred length string allocate on non-deferred length argument) · bdd82c9b
      2018-01-10  Steven G. Kargl  <kargl@gcc.gnu.org>
      
      	PR fortran/82367
      	* resolve.c (resolve_allocate_expr): Check for NULL pointer.
      
      2018-01-10  Steven G. Kargl  <kargl@gcc.gnu.org>
      
      	PR fortran/82367
      	* gfortran.dg/deferred_character_18.f90: New test.
      
      From-SVN: r256464
      Steven G. Kargl committed
    • c-ada-spec.c (dump_number): Add FLOAT_P parameter. · 68dc87c3
      	* c-ada-spec.c (dump_number): Add FLOAT_P parameter.
      	Skip 'f' and 'F' characters if it is true.
      	(store_ada_macro): Minor tweak.
      	(dump_ada_macros) <CPP_COMMENT>: Likewise.
      	<CPP_WSTRING>: Likewise.
      	<CPP_STRING>: Output '&' in the buffer if not the first string.
      	<CPP_NUMBER>: Adjust calls to dump_number.
      
      From-SVN: r256463
      Eric Botcazou committed
    • RISC-V: Add naked function support. · 8cad5b14
      	2018-01-10  Kito Cheng  <kito.cheng@gmail.com>
      
      	gcc/
      	* config/riscv/riscv-protos.h (riscv_output_return): New.
      	* config/riscv/riscv.c (struct machine_function): New naked_p field.
      	(riscv_attribute_table, riscv_output_return),
      	(riscv_handle_fndecl_attribute, riscv_naked_function_p),
      	(riscv_allocate_stack_slots_for_args, riscv_warn_func_return): New.
      	(riscv_compute_frame_info): Only compute frame->mask if not a naked
      	function.
      	(riscv_expand_prologue): Add early return for naked function.
      	(riscv_expand_epilogue): Likewise.
      	(riscv_function_ok_for_sibcall): Return false for naked function.
      	(riscv_set_current_function): New.
      	(TARGET_SET_CURRENT_FUNCTION, TARGET_ALLOCATE_STACK_SLOTS_FOR_ARGS),
      	(TARGET_ATTRIBUTE_TABLE, TARGET_WARN_FUNC_RETURN): New.
      	* config/riscv/riscv.md (simple_return): Call riscv_output_return.
      	* doc/extend.texi (RISC-V Function Attributes): New.
      
      Co-Authored-By: Jim Wilson <jimw@sifive.com>
      
      From-SVN: r256462
      Kito Cheng committed
    • argv.c (expandargv): Correct check for dynamically allocated argv. · 3ec62f54
      2018-01-10  Daniel van Gerpen  <daniel@vangerpen.de>
      
      	* argv.c (expandargv): Correct check for dynamically
      	allocated argv.
      
      From-SVN: r256460
      Daniel van Gerpen committed
    • rs6000.c (is_complex_IBM_long_double): Explicitly check for 128-bit long double… · 83cbbe3a
      rs6000.c (is_complex_IBM_long_double): Explicitly check for 128-bit long double before checking TCmode.
      
      2018-01-10  Michael Meissner  <meissner@linux.vnet.ibm.com>
      
      	* config/rs6000/rs6000.c (is_complex_IBM_long_double): Explicitly
      	check for 128-bit long double before checking TCmode.
      	* config/rs6000/rs6000.h (FLOAT128_IEEE_P): Explicitly check for
      	128-bit long doubles before checking TFmode or TCmode.
      	(FLOAT128_IBM_P): Likewise.
      
      From-SVN: r256458
      Michael Meissner committed
    • PR tree-optimization/83671 - Fix for false positive reported by… · c42d0aa0
      PR tree-optimization/83671 - Fix for false positive reported by -Wstringop-overflow does not work with inlining
      
      gcc/testsuite/ChangeLog:
      
      	PR tree-optimization/83671
      	* gcc.dg/strlenopt-40.c: New test.
      	* gcc.dg/strlenopt-41.c: New test.
      
      gcc/ChangeLog:
      
      	PR tree-optimization/83671
      	* builtins.c (c_strlen): Unconditionally return zero for the empty
      	string.
      	Use -Warray-bounds for warnings.
      	* gimple-fold.c (get_range_strlen): Handle non-constant lengths
      	for non-constant array indices with COMPONENT_REF, arrays of
      	arrays, and pointers to arrays.
      	(gimple_fold_builtin_strlen): Determine and set length range for
      	non-constant character arrays.
      
      From-SVN: r256457
      Martin Sebor committed
    • re PR middle-end/81897 (spurious -Wmaybe-uninitialized warning) · e7c6abad
      	PR middle-end/81897
      	* tree-ssa-uninit.c (convert_control_dep_chain_into_preds): Skip
      	empty blocks.
      
      From-SVN: r256456
      Aldy Hernandez committed
    • [multiple changes] · 266404a8
      2018-01-10 Steven G. Kargl  <kargl@gcc.gnu.org>
      
      	PR fortran/83093
      	* resolve.c (resolve_charlen): Check the type of cl->length
      	after resolution.
      
      2018-01-10  Steven G. Kargl  <kargl@gcc.gnu.org>
      
      	PR fortran/83093
      	* gfortran.dg/allocate_with_typespec_7.f90: New test.
      
      From-SVN: r256455
      Steven G. Kargl committed
    • re PR target/83399 (Power8 ICE During LRA with 2-op rtl pattern for lvx instruction) · 2025a48d
      gcc/
      	PR target/83399
      	* config/rs6000/rs6000.c (print_operand) <'y'>: Use
      	VECTOR_MEM_ALTIVEC_OR_VSX_P.
      	* config/rs6000/vsx.md (*vsx_le_perm_load_<mode> for VSX_D): Use
      	indexed_or_indirect_operand predicate.
      	(*vsx_le_perm_load_<mode> for VSX_W): Likewise.
      	(*vsx_le_perm_load_v8hi): Likewise.
      	(*vsx_le_perm_load_v16qi): Likewise.
      	(*vsx_le_perm_store_<mode> for VSX_D): Likewise.
      	(*vsx_le_perm_store_<mode> for VSX_W): Likewise.
      	(*vsx_le_perm_store_v8hi): Likewise.
      	(*vsx_le_perm_store_v16qi): Likewise.
      	(eight unnamed splitters): Likewise.
      
      gcc/testsuite/
      	PR target/83399
      	* gcc.target/powerpc/pr83399.c: New test.
      
      From-SVN: r256453
      Peter Bergner committed
    • x86intrin.h: Change #warning to #error. · 9e0fa36a
      	* config/rs6000/x86intrin.h: Change #warning to #error. Update message.
      	* config/rs6000/emmintrin.h: Likewise.
      	* config/rs6000/mmintrin.h: Likewise.
      	* config/rs6000/xmmintrin.h: Likewise.
      
      From-SVN: r256452
      Peter Bergner committed
    • parser.c (cp_parser_std_attribute_spec): When token_pair::require_open /… · d90a2542
      parser.c (cp_parser_std_attribute_spec): When token_pair::require_open / require_close return false simply return...
      
      2018-01-10  Paolo Carlini  <paolo.carlini@oracle.com>
      
      	* parser.c (cp_parser_std_attribute_spec): When
              token_pair::require_open / require_close return false simply
      	return error_mark_node, avoid duplicate cp_parser_error about
      	expected '(' / ')', respectively.
      
      From-SVN: r256451
      Paolo Carlini committed
    • Preserving locations for variable-uses and constants (PR c++/43486) · 9a004410
      This patch implements location wrapper nodes, preserving source locations
      of the uses of variables and constants in various places in the
      C++ frontend: at the arguments at callsites, and for typeid, alignof,
      sizeof, and offsetof.
      
      For example, it allows the C++ FE to underline the pertinent argument
      for mismatching calls, for such expressions, improving:
      
      extern int callee (int one, const char *two, float three);
      
      int caller (int first, int second, float third)
      {
        return callee (first, second, third);
      }
      
      from
      
      test.cc: In function 'int caller(int, int, float)':
      test.cc:5:38: error: invalid conversion from 'int' to 'const char*' [-fpermissive]
         return callee (first, second, third);
                                            ^
      test.cc:1:41: note:   initializing argument 2 of 'int callee(int, const char*, float)'
       extern int callee (int one, const char *two, float three);
                                   ~~~~~~~~~~~~^~~
      
      to:
      
      test.cc: In function 'int caller(int, int, float)':
      test.cc:5:25: error: invalid conversion from 'int' to 'const char*' [-fpermissive]
         return callee (first, second, third);
                               ^~~~~~
      test.cc:1:41: note:   initializing argument 2 of 'int callee(int, const char*, float)'
       extern int callee (int one, const char *two, float three);
                                   ~~~~~~~~~~~~^~~
      
      This is the combination of the following patches:
      
        "[PATCH 01/14] C++: preserve locations within build_address"
           https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00883.html
      
        "[PATCH v2.4 of 02/14] Support for adding and stripping location_t wrapper nodes"
          https://gcc.gnu.org/ml/gcc-patches/2018-01/msg00591.html
      
        "[PATCH] Eliminate location wrappers in tree_nop_conversion/STRIP_NOPS"
          https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01330.html
      
        "[PATCH v4 of 03/14] C++: add location_t wrapper nodes during parsing (minimal impl)"
          https://gcc.gnu.org/ml/gcc-patches/2018-01/msg00660.html
      
        "[PATCH 04/14] Update testsuite to show improvements"
          https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00891.html
      
        "[v3 of 05/14] C++: handle locations wrappers when calling warn_for_memset"
          https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01378.html
      
        "[PATCH 07/14] reject_gcc_builtin: strip any location wrappers"
          https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00886.html
      
        "[v3 of PATCH 08/14] cp/tree.c: strip location wrappers in lvalue_kind"
          https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01433.html
      
        "[PATCH 09/14] Strip location wrappers in null_ptr_cst_p"
          https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00888.html
      
        "[PATCH 11/14] Handle location wrappers in string_conv_p"
          https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00890.html
      
        "[PATCH 12/14] C++: introduce null_node_p"
          https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00894.html
      
        "[v3 of PATCH 13/14] c-format.c: handle location wrappers"
          https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01494.html
      
        "[PATCH 14/14] pp_c_cast_expression: don't print casts for location wrappers"
          https://gcc.gnu.org/ml/gcc-patches/2017-11/msg00893.html
      
        "[v3 of PATCH 15/14] Use fold_for_warn in get_atomic_generic_size"
          https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01380.html
      
        "[PATCH] Add selftest for "fold_for_warn (error_mark_node)""
          https://gcc.gnu.org/ml/gcc-patches/2017-12/msg01385.html
      
      gcc/c-family/ChangeLog:
      	PR c++/43486
      	* c-common.c: Include "selftest.h".
      	(get_atomic_generic_size): Perform the test for integral type
      	before the range test for any integer constant, fixing indentation
      	of braces.  Call fold_for_warn before testing for an INTEGER_CST.
      	(reject_gcc_builtin): Strip any location wrapper from EXPR.
      	(selftest::test_fold_for_warn): New function.
      	(selftest::c_common_c_tests): New function.
      	(selftest::c_family_tests): Call it, and
      	selftest::c_pretty_print_c_tests.
      	* c-common.h (selftest::c_pretty_print_c_tests): New decl.
      	* c-format.c (check_format_arg): Convert VAR_P check to a
      	fold_for_warn.
      	* c-pretty-print.c: Include "selftest.h".
      	(pp_c_cast_expression): Don't print casts for location wrappers.
      	(selftest::assert_c_pretty_printer_output): New function.
      	(ASSERT_C_PRETTY_PRINTER_OUTPUT): New macro.
      	(selftest::test_location_wrappers): New function.
      	(selftest::c_pretty_print_c_tests): New function.
      	* c-warn.c (warn_for_memset): Call fold_for_warn on the arguments.
      
      gcc/cp/ChangeLog:
      	PR c++/43486
      	* call.c (null_ptr_cst_p): Strip location wrappers when
      	converting from '0' to a pointer type in C++11 onwards.
      	(conversion_null_warnings): Replace comparison with null_node with
      	call to null_node_p.
      	(build_over_call): Likewise.
      	* cp-gimplify.c (cp_fold): Remove the early bailout when
      	processing_template_decl.
      	* cp-lang.c (selftest::run_cp_tests): Call
      	selftest::cp_pt_c_tests and selftest::cp_tree_c_tests.
      	* cp-tree.h (cp_expr::maybe_add_location_wrapper): New method.
      	(selftest::run_cp_tests): Move decl to bottom of file.
      	(null_node_p): New inline function.
      	(selftest::cp_pt_c_tests): New decl.
      	(selftest::cp_tree_c_tests): New decl.
      	* cvt.c (build_expr_type_conversion): Replace comparison with
      	null_node with call to null_node_p.
      	* error.c (args_to_string): Likewise.
      	* except.c (build_throw): Likewise.
      	* mangle.c (write_expression): Skip location wrapper nodes.
      	* parser.c (literal_integer_zerop): New function.
      	(cp_parser_postfix_expression): Call maybe_add_location_wrapper on
      	the result for RID_TYPEID. Pass true for new "wrap_locations_p"
      	param of cp_parser_parenthesized_expression_list.  When calling
      	warn_for_memset, replace integer_zerop calls with
      	literal_integer_zerop, eliminating the double logical negation
      	cast to bool.  Eliminate the special-casing for CONST_DECL in
      	favor of the fold_for_warn within warn_for_memset.
      	(cp_parser_parenthesized_expression_list): Add "wrap_locations_p"
      	param, defaulting to false.  Convert "expr" to a cp_expr, and call
      	maybe_add_location_wrapper on it when wrap_locations_p is true.
      	(cp_parser_unary_expression): Call maybe_add_location_wrapper on
      	the result for RID_ALIGNOF and RID_SIZEOF.
      	(cp_parser_builtin_offsetof): Likewise.
      	* pt.c: Include "selftest.h".
      	(tsubst_copy): Handle location wrappers.
      	(tsubst_copy_and_build): Likewise.
      	(build_non_dependent_expr): Likewise.
      	(selftest::test_build_non_dependent_expr): New function.
      	(selftest::cp_pt_c_tests): New function.
      	* tree.c: Include "selftest.h".
      	(lvalue_kind): Handle VIEW_CONVERT_EXPR location wrapper nodes.
      	(selftest::test_lvalue_kind): New function.
      	(selftest::cp_tree_c_tests): New function.
      	* typeck.c (string_conv_p): Strip any location wrapper from "exp".
      	(cp_build_binary_op): Replace comparison with null_node with call
      	to null_node_p.
      	(build_address): Use location of operand when building address
      	expression.
      
      gcc/testsuite/ChangeLog:
      	PR c++/43486
      	* g++.dg/diagnostic/param-type-mismatch.C: Update expected results
      	to reflect that the arguments are correctly underlined.
      	* g++.dg/plugin/diagnostic-test-expressions-1.C: Add test coverage
      	for globals, params, locals and literals.
      	(test_sizeof): Directly test the location of "sizeof", rather than
      	when used in compound expressions.
      	(test_alignof): Likewise for "alignof".
      	(test_string_literals): Likewise for string literals.
      	(test_numeric_literals): Likewise for numeric literals.
      	(test_builtin_offsetof): Likewise for "__builtin_offsetof".
      	(test_typeid): Likewise for typeid.
      	(test_unary_plus): New.
      	* g++.dg/warn/Wformat-1.C: Add tests of pointer arithmetic on
      	format strings.
      
      gcc/ChangeLog:
      	PR c++/43486
      	* tree-core.h: Document EXPR_LOCATION_WRAPPER_P's usage of
      	"public_flag".
      	* tree.c (tree_nop_conversion): Return true for location wrapper
      	nodes.
      	(maybe_wrap_with_location): New function.
      	(selftest::check_strip_nops): New function.
      	(selftest::test_location_wrappers): New function.
      	(selftest::tree_c_tests): Call it.
      	* tree.h (STRIP_ANY_LOCATION_WRAPPER): New macro.
      	(maybe_wrap_with_location): New decl.
      	(EXPR_LOCATION_WRAPPER_P): New macro.
      	(location_wrapper_p): New inline function.
      	(tree_strip_any_location_wrapper): New inline function.
      
      From-SVN: r256448
      David Malcolm committed