public inbox for gcc-cvs@sourceware.org
help / color / mirror / Atom feed
* [gcc(refs/users/marxin/heads/PR92440-use-note)] Fix "PR c++/92804 ICE trying to use concept as a nested-name-specifier"
@ 2020-01-27 14:08 Martin Liska
0 siblings, 0 replies; only message in thread
From: Martin Liska @ 2020-01-27 14:08 UTC (permalink / raw)
To: gcc-cvs
https://gcc.gnu.org/g:c91072247eb066ec9c6cd0b0f949c7dae691e46c
commit c91072247eb066ec9c6cd0b0f949c7dae691e46c
Author: Paolo Carlini <paolo.carlini@oracle.com>
Date: Thu Jan 23 19:28:23 2020 +0100
Fix "PR c++/92804 ICE trying to use concept as a nested-name-specifier"
A rather simple ICE where we failed to properly check for concept-ids
uses in nested-name-specifiers.
Tested x86_64-linux.
/cp
PR c++/92804
* parser.c (cp_parser_nested_name_specifier_opt): Properly
diagnose concept-ids.
/testsuite
PR c++/92804
* g++.dg/concepts/pr92804-1.C: New.
* g++.dg/concepts/pr92804-2.C: New.
Diff:
---
gcc/cp/ChangeLog | 6 ++++++
gcc/cp/parser.c | 23 +++++++++++++++++------
gcc/testsuite/ChangeLog | 6 ++++++
gcc/testsuite/g++.dg/concepts/pr92804-1.C | 19 +++++++++++++++++++
gcc/testsuite/g++.dg/concepts/pr92804-2.C | 19 +++++++++++++++++++
5 files changed, 67 insertions(+), 6 deletions(-)
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index b13ee2b..c01bece 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2020-01-23 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/92804
+ * parser.c (cp_parser_nested_name_specifier_opt): Properly
+ diagnose concept-ids.
+
2020-01-23 Jason Merrill <jason@redhat.com>
PR c++/93331 - ICE with __builtin_strchr.
diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c
index dc07dc5..72037ee 100644
--- a/gcc/cp/parser.c
+++ b/gcc/cp/parser.c
@@ -6467,16 +6467,27 @@ cp_parser_nested_name_specifier_opt (cp_parser *parser,
tree fns = get_fns (tid);
if (OVL_SINGLE_P (fns))
tmpl = OVL_FIRST (fns);
- error_at (token->location, "function template-id %qD "
- "in nested-name-specifier", tid);
+ if (function_concept_p (fns))
+ error_at (token->location, "concept-id %qD "
+ "in nested-name-specifier", tid);
+ else
+ error_at (token->location, "function template-id "
+ "%qD in nested-name-specifier", tid);
}
else
{
- /* Variable template. */
tmpl = TREE_OPERAND (tid, 0);
- gcc_assert (variable_template_p (tmpl));
- error_at (token->location, "variable template-id %qD "
- "in nested-name-specifier", tid);
+ if (variable_concept_p (tmpl)
+ || standard_concept_p (tmpl))
+ error_at (token->location, "concept-id %qD "
+ "in nested-name-specifier", tid);
+ else
+ {
+ /* Variable template. */
+ gcc_assert (variable_template_p (tmpl));
+ error_at (token->location, "variable template-id "
+ "%qD in nested-name-specifier", tid);
+ }
}
if (tmpl)
inform (DECL_SOURCE_LOCATION (tmpl),
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ef4c6fc..93fb3be 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,9 @@
+2020-01-23 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/92804
+ * g++.dg/concepts/pr92804-1.C: New.
+ * g++.dg/concepts/pr92804-2.C: Likewise.
+
2020-01-23 David Malcolm <dmalcolm@redhat.com>
PR analyzer/93375
diff --git a/gcc/testsuite/g++.dg/concepts/pr92804-1.C b/gcc/testsuite/g++.dg/concepts/pr92804-1.C
new file mode 100644
index 0000000..cc21426
--- /dev/null
+++ b/gcc/testsuite/g++.dg/concepts/pr92804-1.C
@@ -0,0 +1,19 @@
+// { dg-do compile { target c++17 } }
+// { dg-options "-fconcepts" }
+
+template<typename T>
+concept foo = true; // { dg-message "declared here" }
+
+template<typename T>
+void bar(T t)
+{
+ if constexpr (foo<T>::value) // { dg-error "17:concept-id .foo<T>. in nested-name-specifier" }
+ // { dg-error "expected|value" "" { target c++17 } .-1 }
+ {
+ }
+}
+
+int main()
+{
+ bar(1);
+}
diff --git a/gcc/testsuite/g++.dg/concepts/pr92804-2.C b/gcc/testsuite/g++.dg/concepts/pr92804-2.C
new file mode 100644
index 0000000..32a1554
--- /dev/null
+++ b/gcc/testsuite/g++.dg/concepts/pr92804-2.C
@@ -0,0 +1,19 @@
+// { dg-do compile { target c++17 } }
+// { dg-options "-fconcepts-ts" }
+
+template<typename T>
+concept bool foo() { return true; }; // { dg-message "declared here" }
+
+template<typename T>
+void bar(T t)
+{
+ if constexpr (foo<T>::value) // { dg-error "17:concept-id .foo<T>. in nested-name-specifier" }
+ // { dg-error "expected|value" "" { target *-*-* } .-1 }
+ {
+ }
+}
+
+int main()
+{
+ bar(1);
+}
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2020-01-27 14:08 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-01-27 14:08 [gcc(refs/users/marxin/heads/PR92440-use-note)] Fix "PR c++/92804 ICE trying to use concept as a nested-name-specifier" Martin Liska
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).