Re: [PATCH][GCC][arm] Add CLI and multilib support for Armv8.1-M Mainline MVE extensions

2020-01-18 Thread Jakub Jelinek
On Fri, Jan 17, 2020 at 07:58:46PM +0100, Jakub Jelinek wrote:
> One is I wonder if it has been bootstrapped, because at least in a cross
> from x86_64-linux to armv7hl-linux-gnueabi I'm seeing:
> ../../gcc/config/arm/arm.c: In function ‘void 
> cmse_nonsecure_call_inline_register_clear()’:
> ../../gcc/config/arm/arm.c:18469:18: warning: unused variable ‘next’ 
> [-Wunused-variable]
> rtx_insn *next, *last, *pop_insn, *after = insn;
>   ^~~~
> warning, which I believe in bootstrap would result in
> -Werror=unused-variable error.

Bootstrap found yet another unused variable:
../../gcc/config/arm/vfp.md:1651:17: warning: unused variable 'regname' 
[-Wunused-variable]

Fixed thusly, committed as obvious to trunk.

2020-01-18  Jakub Jelinek  

* config/arm/vfp.md (*clear_vfp_multiple): Remove unused variable.

--- gcc/config/arm/vfp.md
+++ gcc/config/arm/vfp.md
@@ -1648,7 +1648,6 @@ (define_insn "*clear_vfp_multiple"
   {
 int num_regs = XVECLEN (operands[0], 0);
 char pattern[30];
-const char *regname;
 rtx reg;
 
 strcpy (pattern, \"vscclrm%?\\t{%|\");


Jakub



[wwwdocs,C++] Update notes on C++17 and C++2a support.

2020-01-18 Thread Gerald Pfeifer
Streamline these two sections, remove references to svn.html, note
the latter has landed by now.

Pushed.


Jonathan, Marek, Jason, it might be good if you could go through 
the page and see whether there are similar simplifications/updates.

Thanks,
Gerald

---
 htdocs/projects/cxx-status.html | 8 ++--
 1 file changed, 2 insertions(+), 6 deletions(-)

diff --git a/htdocs/projects/cxx-status.html b/htdocs/projects/cxx-status.html
index dd3702dc..8d9dbce6 100644
--- a/htdocs/projects/cxx-status.html
+++ b/htdocs/projects/cxx-status.html
@@ -36,9 +36,7 @@
   GCC has experimental support for the next revision of the C++
   standard, which is expected to be published in 2020.
 
-  C++2a features are available as part of "mainline" GCC
-in the trunk of GCC's repository
-and will be available in GCC 8 and later. To enable C++2a
+  C++2a features are available since GCC 8. To enable C++2a
   support, add the command-line parameter -std=c++2a
   to your g++ command line. Or, to enable GNU
   extensions in addition to C++2a features,
@@ -462,9 +460,7 @@
   https://gcc.gnu.org/onlinedocs/libstdc++/manual/status.html#status.iso.2017";>the
 library documentation.
   
 
-  C++17 features are available as part of "mainline" GCC
-in the trunk of GCC's repository
-and in GCC 5 and later. To enable C++17
+  C++17 features are available since GCC 5. To enable C++17
   support, add the command-line parameter -std=c++17
   to your g++ command line. Or, to enable GNU
   extensions in addition to C++17 features,
-- 
2.24.1


[wwwdocs] Generalize instructions and remove notes on repository mirroring via rsync.

2020-01-18 Thread Gerald Pfeifer
Remove all references how to perform local checkouts, to SVN, and
mirroring the repository.  Instead generalize descriptions since
with the move to Git syncing the repository with rsync and then
checking out locally became mostly pointless.

Pushed.

Gerald
---
 htdocs/rsync.html | 45 -
 1 file changed, 12 insertions(+), 33 deletions(-)

diff --git a/htdocs/rsync.html b/htdocs/rsync.html
index 29e804ac..18700f58 100644
--- a/htdocs/rsync.html
+++ b/htdocs/rsync.html
@@ -4,7 +4,7 @@
 
 
 
-
+
 GCC: Anonymous read-only rsync access
 https://gcc.gnu.org/gcc.css"; />
 
@@ -12,47 +12,26 @@
 
 GCC: Anonymous read-only rsync access
 
-We are offering our SVN repository and various other data like our FTP
-site through anonymous https://rsync.samba.org";>rsync.
+We are offering aspects like our mailing list archives, downloads,
+etc. through anonymous https://rsync.samba.org";>rsync.
+A list of available rsync targets is available via:
 
-That way you can make local copies of the GCC SVN repository to ease
-the burden on the GCC main site, and browse the source locally.
-
-Getting a local copy of GCC repository using rsync
-
-The GCC repository is available at rsync://gcc.gnu.org/gcc-svn.
-As of January 2011 it consumes about 23GB of disk space which takes a
-substantial time to transfer.
-Subsequent synchronizations will be much faster, as rsync uses a smart
-algorithm to only transfer differences.
-
-Here is how you get a copy of the repository:
 
-rsync --archive --delete --compress rsync://gcc.gnu.org/gcc-svn 
/usr/local/gcc-local-repo
+rsync rsync://gcc.gnu.org/
 
-The same command can be run periodically to synchronize your copy of
-the repository.
 
-Other rsync options that you might want to use include
---verbose and --progress to provide feedback,
-including during the initial phase that is otherwise silent.
+To obtain a copy of one of the modules:
 
-To get a list of available rsync targets, run:
 
-rsync rsync://gcc.gnu.org/
+rsync --archive --delete --compress rsync://gcc.gnu.org/MODULE 
/my/local/directory
 
 
+The same command can be run periodically to synchronize your local
+copy.
 
-Using the local repository
-
-Refer to SVN instructions to check out your
-local copy of the repository.  Note that the rsync command above will
-mirror the repository at its root directory, so the URL you will need
-to use to check out from your local repository will look something
-like file:///usr/local/gcc-local-repo/ instead of
-svn://gcc.gnu.org/svn/gcc/ (i.e., without the trailing
-/svn/gcc directory names that would be included for
-gcc.gnu.org access).
+Other rsync options that you might want to use include
+--verbose and --progress to provide feedback,
+including during the initial phase that is otherwise silent.
 
 
 
-- 
2.24.1


Re: [PATCH] Fix noreorder symbol partitioning reversion.

2020-01-18 Thread Jan Hubicka
> On Thu, 2020-01-16 at 20:43 +0100, Martin Liška wrote:
> > Hi.
> > 
> > The patch is fixes a regression in libgcrypt package where
> > we incorrectly forget to stream out a definition of a no-reorder symbol.
> > It's caused by LTO balanced map reversion, where we do not revert
> > also best_noreorder_pos.
> > 
> > It's pre-approved patch by Honza and I'm going to install it.
> > Patch can bootstrap on x86_64-linux-gnu and survives regression tests.
> > 
> > Thanks,
> > Martin
> > 
> > 
> > gcc/lto/ChangeLog:
> > 
> > 2020-01-16  Martin Liska  
> > 
> > * lto-partition.c (lto_balanced_map): Remember
> > best_noreorder_pos and then restore to it
> > when we revert.
> Thank you!  That addressed several niggling failures.

Yep, it is quite intereesting the bug survived multiple releases since
the initial Andi's kernel work.
On the other hand it reproduces only if you mix in -O0 modules or use
explicit -fno-toplevel-reorder.  So if you see it in packages it is
worth to investigate if build flags are not broken.
-O0 -flto is not the most powerful optimization to do.

Honza
> 
> jeff
> > 
> 


[wwwdocs] Condense and trim three aspects of our snapshot instructions.

2020-01-18 Thread Gerald Pfeifer
This includes folding in a reference to our lists overview as a link
into some other text, removing a long obsolete reference to age-old
versions of the patch command, and skippking details that are covered
by the gcc_update script.

Pushed.

Gerald
---
 htdocs/snapshots.html | 11 +++
 1 file changed, 3 insertions(+), 8 deletions(-)

diff --git a/htdocs/snapshots.html b/htdocs/snapshots.html
index 80d61e27..6567a857 100644
--- a/htdocs/snapshots.html
+++ b/htdocs/snapshots.html
@@ -21,20 +21,15 @@ progress.  Any given snapshot may generate incorrect code 
or even fail to
 build.
 
 If you plan on downloading and using snapshots, we highly recommend you
-subscribe to the GCC mailing lists.  See 
-mailing lists on the main GCC page for instructions on how to 
subscribe.
+subscribe to the GCC mailing lists.
 
 When using the diff files to update from older snapshots to newer snapshots,
 make sure to use "-E" and "-p" arguments to patch so that empty files are
-deleted and full pathnames are provided to patch.  If your version of
-patch does not support "-E", you'll need to get a newer version.  Also note
-that you may need autoconf, autoheader and various other programs if you use
-diff files to update from one snapshot to the next.
+deleted and full pathnames are provided to patch.
 
 contrib/gcc_update can be used to apply diffs between
 successive snapshot versions and preserve relations between generated
-files so that autoconf et al aren't needed. This is documented in
-comments in contrib/gcc_update.
+files so that autoconf et al aren't needed.
 
 The program sha512sum — which is included with the 
 https://www.gnu.org/software/coreutils/";>GNU Coreutils
-- 
2.24.1


Re: [patch, fortran] Fix PR 44960, accepts invalid reference on function

2020-01-18 Thread Tobias Burnus

On 1/17/20 11:20 PM, Thomas Koenig wrote:


function_reference_1.f90:9:8:

    9 | print *, foo(1)%a ! { dg-error "Syntax error" }
  |    1
Error: Syntax error in expression at (1)


The error message is not helpful at all. I was recently struggling to 
understand why/where some code was failing with syntax error – and it 
took me a while to find it. And with this message, I had also to find 
out what did go wrong.


How about: ("Unexpected junk after %s at %L", 
expr->n.symtree->sym->name, &expr->where)? – or "Unexpected junk in 
reference to %s at %L"?


Or deviating from your current error messages: ""Inconsistent use of %s 
at %L"


(Side note: I think we have the general problem that expr->where does 
not start after the white space, which can be slightly confusing.)


Cheers,

Tobias



[wwwdocs] Have the projects list refer to Git instead of SVN for branches.

2020-01-18 Thread Gerald Pfeifer
Pushed.

Gerald
---
 htdocs/projects/index.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/htdocs/projects/index.html b/htdocs/projects/index.html
index 2c6472cc..26f667bd 100644
--- a/htdocs/projects/index.html
+++ b/htdocs/projects/index.html
@@ -23,7 +23,7 @@ help develop GCC:
 Projects for the GCC web pages.
 Projects for improving the GCC
 documentation.
-There are several development
+There are several development
 branches with projects that you may be able to help out with.
 Investigate and fix some of the known optimizer
 inadequacies.
-- 
2.24.1


Re: analyzer branch renamed to "devel/analyzer"

2020-01-18 Thread Gerald Pfeifer
On Wed, 15 Jan 2020, David Malcolm wrote:
> The new git server doesn't seem to like such branch names [1], so I'm
> now using "devel/analyzer"

Do you plan to also document this in git.html (per the message below
you quoted ;-)?  

> remote: *** Shared development branches should be named devel/*, and
> should be documented in https://gcc.gnu.org/git.html .

Gerald


Re: [Patch, Fortran + wwwdocs] PR93253 – Document BOZ changes, make it friendlier in legacy code

2020-01-18 Thread Gerald Pfeifer
On Wed, 15 Jan 2020, Tobias Burnus wrote:
> Regarding the patch, I enclosed a revised version.

I have applied the following markup fix on top.  Not a bug (in
HTML 5, it would have been in XHTML), though surely not what you
intended...

Gerald

- Log -
commit aa1665da66b064f53e5c99a09894003b53779baa
Author: Gerald Pfeifer 
Date:   Sat Jan 18 13:01:10 2020 +0100

Close a list item instead of opening an empty one.

diff --git a/htdocs/gcc-10/changes.html b/htdocs/gcc-10/changes.html
index 76a4ed9c..66440102 100644
--- a/htdocs/gcc-10/changes.html
+++ b/htdocs/gcc-10/changes.html
@@ -276,7 +276,7 @@ a work-in-progress.
 Some of these extensions are permitted with the
 -fallow-invalid-boz, where the error is degraded to a
 warning and the code is compiled as with older gfortran.
-  
+  
   
 At any optimization level except-Os, gfortran now
 uses inline packing for arguments instead of calling a library


[PATCH] i386: Fix up -fdollars-in-identifiers with identifiers starting with $ in -masm=att (PR target/91298)

2020-01-18 Thread Jakub Jelinek
Hi!

In AT&T syntax leading $ is special, so if we have identifiers that start
with dollar, we usually fail to assemble it (or assemble incorrectly).
As mentioned in the PR, what works is wrapping the identifiers inside of
parens, like:
movl$($a), %eax
leaq($a)(,%rdi,4), %rax
movl($a)(%rip), %eax
movl($a)+16(%rip), %eax
.globl  $a
.type   $a, @object
.size   $a, 72
$a:
.string "$a"
.quad   ($a)
(this is x86_64 -fno-pic -O2).  In some places ($a) is not accepted,
like as .globl operand, in .type, .size, so the patch overrides
ASM_OUTPUT_SYMBOL_REF rather than e.g. ASM_OUTPUT_LABELREF.
I didn't want to duplicate what assemble_name is doing (following
transparent aliases), so split assemble_name into two parts; just
mere looking at the first character of a name before calling assemble_name
wouldn't be good enough, a transparent alias could lead from a name
not starting with $ to one starting with it and vice versa.

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

2020-01-18  Jakub Jelinek  

PR target/91298
* output.h (assemble_name_resolve): Declare.
* varasm.c (assemble_name_resolve): New function.
(assemble_name): Use it.
* config/i386/i386.h (ASM_OUTPUT_SYMBOL_REF): Define.

* gcc.target/i386/pr91298-1.c: New test.
* gcc.target/i386/pr91298-2.c: New test.

--- gcc/output.h.jj 2020-01-12 11:54:36.692409199 +0100
+++ gcc/output.h2020-01-17 09:51:27.606873017 +0100
@@ -237,6 +237,12 @@ extern void assemble_label (FILE *, cons
addition of an underscore).  */
 extern void assemble_name_raw (FILE *, const char *);
 
+/* Return NAME that should actually be emitted, looking through
+   transparent aliases.  If NAME refers to an entity that is also
+   represented as a tree (like a function or variable), mark the entity
+   as referenced.  */
+extern const char *assemble_name_resolve (const char *);
+
 /* Like assemble_name_raw, but should be used when NAME might refer to
an entity that is also represented as a tree (like a function or
variable).  If NAME does refer to such an entity, that entity will
--- gcc/varasm.c.jj 2020-01-12 11:54:38.533381424 +0100
+++ gcc/varasm.c2020-01-17 09:53:14.430239885 +0100
@@ -2589,20 +2589,16 @@ assemble_name_raw (FILE *file, const cha
 ASM_OUTPUT_LABELREF (file, name);
 }
 
-/* Like assemble_name_raw, but should be used when NAME might refer to
-   an entity that is also represented as a tree (like a function or
-   variable).  If NAME does refer to such an entity, that entity will
-   be marked as referenced.  */
-
-void
-assemble_name (FILE *file, const char *name)
+/* Return NAME that should actually be emitted, looking through
+   transparent aliases.  If NAME refers to an entity that is also
+   represented as a tree (like a function or variable), mark the entity
+   as referenced.  */
+const char *
+assemble_name_resolve (const char *name)
 {
-  const char *real_name;
-  tree id;
+  const char *real_name = targetm.strip_name_encoding (name);
+  tree id = maybe_get_identifier (real_name);
 
-  real_name = targetm.strip_name_encoding (name);
-
-  id = maybe_get_identifier (real_name);
   if (id)
 {
   tree id_orig = id;
@@ -2614,7 +2610,18 @@ assemble_name (FILE *file, const char *n
   gcc_assert (! TREE_CHAIN (id));
 }
 
-  assemble_name_raw (file, name);
+  return name;
+}
+
+/* Like assemble_name_raw, but should be used when NAME might refer to
+   an entity that is also represented as a tree (like a function or
+   variable).  If NAME does refer to such an entity, that entity will
+   be marked as referenced.  */
+
+void
+assemble_name (FILE *file, const char *name)
+{
+  assemble_name_raw (file, assemble_name_resolve (name));
 }
 
 /* Allocate SIZE bytes writable static space with a gensym name
--- gcc/config/i386/i386.h.jj   2020-01-17 09:22:47.524148012 +0100
+++ gcc/config/i386/i386.h  2020-01-17 10:21:10.822480641 +0100
@@ -2258,6 +2258,31 @@ extern int const svr4_dbx_register_map[F
 #define ASM_OUTPUT_FUNCTION_LABEL(FILE, NAME, DECL) \
   ix86_asm_output_function_label ((FILE), (NAME), (DECL))
 
+/* A C statement (sans semicolon) to output a reference to SYMBOL_REF SYM.
+   If not defined, assemble_name will be used to output the name of the
+   symbol.  This macro may be used to modify the way a symbol is referenced
+   depending on information encoded by TARGET_ENCODE_SECTION_INFO.  */
+
+#ifndef ASM_OUTPUT_SYMBOL_REF
+#define ASM_OUTPUT_SYMBOL_REF(FILE, SYM) \
+  do { \
+const char *name   \
+  = assemble_name_resolve (XSTR (x, 0));   \
+/* In -masm=att wrap identifiers that start with $ \
+   into parens.  */\
+if (name[0] == '$' \
+   && user_label_prefix[0

[PATCH] testsuite: effective_target_march_option: support checking for -march=*

2020-01-18 Thread Hans-Peter Nilsson
testsuite:
* lib/target-supports.exp (effective_target_march_option): New.

I see no (other) way to, depending on the absence of an option,
add an option for a specific target.  Specifically, I don't see
how to do this with dg-skip-if and its friends.

For gcc.dg/torture/pr26515.c and cris-elf, you get an error for
supplying multiple (different) -march=... options (and that
error is desirable), like testing cris-elf with
RUNTESTFLAGS=--target_board=cris-sim/arch=v8, where otherwise
-march=v10 and -march=v8 will both be given, and the test would
fail.

See example last.

Ok to commit the below?

---
 gcc/testsuite/lib/target-supports.exp | 4 
 1 file changed, 4 insertions(+)

diff --git a/gcc/testsuite/lib/target-supports.exp 
b/gcc/testsuite/lib/target-supports.exp
index 629b454..565cb62 100644
--- a/gcc/testsuite/lib/target-supports.exp
+++ b/gcc/testsuite/lib/target-supports.exp
@@ -2463,6 +2463,10 @@ proc check_effective_target_ti_c64xp { } {
 }]
 }
 
+# Check if a -march=... option is given, as part of (earlier) options.
+proc check_effective_target_march_option { } {
+return [check-flags [list "" { *-*-* } { "-march=*" } { "" } ]]
+}
 
 proc check_alpha_max_hw_available { } {
 return [check_runtime alpha_max_hw_available {
-- 
2.11.0

Example usage (one of several similar, which will be committed
together with the above, if approved):

diff --git a/gcc/testsuite/gcc.dg/torture/pr26515.c 
b/gcc/testsuite/gcc.dg/torture/pr26515.c
index a051e2e..ff765ba 100644
--- a/gcc/testsuite/gcc.dg/torture/pr26515.c
+++ b/gcc/testsuite/gcc.dg/torture/pr26515.c
@@ -1,4 +1,4 @@
-/* { dg-options "-march=v10" { target cris*-*-* } } */
+/* { dg-options "-march=v10" { target { cris*-*-* && { ! march_option } } } } 
*/
 struct i
 {
   long long i_size;

brgds, H-P


Re: [patch, fortran] Fix PR 44960, accepts invalid reference on function

2020-01-18 Thread Thomas Koenig

Am 18.01.20 um 12:44 schrieb Tobias Burnus:

function_reference_1.f90:9:8:

    9 | print *, foo(1)%a ! { dg-error "Syntax error" }
  |    1
Error: Syntax error in expression at (1)


The error message is not helpful at all.


Well, yes.  It is no better than what we currently have for the slightly
different test case

type t
  integer :: a
end type t
type(t) :: foo
external foo
print *, foo(1)%a
end

which is

a.f90:6:16:

6 | print *, foo(1)%a
  |1
Error: Syntax error in PRINT statement at (1)

(but at least that points to the right place).

I can see if I can also replace this with something more useful
(have to find the place where this is issued first, though).

Regards

Thomas


[committed] Reword a comment in varpool_node::ctor_useable_for_folding_p.

2020-01-18 Thread Gerald Pfeifer
2019-01-18  Gerald Pfeifer  

* varpool.c (ctor_useable_for_folding_p): Fix grammar.
---
 gcc/ChangeLog | 4 
 gcc/varpool.c | 7 ---
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/gcc/varpool.c b/gcc/varpool.c
index e5d632e0eb5..458cdf1bf37 100644
--- a/gcc/varpool.c
+++ b/gcc/varpool.c
@@ -352,9 +352,10 @@ varpool_node::ctor_useable_for_folding_p (void)
   return DECL_INITIAL (real_node->decl) != NULL;
 }
 
-  /* Alias of readonly variable is also readonly, since the variable is stored
- in readonly memory.  We also accept readonly aliases of non-readonly
- locations assuming that user knows what he is asking for.  */
+  /* An alias of a read-only variable is also read-only, since the variable
+ is stored in read-only memory.  We also accept read-only aliases of
+ non-read-only locations assuming that the user knows what he is asking
+ for.  */
   if (!TREE_READONLY (decl) && !TREE_READONLY (real_node->decl))
 return false;
 
-- 
2.24.1


[C++ coroutines] Initial implementation pushed to master.

2020-01-18 Thread Iain Sandoe
Hi,

Thanks to:

   * the reviewers, the code was definitely improved by your reviews.

   * those folks who tested the branch and/or compiler explorer 
 instance and reported problems with reproducers.

  * WG21 colleagues, especially Lewis and Gor for valuable input
and discussions on the design.

= TL;DR:

* This is not enabled by default (even for -std=c++2a), it needs -fcoroutines.

* Like all the C++20 support, it is experimental, perhaps more experimental
  than some other pieces because wording is still being amended.

* The FE/ME tests are run for ALL targets; in principle this should be target-
  agnostic, if we see fails then that is probably interesting input for the ABI
 panel.

 * I regstrapped on 64b LE and BE platforms and a 32b LE host with no observed
  issues or regressions.

 * it’s just slightly too big to send uncompressed so attached as a bz2.
 
 * commit is r10-6063-g49789fd08

thanks again to all those who helped,
Iain

==  The full covering note:

This is the squashed version of the first 6 patches that were split to
facilitate review.

The changes to libiberty (7th patch) to support demangling the co_await
operator stand alone and are applied separately.

The patch series is an initial implementation of a coroutine feature,
expected to be standardised in C++20.

Standardisation status (and potential impact on this implementation)


The facility was accepted into the working draft for C++20 by WG21 in
February 2019.  During following WG21 meetings, design and national body
comments have been reviewed, with no significant change resulting.

The current GCC implementation is against n4835 [1].

At this stage, the remaining potential for change comes from:

* Areas of national body comments that were not resolved in the version we
  have worked to:
  (a) handling of the situation where aligned allocation is available.
  (b) handling of the situation where a user wants coroutines, but does not
  want exceptions (e.g. a GPU).

* Agreed changes that have not yet been worded in a draft standard that we
  have worked to.

It is not expected that the resolution to these can produce any major
change at this phase of the standardisation process.  Such changes should be
limited to the coroutine-specific code.

ABI
---

The various compiler developers 'vendors' have discussed a minimal ABI to
allow one implementation to call coroutines compiled by another.

This amounts to:

1. The layout of a public portion of the coroutine frame.

 Coroutines need to preserve state across suspension points, the storage for
 this is called a "coroutine frame".

 The ABI mandates that pointers into the coroutine frame point to an area
 begining with two function pointers (to the resume and destroy functions
 described below); these are immediately followed by the "promise object"
 described in the standard.

 This is sufficient that the builtins can take a coroutine frame pointer and
 determine the address of the promise (or call the resume/destroy functions).
 
2. A number of compiler builtins that the standard library might use.

  These are implemented by this patch series.

3. This introduces a new operator 'co_await' the mangling for which is also
agreed between vendors (and has an issue filed for that against the upstream
c++abi).  Demangling for this is added to libiberty in a separate patch.

The ABI has currently no target-specific content (a given psABI might elect
to mandate alignment, but the common ABI does not do this).

Standard Library impact
---

The current implementations require addition of only a single header to
the standard library (no change to the runtime).  This header is part of
the patch.

GCC Implementation outline
--

The standard's design for coroutines does not decorate the definition of
a coroutine in any way, so that a function is only known to be a coroutine
when one of the keywords (co_await, co_yield, co_return) is encountered.

This means that we cannot special-case such functions from the outset, but
must process them differently when they are finalised - which we do from
"finish_function ()".

At a high level, this design of coroutine produces four pieces from the
original user's function:

  1. A coroutine state frame (taking the logical place of the activation
 record for a regular function).  One item stored in that state is the
 index of the current suspend point.
  2. A "ramp" function
 This is what the user calls to construct the coroutine frame and start
 the coroutine execution.  This will return some object representing the
 coroutine's eventual return value (or means to continue it when it it
 suspended).
  3. A "resume" function.
 This is what gets called when a the coroutine is resumed when suspended.
  4. A "destroy" function.
 This is what gets called when the coroutine state should be destroyed

Re: [PATCH] Fix ICE caused by swallowing a token in c_parser_consume_token

2020-01-18 Thread Jakub Jelinek
On Fri, Jan 17, 2020 at 03:11:40PM +0100, Jakub Jelinek wrote:
> On Fri, Jan 17, 2020 at 09:07:01AM -0500, Jason Merrill wrote:
> > On 12/30/19 3:51 PM, Kerem Kat wrote:
> > > +/* { dg-message "expected" "expected" { target *-*-* } .3 } */
> > 
> > Dejagnu doesn't like this:
> > 
> > ERROR: c-c++-common/pr92833-4.c  -std=c++98: expected integer but got ".3"
> > for " dg-message 4 "expected" "expected" { target *-*-* } .3 "
> 
> Yeah, it can handle .-3 if you want 3 lines before the one with dg-message,
> or .+3 if you want 3 lines after it, or . for current line (then you can
> leave that and target out), or exact line number, or some symbolic name if
> earlier marked.

Fixed thusly, committed as obvious to trunk.

2020-01-18  Jakub Jelinek  

PR c/92833
* c-c++-common/pr92833-4.c: Fix dg-message syntax.

--- gcc/testsuite/c-c++-common/pr92833-4.c.jj   2020-01-17 09:31:28.672194093 
+0100
+++ gcc/testsuite/c-c++-common/pr92833-4.c  2020-01-18 13:51:33.718394204 
+0100
@@ -1,7 +1,7 @@
 /* Six marker characters at EOF, causes conflict marker detector to peek 4
tokens. */
 
-/* { dg-message "expected" "expected" { target *-*-* } .3 } */
+/* { dg-message "expected" "expected" { target *-*-* } .+1 } */
 >>
 >>
 >>
\ No newline at end of file


Jakub



Re: [C++ coroutines] Initial implementation pushed to master.

2020-01-18 Thread Jakub Jelinek
On Sat, Jan 18, 2020 at 12:53:48PM +, Iain Sandoe wrote:
Thanks.

Shouldn't this be mentioned in https://gcc.gnu.org/projects/cxx-status.html
?

> * This is not enabled by default (even for -std=c++2a), it needs -fcoroutines.

And, if this is the planned case even for GCC 10 release, I think the
-fcoroutines option needs to be mentioned there too.

Jakub



Re: [C++ coroutines] Initial implementation pushed to master.

2020-01-18 Thread Iain Sandoe

Hi Jakub,

Jakub Jelinek  wrote:


On Sat, Jan 18, 2020 at 12:53:48PM +, Iain Sandoe wrote:
Thanks.

Shouldn't this be mentioned in https://gcc.gnu.org/projects/cxx-status.html
?

* This is not enabled by default (even for -std=c++2a), it needs  
-fcoroutines.


And, if this is the planned case even for GCC 10 release, I think the
-fcoroutines option needs to be mentioned there too.


Yes, (and I also need to update the wiki), just didn’t want to delay the  
commit any

more.

I will get onto those (on Monday probably).

Iain



Re: [PATCH] i386: Fix up -fdollars-in-identifiers with identifiers starting with $ in -masm=att (PR target/91298)

2020-01-18 Thread Uros Bizjak
On Sat, Jan 18, 2020 at 1:30 PM Jakub Jelinek  wrote:
>
> Hi!
>
> In AT&T syntax leading $ is special, so if we have identifiers that start
> with dollar, we usually fail to assemble it (or assemble incorrectly).
> As mentioned in the PR, what works is wrapping the identifiers inside of
> parens, like:
> movl$($a), %eax
> leaq($a)(,%rdi,4), %rax
> movl($a)(%rip), %eax
> movl($a)+16(%rip), %eax
> .globl  $a
> .type   $a, @object
> .size   $a, 72
> $a:
> .string "$a"
> .quad   ($a)
> (this is x86_64 -fno-pic -O2).  In some places ($a) is not accepted,
> like as .globl operand, in .type, .size, so the patch overrides
> ASM_OUTPUT_SYMBOL_REF rather than e.g. ASM_OUTPUT_LABELREF.
> I didn't want to duplicate what assemble_name is doing (following
> transparent aliases), so split assemble_name into two parts; just
> mere looking at the first character of a name before calling assemble_name
> wouldn't be good enough, a transparent alias could lead from a name
> not starting with $ to one starting with it and vice versa.
>
> Bootstrapped/regtested on x86_64-linux and i686-linux, ok for trunk?
>
> 2020-01-18  Jakub Jelinek  
>
> PR target/91298
> * output.h (assemble_name_resolve): Declare.
> * varasm.c (assemble_name_resolve): New function.
> (assemble_name): Use it.
> * config/i386/i386.h (ASM_OUTPUT_SYMBOL_REF): Define.
>
> * gcc.target/i386/pr91298-1.c: New test.
> * gcc.target/i386/pr91298-2.c: New test.

x86 part is OK, with a nit below.

Thanks,
Uros.

> --- gcc/output.h.jj 2020-01-12 11:54:36.692409199 +0100
> +++ gcc/output.h2020-01-17 09:51:27.606873017 +0100
> @@ -237,6 +237,12 @@ extern void assemble_label (FILE *, cons
> addition of an underscore).  */
>  extern void assemble_name_raw (FILE *, const char *);
>
> +/* Return NAME that should actually be emitted, looking through
> +   transparent aliases.  If NAME refers to an entity that is also
> +   represented as a tree (like a function or variable), mark the entity
> +   as referenced.  */
> +extern const char *assemble_name_resolve (const char *);
> +
>  /* Like assemble_name_raw, but should be used when NAME might refer to
> an entity that is also represented as a tree (like a function or
> variable).  If NAME does refer to such an entity, that entity will
> --- gcc/varasm.c.jj 2020-01-12 11:54:38.533381424 +0100
> +++ gcc/varasm.c2020-01-17 09:53:14.430239885 +0100
> @@ -2589,20 +2589,16 @@ assemble_name_raw (FILE *file, const cha
>  ASM_OUTPUT_LABELREF (file, name);
>  }
>
> -/* Like assemble_name_raw, but should be used when NAME might refer to
> -   an entity that is also represented as a tree (like a function or
> -   variable).  If NAME does refer to such an entity, that entity will
> -   be marked as referenced.  */
> -
> -void
> -assemble_name (FILE *file, const char *name)
> +/* Return NAME that should actually be emitted, looking through
> +   transparent aliases.  If NAME refers to an entity that is also
> +   represented as a tree (like a function or variable), mark the entity
> +   as referenced.  */
> +const char *
> +assemble_name_resolve (const char *name)
>  {
> -  const char *real_name;
> -  tree id;
> +  const char *real_name = targetm.strip_name_encoding (name);
> +  tree id = maybe_get_identifier (real_name);
>
> -  real_name = targetm.strip_name_encoding (name);
> -
> -  id = maybe_get_identifier (real_name);
>if (id)
>  {
>tree id_orig = id;
> @@ -2614,7 +2610,18 @@ assemble_name (FILE *file, const char *n
>gcc_assert (! TREE_CHAIN (id));
>  }
>
> -  assemble_name_raw (file, name);
> +  return name;
> +}
> +
> +/* Like assemble_name_raw, but should be used when NAME might refer to
> +   an entity that is also represented as a tree (like a function or
> +   variable).  If NAME does refer to such an entity, that entity will
> +   be marked as referenced.  */
> +
> +void
> +assemble_name (FILE *file, const char *name)
> +{
> +  assemble_name_raw (file, assemble_name_resolve (name));
>  }
>
>  /* Allocate SIZE bytes writable static space with a gensym name
> --- gcc/config/i386/i386.h.jj   2020-01-17 09:22:47.524148012 +0100
> +++ gcc/config/i386/i386.h  2020-01-17 10:21:10.822480641 +0100
> @@ -2258,6 +2258,31 @@ extern int const svr4_dbx_register_map[F
>  #define ASM_OUTPUT_FUNCTION_LABEL(FILE, NAME, DECL) \
>ix86_asm_output_function_label ((FILE), (NAME), (DECL))
>
> +/* A C statement (sans semicolon) to output a reference to SYMBOL_REF SYM.
> +   If not defined, assemble_name will be used to output the name of the
> +   symbol.  This macro may be used to modify the way a symbol is referenced
> +   depending on information encoded by TARGET_ENCODE_SECTION_INFO.  */
> +
> +#ifndef ASM_OUTPUT_SYMBOL_REF
> +#define ASM_OUTPUT_SYMBOL_REF(FILE, SYM) \
> +  do { \
> +  

[COMMITTED] config.gcc : Add crisv32-*-* and cris-*-linux*

2020-01-18 Thread Hans-Peter Nilsson
I'm sorry to say that there's no incentive to maintain
crisv32-*-* and cris-*-linux* configurations beyond nostalgia,
(and I'm out of that for the moment).  Support in the Linux
kernel for either applicable CRIS variant (CRIS v10 and CRIS
v32) is gone since 2018.  Their related part of the cc0
transition workload would be noticable.  Note that cris-elf
remains, but crisv32-elf and the CRIS v32 multilib will be
removed, at least for now.

I'm not completely happy about the message (the next-next line
after the context) "*** unless a maintainer comes forward"
because it'd have to be at an infinitesimal maintenance cost to
the cris-elf support.  Still, I'm not bothered enough to add
another case construct or means for "planned obsolescence".

Since we're very late at the gcc-10 cycle, maybe best to commit
the cc0 transition for CRIS to "gcc-11" instead, and leave these
targets enabled-but-obsoleted in gcc-10.  I believe that's the
formally more correct way to go, even if pragmatically no-one
cares.  I think I'll put that work on a branch for now.

---
 gcc/ChangeLog  | 4 
 gcc/config.gcc | 2 ++
 2 files changed, 6 insertions(+)

diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 423899d3988..b4c45a45087 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,7 @@
+2020-01-17  Hans-Peter Nilsson  
+
+   * config.gcc : Add crisv32-*-* and cris-*-linux*
+
 2020-01-17  Richard Sandiford  
 
* gimplify.c (gimplify_return_expr): Use poly_int_tree_p rather
diff --git a/gcc/config.gcc b/gcc/config.gcc
index 5a2f1730477..5532a7be6ac 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -248,6 +248,8 @@ md_file=
 # Obsolete configurations.
 case ${target} in
   tile*-*-*\
+ | crisv32-*-* \
+ | cris-*-linux*   \
  )
 if test "x$enable_obsolete" != xyes; then
   echo "*** Configuration ${target} is obsolete." >&2
-- 
2.11.0

brgds, H-P


Re: [PATCH] contrib/download_prerequisites: Use http instead of ftp

2020-01-18 Thread Gerald Pfeifer
On Tue, 12 Nov 2019, Janne Blomqvist wrote:
> Convert the download_prerequisites script to use http instead of
> ftp. This works better with firewalls, proxies, and so on. It's also
> faster, a quick test on my system before patch:

Plus common web browsers are starting to deprecate and actually
remove support for the FTP protocol.  

Thank you for making this change, and I've made some associated
changes to our web pages, too, this week.  If you see any further
ones, let's proceed.

> Question: Should we in fact use https? I haven't used it since
> download_prerequisites checks that the sha512/md5 matches the 
> ones in the GCC tree, but maybe there are reasons?

I don't see a strong case for https over http in this context,
but would not be opposed either.

Gerald


[committed][GCC][PATCH][AArch64] Fix unused variable warning breaking bootstrap.

2020-01-18 Thread Tamar Christina
Hi All,

This marks the parameter &fi as unused so it doesn't
cause a boostrap failure.

Bootstrapped aarch64-none-linux-gnu.

committed under the obvious rule.

Thanks,
Tamar

gcc/ChangeLog:

2020-01-18  Tamar Christina  

* config/aarch64/aarch64-sve-builtins-base.cc (memory_vector_mode):
Mark parameter unused.

-- 
diff --git a/gcc/config/aarch64/aarch64-sve-builtins-base.cc b/gcc/config/aarch64/aarch64-sve-builtins-base.cc
index 868a6afaf2e77a77df8a97e2c874d52f5c0b7029..b48932f6a4fd265e1f5d0bd62d222c163857b63e 100644
--- a/gcc/config/aarch64/aarch64-sve-builtins-base.cc
+++ b/gcc/config/aarch64/aarch64-sve-builtins-base.cc
@@ -1206,7 +1206,7 @@ class svld1ro_impl : public load_replicate
 {
 public:
   machine_mode
-  memory_vector_mode (const function_instance &fi) const OVERRIDE
+  memory_vector_mode (const function_instance &fi ATTRIBUTE_UNUSED) const OVERRIDE
   {
 return OImode;
   }



Re: Analyzer committed to master (was Re: Analyzer status)

2020-01-18 Thread Rainer Orth
Hi David,

>> I'm seeing quite a number of failures on Solaris (both sparc and
>> x86),
>> but also some on 32-bit Linux/x86:
>> 
>>  Running target unix/-m32
>> +FAIL: gcc.dg/analyzer/data-model-1.c  (test for warnings, line 610)
>> +FAIL: gcc.dg/analyzer/data-model-1.c  (test for warnings, line 611)
>> +FAIL: gcc.dg/analyzer/data-model-1.c  (test for warnings, line 615)
>> +FAIL: gcc.dg/analyzer/data-model-1.c  (test for warnings, line 616)
>> +FAIL: gcc.dg/analyzer/data-model-1.c  (test for warnings, line 657)
>> +FAIL: gcc.dg/analyzer/data-model-1.c  (test for warnings, line 658)
>> +FAIL: gcc.dg/analyzer/data-model-1.c  (test for warnings, line 662)
>> +FAIL: gcc.dg/analyzer/data-model-1.c  (test for warnings, line 663)
>> +FAIL: gcc.dg/analyzer/data-model-1.c  (test for warnings, line 705)
>> +FAIL: gcc.dg/analyzer/data-model-1.c  (test for warnings, line 706)
>> +FAIL: gcc.dg/analyzer/data-model-1.c  (test for warnings, line 710)
>> +FAIL: gcc.dg/analyzer/data-model-1.c  (test for warnings, line 711)
>> +FAIL: gcc.dg/analyzer/data-model-1.c  (test for warnings, line 753)
>> +FAIL: gcc.dg/analyzer/data-model-1.c  (test for warnings, line 754)
>> +FAIL: gcc.dg/analyzer/data-model-1.c  (test for warnings, line 758)
>> +FAIL: gcc.dg/analyzer/data-model-1.c  (test for warnings, line 759)
>> +FAIL: gcc.dg/analyzer/data-model-1.c (test for excess errors)
>
> Thanks, and sorry about this; I've filed this for myself as:
>   https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93281
> and have been investigating.
>
>> I'll file PRs for the Solaris ones once I get to it.

I've now filed PR analyzer/93316 for the rest; most of the errors there
also occur on at least one non-Solaris target.

Rainer

-- 
-
Rainer Orth, Center for Biotechnology, Bielefeld University


[COMMITTED] libgcc: cris: config/cris/arit.c (DS): Apply attribute __fallthrough__.

2020-01-18 Thread Hans-Peter Nilsson
libgcc:
* config/cris/arit.c (DS): Apply attribute __fallthrough__.

Without this, there are, for each compilation of arit.c, 30ish
occurrences of "this statement may fall through
[-Wimplicit-fallthrough=]", for lines that look like
case 32: DS; case 31: DS; case 30: DS; case 29: DS;

Noticed while working on the cc0 transition.  Looks like I don't
inspect the logs often.

Adding -Werror to libgcc build-options should perhaps be
considered?

---
 libgcc/config/cris/arit.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/libgcc/config/cris/arit.c b/libgcc/config/cris/arit.c
index ba1c1e7..3369559 100644
--- a/libgcc/config/cris/arit.c
+++ b/libgcc/config/cris/arit.c
@@ -128,7 +128,8 @@ do_31div (unsigned long a, unsigned long b)
  i.e. "a - (b - 1) == (a - b) + 1".  */
   b--;
 
-#define DS __asm__ ("dstep %2,%0" : "=r" (a) : "0" (a), "r" (b))
+#define DS __asm__ ("dstep %2,%0" : "=r" (a) : "0" (a), "r" (b)); \
+ __attribute__ ((__fallthrough__))
 
   switch (quot_digits)
 {
-- 
2.11.0

brgds, H-P


New Chinese (traditional) PO file for 'gcc' (version 9.1.0)

2020-01-18 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 Chinese (traditional) team of translators.  The file is available at:

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

(This file, 'gcc-9.1.0.zh_TW.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.




New Chinese (traditional) PO file for 'gcc' (version 9.1.0)

2020-01-18 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 Chinese (traditional) team of translators.  The file is available at:

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

(This file, 'gcc-9.1.0.zh_TW.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] ipa-profile.c: reset call_sums state within ipa-profile.c (PR ipa/93315)

2020-01-18 Thread Jan Hubicka
> > > On Mon, 2020-01-13 at 11:23 +0800, luoxhu wrote:
> > > On 2020/1/10 19:08, Jan Hubicka wrote:
> > > > OK. You will need to do the obvious updates for Martin's patch
> > > > which turned some member functions into static functions.
> > > > 
> > > > Honza
> > > 
> > > Thanks a lot!  Rebased & updated, will commit below patch shortly
> > > when git push is ready.
> > > 
> > > 
> > > v8:
> > >  1. Rebase to master with Martin's static function (r280043) comments
> > > merge.
> > > Boostrap/testsuite/SPEC2017 tested pass on Power8-LE.
> > >  2. TODO:
> > > 2.1. C++ devirt for multiple speculative call targets.
> > > 2.2. ipa-icf ipa_merge_profiles refine with COMDAT inline
> > > testcase.
> > 
> > [...]
> > 
> > > diff --git a/gcc/ipa-profile.c b/gcc/ipa-profile.c
> > 
> > [...]
> > 
> > > +static ipa_profile_call_summaries *call_sums = NULL;
> > 
> > [...]
> >  
> > >  static void
> > >  ipa_profile_generate_summary (void)
> > > @@ -169,7 +261,10 @@ ipa_profile_generate_summary (void)
> > >basic_block bb;
> > >  
> > >hash_table hashtable (10);
> > > -  
> > > +
> > > +  gcc_checking_assert (!call_sums);
> > > +  call_sums = new ipa_profile_call_summaries (symtab);
> > > +
> > 
> > [...]
> > 
> > Unfortunately, this assertion is failing for most of the testcases in
> > jit.dg, reducing the number of PASS results in jit.sum from 10473 down
> > to 3254 in my builds.
> > 
> > 
> > Counter-intuitively, "jit" is not in --enable-languages=all (as it also
> > needs --enable-host-shared at configure time, which slows down the
> > built compiler code).
> > 
> > 
> > The jit code expects to be able to invoke the compiler code more than
> > once within the same process, purging all state.
> > 
> > It looks like this "call_sums" state needs deleting and resetting to
> > NULL after the compiler has run (or else we'll likely get an ICE due to
> > using old symtab/call summaries in subsequent in-process runs of the
> > compiler).
> > 
> > Is there a natural place to do that within the IPA hooks?  
> > 
> > 
> > Alternatively the following patch seems to fix things (not yet fully
> > tested though); hopefully it seems sane.
> 
> Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu; fixes
> the issue with jit.sum.
> 
> OK for master?
> 
> gcc/ChangeLog:
>   PR ipa/93315
>   * ipa-profile.c (ipa_profile_c_finalize): New function.
>   * toplev.c (toplev::finalize): Call it.
>   * toplev.h (ipa_profile_c_finalize): New decl.

Other similar summaries are freed at the end of execute method.  I think
that we probably want to do the same for consistency as well.
Advantage is that this releases memory prior late compilation/streaming.

I think for all these summaries we have leak for -flto compilation where
we do not call execute methods and thus we do not free the summaries.
Is this problem for jit?

Honza


Re: [patch, fortran] Fix PR 44960, accepts invalid reference on function

2020-01-18 Thread Thomas Koenig

Hello world,

I found an ommission in primary.c which prevented issuing a
more specific error instead of "syntax error" for the case
when a function was declared in an EXTERNAL statement,
and I have now gone for the "Unexpected junk after foo"
variant.

Regression-tested. OK for trunk?

Regards

Thomas

2020-01-18  Thomas König  

PR fortran/44960
* primary.c (gfc_match_rvalue): Break after setting MATCH_ERROR.
* resolve.c (resolve_function): Issue error when a
function call contains a reference.

2020-01-18  Thomas König  

PR fortran/44960
* gfortran.dg/function_reference_1.f90: New test.



diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c
index 07b8ac08ba2..bd50827bb15 100644
--- a/gcc/fortran/primary.c
+++ b/gcc/fortran/primary.c
@@ -3661,6 +3661,7 @@ gfc_match_rvalue (gfc_expr **result)
 	  gfc_error ("The leftmost part-ref in a data-ref cannot be a "
 		 "function reference at %C");
 	  m = MATCH_ERROR;
+	  break;
 	}
 
   m = MATCH_YES;
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 6f2a4c4d65a..697afadb378 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -3129,6 +3129,13 @@ resolve_function (gfc_expr *expr)
 	  || sym->intmod_sym_id == GFC_ISYM_CAF_SEND))
 return true;
 
+  if (expr->ref)
+{
+  gfc_error ("Unexpected junk after %qs at %L", expr->symtree->n.sym->name,
+		 &expr->where);
+  return false;
+}
+
   if (sym && sym->attr.intrinsic
   && !gfc_resolve_intrinsic (sym, &expr->where))
 return false;
diff --git a/gcc/testsuite/gfortran.dg/function_reference_1.f90 b/gcc/testsuite/gfortran.dg/function_reference_1.f90
new file mode 100644
index 000..be634c9dd4b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/function_reference_1.f90
@@ -0,0 +1,11 @@
+! { dg-do compile }
+! PR 44960 - this was erroneusly accepted.
+! Original test case by Daniel Franke.
+
+type t
+  integer :: a
+end type t
+type(t) :: foo
+print *, foo(1)%a ! { dg-error "Unexpected junk" }
+end
+
diff --git a/gcc/testsuite/gfortran.dg/function_reference_2.f90 b/gcc/testsuite/gfortran.dg/function_reference_2.f90
new file mode 100644
index 000..375c58bb6d2
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/function_reference_2.f90
@@ -0,0 +1,10 @@
+! { dg-do compile }
+! PR 44960 - improve the error message
+program main
+  type t
+  integer :: a
+end type t
+type(t) :: foo
+external foo
+i = foo(1)%1 ! { dg-error "leftmost part-ref in a data-ref cannot be a function reference" }
+end
! { dg-do compile }
! PR 44960 - improve the error message
program main
  type t
  integer :: a
end type t
type(t) :: foo
external foo
i = foo(1)%1 ! { dg-error "leftmost part-ref in a data-ref cannot be a function reference" }
end
! { dg-do compile }
! PR 44960 - this was erroneusly accepted.
! Original test case by Daniel Franke.

type t
  integer :: a
end type t
type(t) :: foo
print *, foo(1)%a ! { dg-error "Unexpected junk" }
end



[PATCH] c++: Fix coroutines.cc build for nvptx-none target

2020-01-18 Thread Jakub Jelinek
Hi!

When building offloading cross-compiler from x86_64-linux to nvptx-none, the
build fails with:
../../gcc/cp/coroutines.cc: In function 'tree_node* 
get_fn_local_identifier(tree, const char*)':
../../gcc/cp/coroutines.cc:2255:12: error: expected ';' before 'char'
 2255 |   sep = "$"
  |^
  |;
..
 2262 |   char *an;
  |     

I'll commit the following fix as obvious if it builds successfully.

2020-01-18  Jakub Jelinek  

* coroutines.cc (get_fn_local_identifier): Fix NO_DOT_IN_LABEL
but non-NO_DOLLAR_IN_LABEL case build.

--- gcc/cp/coroutines.cc.jj 2020-01-18 13:47:09.318360691 +0100
+++ gcc/cp/coroutines.cc2020-01-18 19:05:48.349119608 +0100
@@ -2252,7 +2252,7 @@ get_fn_local_identifier (tree orig, cons
   sep = ".";
 #else
 #ifndef NO_DOLLAR_IN_LABEL
-  sep = "$"
+  sep = "$";
 #else
   sep = "_";
   pfx = "__";

Jakub



Re: [patch, fortran] Fix PR 44960, accepts invalid reference on function

2020-01-18 Thread Tobias Burnus

Hello Thomas,

looks good to me. Nice catch the missing "break".

Tobias

PS: I think it does not exercise a differ code path, but instead of 
derived types, using a character string works as well. The following is 
accepted with the unmodified trunk:


character(len=4):: str
print *, str(1)(1:4)
end

On 1/18/20 7:04 PM, Thomas Koenig wrote:

Hello world,

I found an ommission in primary.c which prevented issuing a
more specific error instead of "syntax error" for the case
when a function was declared in an EXTERNAL statement,
and I have now gone for the "Unexpected junk after foo"
variant.

Regression-tested. OK for trunk?

Regards

Thomas

2020-01-18  Thomas König  

PR fortran/44960
* primary.c (gfc_match_rvalue): Break after setting MATCH_ERROR.
* resolve.c (resolve_function): Issue error when a
function call contains a reference.

2020-01-18  Thomas König  

PR fortran/44960
* gfortran.dg/function_reference_1.f90: New test.





Re: [PATCH] RFC: testsuite: add minimium version to dg-require-dot (PR analyzer/93293)

2020-01-18 Thread Mike Stump
On Jan 17, 2020, at 2:07 PM, David Malcolm  wrote:
> 
> I ran into difficulties with the Graphviz format changing from under
> me during an upgrade, where the new version of "dot" would reject .dot
> files generated by the analyzer.
> 
> Thoughts?

[ consider this a peanut gallery comment ] Another thought would be to bump the 
version required and just not worry about it.  The people that have, like and 
use dot, are likely small, so I'd like to think they can update it.  I don't 
have/use dot, so, I'm happy to defer to others that have, use, and play with 
dot.

Re: [PATCH] analyzer: ensure that all DejaGnu tests have unique names

2020-01-18 Thread Mike Stump
On Jan 17, 2020, at 1:30 PM, David Malcolm  wrote:
> 
> Jeff noticed various name collisions of test names in the analyzer
> testsuite, due to me using empty comment strings when using line
> offsets in test directives.
> 
> This patch adds non-empty comment strings to such DejaGnu directives
> throughout the analyzer testsuite.
> 
> OK for master?

Ok.


Re: [PATCH] testsuite: effective_target_march_option: support checking for -march=*

2020-01-18 Thread Mike Stump


> On Jan 18, 2020, at 4:35 AM, Hans-Peter Nilsson  wrote:
> 
> testsuite:
>   * lib/target-supports.exp (effective_target_march_option): New.
> 
> I see no (other) way to, depending on the absence of an option,
> add an option for a specific target.  Specifically, I don't see
> how to do this with dg-skip-if and its friends.
> 
> For gcc.dg/torture/pr26515.c and cris-elf, you get an error for
> supplying multiple (different) -march=... options (and that
> error is desirable), like testing cris-elf with
> RUNTESTFLAGS=--target_board=cris-sim/arch=v8, where otherwise
> -march=v10 and -march=v8 will both be given, and the test would
> fail.
> 
> Ok to commit the below?

Ok.  [ If the arm folks want to chime in with any great ideas... ]