Commit Graph

170375 Commits

Author SHA1 Message Date
Sylvia Taylor
462e6f9a93 [aarch64]: add usra and ssra combine patterns
This patch adds support to combine:

1) ushr and add into usra, example:

ushr    v0.16b, v0.16b, 2
add     v0.16b, v0.16b, v2.16b
---
usra    v2.16b, v0.16b, 2

2) sshr and add into ssra, example:

sshr    v1.16b, v1.16b, 2
add     v1.16b, v1.16b, v3.16b
---
ssra    v3.16b, v1.16b, 2

Committed on behalf of Sylvia Taylor <sylvia.taylor@arm.com>.
Reviewed-by: <James.greenhalgh@arm.com>

gcc/ChangeLog:


        * config/aarch64/aarch64-simd.md
        (*aarch64_simd_sra<mode>): New.
        * config/aarch64/iterators.md
        (SHIFTRT): New iterator.
        (sra_op): New attribute.

gcc/testsuite/ChangeLog:

        * gcc.target/aarch64/simd/ssra.c: New test.
        * gcc.target/aarch64/simd/usra.c: New test.

From-SVN: r273703
2019-07-22 16:21:17 +00:00
Jozef Lawrynowicz
310b5fb793 MSP430: Don't save all callee-saved regs in non-leaf interrupt functions
Previously, all callee-saved regs would unconditionally be saved
in interrupt functions that call another function.

2019-07-22  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

	* config/msp430/msp430.c (msp430_preserve_reg_p): Don't save
	callee-saved regs R4->R10 in an interrupt function that calls another
	function.

2019-07-22  Jozef Lawrynowicz  <jozef.l@mittosystems.com>

	* gcc.target/msp430/isr-push-pop-main.c: New test.
	* gcc.target/msp430/isr-push-pop-isr-430.c: Likewise.
	* gcc.target/msp430/isr-push-pop-isr-430x.c: Likewise.
	* gcc.target/msp430/isr-push-pop-leaf-isr-430.c: Likewise.
	* gcc.target/msp430/isr-push-pop-leaf-isr-430x.c: Likewise.

From-SVN: r273702
2019-07-22 16:02:29 +00:00
Andrea Corallo
9afb91b2d1 [jit] check result_type in gcc_jit_context_new_unary_op
2019-07-22  Andrea Corallo <andrea.corallo@arm.com>

	* jit-recording.c (unary_op_reproducer_strings): Make it extern.
	(binary_op_reproducer_strings): Likewise.
	* jit-recording.h (unary_op_reproducer_strings): Likewise.
	(binary_op_reproducer_strings): Likewise.
	* libgccjit.c (gcc_jit_context_new_unary_op): Check result_type to be a
	numeric type.
	* libgccjit.c (gcc_jit_context_new_binary_op): Improve error message.

2019-07-22  Andrea Corallo <andrea.corallo@arm.com>

	* jit.dg/test-error-gcc_jit_context_new_unary_op-bad-res-type.c:
	New testcase.
	* jit.dg/test-error-gcc_jit_context_new_binary_op-bad-res-type.c:
	Adjust error message.

From-SVN: r273700
2019-07-22 15:33:58 +00:00
Paul A. Clarke
1c4547f161 [rs6000] Add _mm_blend_epi16 and _mm_blendv_epi8
Add compatibility implementations of _mm_blend_epi16 and _mm_blendv_epi8
intrinsics.

Respective test cases are copied almost verbatim (minor changes to
the dejagnu head lines) from i386.

2019-07-22  Paul A. Clarke  <pc@us.ibm.com>

[gcc]

	* config/rs6000/smmintrin.h (_mm_blend_epi16): New.
	(_mm_blendv_epi8): New.

[gcc/testsuite]

	* gcc.target/powerpc/sse4_1-check.h: New.
	* gcc.target/powerpc/sse4_1-pblendvb.c: New.
	* gcc.target/powerpc/sse4_1-pblendw.c: New.
	* gcc.target/powerpc/sse4_1-pblendw-2.c: New.

From-SVN: r273698
2019-07-22 14:07:10 +00:00
Eric Botcazou
46ebb491f1 [Ada] More complete information level for -gnatR4 output
This instructs -gnatR4 to also list the Etype of user-declared objects
if it is compiler-generated, for example in:

package P2 is

  Arr_V : array (1 .. 5) of Integer;

end P2;

2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* repinfo.adb (List_Entities): Also list compiled-generated
	types present as Etype of objects.

From-SVN: r273697
2019-07-22 13:58:41 +00:00
Eric Botcazou
ae3f653057 [Ada] Sinfo: update doc about Do_Division/Overlflow/Range_Check
2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sinfo.ads: Update the documentation about the
	Do_Division_Check, Do_Overflow_Check and Do_Range_Check flags.

From-SVN: r273696
2019-07-22 13:58:37 +00:00
Eric Botcazou
267c7ff6a0 [Ada] Fix missing check for no-op conversion to fixed-point type
This plugs a small loophole in the compiler for the case of a
multiplication or a division in a fixed-point type wrapped in a no-op
conversion, e.g. to the same fixed-point type.

