Re: [PATCH, LRA]: Revert the revert of removal of usless move insns.

2019-04-19 Thread Vladimir Makarov



On 11/21/18 2:33 PM, Uros Bizjak wrote:

Hello!

Before the recent patch to post-reload mode switching, vzeroupper
insertion depended on the existence of the return copy instructions
pair in functions that return a value. The first instruction in the
pair represents a move to a function return hard register, and the
second was a USE of the function return hard register. Sometimes a nop
move was generated (e.g. %eax->%eax) for the first instruction of the
return copy instructions pair and the patch [1] teached LRA  to remove
these useless instructions on the fly.

The removal caused optimize mode switching to trigger the assert,
since the first instruction of a return pair was not found. The
relevant part of the patch was later reverted. With the recent
optimize mode switching patch, this is no longer necessary for
vzeroupper insertion pass, so attached patch reverts the revert.

2018-11-21  Uros Bizjak  

 Revert the revert:
 2013-10-26  Vladimir Makarov  

 Revert:
 2013-10-25  Vladimir Makarov  

 * lra-spills.c (lra_final_code_change): Remove useless move insns.

Patch was bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.

OK for mainline?
Sure, Uros. I support the patch.  But I think it would be wise to 
postpone its committing after releasing GCC-9.  Simply it is hard to 
predict the patch effect to other targets and I would avoid any risk at 
this stage.

[1] https://gcc.gnu.org/ml/gcc-patches/2013-10/msg02208.html

Uros.


New German PO file for 'gcc' (version 9.1-b20190414)

2019-04-19 Thread Translation Project Robot
Hello, gentle maintainer.

This is a message from the Translation Project robot.

A revised PO file for textual domain 'gcc' has been submitted
by the German team of translators.  The file is available at:

https://translationproject.org/latest/gcc/de.po

(This file, 'gcc-9.1-b20190414.de.po', has just now been sent to you in
a separate email.)

All other PO files for your package are available in:

https://translationproject.org/latest/gcc/

Please consider including all of these in your next release, whether
official or a pretest.

Whenever you have a new distribution with a new version number ready,
containing a newer POT file, please send the URL of that distribution
tarball to the address below.  The tarball may be just a pretest or a
snapshot, it does not even have to compile.  It is just used by the
translators when they need some extra translation context.

The following HTML page has been updated:

https://translationproject.org/domain/gcc.html

If any question arises, please contact the translation coordinator.

Thank you for all your work,

The Translation Project robot, in the
name of your translation coordinator.




[PATCH] PR fortran/90166 -- check F2018:C1547

2019-04-19 Thread Steve Kargl
The attached patch fixes PR fortran/91066.  The original 
code was feeding a nonsense string of tokens to the
assembler causing it to toss its cookies.  It turns out
that gfortran was not enforcing the constraint C1547
from Fortran 2018.  The attached patch now performs 
that check.  Regression tested on x86_64-*-freebsd.
OK to commit?

2019-04-19  Steven G. Kargl  

PR fortran/90166
* decl.c (in_module_or_interface): New function to check that the
current state is in a module, submodule, or interface.
(gfc_match_prefix): Use it.

PR fortran/90166
* gfortran.dg/submodule_22.f08: Add additional dg-error comments.

-- 
Steve
Index: gcc/fortran/decl.c
===
--- gcc/fortran/decl.c	(revision 270181)
+++ gcc/fortran/decl.c	(working copy)
@@ -6070,7 +6070,29 @@ cleanup:
   return m;
 }
 
