aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Carlini <paolo.carlini@oracle.com>2013-05-01 09:21:30 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2013-05-01 09:21:30 +0000
commit57c16a5eb68d20cf87ee79558de7278f650a40b4 (patch)
treee6a8129771e9091b677fb54d3893262c9cfa9d93
parente1e14947cfd9cb9db63ce681e5deb8cdb5be03e4 (diff)
downloadgcc-57c16a5eb68d20cf87ee79558de7278f650a40b4.zip
gcc-57c16a5eb68d20cf87ee79558de7278f650a40b4.tar.gz
gcc-57c16a5eb68d20cf87ee79558de7278f650a40b4.tar.bz2
re PR c++/57092 (Using decltype of function pointer type to define a data member causes compiler crash)
/cp 2013-05-01 Paolo Carlini <paolo.carlini@oracle.com> PR c++/57092 * semantics.c (finish_decltype_type): Handle instantiated template non-type arguments. /testsuite 2013-05-01 Paolo Carlini <paolo.carlini@oracle.com> PR c++/57092 * g++.dg/cpp0x/decltype53.C: New. From-SVN: r198487
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/semantics.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/decltype53.C11
4 files changed, 25 insertions, 2 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index c614ebe..09f10df 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,3 +1,9 @@
+2013-05-01 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/57092
+ * semantics.c (finish_decltype_type): Handle instantiated template
+ non-type arguments.
+
2013-04-28 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/56450
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index 2a0d5bc..a06a23a 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -5416,8 +5416,9 @@ finish_decltype_type (tree expr, bool id_expression_or_member_access_p,
break;
default:
- gcc_unreachable ();
- return error_mark_node;
+ /* Handle instantiated template non-type arguments. */
+ type = TREE_TYPE (expr);
+ break;
}
}
else
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index 1016036..e8c71e5 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2013-05-01 Paolo Carlini <paolo.carlini@oracle.com>
+
+ PR c++/57092
+ * g++.dg/cpp0x/decltype53.C: New.
+
2013-04-30 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/57071
diff --git a/gcc/testsuite/g++.dg/cpp0x/decltype53.C b/gcc/testsuite/g++.dg/cpp0x/decltype53.C
new file mode 100644
index 0000000..4580e97
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/decltype53.C
@@ -0,0 +1,11 @@
+// PR c++/57092
+// { dg-do compile { target c++11 } }
+
+template <void (*F)(int)>
+class B {
+ decltype(F) v;
+};
+
+void foo(int) {}
+
+B<foo> o;