The front-end fails to generate a range check for the operation.  This
used to be caught by the back-end, which would generate the range check,
but this is no longer the case because we now make sure to reset the
Do_Range_Check flag in all cases before invoking the back-end.

2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* exp_ch4.adb (Expand_N_Type_Conversion): Beef up comment.
	(Fixup_Universal_Fixed_Operation): Set the base type instead of
	the type of the enclosing type conversion on the operation.

gcc/testsuite/

	* gnat.dg/fixedpnt6.adb: New testcase.

From-SVN: r273695
2019-07-22 13:58:32 +00:00
Ed Schonberg
ad277369b2 [Ada] Remove misleading warning/suggestion in membership test
This patch removes a warning on a membership test whose right operand is
given by a range. In many cases the check can be replaced by the use of
attribute 'Valid, but if the bounds of range are type conversion this
replacement would be invorrect and the warning and suggestion are
misleading.

2019-07-22  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* exp_ch4.adb (Expand_N_In): Do not suggest the use of attribute
	'Valid as a replacement for a range check on a discrete type
	when the bounds of the range are given by type conversions,
	because in such a case there are distinct types involved and the
	subbested attribute replacement would be misplaced.

gcc/testsuite/

	* gnat.dg/warn26.adb: New testcase.

From-SVN: r273694
2019-07-22 13:58:27 +00:00
Yannick Moy
a211917585 [Ada] Adapt ownership checking in SPARK to traversal functions
A traversal function, especially when implemented as an expression
function, may need to return an if-expression or case-expression, while
still respecting Legality Rule SPARK RM 3.10(5). This case is now
allowed in GNATprove.

There is no impact on compilation.

2019-07-22  Yannick Moy  <moy@adacore.com>

gcc/ada/

	* sem_spark.adb (Get_Root_Object, Is_Path_Expression,
	Is_Subpath_Expression): Add parameter Is_Traversal to adapt
	these functions to the case of paths returned from a traversal
	function.
	(Read_Indexes): Handle the case of an if-expression or
	case-expression.
	(Check_Statement): Check Emit_Messages only when issuing an
	error message. This is important as Emit_Messages may store the
	information that an error was detected.

From-SVN: r273693
2019-07-22 13:58:23 +00:00
Eric Botcazou
8113b0c738 [Ada] Overhaul code implementing conversions involving fixed-point types
This ovehauls the code implementing conversions involving fixed-point
types in the front-end because it leaks the Do_Range_Check flag in
several places to the back-end, which is a violation of the documented
interface between front-end and back-end.

This also does a bit of housekeeping work throughout it in the process.

There should be essentially no functional changes.

2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* checks.adb (Apply_Type_Conversion_Checks): Do not set
	Do_Range_Check flag on conversions from fixed-point types
	either.
	* exp_attr.adb: Add use and with clause for Expander.
	(Expand_N_Attribute_Reference) <Fixed_Value, Integer_Value>: Set
	the Conversion_OK flag and do not generate overflow/range checks
	manually.
	* exp_ch4.adb (Expand_N_Qualified_Expression): Remove
	superfluous clearing of Do_Range_Check flag.
	(Discrete_Range_Check): New procedure to generate a range check
	for discrete types.
	(Real_Range_Check): Remove redundant local variable and adjust.
	Remove useless shortcut.  Clear Do_Range_Check flag on all
	paths.
	(Expand_N_Type_Conversion): Remove redundant test on
	Conversion_OK.  Call Discrete_Range_Check to generate range
	checks on discrete types.  Remove obsolete code for
	float-to-integer conversions.  Add code to generate range checks
	for conversions involving fixed-point types.

From-SVN: r273692
2019-07-22 13:58:19 +00:00
Eric Botcazou
c936411fab [Ada] Sprint: fix pasto in comment
2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sprint.ads: Fix pasto in comment.

From-SVN: r273691
2019-07-22 13:58:14 +00:00
Javier Miranda
137dabdd82 [Ada] Spurious error passing access to class-wide interface type
The compiler reports an spurious error when the formal parameter of a
subprogram is an access to a class wide interface type and the actual
parameter is an allocator of an object covering such interface type.

2019-07-22  Javier Miranda  <miranda@adacore.com>

gcc/ada/

	* sem_res.adb (Resolve_Actuals): Replace code that displaces the
	pointer to an allocated object to reference its secondary
	dispatch table by a type conversion (which takes care of
	handling all cases).

gcc/testsuite/

	* gnat.dg/class_wide5.adb: New testcase.

From-SVN: r273690
2019-07-22 13:58:09 +00:00
Eric Botcazou
2f8313ce5a [Ada] Small enhancement to the -gnatD/-gnatG output for fixed-point types
This is a small enhancement to the -gnatD/-gnatG output: the base type
of fixed-point types, which is usually an itype, used to be printed as
??? in this case.  It is now printed in a similar fashion as the first
subtype.

For the following package:

package P is

  type D is delta 128.0 / (2 ** 15) range 0.0 .. 256.0;

end P;

the  -gnatD/-gnatG must now be:

Source recreated from tree for P (spec)
---------------------------------------

p_E : short_integer := 0;

