diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2018-01-31 16:07:06 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2018-01-31 16:07:06 +0000 |
commit | be197ade2e5fb42606339080b08e885824fb9644 (patch) | |
tree | 0ac357c9bc904583891f081050ee4742f41b593e /gcc | |
parent | 4ecd9c156cb6a4d67d59563b73cccfd0d5045a50 (diff) | |
download | gcc-be197ade2e5fb42606339080b08e885824fb9644.zip gcc-be197ade2e5fb42606339080b08e885824fb9644.tar.gz gcc-be197ade2e5fb42606339080b08e885824fb9644.tar.bz2 |
re PR c++/84092 (ICE on C++14 code with variable template: in build_qualified_name, at cp/tree.c:2043)
/cp
2018-01-31 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/84092
* semantics.c (finish_qualified_id_expr): When handling an
UNBOUND_CLASS_TEMPLATE only adjust qualifying_class and expr.
/testsuite
2018-01-31 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/84092
* g++.dg/cpp1y/var-templ57.C: New.
From-SVN: r257242
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 12 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/var-templ57.C | 4 |
4 files changed, 21 insertions, 6 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index f89f3ce..ee06ba6 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2018-01-31 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/84092 + * semantics.c (finish_qualified_id_expr): When handling an + UNBOUND_CLASS_TEMPLATE only adjust qualifying_class and expr. + 2018-01-31 Marek Polacek <polacek@redhat.com> PR c++/84138 diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index b758051..7616034 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -2001,12 +2001,12 @@ finish_qualified_id_expr (tree qualifying_class, if (template_p) { if (TREE_CODE (expr) == UNBOUND_CLASS_TEMPLATE) - /* cp_parser_lookup_name thought we were looking for a type, - but we're actually looking for a declaration. */ - expr = build_qualified_name (/*type*/NULL_TREE, - TYPE_CONTEXT (expr), - TYPE_IDENTIFIER (expr), - /*template_p*/true); + { + /* cp_parser_lookup_name thought we were looking for a type, + but we're actually looking for a declaration. */ + qualifying_class = TYPE_CONTEXT (expr); + expr = TYPE_IDENTIFIER (expr); + } else check_template_keyword (expr); } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 27c5685..60756da 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-01-31 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/84092 + * g++.dg/cpp1y/var-templ57.C: New. + 2018-01-31 Marek Polacek <polacek@redhat.com> PR c++/84138 diff --git a/gcc/testsuite/g++.dg/cpp1y/var-templ57.C b/gcc/testsuite/g++.dg/cpp1y/var-templ57.C new file mode 100644 index 0000000..030e9a2 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/var-templ57.C @@ -0,0 +1,4 @@ +// PR c++/84092 +// { dg-do compile { target c++14 } } + +template < typename T > int a (T::template b); |