From b4147d19f10de742a8b091a420b2c437ac9ffd5d Mon Sep 17 00:00:00 2001
From: Andrew Sutton <asutton@lock3software.com>
Date: Mon, 2 Dec 2019 09:26:40 -0500
Subject: [PATCH 1/1] Fix PR c++/92739.

gcc/cp/
	* parser.c (cp_parser_constraint_requires_parens): Exclude attributes
	as postfix expressions.

gcc/testsuite/
	* g++.dg/concepts-pr92739.C: New test.
---
 gcc/cp/ChangeLog        | 6 ++++++
 gcc/cp/parser.c         | 8 ++++++++
 gcc/testsuite/ChangeLog | 5 +++++
 3 files changed, 19 insertions(+)

diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 3a6bf059a2d..e806dbef262 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2019-12-02  Andrew Sutton  <asutton@lock3software.com>
+
+	PR c++/92739
+	* parser.c (cp_parser_constraint_requires_parens): Exclude attributes
+	as postfix expressions.
+
 2019-11-29  Jakub Jelinek  <jakub@redhat.com>
 
 	PR c++/60228
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index fb030022627..0e3178f0c71 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -27218,6 +27218,14 @@ cp_parser_constraint_requires_parens (cp_parser *parser, bool lambda_p)
 	  gcc_fallthrough ();
 	}
       case CPP_OPEN_SQUARE:
+	{
+	  /* A primary-constraint-expression followed by a '[[' is not a
+	     postfix expression.  */
+	  if (cp_lexer_nth_token_is (parser->lexer, 2, CPP_OPEN_SQUARE))
+	    return pce_ok;
+
+	  gcc_fallthrough ();
+	}
       case CPP_PLUS_PLUS:
       case CPP_MINUS_MINUS:
       case CPP_DOT:
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index bc991e229e9..82e7f4d6884 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2019-12-02  Andrew Sutton  <asutton@lock3software.com>
+
+	PR c++/92739
+	* g++.dg/concepts-pr92739.C: New test.
+
 2019-12-02  Martin Liska  <mliska@suse.cz>
 
 	* g++.dg/lto/odr-7_0.C: New test.
-- 
2.18.0