package p is
   type p__d is delta [1.0/256.0] range 0.0 .. 256.0;
   [type p__TdB is delta [1.0/256.0] range -[2147483648.0*2**(-8)] ..
     [2147483647.0*2**(-8)]]
   freeze p__TdB []
end p;

2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sprint.adb (Sprint_Node_Actual)
	<N_Decimal_Fixed_Point_Definition>: Swap a couple of spaces.
	(Write_Itype): Minor consistency fixes throughout.  Add support
	for printing ordinary and decimal fixed-point types and
	subtypes.

From-SVN: r273689
2019-07-22 13:58:04 +00:00
Eric Botcazou
75f6bfcefd [Ada] Beef up comment in exp_attr.adb
2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* exp_attr.adb (Expand_Loop_Entry_Attribute): Beef up comment.

From-SVN: r273688
2019-07-22 13:58:00 +00:00
Ed Schonberg
ca305a848c [Ada] Optimization loses exception in improper use of 'Value
This patch prevents an improper removal of an evaluation of attribute
'Value on an illegal input that will raise Constraint_Error, when a
subsequent use of this evaluation might be optimized away by the
back-end.

2019-07-22  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* libgnat/s-valboo.ads, libgnat/s-valcha.ads,
	libgnat/s-valdec.ads, libgnat/s-valenu.ads,
	libgnat/s-valint.ads, libgnat/s-vallld.ads,
	libgnat/s-vallli.ads, libgnat/s-valllu.ads,
	libgnat/s-valrea.ads, libgnat/s-valuns.ads,
	libgnat/s-valwch.ads: Change categorization of packages that
	implement attribute 'Value from Pure to Preelaborate, to prevent
	undesirable optimizations when the evaluation of the attribute
	raises Constraint_Error, but subsequent use of the result of
	this evsaluation is removed by a subsequent optimization.

gcc/testsuite/

	* gnat.dg/opt80.adb: New testcase.

From-SVN: r273687
2019-07-22 13:57:55 +00:00
Ed Schonberg
8c029ee8cf [Ada] Misleading warning on variable not assigned
This patch removes a warning on a referenced entity with no explicit
prior assignment, if the type of the entity has
Preelaborable_Initialixation, such as Exception_Occurrence.

2019-07-22  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* sem_warn.adb (Check_References): Do not emit s warning on a
	referenced entity with no explicit assignment if the type of the
	entity has Preelaborable_Initialixation, such as
	Exception_Occurrence.

gcc/testsuite/

	* gnat.dg/warn25.adb: New testcase.

From-SVN: r273686
2019-07-22 13:57:51 +00:00
Javier Miranda
22862ba6d6 [Ada] Usage of signed type in array bounds in CCG
2019-07-22  Javier Miranda  <miranda@adacore.com>

gcc/ada/

	* exp_ch4.adb (Size_In_Storage_Elements): Improve the expansion
	to handle array indexes that are modular type.
	(Expand_N_Allocator): For 32-bit targets improve the generation
	of the runtime check associated with large arrays supporting
	arrays initialized with a qualified expression.
	* libgnat/s-imenne.adb (Image_Enumeration_8,
	Image_Enumeration_16, Image_Enumeration_32): Define the index of
	Index_Table with range Natural'First .. Names'Length since in
	the worst case all the literals of the enumeration type would be
	single letter literals and the Table built by the frontend would
	have as many components as the length of the names string. As a
	result of this enhancement, the internal tables declared using
	Index_Table have a length closer to the real needs, thus
	avoiding the declaration of large arrays on 32-bit CCG targets.

From-SVN: r273685
2019-07-22 13:57:46 +00:00
Yannick Moy
5dcbefb1c4 [Ada] Issue warning or error message on ignored typing constraint
GNAT ignores the discriminant constraint on a component when it applies
to the type of the record being analyzed. Now issue a warning on Ada
code when ignoring this constraint, or an error on SPARK code.

2019-07-22  Yannick Moy  <moy@adacore.com>

gcc/ada/

	* sem_ch3.adb (Constrain_Access): Issue a message about ignored
	constraint.

gcc/testsuite/

	* gnat.dg/warn24.adb: New testcase.

From-SVN: r273684
2019-07-22 13:57:42 +00:00
Eric Botcazou
1169925707 [Ada] Fix spurious visibility error for tagged type with inlining
This fixes a spurious visibility error for the very peculiar case where
an operator that operates on the class-wide type of a tagged type is
declared in a package, the operator is renamed in another package where
a subtype of the tagged type is declared, and both packages end up in
the transititive closure of a unit compiled with optimization and
inter-inlining (-gnatn).

2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sem_ch8.adb (End_Use_Type): Reset the In_Use flag on the
	class-wide type if the type is tagged.
	(Use_One_Type): Add commentary on the handling of the class-wide
	type.

gcc/testsuite/

	* gnat.dg/inline17.adb, gnat.dg/inline17_pkg1.adb,
	gnat.dg/inline17_pkg1.ads, gnat.dg/inline17_pkg2.ads,
	gnat.dg/inline17_pkg3.adb, gnat.dg/inline17_pkg3.ads: New
	testcase.