+static bool
+in_module_or_interface(void)
+{
+  if (gfc_current_state () == COMP_MODULE
+  || gfc_current_state () == COMP_SUBMODULE 
+  || gfc_current_state () == COMP_INTERFACE)
+return true;
 
+  if (gfc_state_stack->state == COMP_CONTAINS
+  || gfc_state_stack->state == COMP_FUNCTION
+  || gfc_state_stack->state == COMP_SUBROUTINE)
+{
+  gfc_state_data *p;
+  for (p = gfc_state_stack->previous; p ; p = p->previous)
+	{
+	  if (p->state == COMP_MODULE || p->state == COMP_SUBMODULE 
+	  || p->state == COMP_INTERFACE)
+	return true;
+	}
+}
+return false;
+}
+
 /* Match a prefix associated with a function or subroutine
declaration.  If the typespec pointer is nonnull, then a typespec
can be matched.  Note that if nothing matches, MATCH_YES is
@@ -6102,6 +6124,13 @@ gfc_match_prefix (gfc_typespec *ts)
 	{
 	  if (!gfc_notify_std (GFC_STD_F2008, "MODULE prefix at %C"))
 	goto error;
+
+	  if (!in_module_or_interface ())
+	{
+	  gfc_error ("MODULE prefix at %C found outside of a module, "
+			 "submodule, or INTERFACE");
+	  goto error;
+	}
 
 	  current_attr.module_procedure = 1;
 	  found_prefix = true;
Index: gcc/testsuite/gfortran.dg/submodule_22.f08
===
--- gcc/testsuite/gfortran.dg/submodule_22.f08	(revision 270181)
+++ gcc/testsuite/gfortran.dg/submodule_22.f08	(working copy)
@@ -40,8 +40,10 @@ end
 
 submodule (mtop:submod:subsubmod) subsubsubmod ! { dg-error "Syntax error in SUBMODULE statement" }
 contains
-  module subroutine sub3
-r = 2.0
-s = 2.0
-  end subroutine sub3
+  module subroutine sub3  ! { dg-error "found outside of a module" }
+r = 2.0   ! { dg-error "Unexpected assignment" }
+s = 2.0   ! { dg-error "Unexpected assignment" }
+  end subroutine sub3 ! { dg-error "Expecting END PROGRAM statement" }
 end
+
+found outside of a module


Re: [PATCH 3/3] Fix condition for std::variant to be copy constructible

2019-04-19 Thread Jonathan Wakely

On 17/04/19 17:12 +0100, Jonathan Wakely wrote:

The standard says the std::variant copy constructor is defined as
deleted unless all alternative types are copy constructible, but we were
making it also depend on move constructible.


It turns out that was changed by https://wg21.link/lwg2904 and we're
missing the rest of that resolution too. Patch coming soon ...




Re: [PATCH] Delegate PSTL configuration to pstl/pstl_config.h

2019-04-19 Thread Jonathan Wakely

On 18/04/19 17:02 -0700, Thomas Rodgers wrote:


 * include/bits/c++config: Remove explicit PSTL configuration
 macros and use definitions from .


OK for trunk, thanks.




Re: [PATCH] Cleanup algorithm implementations

2019-04-19 Thread Jonathan Wakely

On 19/04/19 11:59 -0700, Thomas Rodgers wrote:

* include/pstl/glue_algorithm_impl.h (stable_sort): Forward
   execution policy.
(mismatch): Forward execution policy.
(equal): Qualify call to std::equal().
(partial_sort): Forward execution policy.
(inplace_merge): Forward execution policy.


OK for trunk, thanks.



Re: [PATCH] Cleanup algorithm implementations

2019-04-19 Thread Ville Voutilainen
On Fri, 19 Apr 2019 at 22:00, Thomas Rodgers  wrote:
>
> * include/pstl/glue_algorithm_impl.h (stable_sort): Forward
> execution policy.
> (mismatch): Forward execution policy.
> (equal): Qualify call to std::equal().
> (partial_sort): Forward execution policy.
> (inplace_merge): Forward execution policy.


+1, looks good to me.


New German PO file for 'gcc' (version 9.1-b20190414)

2019-04-19 Thread Translation Project Robot
Hello, gentle maintainer.

This is a message from the Translation Project robot.

A revised PO file for textual domain 'gcc' has been submitted
by the German team of translators.  The file is available at:

https://translationproject.org/latest/gcc/de.po

(This file, 'gcc-9.1-b20190414.de.po', has just now been sent to you in
a separate email.)

All other PO files for your package are available in:

https://translationproject.org/latest/gcc/

Please consider including all of these in your next release, whether
official or a pretest.

Whenever you have a new distribution with a new version number ready,
containing a newer POT file, please send the URL of that distribution
tarball to the address below.  The tarball may be just a pretest or a
snapshot, it does not even have to compile.  It is just used by the
translators when they need some extra translation context.

The following HTML page has been updated:

https://translationproject.org/domain/gcc.html

If any question arises, please contact the translation coordinator.

Thank you for all your work,

The Translation Project robot, in the
name of your translation coordinator.




Re: [PATCH, LRA]: Revert the revert of removal of usless move insns.

2019-04-19 Thread H.J. Lu
On Wed, Nov 21, 2018 at 1:45 PM Vladimir Makarov  wrote:
>
>
>
> On 11/21/2018 02:33 PM, Uros Bizjak wrote:
> > Hello!
> >
> > Before the recent patch to post-reload mode switching, vzeroupper
> > insertion depended on the existence of the return copy instructions
> > pair in functions that return a value. The first instruction in the
> > pair represents a move to a function return hard register, and the
> > second was a USE of the function return hard register. Sometimes a nop
> > move was generated (e.g. %eax->%eax) for the first instruction of the
> > return copy instructions pair and the patch [1] teached LRA  to remove
> > these useless instructions on the fly.
> >
> > The removal caused optimize mode switching to trigger the assert,
> > since the first instruction of a return pair was not found. The
> > relevant part of the patch was later reverted. With the recent
> > optimize mode switching patch, this is no longer necessary for
> > vzeroupper insertion pass, so attached patch reverts the revert.
> >
> > 2018-11-21  Uros Bizjak  
> >
> >  Revert the revert:
> >  2013-10-26  Vladimir Makarov  
> >
> >  Revert:
> >  2013-10-25  Vladimir Makarov  
> >
> >  * lra-spills.c (lra_final_code_change): Remove useless move insns.
> >
> > Patch was bootstrapped and regression tested on x86_64-linux-gnu {,-m32}.
> >
> > OK for mainline?
> Sure. Thank you, Uros.
> > [1] https://gcc.gnu.org/ml/gcc-patches/2013-10/msg02208.html
> >
> > Uros.
>

This caused:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=90178

-- 
H.J.


[PATCH] Cleanup algorithm implementations

2019-04-19 Thread Thomas Rodgers
* include/pstl/glue_algorithm_impl.h (stable_sort): Forward
execution policy.
(mismatch): Forward execution policy.
(equal): Qualify call to std::equal().
(partial_sort): Forward execution policy.
(inplace_merge): Forward execution policy.

>From ce0ae4e065692da6d0dcdb0f7ba5d2f3db4d3ec7 Mon Sep 17 00:00:00 2001
From: Thomas Rodgers 
Date: Fri, 19 Apr 2019 11:16:44 -0700
Subject: [PATCH] Cleanup algorithm implementations

	* include/pstl/glue_algorithm_impl.h (stable_sort): Forward
execution policy.
	(mismatch): Forward execution policy.
	(equal): Qualify call to std::equal().
	(partial_sort): Forward execution policy.
	(inplace_merge): Forward execution policy.
---
 libstdc++-v3/include/pstl/glue_algorithm_impl.h | 14 +++---
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/libstdc++-v3/include/pstl/glue_algorithm_impl.h b/libstdc++-v3/include/pstl/glue_algorithm_impl.h
index db5ef2b76f5..1c4a3511a48 100644
--- a/libstdc++-v3/include/pstl/glue_algorithm_impl.h
+++ b/libstdc++-v3/include/pstl/glue_algorithm_impl.h
@@ -674,7 +674,7 @@ __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, void>
 stable_sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAccessIterator __last)
 {
 typedef typename std::iterator_traits<_RandomAccessIterator>::value_type _InputType;
-std::stable_sort(__exec, __first, __last, std::less<_InputType>());
+std::stable_sort(std::forward<_ExecutionPolicy>(__exec), __first, __last, std::less<_InputType>());
 }
 
 // [mismatch]
@@ -696,8 +696,8 @@ __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, std::pair<_Fo
 mismatch(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
  _BinaryPredicate __pred)
 {
-return std::mismatch(__exec, __first1, __last1, __first2, std::next(__first2, std::distance(__first1, __last1)),
- __pred);
+return std::mismatch(std::forward<_ExecutionPolicy>(__exec), __first1, __last1, __first2,
+			 std::next(__first2, std::distance(__first1, __last1)), __pred);
 }
 
 template 
@@ -757,8 +757,8 @@ __pstl::__internal::__enable_if_execution_policy<_ExecutionPolicy, bool>
 equal(_ExecutionPolicy&& __exec, _ForwardIterator1 __first1, _ForwardIterator1 __last1, _ForwardIterator2 __first2,
   _ForwardIterator2 __last2)
 {
-return equal(std::forward<_ExecutionPolicy>(__exec), __first1, __last1, __first2, __last2,
- __pstl::__internal::__pstl_equal());
+return std::equal(std::forward<_ExecutionPolicy>(__exec), __first1, __last1, __first2, __last2,
+  __pstl::__internal::__pstl_equal());
 }
 
 // [alg.move]
@@ -798,7 +798,7 @@ partial_sort(_ExecutionPolicy&& __exec, _RandomAccessIterator __first, _RandomAc
  _RandomAccessIterator __last)
 {
 typedef typename iterator_traits<_RandomAccessIterator>::value_type _InputType;
-std::partial_sort(__exec, __first, __middle, __last, std::less<_InputType>());
+std::partial_sort(std::forward<_ExecutionPolicy>(__exec), __first, __middle, __last, std::less<_InputType>());
 }
 
 // [partial.sort.copy]
@@ -908,7 +908,7 @@ inplace_merge(_ExecutionPolicy&& __exec, _BidirectionalIterator __first, _Bidire
   _BidirectionalIterator __last)
 {
 typedef typename std::iterator_traits<_BidirectionalIterator>::value_type _InputType;
-std::inplace_merge(__exec, __first, __middle, __last, std::less<_InputType>());
+std::inplace_merge(std::forward<_ExecutionPolicy>(__exec), __first, __middle, __last, std::less<_InputType>());
 }
 
 // [includes]
-- 
2.20.1



Re: [PATCH] PR translation/90118 Missing space between words

2019-04-19 Thread Martin Sebor

On 4/19/19 3:38 AM, Jakub Jelinek wrote:

On Fri, Apr 19, 2019 at 11:28:41AM +0200, Christophe Lyon wrote:

--- a/contrib/check-internal-format-escaping.py
+++ b/contrib/check-internal-format-escaping.py
@@ -58,6 +58,10 @@ for i, l in enumerate(lines):
  print('%s: %s' % (origin, text))
  if re.search("[^%]'", p):
  print('%s: %s' % (origin, text))
+# %< should not be preceded by a non-punctuation
+# %character.
+if re.search("[a-zA-Z0-9]%<", p):
+print('%s: %s' % (origin, text))
  j += 1


I'm not convinced we want this in check-internal-format-escaping.py
exactly because it is too fragile.


I have a patch that adds a -Wformat-diag warning that can detect
some of these kinds of problems.  For cases where the missing space
is intentional it relies on a pair of adjacent directives, as in
"%s%<%>foo" or "%s%s" with the "foo" being an argument.


Instead, we want what David Malcolm has proposed, for GCC 10 some
-Wformat-something (non-default) style warning or even a warning for
all string literals when there is
"str"
" str2"
or
"str"
"str2"


-Wformat-diag doesn't handle this because it runs as part of -Wformat


Basically require if there is a line break between two concatenated string
literals that there is a single space, either at the end of one chunk or
at the beginning of the other one.


...so that would still be a useful feature.

Martin


Re: [Patch, fortran] PR57284 - [OOP] ICE with find_array_spec for polymorphic arrays

2019-04-19 Thread Steve Kargl
On Fri, Apr 19, 2019 at 06:19:00PM +0100, Paul Richard Thomas wrote:
> The part of this patch in resolve.c had essentially already been
> sorted out by Tobias Burnus in comment #2 of the PR. I suspect that he
> must have been put off the trail by the segfault that occurred when
> this was implemented. In the end, the reason for the segfault is quite
> straight forward and comes about because the temporary declarations
> representing class actual arguments cause gfc_conv_component_ref to
> barf, when porcessing the _data component. However, they are amenable
> to gfc_class_data_get and so this is used in the fix.
> 
> Bootstrapped and regtested on FC29/x86_64 - OK for trunk?
> 

Looks good to me.  Where are we in the release cycle?
Do you need release manager approval to apply the 
patch?

-- 
Steve


[Patch, fortran] PR57284 - [OOP] ICE with find_array_spec for polymorphic arrays

2019-04-19 Thread Paul Richard Thomas
The part of this patch in resolve.c had essentially already been
sorted out by Tobias Burnus in comment #2 of the PR. I suspect that he
must have been put off the trail by the segfault that occurred when
this was implemented. In the end, the reason for the segfault is quite
straight forward and comes about because the temporary declarations
representing class actual arguments cause gfc_conv_component_ref to
barf, when porcessing the _data component. However, they are amenable
to gfc_class_data_get and so this is used in the fix.

Bootstrapped and regtested on FC29/x86_64 - OK for trunk?

Paul

2019-04-19  Paul Thomas  

PR fortran/57284
* resolve.c (find_array_spec): If this is a class expression
and the symbol and component array specs are the same, this is
not an error.
*trans-intrinsic.c (gfc_conv_intrinsic_size): If a class symbol
argument, has no namespace, it has come from the interface
mapping and the _data component must be accessed directly.

2019-04-19  Paul Thomas  

PR fortran/57284
* gfortran.dg/class_70.f03
Index: gcc/fortran/resolve.c
===
*** gcc/fortran/resolve.c	(revision 270352)
--- gcc/fortran/resolve.c	(working copy)
*** find_array_spec (gfc_expr *e)
*** 4712,4720 
gfc_array_spec *as;
gfc_component *c;
gfc_ref *ref;
  
if (e->symtree->n.sym->ts.type == BT_CLASS)
! as = CLASS_DATA (e->symtree->n.sym)->as;
else
  as = e->symtree->n.sym->as;
  
--- 4712,4724 
gfc_array_spec *as;
gfc_component *c;
gfc_ref *ref;
+   bool class_as = false;
  
if (e->symtree->n.sym->ts.type == BT_CLASS)
! {
!   as = CLASS_DATA (e->symtree->n.sym)->as;
!   class_as = true;
! }
else
  as = e->symtree->n.sym->as;
  
*** find_array_spec (gfc_expr *e)
*** 4733,4739 
  	c = ref->u.c.component;
  	if (c->attr.dimension)
  	  {
! 	if (as != NULL)
  	  gfc_internal_error ("find_array_spec(): unused as(1)");
  	as = c->as;
  	  }
--- 4737,4743 
  	c = ref->u.c.component;
  	if (c->attr.dimension)
  	  {
! 	if (as != NULL && !(class_as && as == c->as))
  	  gfc_internal_error ("find_array_spec(): unused as(1)");
  	as = c->as;
  	  }
Index: gcc/fortran/trans-intrinsic.c
===
*** gcc/fortran/trans-intrinsic.c	(revision 270352)
--- gcc/fortran/trans-intrinsic.c	(working copy)
*** gfc_conv_intrinsic_size (gfc_se * se, gf
*** 7446,7451 
--- 7446,7453 
tree fncall0;
tree fncall1;
gfc_se argse;
+   gfc_expr *e;
+   gfc_symbol *sym = NULL;
  
gfc_init_se (, NULL);
actual = expr->value.function.actual;
*** gfc_conv_intrinsic_size (gfc_se * se, gf
*** 7453,7464 
if (actual->expr->ts.type == BT_CLASS)
  gfc_add_class_array_ref (actual->expr);
  
argse.data_not_needed = 1;
!   if (gfc_is_class_array_function (actual->expr))
  {
/* For functions that return a class array conv_expr_descriptor is not
  	 able to get the descriptor right.  Therefore this special case.  */