From-SVN: r273683
2019-07-22 13:57:37 +00:00
Eric Botcazou
ff9d220ede [Ada] Remove obsolete Is_For_Access_Subtype machinery
This change removes the Is_For_Access_Subtype machinery from the
compiler.  This machinery was devised a long time ago to deal with a
peculiarity of the freezing for access-to-record subtypes but has been
degenerate for quite some time now and does not seem to serve any useful
purpose at this point.

Morever it has an annoying side effect whereby it causes Underlying_Type
to return the (unconstrained) base record type when invoked on the
designated record subtype, which is very problematic for GNATprove.

There should be no functional changes.

2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* einfo.ads (Is_For_Access_Subtype): Delete.
	(Set_Is_For_Access_Subtype): Likewise.
	* einfo.adb (Is_For_Access_Subtype): Likewise.
	(Set_Is_For_Access_Subtype): Likewise.
	(Write_Entity_Flags): Do not write Is_For_Access_Subtype.
	* exp_ch4.adb (Expand_N_Selected_Component): Do not deal with
	it.
	* exp_spark.adb (Expand_SPARK_N_Selected_Component): Likewise.
	* sem_ch4.adb (Analyze_Explicit_Dereference): Likewise.
	* sem_ch3.adb (Build_Discriminated_Subtype): Do not build a
	special private subtype for access-to-record subtypes.

From-SVN: r273682
2019-07-22 13:57:31 +00:00
Eric Botcazou
78e92e11d4 [Ada] Spurious error on private subtype of derived access type
This patch fixes a spurious type error on a dynamic predicate on a
subtype of a private type whose full view is a derived access type.
Prior to it, the base type of the subtype would appear to be the parent
type of the derived type instead of the derived type itself, leading to
problems downstream.

The following package must now compile quietly:

with S;

package T is
   type B_Pointer is private;
   Null_B_Pointer : constant B_Pointer;
   function OK (B : B_Pointer) return Boolean is (B /= Null_B_Pointer);
   subtype Valid_B_Pointer is B_Pointer
     with Dynamic_Predicate => OK (Valid_B_Pointer);
private
   type B_Pointer is new S.A_Pointer;
   Null_B_Pointer : constant B_Pointer := B_Pointer (S.Null_A_Pointer);
end;

package S is
   type A_Type is new Integer;
   type A_Pointer is access A_Type;
   Null_A_Pointer : constant A_Pointer := null;
end;

Moreover, it also plugs a loophole in the compiler whereby an
instantiation of a generic with a formal subprogram declaration nested
in an enclosing generic package would be done even if there was a
mismatch between an original and a derived types involved in the
instantiation.

The compiler must now gives the following error:
p.adb:11:43: no visible subprogram matches the specification for "Action"
on

with Q;
with R;
with G;

procedure P is

  package My_G is new G (Q.T);

  procedure Proc (Value : R.T) is null;

  procedure Iter is new My_G.Iteration_G (Proc);

begin
  null;
end;

with R;

package Q is

  type T is new R.T;

end Q;

package R is

  type T is private;

private

  type T is access Integer;

end R;

generic

  type Value_T is private;

package G is

  generic
    with procedure Action (Value : Value_T);
  procedure Iteration_G;

end G;

package body G is

  procedure Iteration_G is null;

end G;

2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sem_ch3.adb (Complete_Private_Subtype): Rework the setting of
	the Etype of the full view for full base types that cannot
	contain any discriminant.  Remove code and comment about it in
	the main path.

From-SVN: r273681
2019-07-22 13:57:26 +00:00
Ed Schonberg
a517030d8b [Ada] Type inconsistency in floating_point type declarations
This patch fixes an inconsistency in the typing of the bounds of a
floting point type declaration, when some bound is given by a dtatic
constant of an explicit type, instead of a real literal, Previous to
this patch the bound of the type retained the given type, leading to
spurious errors in Codepeer.

2019-07-22  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* sem_ch3.adb (Convert_Bound): Subsidiary of
	Floating_Point_Type_Declaration, to handle properly range
	specifications with bounds that may include static constants of
	a given type rather than real literals.

From-SVN: r273680
2019-07-22 13:57:22 +00:00
Eric Botcazou
2c26d262eb [Ada] Further fix non-stored discriminant in aggregate for GNATprove
GNATprove expects discriminants appearing in aggregates and their types
to be resolved to stored discriminants.  This extends the machinery that
makes sure this is the case for default initialization expressions so as
to also handle component associations in these expressions.

2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sem_aggr.adb (Rewrite_Bound): Be prepared for discriminals
	too.
	(Rewrite_Range;): Minor tweak.
	(Resolve_Record_Aggregate): For a component with default
	initialization whose expression is an array aggregate, also
	rewrite the bounds of the component associations, if any.

From-SVN: r273679
2019-07-22 13:57:18 +00:00
Gary Dismukes
2418e23139 [Ada] Premature finalization of controlled temporaries in case expressions
The compiler was generating finalization of temporary objects used in
evaluating case expressions for controlled types in cases where the case
statement created by Expand_N_Expression_With_Actions is rewritten as an
if statement. This is fixed by inheriting the From_Condition_Expression
flag from the rewritten case statement.

The test below must generate the following output when executed:

$ main
Xs(1): 1

----

package Test is

   type E is (E1, E2);
   procedure Test (A : in E);

end Test;

----