!   gfc_conv_expr_reference (, actual->expr);
argse.expr = gfc_build_addr_expr (NULL_TREE,
  	gfc_class_data_get (argse.expr));
  }
--- 7455,7485 
if (actual->expr->ts.type == BT_CLASS)
  gfc_add_class_array_ref (actual->expr);
  
+   e = actual->expr;
+ 
+   /* These are emerging from the interface mapping, when a class valued
+  function appears as the rhs in a realloc on assign statement, where
+  the size of the result is that of one of the actual arguments.  */
+   if (e->expr_type == EXPR_VARIABLE
+   && e->symtree->n.sym->ns == NULL /* This is distinctive!  */
+   && e->symtree->n.sym->ts.type == BT_CLASS
+   && e->ref && e->ref->type == REF_COMPONENT
+   && strcmp (e->ref->u.c.component->name, "_data") == 0)
+ sym = e->symtree->n.sym;
+ 
argse.data_not_needed = 1;
!   if (gfc_is_class_array_function (e))
  {
/* For functions that return a class array conv_expr_descriptor is not
  	 able to get the descriptor right.  Therefore this special case.  */
!   gfc_conv_expr_reference (, e);
!   argse.expr = gfc_build_addr_expr (NULL_TREE,
! 	gfc_class_data_get (argse.expr));
! }
!   else if (sym && sym->backend_decl)
! {
!   gcc_assert (GFC_CLASS_TYPE_P (TREE_TYPE (sym->backend_decl)));
!   argse.expr = sym->backend_decl;
argse.expr = gfc_build_addr_expr (NULL_TREE,
  	gfc_class_data_get (argse.expr));
  }
Index: gcc/testsuite/gfortran.dg/class_70.f03
===
*** gcc/testsuite/gfortran.dg/class_70.f03	(nonexistent)
--- gcc/testsuite/gfortran.dg/class_70.f03	(working copy)
***
*** 0 
--- 1,38 
+ ! { dg-do run }
+ !
+ ! Test the fix for PR57284 - [OOP] ICE with find_array_spec for polymorphic
+ ! arrays. 

Re: [PATCH] tree-call-cdce: If !HONOR_NANS do not make code with NaNs (PR88055)

2019-04-19 Thread Segher Boessenkool
On Fri, Apr 19, 2019 at 10:15:31AM -0600, Jeff Law wrote:
> On 4/18/19 3:23 PM, Segher Boessenkool wrote:
> > If we don't HONOR_NANS we should not try to use any unordered
> > comparison results.  Best case those will just be optimized away;
> > realistically, they ICE.  For example, the rs6000 backend has some
> > code that specifically checks we never do this.
> > 
> > This patch fixes it.  Bootstrapped and tested on powerpc64-linux
> > {-m32,-m64}.  Is this okay for trunk?
> > 
> > 2019-04-18  Segher Boessenkool  
> > 
> > PR tree-optimization/88055
> > * tree-call-cdce.c (comparison_code_if_no_nans): New function.
> > (gen_one_condition): Use it if !HONOR_NANS.
> ISTM that this should have been marked as a regression since presumably
> at some point we didn't try to eliminate the call and thus wouldn't have
> generated the problematic code and ICE'd.

Yes, I just still don't know how to mark things as regressions.  It's a
GCC 9 regression.

> Thus, OK for gcc-9.

Thanks!


Segher


Re: [PATCH] tree-call-cdce: If !HONOR_NANS do not make code with NaNs (PR88055)

2019-04-19 Thread Jeff Law
On 4/18/19 3:23 PM, Segher Boessenkool wrote:
> If we don't HONOR_NANS we should not try to use any unordered
> comparison results.  Best case those will just be optimized away;
> realistically, they ICE.  For example, the rs6000 backend has some
> code that specifically checks we never do this.
> 
> This patch fixes it.  Bootstrapped and tested on powerpc64-linux
> {-m32,-m64}.  Is this okay for trunk?
> 
> 
> Segher
> 
> 
> 2019-04-18  Segher Boessenkool  
> 
>   PR tree-optimization/88055
>   * tree-call-cdce.c (comparison_code_if_no_nans): New function.
>   (gen_one_condition): Use it if !HONOR_NANS.
ISTM that this should have been marked as a regression since presumably
at some point we didn't try to eliminate the call and thus wouldn't have
generated the problematic code and ICE'd.

Thus, OK for gcc-9.
jeff



libgo patch committed: Define SockaddrDataLink on AIX

2019-04-19 Thread Ian Lance Taylor
This patch by Clément Chigot defines SockaddrDatalink on AIX.  It is
required for the golang.org/x/net repo.  Bootstrapped on
x86_64-pc-linux-gnu.  Committed to mainline.

Ian
Index: gcc/go/gofrontend/MERGE
===
--- gcc/go/gofrontend/MERGE (revision 270434)
+++ gcc/go/gofrontend/MERGE (working copy)
@@ -1,4 +1,4 @@
-ecbd6562aff604b9559f63d714e922a0c9c2a77f
+1d2b98a4af0188f3f1d4a3eaae928e1db8383a63
 
 The first line of this file holds the git revision number of the last
 merge done from the gofrontend repository.
Index: libgo/go/syscall/socket_aix.go
===
--- libgo/go/syscall/socket_aix.go  (revision 270373)
+++ libgo/go/syscall/socket_aix.go  (working copy)
@@ -11,6 +11,7 @@ import "unsafe"
 const SizeofSockaddrInet4 = 16
 const SizeofSockaddrInet6 = 28
 const SizeofSockaddrUnix = 1025
+const SizeofSockaddrDatalink = 128
 
 type RawSockaddrInet4 struct {
Lenuint8
@@ -87,3 +88,26 @@ func GetsockoptIPv6MTUInfo(fd, level, op
err := getsockopt(fd, level, opt, unsafe.Pointer(), )
return , err
 }
+
+type SockaddrDatalink struct {
+   Lenuint8
+   Family uint8
+   Index  uint16
+   Type   uint8
+   Nlen   uint8
+   Alen   uint8
+   Slen   uint8
+   Data   [120]uint8
+   rawRawSockaddrDatalink
+}
+
+type RawSockaddrDatalink struct {
+   Lenuint8
+   Family uint8
+   Index  uint16
+   Type   uint8
+   Nlen   uint8
+   Alen   uint8
+   Slen   uint8
+   Data   [120]uint8
+}


Re: [PATCH] Fix PR90131, wrong-debug

2019-04-19 Thread Jeff Law
On 4/19/19 3:26 AM, Jakub Jelinek wrote:
> On Thu, Apr 18, 2019 at 11:20:32AM +0200, Richard Biener wrote:
>>
>> This fixes another case similar to the fixed PR89892, mergephi
>> via remove_forwarder_block_with_phi caused out-of-date debug
>> binds to become live and thus needs similar treatment as
>> remove_forwarder_block.  Previously it didn't even bother
>> to move debug stmts because the destination always has
>> multiple predecessors.  Now we have to move and reset them.
>>
>> Fixed by factoring out a worker from remove_forwarder_block and
>> using that from remove_forwarder_block_with_phi as well.
>>
>> Bootstrap & regtest running on x86_64-unknown-linux-gnu.
> 
> This regressed quite a few guality tests on both x86_64 and i686:
> +FAIL: gcc.dg/guality/pr54519-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 20 x 
> == 36
> +FAIL: gcc.dg/guality/pr54519-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 20 y 
> == 25
> +FAIL: gcc.dg/guality/pr54519-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 20 z 
> == 6
> +FAIL: gcc.dg/guality/pr54519-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 23 x 
> == 98
> +FAIL: gcc.dg/guality/pr54519-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 23 y 
> == 117
> +FAIL: gcc.dg/guality/pr54519-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 23 z 
> == 8
> +FAIL: gcc.dg/guality/pr54519-2.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  -DPREVENT_OPTIMIZATION line 17 x == 6
> +FAIL: gcc.dg/guality/pr54519-2.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 17 x 
> == 6
> +FAIL: gcc.dg/guality/pr54519-2.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 17 y 
> == 25
> +FAIL: gcc.dg/guality/pr54519-3.c   -O2  -DPREVENT_OPTIMIZATION  line 20 x == 
> 36
> +FAIL: gcc.dg/guality/pr54519-3.c   -O2  -DPREVENT_OPTIMIZATION  line 20 y == 
> 25
> +FAIL: gcc.dg/guality/pr54519-3.c   -O2  -DPREVENT_OPTIMIZATION  line 20 z == 
> 6
> +FAIL: gcc.dg/guality/pr54519-3.c   -O2  -DPREVENT_OPTIMIZATION  line 23 x == 
> 98
> +FAIL: gcc.dg/guality/pr54519-3.c   -O2  -DPREVENT_OPTIMIZATION  line 23 y == 
> 117
> +FAIL: gcc.dg/guality/pr54519-3.c   -O2  -DPREVENT_OPTIMIZATION  line 23 z == 
> 8
> +FAIL: gcc.dg/guality/pr54519-3.c   -O2 -flto -fno-use-linker-plugin 
> -flto-partition=none  -DPREVENT_OPTIMIZATION line 20 x == 36
> +FAIL: gcc.dg/guality/pr54519-3.c   -O2 -flto -fno-use-linker-plugin 
> -flto-partition=none  -DPREVENT_OPTIMIZATION line 23 x == 98
> +FAIL: gcc.dg/guality/pr54519-3.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  -DPREVENT_OPTIMIZATION line 20 x == 36
> +FAIL: gcc.dg/guality/pr54519-3.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  -DPREVENT_OPTIMIZATION line 23 x == 98
> +FAIL: gcc.dg/guality/pr54519-3.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 20 x 
> == 36
> +FAIL: gcc.dg/guality/pr54519-3.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 20 y 
> == 25
> +FAIL: gcc.dg/guality/pr54519-3.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 20 z 
> == 6
> +FAIL: gcc.dg/guality/pr54519-3.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 23 x 
> == 98
> +FAIL: gcc.dg/guality/pr54519-3.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 23 y 
> == 117
> +FAIL: gcc.dg/guality/pr54519-3.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 23 z 
> == 8
> +FAIL: gcc.dg/guality/pr54519-3.c   -Os  -DPREVENT_OPTIMIZATION  line 20 x == 
> 36
> +FAIL: gcc.dg/guality/pr54519-3.c   -Os  -DPREVENT_OPTIMIZATION  line 20 y == 
> 25
> +FAIL: gcc.dg/guality/pr54519-3.c   -Os  -DPREVENT_OPTIMIZATION  line 20 z == 
> 6
> +FAIL: gcc.dg/guality/pr54519-3.c   -Os  -DPREVENT_OPTIMIZATION  line 23 x == 
> 98
> +FAIL: gcc.dg/guality/pr54519-3.c   -Os  -DPREVENT_OPTIMIZATION  line 23 y == 
> 117
> +FAIL: gcc.dg/guality/pr54519-3.c   -Os  -DPREVENT_OPTIMIZATION  line 23 z == 
> 8
> +FAIL: gcc.dg/guality/pr54519-4.c   -O2  -DPREVENT_OPTIMIZATION  line 17 x == 
> 6
> +FAIL: gcc.dg/guality/pr54519-4.c   -O2  -DPREVENT_OPTIMIZATION  line 17 y == 
> 25
> +FAIL: gcc.dg/guality/pr54519-4.c   -O2 -flto -fno-use-linker-plugin 
> -flto-partition=none  -DPREVENT_OPTIMIZATION line 17 x == 6
> +FAIL: gcc.dg/guality/pr54519-4.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  -DPREVENT_OPTIMIZATION line 17 x == 6
> +FAIL: gcc.dg/guality/pr54519-4.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 17 x 
> == 6
> +FAIL: gcc.dg/guality/pr54519-4.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 17 y 
> == 25
> +FAIL: gcc.dg/guality/pr54519-4.c   -Os  -DPREVENT_OPTIMIZATION  line 17 x == 
> 6
> +FAIL: gcc.dg/guality/pr54519-4.c   -Os  -DPREVENT_OPTIMIZATION  line 17 y == 
> 25
> +FAIL: gcc.dg/guality/pr54519-5.c   -O2 -flto -fuse-linker-plugin 
> -fno-fat-lto-objects  -DPREVENT_OPTIMIZATION line 17 x == 6
> +FAIL: gcc.dg/guality/pr54519-5.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 17 x 
> == 6
> +FAIL: gcc.dg/guality/pr54519-5.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 17 y 
> == 25
> +FAIL: gcc.dg/guality/pr54519-6.c   -Os  -DPREVENT_OPTIMIZATION  line 11 x == 
> 2
> +FAIL: gcc.dg/guality/pr54519-6.c   -Os  -DPREVENT_OPTIMIZATION  line 11 y == > 0
> +FAIL: gcc.dg/guality/pr68860-1.c   -O2  

Fwd:

2019-04-19 Thread C.R. Chafer
  Gcc


https://www.mdmgames.com/dreamweddingdemo/trk.aspx?t=outbound=http://tiny.cc/jxwe5y





-- Forwarded message -
From: crcha...@yahoo.co.uk 
Date: Friday, April 19, 2019 04:23:36 PM
Subject: 
To:  





http://www.bing.com/search?q==DDKYZRVTSTV=GRHBQVUGHPRRFER

Re: [PATCH] PR translation/90118 Missing space between words

2019-04-19 Thread Christophe Lyon
On Fri, 19 Apr 2019 at 11:57, Richard Sandiford
 wrote:
>
> Christophe Lyon  writes:
> > On Fri, 19 Apr 2019 at 11:23, Richard Sandiford
> >  wrote:
> >>
> >> Christophe Lyon  writes:
> >> > On Thu, 18 Apr 2019 at 18:25, Richard Sandiford
> >> >  wrote:
> >> >>
> >> >> Christophe Lyon  writes:
> >> >> > Hi,
> >> >> >
> >> >> > This patch adds the missing space before '%<' in
> >> >> > config/aarch64/aarch64.c and gcc/cp/call.c. It also updates the
> >> >> > check-internal-format-escaping.py checker to warn about such cases.
> >> >> >
> >> >> > OK?
> >> >> >
> >> >> > Christophe
> >> >> >
> >> >> > diff --git a/contrib/check-internal-format-escaping.py 
> >> >> > b/contrib/check-internal-format-escaping.py
> >> >> > index aac4f9e..9c62586 100755
> >> >> > --- a/contrib/check-internal-format-escaping.py
> >> >> > +++ b/contrib/check-internal-format-escaping.py
> >> >> > @@ -58,6 +58,10 @@ for i, l in enumerate(lines):
> >> >> >  print('%s: %s' % (origin, text))
> >> >> >  if re.search("[^%]'", p):
> >> >> >  print('%s: %s' % (origin, text))
> >> >> > +# %< should not be preceded by a non-punctuation
> >> >> > +# %character.
> >> >> > +if re.search("[a-zA-Z0-9]%<", p):
> >> >> > +print('%s: %s' % (origin, text))
> >> >> >  j += 1
> >> >> >
> >> >> >  origin = None
> >> >> > diff --git a/gcc/config/aarch64/aarch64.c 
> >> >> > b/gcc/config/aarch64/aarch64.c
> >> >> > index 9be7548..b66071f 100644
> >> >> > --- a/gcc/config/aarch64/aarch64.c
> >> >> > +++ b/gcc/config/aarch64/aarch64.c
> >> >> > @@ -11483,7 +11483,7 @@ aarch64_override_options_internal (struct 
> >> >> > gcc_options *opts)
> >> >> >if (aarch64_stack_protector_guard == SSP_GLOBAL
> >> >> >&& opts->x_aarch64_stack_protector_guard_offset_str)
> >> >> >  {
> >> >> > -  error ("incompatible options 
> >> >> > %<-mstack-protector-guard=global%> and"
> >> >> > +  error ("incompatible options 
> >> >> > %<-mstack-protector-guard=global%> and "
> >> >> >"%<-mstack-protector-guard-offset=%s%>",
> >> >> >aarch64_stack_protector_guard_offset_str);
> >> >> >  }
> >> >> > diff --git a/gcc/cp/call.c b/gcc/cp/call.c
> >> >> > index 9582345..8f3d019 100644
> >> >> > --- a/gcc/cp/call.c
> >> >> > +++ b/gcc/cp/call.c
> >> >> > @@ -3614,16 +3614,16 @@ print_z_candidate (location_t loc, const char 
> >> >> > *msgstr,
> >> >> >  {
> >> >> >cloc = loc;
> >> >> >if (candidate->num_convs == 3)
> >> >> > - inform (cloc, "%s%<%D(%T, %T, %T)%> ", msg, fn,
> >> >> > + inform (cloc, "%s %<%D(%T, %T, %T)%> ", msg, fn,
> >> >> >   candidate->convs[0]->type,
> >> >> >   candidate->convs[1]->type,
> >> >> >   candidate->convs[2]->type);
> >> >> >else if (candidate->num_convs == 2)
> >> >> > - inform (cloc, "%s%<%D(%T, %T)%> ", msg, fn,
> >> >> > + inform (cloc, "%s %<%D(%T, %T)%> ", msg, fn,
> >> >> >   candidate->convs[0]->type,
> >> >> >   candidate->convs[1]->type);
> >> >> >else
> >> >> > - inform (cloc, "%s%<%D(%T)%> ", msg, fn,
> >> >> > + inform (cloc, "%s %<%D(%T)%> ", msg, fn,
> >> >> >   candidate->convs[0]->type);
> >> >> >  }
> >> >> >else if (TYPE_P (fn))
> >> >>
> >> >> I don't think this is right, since msg already has a space where 
> >> >> necessary:
> >> >>
> >> >>   const char *msg = (msgstr == NULL
> >> >>  ? ""
> >> >>  : ACONCAT ((msgstr, " ", NULL)));
> >> >>
> >> >> Adding something like "(^| )[^% ]*" to the start of the regexp might
> >> >> avoid that, at the risk of letting through real problems.
> >> >>
> >> >
> >> > Yes, that would miss the problem in aarch64.c.
> >>
> >> Are you sure?  It works for me.
> >>
> > It didn't work for me, with that change the line didn't report any error.
>
> Hmm, OK.  With:
>
> if re.search("(^| )[^% ]*[a-zA-Z0-9]%<", p):
> print('%s: %s' % (origin, text))
>
> and a tree without your aarch64.c fix, I get:
>
> #: config/aarch64/aarch64.c:11486: incompatible options 
> %<-mstack-protector-guard=global%> and%<-mstack-"
>
> but no warning about the cp/call.c stuff.
>

This works for me too. I don't know what I got wrong in my previous check.

So... what should I do? Apply you patch, or revert mine according to
Jakub's comments?
Improving the checker now would help fixing these annoying things
without waiting for gcc-10

Christophe

> Thanks,
> Richard


Re: [PATCH] Fix tree-outof-ssa.c ICE with vector types (PR middle-end/90139)

2019-04-19 Thread Richard Biener
On April 19, 2019 10:52:50 AM GMT+02:00, Jakub Jelinek  wrote:
>Hi!
>
>We use SSA_NAMEs even for vector types which have BLKmode, e.g. neither
>x86
>nor sparc targets have V1SFmode and thus such VECTOR_TYPEs have
>BLKmode.
>In some cases outof ssa subpass calls get_temp_reg, but that will
>gen_reg_rtx (BLKmode) in that case, which is something that doesn't
>really
>work.  The following patch fixes it by using a stack slot for the
>BLKmode
>SSA_NAMEs instead.
>
>Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

OK. 

Richard. 

>2019-04-19  Jakub Jelinek  
>
>   PR middle-end/90139
>   * tree-outof-ssa.c (get_temp_reg): If reg_mode is BLKmode, return
>   assign_temp instead of gen_reg_rtx.
>
>   * gcc.c-torture/compile/pr90139.c: New test.
>
>--- gcc/tree-outof-ssa.c.jj2019-03-19 07:46:45.136798336 +0100
>+++ gcc/tree-outof-ssa.c   2019-04-18 15:40:33.801698542 +0200
>@@ -653,6 +653,8 @@ get_temp_reg (tree name)
>   tree type = TREE_TYPE (name);
>   int unsignedp;
>   machine_mode reg_mode = promote_ssa_mode (name, );
>+  if (reg_mode == BLKmode)
>+return assign_temp (type, 0, 0);
>   rtx x = gen_reg_rtx (reg_mode);
>   if (POINTER_TYPE_P (type))
> mark_reg_pointer (x, TYPE_ALIGN (TREE_TYPE (type)));
>--- gcc/testsuite/gcc.c-torture/compile/pr90139.c.jj   2019-04-18
>15:39:16.121974160 +0200
>+++ gcc/testsuite/gcc.c-torture/compile/pr90139.c  2019-04-18
>15:37:08.947062569 +0200
>@@ -0,0 +1,20 @@
>+/* PR middle-end/90139 */
>+
>+typedef float __attribute__((vector_size (sizeof (float V;
>+void bar (int, V *);
>+int l;
>+
>+void
>+foo (void)
>+{
>+  V n, b, o;
>+  while (1)
>+switch (l)
>+  {
>+  case 0:
>+  o = n;
>+  n = b;
>+  b = o;
>+  bar (1, );
>+  }
>+}
>
>   Jakub



Re: [PATCH] PR translation/90118 Missing space between words

2019-04-19 Thread Richard Sandiford
Christophe Lyon  writes:
> On Fri, 19 Apr 2019 at 11:23, Richard Sandiford
>  wrote:
>>
>> Christophe Lyon  writes:
>> > On Thu, 18 Apr 2019 at 18:25, Richard Sandiford
>> >  wrote:
>> >>
>> >> Christophe Lyon  writes:
>> >> > Hi,
>> >> >
>> >> > This patch adds the missing space before '%<' in
>> >> > config/aarch64/aarch64.c and gcc/cp/call.c. It also updates the
>> >> > check-internal-format-escaping.py checker to warn about such cases.
>> >> >
>> >> > OK?
>> >> >
>> >> > Christophe
>> >> >
>> >> > diff --git a/contrib/check-internal-format-escaping.py 
>> >> > b/contrib/check-internal-format-escaping.py
>> >> > index aac4f9e..9c62586 100755
>> >> > --- a/contrib/check-internal-format-escaping.py
>> >> > +++ b/contrib/check-internal-format-escaping.py
>> >> > @@ -58,6 +58,10 @@ for i, l in enumerate(lines):
>> >> >  print('%s: %s' % (origin, text))
>> >> >  if re.search("[^%]'", p):
>> >> >  print('%s: %s' % (origin, text))
>> >> > +# %< should not be preceded by a non-punctuation
>> >> > +# %character.
>> >> > +if re.search("[a-zA-Z0-9]%<", p):
>> >> > +print('%s: %s' % (origin, text))
>> >> >  j += 1
>> >> >
>> >> >  origin = None
>> >> > diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
>> >> > index 9be7548..b66071f 100644
>> >> > --- a/gcc/config/aarch64/aarch64.c
>> >> > +++ b/gcc/config/aarch64/aarch64.c
>> >> > @@ -11483,7 +11483,7 @@ aarch64_override_options_internal (struct 
>> >> > gcc_options *opts)
>> >> >if (aarch64_stack_protector_guard == SSP_GLOBAL
>> >> >&& opts->x_aarch64_stack_protector_guard_offset_str)
>> >> >  {
>> >> > -  error ("incompatible options %<-mstack-protector-guard=global%> 
>> >> > and"
>> >> > +  error ("incompatible options %<-mstack-protector-guard=global%> 
>> >> > and "
>> >> >"%<-mstack-protector-guard-offset=%s%>",
>> >> >aarch64_stack_protector_guard_offset_str);
>> >> >  }
>> >> > diff --git a/gcc/cp/call.c b/gcc/cp/call.c
>> >> > index 9582345..8f3d019 100644
>> >> > --- a/gcc/cp/call.c
>> >> > +++ b/gcc/cp/call.c
>> >> > @@ -3614,16 +3614,16 @@ print_z_candidate (location_t loc, const char 
>> >> > *msgstr,
>> >> >  {
>> >> >cloc = loc;
>> >> >if (candidate->num_convs == 3)
>> >> > - inform (cloc, "%s%<%D(%T, %T, %T)%> ", msg, fn,
>> >> > + inform (cloc, "%s %<%D(%T, %T, %T)%> ", msg, fn,
>> >> >   candidate->convs[0]->type,
>> >> >   candidate->convs[1]->type,
>> >> >   candidate->convs[2]->type);
>> >> >else if (candidate->num_convs == 2)
>> >> > - inform (cloc, "%s%<%D(%T, %T)%> ", msg, fn,
>> >> > + inform (cloc, "%s %<%D(%T, %T)%> ", msg, fn,
>> >> >   candidate->convs[0]->type,
>> >> >   candidate->convs[1]->type);
>> >> >else
>> >> > - inform (cloc, "%s%<%D(%T)%> ", msg, fn,
>> >> > + inform (cloc, "%s %<%D(%T)%> ", msg, fn,
>> >> >   candidate->convs[0]->type);
>> >> >  }
>> >> >else if (TYPE_P (fn))
>> >>
>> >> I don't think this is right, since msg already has a space where 
>> >> necessary:
>> >>
>> >>   const char *msg = (msgstr == NULL
>> >>  ? ""
>> >>  : ACONCAT ((msgstr, " ", NULL)));
>> >>
>> >> Adding something like "(^| )[^% ]*" to the start of the regexp might
>> >> avoid that, at the risk of letting through real problems.
>> >>
>> >
>> > Yes, that would miss the problem in aarch64.c.
>>
>> Are you sure?  It works for me.
>>
> It didn't work for me, with that change the line didn't report any error.

Hmm, OK.  With:

if re.search("(^| )[^% ]*[a-zA-Z0-9]%<", p):
print('%s: %s' % (origin, text))

and a tree without your aarch64.c fix, I get:

#: config/aarch64/aarch64.c:11486: incompatible options 
%<-mstack-protector-guard=global%> and%<-mstack-"

but no warning about the cp/call.c stuff.

Thanks,
Richard


Re: [C++ PATCH] Fix process_template_parm error-recovery (PR c++/90138)

2019-04-19 Thread Jason Merrill
OK.

On Fri, Apr 19, 2019 at 1:43 AM Jakub Jelinek  wrote:
>
> Hi!
>
> On the following testcase, there is a type template argument, for which
> we create a decl (decl == parm in that case) and pushdecl it.  But, if
> the pushdecl detects a redeclaration in that scope, duplicate_decls will
> ggc_free the decl passed to it and we then add that ggc_freed tree into the
> template parameter TREE_LIST.
>
> The following patch fixes that by using the result value from pushdecl.
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
>
> 2019-04-19  Jakub Jelinek  
>
> PR c++/90138
> * pt.c (process_template_parm): Set decl to pushdecl result.  If
> !is_non_type, also set parm to that.
>
> * g++.dg/template/pr90138.C: New test.
>
> --- gcc/cp/pt.c.jj  2019-04-18 12:16:47.0 +0200
> +++ gcc/cp/pt.c 2019-04-18 14:12:36.765494173 +0200
> @@ -4433,7 +4433,9 @@ process_template_parm (tree list, locati
>   process_template_parm could fail. */
>tree reqs = finish_shorthand_constraint (parm, constr);
>
> -  pushdecl (decl);
> +  decl = pushdecl (decl);
> +  if (!is_non_type)
> +parm = decl;
>
>/* Build the parameter node linking the parameter declaration,
>   its default argument (if any), and its constraints (if any). */
> --- gcc/testsuite/g++.dg/template/pr90138.C.jj  2019-04-18 14:58:06.035564846 
> +0200
> +++ gcc/testsuite/g++.dg/template/pr90138.C 2019-04-18 14:57:27.056206214 
> +0200
> @@ -0,0 +1,5 @@
> +// PR c++/90138
> +
> +template <, typename T, typename typename, typename T> // { dg-error 
> "expected" }
> +struct S;  // { dg-error "no default" }
> +// { dg-error "two or more" "" { target *-*-* } .-2 }
>
> Jakub


Re: [C/C++ PATCH] Fix promoted switch condition out of range diagnostics (PR c/89888, take 2)

2019-04-19 Thread Jason Merrill
On Fri, Apr 19, 2019 at 1:39 AM Jakub Jelinek  wrote:
>
> On Thu, Apr 18, 2019 at 10:41:55PM -0700, Jason Merrill wrote:
> > > +  node = splay_tree_predecessor (cases, (splay_tree_key) min_value);
> > ...
> > > + if (CASE_HIGH ((tree) node->value)
> > > + && tree_int_cst_compare (CASE_HIGH ((tree) node->value),
> > > +  min_value) >= 0)
> > ...
> > > + node = splay_tree_predecessor (cases,
> > > +(splay_tree_key) min_value);
> > 
> > > +  node = splay_tree_lookup (cases, (splay_tree_key) max_value);
> > > +  if (node == NULL)
> > > +   node = splay_tree_predecessor (cases, (splay_tree_key) max_value);
> > > +  /* Handle a single node that might partially overlap the range.  */
> > > +  if (node
> > > + && node->key
> > > + && CASE_HIGH ((tree) node->value)
> > > + && tree_int_cst_compare (CASE_HIGH ((tree) node->value),
> > > +  max_value) > 0)
> > ...
> > > +  while ((node = splay_tree_successor (cases,
> > > +  (splay_tree_key) max_value))
> >
> > Hmm, why are the code sections for dealing with the lower bound and
> > upper bound asymmetrical?  That is, why not start the upper bound
> > consideration with splay_tree_successor?
>
> Because of the case 1 ... 4: GNU extension.  Without that it would be
> mostly symmetrical (well, there still would be a difference, because we put
> the default: before all other cases, so we still need to test
> node->key != 0 for the splay_tree_predecessor case but don't have to test
> that for splay_tree_successor.  But with the GNU extension, we still use
> the low bound of the range as the key, which makes it asymmetrical.
>
> splay_tree_predecessor (cases, (splay_tree_key) min_value)
> if it is not default: can be either the overlapping case (first part of the
> range outside of range, then part of the range in range of the corresponding
> type) or non-overlapping case.  There is at most one overlapping case there
> and all further predecessors are necessarily outside of range.
>
> On the other side,
> splay_tree_successor (cases, (splay_tree_key) max_value)
> is never default: and is always completely outside of range (and its
> successors are as well).  If we want to find the (single) overlapping case 
> that
> overlaps the max_value, then it could be either
> splay_tree_lookup (cases, (splay_tree_key) max_value)
> or
> splay_tree_predecessor (cases, (splay_tree_key) max_value)
> (the first one if there is e.g. a range case max_value ... max_value + N:
> and the second one if there is e.g. a range case max_value - M ... max_value
> + N: where both M and N are positive integers).
>
> Of course, the overlapping case could be also
> case min_value - M ... max_value + N:
> in which case both the earlier and later code will find the same node and
> each will complain about one boundary of that node and adjust that boundary.

Aha, thanks.  The patch is OK.

Jason


Re: [PATCH] PR translation/90118 Missing space between words

2019-04-19 Thread Jakub Jelinek
On Fri, Apr 19, 2019 at 11:28:41AM +0200, Christophe Lyon wrote:
> > >> > --- a/contrib/check-internal-format-escaping.py
> > >> > +++ b/contrib/check-internal-format-escaping.py
> > >> > @@ -58,6 +58,10 @@ for i, l in enumerate(lines):
> > >> >  print('%s: %s' % (origin, text))
> > >> >  if re.search("[^%]'", p):
> > >> >  print('%s: %s' % (origin, text))
> > >> > +# %< should not be preceded by a non-punctuation
> > >> > +# %character.
> > >> > +if re.search("[a-zA-Z0-9]%<", p):
> > >> > +print('%s: %s' % (origin, text))
> > >> >  j += 1

I'm not convinced we want this in check-internal-format-escaping.py
exactly because it is too fragile.
Instead, we want what David Malcolm has proposed, for GCC 10 some
-Wformat-something (non-default) style warning or even a warning for
all string literals when there is
"str "
" str2"
or
"str"
"str2"
Basically require if there is a line break between two concatenated string
literals that there is a single space, either at the end of one chunk or
at the beginning of the other one.

Jakub


Re: [PATCH] PR translation/90118 Missing space between words

2019-04-19 Thread Christophe Lyon
On Fri, 19 Apr 2019 at 11:23, Richard Sandiford
 wrote:
>
> Christophe Lyon  writes:
> > On Thu, 18 Apr 2019 at 18:25, Richard Sandiford
> >  wrote:
> >>
> >> Christophe Lyon  writes:
> >> > Hi,
> >> >
> >> > This patch adds the missing space before '%<' in
> >> > config/aarch64/aarch64.c and gcc/cp/call.c. It also updates the
> >> > check-internal-format-escaping.py checker to warn about such cases.
> >> >
> >> > OK?
> >> >
> >> > Christophe
> >> >
> >> > diff --git a/contrib/check-internal-format-escaping.py 
> >> > b/contrib/check-internal-format-escaping.py
> >> > index aac4f9e..9c62586 100755
> >> > --- a/contrib/check-internal-format-escaping.py
> >> > +++ b/contrib/check-internal-format-escaping.py
> >> > @@ -58,6 +58,10 @@ for i, l in enumerate(lines):
> >> >  print('%s: %s' % (origin, text))
> >> >  if re.search("[^%]'", p):
> >> >  print('%s: %s' % (origin, text))
> >> > +# %< should not be preceded by a non-punctuation
> >> > +# %character.
> >> > +if re.search("[a-zA-Z0-9]%<", p):
> >> > +print('%s: %s' % (origin, text))
> >> >  j += 1
> >> >
> >> >  origin = None
> >> > diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
> >> > index 9be7548..b66071f 100644
> >> > --- a/gcc/config/aarch64/aarch64.c
> >> > +++ b/gcc/config/aarch64/aarch64.c
> >> > @@ -11483,7 +11483,7 @@ aarch64_override_options_internal (struct 
> >> > gcc_options *opts)
> >> >if (aarch64_stack_protector_guard == SSP_GLOBAL
> >> >&& opts->x_aarch64_stack_protector_guard_offset_str)
> >> >  {
> >> > -  error ("incompatible options %<-mstack-protector-guard=global%> 
> >> > and"
> >> > +  error ("incompatible options %<-mstack-protector-guard=global%> 
> >> > and "
> >> >"%<-mstack-protector-guard-offset=%s%>",
> >> >aarch64_stack_protector_guard_offset_str);
> >> >  }
> >> > diff --git a/gcc/cp/call.c b/gcc/cp/call.c
> >> > index 9582345..8f3d019 100644
> >> > --- a/gcc/cp/call.c
> >> > +++ b/gcc/cp/call.c
> >> > @@ -3614,16 +3614,16 @@ print_z_candidate (location_t loc, const char 
> >> > *msgstr,
> >> >  {
> >> >cloc = loc;
> >> >if (candidate->num_convs == 3)
> >> > - inform (cloc, "%s%<%D(%T, %T, %T)%> ", msg, fn,
> >> > + inform (cloc, "%s %<%D(%T, %T, %T)%> ", msg, fn,
> >> >   candidate->convs[0]->type,
> >> >   candidate->convs[1]->type,
> >> >   candidate->convs[2]->type);
> >> >else if (candidate->num_convs == 2)
> >> > - inform (cloc, "%s%<%D(%T, %T)%> ", msg, fn,
> >> > + inform (cloc, "%s %<%D(%T, %T)%> ", msg, fn,
> >> >   candidate->convs[0]->type,
> >> >   candidate->convs[1]->type);
> >> >else
> >> > - inform (cloc, "%s%<%D(%T)%> ", msg, fn,
> >> > + inform (cloc, "%s %<%D(%T)%> ", msg, fn,
> >> >   candidate->convs[0]->type);
> >> >  }
> >> >else if (TYPE_P (fn))
> >>
> >> I don't think this is right, since msg already has a space where necessary:
> >>
> >>   const char *msg = (msgstr == NULL
> >>  ? ""
> >>  : ACONCAT ((msgstr, " ", NULL)));
> >>
> >> Adding something like "(^| )[^% ]*" to the start of the regexp might
> >> avoid that, at the risk of letting through real problems.
> >>
> >
> > Yes, that would miss the problem in aarch64.c.
>
> Are you sure?  It works for me.
>
It didn't work for me, with that change the line didn't report any error.


> The idea is to treat any immediately-adjoining non-whitespace sequence as
> punctuation rather than a word if it includes a % character.
>
> >> The aarch64.c change is definitely OK though, thanks for the catch.
> >>
> >
> > I'll committ the aarch64.c and check-internal-format-escaping.py parts.
>
> I wasn't sure whether we wanted to avoid false positives, so that anyone
> running the script doesn't need to repeat the same thought process.
>
> Thanks,
> Richard


Re: [PATCH] Fix PR90131, wrong-debug

2019-04-19 Thread Jakub Jelinek
On Thu, Apr 18, 2019 at 11:20:32AM +0200, Richard Biener wrote:
> 
> This fixes another case similar to the fixed PR89892, mergephi
> via remove_forwarder_block_with_phi caused out-of-date debug
> binds to become live and thus needs similar treatment as
> remove_forwarder_block.  Previously it didn't even bother
> to move debug stmts because the destination always has
> multiple predecessors.  Now we have to move and reset them.
> 
> Fixed by factoring out a worker from remove_forwarder_block and
> using that from remove_forwarder_block_with_phi as well.
> 
> Bootstrap & regtest running on x86_64-unknown-linux-gnu.

This regressed quite a few guality tests on both x86_64 and i686:
+FAIL: gcc.dg/guality/pr54519-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 20 x 
== 36
+FAIL: gcc.dg/guality/pr54519-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 20 y 
== 25
+FAIL: gcc.dg/guality/pr54519-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 20 z 
== 6
+FAIL: gcc.dg/guality/pr54519-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 23 x 
== 98
+FAIL: gcc.dg/guality/pr54519-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 23 y 
== 117
+FAIL: gcc.dg/guality/pr54519-1.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 23 z 
== 8
+FAIL: gcc.dg/guality/pr54519-2.c   -O2 -flto -fuse-linker-plugin 
-fno-fat-lto-objects  -DPREVENT_OPTIMIZATION line 17 x == 6
+FAIL: gcc.dg/guality/pr54519-2.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 17 x 
== 6
+FAIL: gcc.dg/guality/pr54519-2.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 17 y 
== 25
+FAIL: gcc.dg/guality/pr54519-3.c   -O2  -DPREVENT_OPTIMIZATION  line 20 x == 36
+FAIL: gcc.dg/guality/pr54519-3.c   -O2  -DPREVENT_OPTIMIZATION  line 20 y == 25
+FAIL: gcc.dg/guality/pr54519-3.c   -O2  -DPREVENT_OPTIMIZATION  line 20 z == 6
+FAIL: gcc.dg/guality/pr54519-3.c   -O2  -DPREVENT_OPTIMIZATION  line 23 x == 98
+FAIL: gcc.dg/guality/pr54519-3.c   -O2  -DPREVENT_OPTIMIZATION  line 23 y == 
117
+FAIL: gcc.dg/guality/pr54519-3.c   -O2  -DPREVENT_OPTIMIZATION  line 23 z == 8
+FAIL: gcc.dg/guality/pr54519-3.c   -O2 -flto -fno-use-linker-plugin 
-flto-partition=none  -DPREVENT_OPTIMIZATION line 20 x == 36
+FAIL: gcc.dg/guality/pr54519-3.c   -O2 -flto -fno-use-linker-plugin 
-flto-partition=none  -DPREVENT_OPTIMIZATION line 23 x == 98
+FAIL: gcc.dg/guality/pr54519-3.c   -O2 -flto -fuse-linker-plugin 
-fno-fat-lto-objects  -DPREVENT_OPTIMIZATION line 20 x == 36
+FAIL: gcc.dg/guality/pr54519-3.c   -O2 -flto -fuse-linker-plugin 
-fno-fat-lto-objects  -DPREVENT_OPTIMIZATION line 23 x == 98
+FAIL: gcc.dg/guality/pr54519-3.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 20 x 
== 36
+FAIL: gcc.dg/guality/pr54519-3.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 20 y 
== 25
+FAIL: gcc.dg/guality/pr54519-3.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 20 z 
== 6
+FAIL: gcc.dg/guality/pr54519-3.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 23 x 
== 98
+FAIL: gcc.dg/guality/pr54519-3.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 23 y 
== 117
+FAIL: gcc.dg/guality/pr54519-3.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 23 z 
== 8
+FAIL: gcc.dg/guality/pr54519-3.c   -Os  -DPREVENT_OPTIMIZATION  line 20 x == 36
+FAIL: gcc.dg/guality/pr54519-3.c   -Os  -DPREVENT_OPTIMIZATION  line 20 y == 25
+FAIL: gcc.dg/guality/pr54519-3.c   -Os  -DPREVENT_OPTIMIZATION  line 20 z == 6
+FAIL: gcc.dg/guality/pr54519-3.c   -Os  -DPREVENT_OPTIMIZATION  line 23 x == 98
+FAIL: gcc.dg/guality/pr54519-3.c   -Os  -DPREVENT_OPTIMIZATION  line 23 y == 
117
+FAIL: gcc.dg/guality/pr54519-3.c   -Os  -DPREVENT_OPTIMIZATION  line 23 z == 8
+FAIL: gcc.dg/guality/pr54519-4.c   -O2  -DPREVENT_OPTIMIZATION  line 17 x == 6
+FAIL: gcc.dg/guality/pr54519-4.c   -O2  -DPREVENT_OPTIMIZATION  line 17 y == 25
+FAIL: gcc.dg/guality/pr54519-4.c   -O2 -flto -fno-use-linker-plugin 
-flto-partition=none  -DPREVENT_OPTIMIZATION line 17 x == 6
+FAIL: gcc.dg/guality/pr54519-4.c   -O2 -flto -fuse-linker-plugin 
-fno-fat-lto-objects  -DPREVENT_OPTIMIZATION line 17 x == 6
+FAIL: gcc.dg/guality/pr54519-4.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 17 x 
== 6
+FAIL: gcc.dg/guality/pr54519-4.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 17 y 
== 25
+FAIL: gcc.dg/guality/pr54519-4.c   -Os  -DPREVENT_OPTIMIZATION  line 17 x == 6
+FAIL: gcc.dg/guality/pr54519-4.c   -Os  -DPREVENT_OPTIMIZATION  line 17 y == 25
+FAIL: gcc.dg/guality/pr54519-5.c   -O2 -flto -fuse-linker-plugin 
-fno-fat-lto-objects  -DPREVENT_OPTIMIZATION line 17 x == 6
+FAIL: gcc.dg/guality/pr54519-5.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 17 x 
== 6
+FAIL: gcc.dg/guality/pr54519-5.c   -O3 -g  -DPREVENT_OPTIMIZATION  line 17 y 
== 25
+FAIL: gcc.dg/guality/pr54519-6.c   -Os  -DPREVENT_OPTIMIZATION  line 11 x == 2
+FAIL: gcc.dg/guality/pr54519-6.c   -Os  -DPREVENT_OPTIMIZATION  line 11 y == 0
+FAIL: gcc.dg/guality/pr68860-1.c   -O2  -DPREVENT_OPTIMIZATION  line 14 arg1 
== 1
+FAIL: gcc.dg/guality/pr68860-1.c   -O2  -DPREVENT_OPTIMIZATION  line 14 arg2 
== 2
+FAIL: gcc.dg/guality/pr68860-1.c   -O2  -DPREVENT_OPTIMIZATION  line 14 arg3 
== 3
+FAIL: gcc.dg/guality/pr68860-1.c   -O2  

Re: [PATCH] PR translation/90118 Missing space between words

2019-04-19 Thread Richard Sandiford
Christophe Lyon  writes:
> On Thu, 18 Apr 2019 at 18:25, Richard Sandiford
>  wrote:
>>
>> Christophe Lyon  writes:
>> > Hi,
>> >
>> > This patch adds the missing space before '%<' in
>> > config/aarch64/aarch64.c and gcc/cp/call.c. It also updates the
>> > check-internal-format-escaping.py checker to warn about such cases.
>> >
>> > OK?
>> >
>> > Christophe
>> >
>> > diff --git a/contrib/check-internal-format-escaping.py 
>> > b/contrib/check-internal-format-escaping.py
>> > index aac4f9e..9c62586 100755
>> > --- a/contrib/check-internal-format-escaping.py
>> > +++ b/contrib/check-internal-format-escaping.py
>> > @@ -58,6 +58,10 @@ for i, l in enumerate(lines):
>> >  print('%s: %s' % (origin, text))
>> >  if re.search("[^%]'", p):
>> >  print('%s: %s' % (origin, text))
>> > +# %< should not be preceded by a non-punctuation
>> > +# %character.
>> > +if re.search("[a-zA-Z0-9]%<", p):
>> > +print('%s: %s' % (origin, text))
>> >  j += 1
>> >
>> >  origin = None
>> > diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
>> > index 9be7548..b66071f 100644
>> > --- a/gcc/config/aarch64/aarch64.c
>> > +++ b/gcc/config/aarch64/aarch64.c
>> > @@ -11483,7 +11483,7 @@ aarch64_override_options_internal (struct 
>> > gcc_options *opts)
>> >if (aarch64_stack_protector_guard == SSP_GLOBAL
>> >&& opts->x_aarch64_stack_protector_guard_offset_str)
>> >  {
>> > -  error ("incompatible options %<-mstack-protector-guard=global%> and"
>> > +  error ("incompatible options %<-mstack-protector-guard=global%> and 
>> > "
>> >"%<-mstack-protector-guard-offset=%s%>",
>> >aarch64_stack_protector_guard_offset_str);
>> >  }
>> > diff --git a/gcc/cp/call.c b/gcc/cp/call.c
>> > index 9582345..8f3d019 100644
>> > --- a/gcc/cp/call.c
>> > +++ b/gcc/cp/call.c
>> > @@ -3614,16 +3614,16 @@ print_z_candidate (location_t loc, const char 
>> > *msgstr,
>> >  {
>> >cloc = loc;
>> >if (candidate->num_convs == 3)
>> > - inform (cloc, "%s%<%D(%T, %T, %T)%> ", msg, fn,
>> > + inform (cloc, "%s %<%D(%T, %T, %T)%> ", msg, fn,
>> >   candidate->convs[0]->type,
>> >   candidate->convs[1]->type,
>> >   candidate->convs[2]->type);
>> >else if (candidate->num_convs == 2)
>> > - inform (cloc, "%s%<%D(%T, %T)%> ", msg, fn,
>> > + inform (cloc, "%s %<%D(%T, %T)%> ", msg, fn,
>> >   candidate->convs[0]->type,
>> >   candidate->convs[1]->type);
>> >else
>> > - inform (cloc, "%s%<%D(%T)%> ", msg, fn,
>> > + inform (cloc, "%s %<%D(%T)%> ", msg, fn,
>> >   candidate->convs[0]->type);
>> >  }
>> >else if (TYPE_P (fn))
>>
>> I don't think this is right, since msg already has a space where necessary:
>>
>>   const char *msg = (msgstr == NULL
>>  ? ""
>>  : ACONCAT ((msgstr, " ", NULL)));
>>
>> Adding something like "(^| )[^% ]*" to the start of the regexp might
>> avoid that, at the risk of letting through real problems.
>>
>
> Yes, that would miss the problem in aarch64.c.

Are you sure?  It works for me.

The idea is to treat any immediately-adjoining non-whitespace sequence as
punctuation rather than a word if it includes a % character.

>> The aarch64.c change is definitely OK though, thanks for the catch.
>>
>
> I'll committ the aarch64.c and check-internal-format-escaping.py parts.

I wasn't sure whether we wanted to avoid false positives, so that anyone
running the script doesn't need to repeat the same thought process.

Thanks,
Richard


Re: [PATCH] PR translation/90118 Missing space between words

2019-04-19 Thread Christophe Lyon
On Thu, 18 Apr 2019 at 18:25, Richard Sandiford
 wrote:
>
> Christophe Lyon  writes:
> > Hi,
> >
> > This patch adds the missing space before '%<' in
> > config/aarch64/aarch64.c and gcc/cp/call.c. It also updates the
> > check-internal-format-escaping.py checker to warn about such cases.
> >
> > OK?
> >
> > Christophe
> >
> > diff --git a/contrib/check-internal-format-escaping.py 
> > b/contrib/check-internal-format-escaping.py
> > index aac4f9e..9c62586 100755
> > --- a/contrib/check-internal-format-escaping.py
> > +++ b/contrib/check-internal-format-escaping.py
> > @@ -58,6 +58,10 @@ for i, l in enumerate(lines):
> >  print('%s: %s' % (origin, text))
> >  if re.search("[^%]'", p):
> >  print('%s: %s' % (origin, text))
> > +# %< should not be preceded by a non-punctuation
> > +# %character.
> > +if re.search("[a-zA-Z0-9]%<", p):
> > +print('%s: %s' % (origin, text))
> >  j += 1
> >
> >  origin = None
> > diff --git a/gcc/config/aarch64/aarch64.c b/gcc/config/aarch64/aarch64.c
> > index 9be7548..b66071f 100644
> > --- a/gcc/config/aarch64/aarch64.c
> > +++ b/gcc/config/aarch64/aarch64.c
> > @@ -11483,7 +11483,7 @@ aarch64_override_options_internal (struct 
> > gcc_options *opts)
> >if (aarch64_stack_protector_guard == SSP_GLOBAL
> >&& opts->x_aarch64_stack_protector_guard_offset_str)
> >  {
> > -  error ("incompatible options %<-mstack-protector-guard=global%> and"
> > +  error ("incompatible options %<-mstack-protector-guard=global%> and "
> >"%<-mstack-protector-guard-offset=%s%>",
> >aarch64_stack_protector_guard_offset_str);
> >  }
> > diff --git a/gcc/cp/call.c b/gcc/cp/call.c
> > index 9582345..8f3d019 100644
> > --- a/gcc/cp/call.c
> > +++ b/gcc/cp/call.c
> > @@ -3614,16 +3614,16 @@ print_z_candidate (location_t loc, const char 
> > *msgstr,
> >  {
> >cloc = loc;
> >if (candidate->num_convs == 3)
> > - inform (cloc, "%s%<%D(%T, %T, %T)%> ", msg, fn,
> > + inform (cloc, "%s %<%D(%T, %T, %T)%> ", msg, fn,
> >   candidate->convs[0]->type,
> >   candidate->convs[1]->type,
> >   candidate->convs[2]->type);
> >else if (candidate->num_convs == 2)
> > - inform (cloc, "%s%<%D(%T, %T)%> ", msg, fn,
> > + inform (cloc, "%s %<%D(%T, %T)%> ", msg, fn,
> >   candidate->convs[0]->type,
> >   candidate->convs[1]->type);
> >else
> > - inform (cloc, "%s%<%D(%T)%> ", msg, fn,
> > + inform (cloc, "%s %<%D(%T)%> ", msg, fn,
> >   candidate->convs[0]->type);
> >  }
> >else if (TYPE_P (fn))
>
> I don't think this is right, since msg already has a space where necessary:
>
>   const char *msg = (msgstr == NULL
>  ? ""
>  : ACONCAT ((msgstr, " ", NULL)));
>
> Adding something like "(^| )[^% ]*" to the start of the regexp might
> avoid that, at the risk of letting through real problems.
>

Yes, that would miss the problem in aarch64.c.

> The aarch64.c change is definitely OK though, thanks for the catch.
>

I'll committ the aarch64.c and check-internal-format-escaping.py parts.

Thanks,

Christophe

> Richard


[PATCH] Fix tree-outof-ssa.c ICE with vector types (PR middle-end/90139)

2019-04-19 Thread Jakub Jelinek
Hi!

We use SSA_NAMEs even for vector types which have BLKmode, e.g. neither x86
nor sparc targets have V1SFmode and thus such VECTOR_TYPEs have BLKmode.
In some cases outof ssa subpass calls get_temp_reg, but that will
gen_reg_rtx (BLKmode) in that case, which is something that doesn't really
work.  The following patch fixes it by using a stack slot for the BLKmode
SSA_NAMEs instead.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2019-04-19  Jakub Jelinek  

PR middle-end/90139
* tree-outof-ssa.c (get_temp_reg): If reg_mode is BLKmode, return
assign_temp instead of gen_reg_rtx.

* gcc.c-torture/compile/pr90139.c: New test.

--- gcc/tree-outof-ssa.c.jj 2019-03-19 07:46:45.136798336 +0100
+++ gcc/tree-outof-ssa.c2019-04-18 15:40:33.801698542 +0200
@@ -653,6 +653,8 @@ get_temp_reg (tree name)
   tree type = TREE_TYPE (name);
   int unsignedp;
   machine_mode reg_mode = promote_ssa_mode (name, );
+  if (reg_mode == BLKmode)
+return assign_temp (type, 0, 0);
   rtx x = gen_reg_rtx (reg_mode);
   if (POINTER_TYPE_P (type))
 mark_reg_pointer (x, TYPE_ALIGN (TREE_TYPE (type)));
--- gcc/testsuite/gcc.c-torture/compile/pr90139.c.jj2019-04-18 
15:39:16.121974160 +0200
+++ gcc/testsuite/gcc.c-torture/compile/pr90139.c   2019-04-18 
15:37:08.947062569 +0200
@@ -0,0 +1,20 @@
+/* PR middle-end/90139 */
+
+typedef float __attribute__((vector_size (sizeof (float V;
+void bar (int, V *);
+int l;
+
+void
+foo (void)
+{
+  V n, b, o;
+  while (1)
+switch (l)
+  {
+  case 0:
+   o = n;
+   n = b;
+   b = o;
+   bar (1, );
+  }
+}

Jakub


[C++ PATCH] Fix process_template_parm error-recovery (PR c++/90138)

2019-04-19 Thread Jakub Jelinek
Hi!

On the following testcase, there is a type template argument, for which
we create a decl (decl == parm in that case) and pushdecl it.  But, if
the pushdecl detects a redeclaration in that scope, duplicate_decls will
ggc_free the decl passed to it and we then add that ggc_freed tree into the
template parameter TREE_LIST.

The following patch fixes that by using the result value from pushdecl.

Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?

2019-04-19  Jakub Jelinek  

PR c++/90138
* pt.c (process_template_parm): Set decl to pushdecl result.  If
!is_non_type, also set parm to that.

* g++.dg/template/pr90138.C: New test.

--- gcc/cp/pt.c.jj  2019-04-18 12:16:47.0 +0200
+++ gcc/cp/pt.c 2019-04-18 14:12:36.765494173 +0200
@@ -4433,7 +4433,9 @@ process_template_parm (tree list, locati
  process_template_parm could fail. */
   tree reqs = finish_shorthand_constraint (parm, constr);
 
-  pushdecl (decl);
+  decl = pushdecl (decl);
+  if (!is_non_type)
+parm = decl;
 
   /* Build the parameter node linking the parameter declaration,
  its default argument (if any), and its constraints (if any). */
--- gcc/testsuite/g++.dg/template/pr90138.C.jj  2019-04-18 14:58:06.035564846 
+0200
+++ gcc/testsuite/g++.dg/template/pr90138.C 2019-04-18 14:57:27.056206214 
+0200
@@ -0,0 +1,5 @@
+// PR c++/90138
+
+template <, typename T, typename typename, typename T> // { dg-error 
"expected" }
+struct S;  // { dg-error "no default" }
+// { dg-error "two or more" "" { target *-*-* } .-2 }

Jakub


Re: [C/C++ PATCH] Fix promoted switch condition out of range diagnostics (PR c/89888, take 2)

2019-04-19 Thread Jakub Jelinek
On Thu, Apr 18, 2019 at 10:41:55PM -0700, Jason Merrill wrote:
> > +  node = splay_tree_predecessor (cases, (splay_tree_key) min_value);
> ...
> > + if (CASE_HIGH ((tree) node->value)
> > + && tree_int_cst_compare (CASE_HIGH ((tree) node->value),
> > +  min_value) >= 0)
> ...
> > + node = splay_tree_predecessor (cases,
> > +(splay_tree_key) min_value);
> 
> > +  node = splay_tree_lookup (cases, (splay_tree_key) max_value);
> > +  if (node == NULL)
> > +   node = splay_tree_predecessor (cases, (splay_tree_key) max_value);
> > +  /* Handle a single node that might partially overlap the range.  */
> > +  if (node
> > + && node->key
> > + && CASE_HIGH ((tree) node->value)
> > + && tree_int_cst_compare (CASE_HIGH ((tree) node->value),
> > +  max_value) > 0)
> ...
> > +  while ((node = splay_tree_successor (cases,
> > +  (splay_tree_key) max_value))
> 
> Hmm, why are the code sections for dealing with the lower bound and
> upper bound asymmetrical?  That is, why not start the upper bound
> consideration with splay_tree_successor?

Because of the case 1 ... 4: GNU extension.  Without that it would be
mostly symmetrical (well, there still would be a difference, because we put
the default: before all other cases, so we still need to test
node->key != 0 for the splay_tree_predecessor case but don't have to test
that for splay_tree_successor.  But with the GNU extension, we still use
the low bound of the range as the key, which makes it asymmetrical.

splay_tree_predecessor (cases, (splay_tree_key) min_value)
if it is not default: can be either the overlapping case (first part of the
range outside of range, then part of the range in range of the corresponding
type) or non-overlapping case.  There is at most one overlapping case there
and all further predecessors are necessarily outside of range.

On the other side,
splay_tree_successor (cases, (splay_tree_key) max_value)
is never default: and is always completely outside of range (and its
successors are as well).  If we want to find the (single) overlapping case that
overlaps the max_value, then it could be either
splay_tree_lookup (cases, (splay_tree_key) max_value)
or
splay_tree_predecessor (cases, (splay_tree_key) max_value)
(the first one if there is e.g. a range case max_value ... max_value + N:
and the second one if there is e.g. a range case max_value - M ... max_value
+ N: where both M and N are positive integers).

Of course, the overlapping case could be also
case min_value - M ... max_value + N:
in which case both the earlier and later code will find the same node and
each will complain about one boundary of that node and adjust that boundary.

Jakub