with Ada.Text_IO;
with Ada.Finalization;

package body Test is

   type T is new Ada.Finalization.Controlled with
      record
         N : Natural := 0;
      end record;

   overriding procedure Finalize (X : in out T) is
   begin
      X.N := 42;
   end Finalize;

   type T_Array is array (Positive range <>) of T;

   function Make_T (N : Natural) return T is
   begin
      return (Ada.Finalization.Controlled with N => N);
   end Make_T;

   X1 : constant T := Make_T (1);
   X2 : constant T := Make_T (2);

   procedure Test (A : in E)
   is
      Xs : constant T_Array := (case A is
                                   when E1 => (1 => X1),
                                   when E2 => (1 => X2));
   begin
      Ada.Text_IO.Put_Line ("Xs(1):" & Natural'Image (Xs (1).N));
   end Test;

end Test;

----

with Test;

procedure Main is
begin
   Test.Test (Test.E1);
end Main;

2019-07-22  Gary Dismukes  <dismukes@adacore.com>

gcc/ada/

	* exp_ch5.adb (Expand_N_Case_Statement): In the case where a
	case statement is rewritten as an equivalent if statement,
	inherit the From_Condition_Expression flag from the case
	statement.

From-SVN: r273678
2019-07-22 13:57:13 +00:00
Eric Botcazou
e7f4682af2 [Ada] Internal error on iterator for limited private discriminated type
This patch further extends the short-circuit, aka optimization, present
in the Check_Constrained_Object procedure used for renaming declarations
to all limited types, so as to prevent type mismatches downstream in
more cases.

2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sem_ch8.adb (Check_Constrained_Object): Further extend the
	special optimization to all limited types.

gcc/testsuite/

	* gnat.dg/iter5.adb, gnat.dg/iter5_pkg.ads: New testcase.

From-SVN: r273677
2019-07-22 13:57:09 +00:00
Eric Botcazou
fd90c80862 [Ada] Fix missing Constraint_Error for Enum_Val attribute
This fixes an old issue involving the Enum_Val attribute: it does not
always raise a Constraint_Error exception when the specified value is
not valid for the enumeration type (instead a modulo computation is
applied to the value).

2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* exp_attr.adb (Expand_N_Attribute_Reference)
	<Attribute_Enum_Val>: Set No_Truncation on the
	N_Unchecked_Type_Conversion built around the argument passed to
	the attribute.

gcc/testsuite/

	* gnat.dg/enum_val1.adb: New testcase.

From-SVN: r273676
2019-07-22 13:57:04 +00:00
Nicolas Roche
7ddc639b77 [Ada] Ensure meaningless digits in a string are discarded
2019-07-22  Nicolas Roche  <roche@adacore.com>

gcc/ada/

	* libgnat/s-valrea.adb (Scan_Real): Ignore non significative
	digits to avoid converging to infinity in some cases.

gcc/testsuite/

	* gnat.dg/float_value1.adb: New testcase.

From-SVN: r273675
2019-07-22 13:56:59 +00:00
Eric Botcazou
52860cc145 [Ada] Fix wrong assumption on bounds in GNAT.Encode_String
This fixes a couple of oversights in the GNAT.Encode_String package,
whose effect is to assume that all the strings have a lower bound of 1.

2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* libgnat/g-encstr.adb (Encode_Wide_String): Fix oversight.
	(Encode_Wide_Wide_String): Likewise.

gcc/testsuite/

	* gnat.dg/encode_string1.adb, gnat.dg/encode_string1_pkg.adb,
	gnat.dg/encode_string1_pkg.ads: New testcase.

From-SVN: r273674
2019-07-22 13:56:55 +00:00
Eric Botcazou
f3d2fbfdb8 [Ada] Fix spurious loop warning for function with Out parameter
The compiler gives a spurious warning about a possible infinite while
loop whose condition contains a call to a function that takes an Out or
In/Out parameter and whose actual is a variable that is not modified in
the loop, because it still thinks that functions can only have In
parameters.

2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* sem_warn.adb (Find_Var): Bail out for a function call with an
	Out or In/Out parameter.

gcc/testsuite/

	* gnat.dg/warn23.adb: New testcase.

From-SVN: r273673
2019-07-22 13:56:50 +00:00
Nicolas Roche
1a79e03b80 [Ada] Ensure Ctrl-C is not emited on terminated processes
Due to the reuse policy of PID on Windows. Sending a Ctrl-C to a dead
process might result in a Ctrl-C sent to the wrong process. The check is
also implemented on Unix platforms and avoid unecessary waits.

2019-07-22  Nicolas Roche  <roche@adacore.com>

gcc/ada/

	* terminals.c (__gnat_tty_waitpid): Support both blocking and
	not blocking mode.
	* libgnat/g-exptty.ads (Is_Process_Running): New function.
	* libgnat/g-exptty.adb (Close): Don't try to interrupt/terminate
	a process if it is already dead.

From-SVN: r273672
2019-07-22 13:56:45 +00:00
Ed Schonberg
4123b47342 [Ada] Incorrect values in conversion from fixed-point subtype with 'Small
This patch fixes incorrect computations involving a fixed-point subtype
whose parent type has an aspect specification for 'Small.

Executing the following:

   gnatmake -q conv
   ./conv

must yield:

   9000.000000
    9.00000000000000E+03
    9000.000000
    9.00000000000000E+03
    9.00000000000000E+03
    9.00000000000000E+03
    9.00000000000000E+03
    9.00000000000000E+03

----
with Text_IO; use Text_IO;
procedure Conv is
  V_P : constant := 10.0 ** (-6);
  M_V : constant := 9000.0;
  N_V : constant := -9000.0;
  type V_T is delta V_P range N_V .. M_V  with Small => V_P;
  subtype S_T is V_T range 0.0 .. M_V;

  function Convert (Input : in S_T) return Long_Float is
  begin
    Put_Line (Input'Img);
    Put_Line (Long_Float'Image (Long_Float (Input)));
    return Long_Float (Input);
  end Convert;

begin

  declare
    Var_S : constant S_T := S_T'Last;
    Output : constant Long_Float := Convert (Var_S);
  begin
    Put_Line (Long_Float'Image (Convert (Var_S)));
    Put_Line (Long_Float'Image (Long_Float (Var_S)));
    Put_Line (Output'Img);
  end;

  Put_Line (Long_Float'Image (Long_Float (S_T'Last)));

end Conv;

2019-07-22  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* freeze.adb (Freeze_Fixed_Point_Type):  When freezing a
	fixed-point subtype, check whether the parent type declarastion
	includes an aspect specification for the 'Small type attribute,
	and inherit the specified value.

From-SVN: r273671
2019-07-22 13:56:40 +00:00
Javier Miranda
2fdc20b65c [Ada] Crash in C++ constructor without external and link name
The compiler blows up processing the declaration of a tagged type
variable that has a C++ constructor without external or link name. After
this patch the frontend reports an error.

2019-07-22  Javier Miranda  <miranda@adacore.com>

gcc/ada/

	* freeze.adb (Freeze_Subprogram): Check that C++ constructors
	must have external or link name.

gcc/testsuite/

	* gnat.dg/cpp_constructor2.adb: New testcase.

From-SVN: r273670
2019-07-22 13:56:36 +00:00
Ed Schonberg
0af66bdce0 [Ada] Spurious warning about a useless assignment
This patch removes a spurious warning about a useless assignment, when a
composite object is the target of an assignment and is an actual for an
out parameter in a subsewuent call, and there is an intervening use of
the object as the prefix of a selected component in an intervening
operation.

2019-07-22  Ed Schonberg  <schonberg@adacore.com>

gcc/ada/

	* sem_res.adb (Resolve_Selected_Component): If the prefix has a
	deferred reference, generate the correct reference now, to
	indicate that the previous assignment is used.  This prevents
	spurious warnings on useless assignments when compiling with all
	warnings enabled. when there is a subsequent call in the same
	stqtement list, in which the prefix of the selected component is
	the actual for an out parameter.

gcc/testsuite/

	* gnat.dg/warn22.adb: New testcase.

From-SVN: r273669
2019-07-22 13:56:31 +00:00
Eric Botcazou
c961d8205b [Ada] Fix internal error on array slice in loop and Loop_Invariant
This fixes an internal error caused by the presence of an Itype in a
wrong scope.  This Itype is created for an array slice present in the
condition of a while loop whose body also contains a pragma
Loop_Invariant, initially in the correct scope but then relocated into a
function created for the pragma.

2019-07-22  Eric Botcazou  <ebotcazou@adacore.com>

gcc/ada/

	* exp_attr.adb (Expand_Loop_Entry_Attribute): Copy the condition
	of a while loop instead of simply relocating it.

gcc/testsuite/

	* gnat.dg/loop_invariant1.adb, gnat.dg/loop_invariant1.ads: New
	testcase.

From-SVN: r273668
2019-07-22 13:56:26 +00:00
Richard Biener
8801ca5c28 re PR tree-optimization/91221 (ICE in get_int_cst_ext_nunits, at tree.c:1299 since r273548)
2019-07-22  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/91221
	* tree-ssa-sccvn.c (vn_reference_lookup_3): Appropriately
	restrict partial-def handling of empty constructors and
	memset to refs with known offset.

	* g++.dg/pr91221.C: New testcase.

From-SVN: r273667
2019-07-22 11:18:55 +00:00
Jan Beulich
ff8f129bc2 x86/AVX512: improve generated code for bit-wise negation of vectors of integers
NOT on vectors of integers does not require loading a constant vector of
all ones into a register - VPTERNLOG can be used here (and could/should
be further used to carry out other binary and ternary logical operations
which don't have a special purpose instruction).

gcc/
2019-07-22  Jan Beulich  <jbeulich@suse.com>

	* config/i386/sse.md (ternlogsuffix): New.
	(one_cmpl<mode>2): Don't force CONSTM1_RTX into a register when
	AVX512F is in use.
	(<mask_codefor>one_cmpl<mode>2<mask_name>): New.

From-SVN: r273663
2019-07-22 08:07:29 +00:00
Martin Liska
a861990d21 Do not emit __gnu_lto_v1 symbol.
2019-07-22  Martin Liska  <mliska@suse.cz>

	* config/avr/avr.c (avr_asm_output_aligned_decl_common): Update
	comment.
	* toplev.c (compile_file): Do not emit __gnu_lto_v1 symbol.
2019-07-22  Martin Liska  <mliska@suse.cz>

	* config/pa/stublib.c: Remove stub symbol __gnu_lto_v1.
	* config/pa/t-stublib: Likewise.
2019-07-22  Martin Liska  <mliska@suse.cz>

	* simple-object-elf.c (simple_object_elf_copy_lto_debug_sections):
	Do not search for gnu_lto_v1, but search for first '\0'.

From-SVN: r273662
2019-07-22 07:34:47 +00:00
Martin Liska
d1caf05a89 Simplify LTO section format.
2019-07-22  Martin Liska  <mliska@suse.cz>

	* lto-section-in.c (lto_get_section_data):
	Use new function get_compression.
	* lto-streamer-out.c (produce_lto_section): Use
	set_compression to encode compression algorithm.
	* lto-streamer.h (struct lto_section): Do not
	use bitfields in the format.

From-SVN: r273661
2019-07-22 07:34:32 +00:00
Martin Liska
2df89b66f1 Make a warning for -Werror=wrong-language (PR driver/91172).
2019-07-22  Martin Liska  <mliska@suse.cz>

	PR driver/91172
	* opts-common.c (decode_cmdline_option): Decode
	argument of -Werror and check it for a wrong language.
	* opts-global.c (complain_wrong_lang): Remove such case.
2019-07-22  Martin Liska  <mliska@suse.cz>

	PR driver/91172
	* gcc.dg/pr91172.c: New test.

From-SVN: r273660
2019-07-22 07:34:10 +00:00
Claudiu Zissulescu
4be6c9b9a2 [ARC] Fix emitting TLS symbols.
When storing a TLS symbol to memory, always use an intermediate register to load it.

gcc/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

	* config/arc/arc.c (prepare_move_operands): Always use an
	intermediate register when storing a TLS symbols.

gcc/
xxxx-xx-xx  Claudiu Zissulescu  <claziss@synopsys.com>

	* gcc/testsuite/gcc.target/arc/tls-2.c: New test.
	* gcc/testsuite/gcc.target/arc/tls-3.c: Likewise.

From-SVN: r273657
2019-07-22 09:06:37 +02:00
GCC Administrator
9e23d3bb28 Daily bump.
From-SVN: r273656
2019-07-22 00:16:23 +00:00
Marek Polacek
33c4306928 re PR c++/67853 (decltype of parenthesized xvalue does not correctly yield rvalue-reference)
PR c++/67853
	* g++.dg/cpp0x/decltype72.C: New test.

From-SVN: r273652
2019-07-21 21:20:27 +00:00
Stafford Horne
575ce89342 or1k: only force reg for immediates
The force_reg in or1k_expand_compare is hard coded for SImode, which is fine as
this used to only be used on SI expands.  However, with FP support this will
cause issues.  In general we should only force the right hand operand to a
register if its an immediate.  This patch adds an condition to check for that.

gcc/ChangeLog:

	* config/or1k/or1k.c (or1k_expand_compare): Check for int before
	force_reg.

From-SVN: r273651
2019-07-21 21:02:54 +00:00
Stafford Horne
44080af98e or1k: Initial support for FPU
This adds support for OpenRISC hardware floating point instructions.
This is enabled with the -mhard-float option.

Double-prevision floating point operations work using register pairing as
specified in: https://openrisc.io/proposals/orfpx64a32.  This has just been
added in the OpenRISC architecture specification 1.3.
This is enabled with the -mdouble-float option.

Not all architectures support unordered comparisons so an option,
-munordered-float is added.

Currently OpenRISC does not support sf/df or df/sf conversions, but this has
also just been added in architecture specification 1.3.

gcc/ChangeLog:

	* config.gcc (or1k*-*-*): Add mhard-float, mdouble-float, msoft-float
	and munordered-float validations.
	* config/or1k/constraints.md (d): New register constraint.
	* config/or1k/predicates.md (fp_comparison_operator): New.
	* config/or1k/or1k.c (or1k_print_operand): Add support for printing 'd'
	operands.
	(or1k_expand_compare): Normalize unordered comparisons.
	* config/or1k/or1k.h (reg_class): Define DOUBLE_REGS.
	(REG_CLASS_NAMES): Add "DOUBLE_REGS".
	(REG_CLASS_CONTENTS): Add contents for DOUBLE_REGS.
	* config/or1k/or1k.md (type): Add fpu.
	(fpu): New instruction reservation.
	(F, f, fr, fi, FI, FOP, fop): New.
	(<fop><F:mode>3): New ALU instruction definition.
	(float<fi><F:mode>2): New conversion instruction definition.
	(fix_trunc<F:mode><fi>2): New conversion instruction definition.
	(fpcmpcc): New code iterator.
	(*sf_fp_insn): New instruction definition.
	(cstore<F:mode>4): New expand definition.
	(cbranch<F:mode>4): New expand definition.
	* config/or1k/or1k.opt (msoft-float, mhard-float, mdouble-float,
	munordered-float): New options.
	* doc/invoke.texi: Document msoft-float, mhard-float, mdouble-float and
	munordered-float.

From-SVN: r273650
2019-07-21 21:01:59 +00:00
Stafford Horne
1e2e81c1a3 or1k: Add mrori option, fix option docs
gcc/ChangeLog:

	* config.gcc (or1k*-*-*): Add mrori and mror to validation.
	* doc/invoke.texi (OpenRISC Options): Add mrori option, rewrite all
	documenation to be more clear.
	* config/or1k/elf.opt (mboard=, mnewlib): Rewrite documentation to be
	more clear.
	* config/or1k/or1k.opt (mrori): New option.
	(mhard-div, msoft-div, mhard-mul, msoft-mul, mcmov, mror, msext,
	msfimm, mshftimm): Rewrite documentation to be more clear.
	* config/or1k/or1k.md (insn_support): Add ror and rori.
	(enabled): Add conditions for ror and rori.
	(rotrsi3): Replace condition for shftimm with ror and rori.

gcc/testsuite/ChangeLog:

	* gcc.target/or1k/ror-4.c: New file.
	* gcc.target/or1k/shftimm-1.c: Update test from rotate to shift
	as the shftimm option no longer controls rotate.

From-SVN: r273649
2019-07-21 21:00:47 +00:00
Stafford Horne
9c0dba7c45 or1k: Fix issues with msoft-div
Fixes bad assembly logic with software divide as reported by Richard Selvaggi.
Also, add a basic test to verify the soft math works when enabled.

gcc/testsuite/ChangeLog:

	PR target/90362
	* gcc.target/or1k/div-mul-3.c: New test.

libgcc/ChangeLog:

	PR target/90362
	* config/or1k/lib1funcs.S (__udivsi3): Change l.sfeqi
	to l.sfeq and l.sfltsi to l.sflts equivalents as the immediate
	instructions are not available on every processor.  Change a
	l.bnf to l.bf to fix logic issue.

From-SVN: r273648
2019-07-21 20:59:50 +00:00
Stafford Horne
2e92185a03 or1k: Fix code quality for volatile memory loads
Volatile memory does not match the memory_operand predicate.  This
causes extra extend/mask instructions instructions when reading
from volatile memory.  On OpenRISC loading volatile memory can be
treated the same as regular memory loads which supports combined
sign/zero extends.  Fixing this eliminates the need for extra
extend/mask instructions.

This also adds a test provided by Richard Selvaggi which uncovered the
issue while we were looking into another issue.

gcc/ChangeLog:

	PR target/90363
	* config/or1k/or1k.md (zero_extend<mode>si2): Update predicate.
	(extend<mode>si2): Update predicate.
	* gcc/config/or1k/predicates.md (volatile_mem_operand): New.
	(reg_or_mem_operand): New.

gcc/testsuite/ChangeLog:

	PR target/90363
	* gcc.target/or1k/swap-1.c: New test.
	* gcc.target/or1k/swap-2.c: New test.

From-SVN: r273647
2019-07-21 20:58:54 +00:00
Iain Sandoe
48df93911a [PPC] Fix bootstrap for non-SVR4 targets.
The recent change to move code into the new rs6000-call.c file is missing a
default value for the TARGET_NO_PROTOTYPE value (which only affects targets
that don’t include svr4.h).  Fixed by moving the fallback setting from
rs6000.c (which has no uses now) to rs6000-call.c.

2019-07-21  Iain Sandoe  <iain@sandoe.co.uk>

	* config/rs6000/rs6000.c (TARGET_NO_PROTOTYPE): Move from here...
	* config/rs6000/rs6000-call.c: ... to here.

From-SVN: r273646
2019-07-21 20:15:00 +00:00
Thomas Koenig
c37b0163fe re PR libfortran/91030 (Poor performance of I/O -fconvert=big-endian)
2019-07-21  Thomas König  <tkoenig@gcc.gnu.org>

	PR libfortran/91030
	* gfortran.texi (GFORTRAN_FORMATTED_BUFFER_SIZE): Document
	(GFORTRAN_UNFORMATTED_BUFFER_SIZE): Likewise.

2019-07-21  Thomas König  <tkoenig@gcc.gnu.org>

	PR libfortran/91030
	* io/unix.c (BUFFER_SIZE): Delete.
	(BUFFER_FORMATTED_SIZE_DEFAULT): New variable.
	(BUFFER_UNFORMATTED_SIZE_DEFAULT): New variable.
	(unix_stream): Add buffer_size.
	(buf_read): Use s->buffer_size instead of BUFFER_SIZE.
	(buf_write): Likewise.
	(buf_init): Add argument unformatted.  Handle block sizes
	for unformatted vs. formatted, using defaults if provided.
	(fd_to_stream): Add argument unformatted in call to buf_init.
	* libgfortran.h (options_t): Add buffer_size_formatted and
	buffer_size_unformatted.
	* runtime/environ.c (variable_table): Add
	GFORTRAN_UNFORMATTED_BUFFER_SIZE and
	GFORTRAN_FORMATTED_BUFFER_SIZE.

From-SVN: r273643
2019-07-21 15:55:49 +00:00
GCC Administrator
037455d49c Daily bump.
From-SVN: r273640
2019-07-21 00:16:16 +00:00