aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2011-03-29 14:47:56 -0400
committerJason Merrill <jason@gcc.gnu.org>2011-03-29 14:47:56 -0400
commit5b9e705e63f09c873cd19b7e79a0b7019d13f1ac (patch)
treedb769131e5f3d8b27d7e95b19a15e83a31c602d9 /gcc
parent00a0d6f3590e0e9891fc01d21667de892d6a89c6 (diff)
downloadgcc-5b9e705e63f09c873cd19b7e79a0b7019d13f1ac.zip
gcc-5b9e705e63f09c873cd19b7e79a0b7019d13f1ac.tar.gz
gcc-5b9e705e63f09c873cd19b7e79a0b7019d13f1ac.tar.bz2
re PR c++/48319 ([C++0x] Segmentation fault in instantiation of std::is_constructible<int>)
PR c++/48319 * pt.c (value_dependent_expression_p): Handle TEMPLATE_ID_EXPR. From-SVN: r171689
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog3
-rw-r--r--gcc/cp/pt.c5
-rw-r--r--gcc/testsuite/ChangeLog2
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/dependent1.C25
4 files changed, 35 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 3d0c02a..c4df48d 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,8 @@
2011-03-29 Jason Merrill <jason@redhat.com>
+ PR c++/48319
+ * pt.c (value_dependent_expression_p): Handle TEMPLATE_ID_EXPR.
+
PR c++/48089
* semantics.c (potential_constant_expression_1): Change error about
use of *this in constructor into sorry.
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index dfc726a..aa0901b 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -18218,6 +18218,11 @@ value_dependent_expression_p (tree expression)
return false;
}
+ case TEMPLATE_ID_EXPR:
+ /* If a TEMPLATE_ID_EXPR involves a dependent name, it will be
+ type-dependent. */
+ return type_dependent_expression_p (expression);
+
default:
/* A constant expression is value-dependent if any subexpression is
value-dependent. */
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index fbd21e5..9515798 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,7 @@
2011-03-29 Jason Merrill <jason@redhat.com>
+ * g++.dg/cpp0x/dependent1.C: New.
+
* g++.dg/cpp0x/constexpr-48089.C: Adjust.
* g++.dg/cpp0x/constexpr-memfn1.C: New.
diff --git a/gcc/testsuite/g++.dg/cpp0x/dependent1.C b/gcc/testsuite/g++.dg/cpp0x/dependent1.C
new file mode 100644
index 0000000..1ceeeaf
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/dependent1.C
@@ -0,0 +1,25 @@
+// PR c++/48319
+// { dg-options -std=c++0x }
+// We were failing to recognize declval<_Args1> as dependent.
+
+template<typename Tp> Tp declval() noexcept;
+
+template<typename _Tp>
+class __is_constructible_helper
+{
+ typedef char __one;
+ typedef struct { char __arr[2]; } __two;
+
+ template<typename _Tp1, typename... _Args1>
+ static decltype(_Tp1(declval<_Args1>()...), __one()) __test(int);
+
+ template<typename, typename...>
+ static __two __test(...);
+
+public:
+ static const bool __value = sizeof(__test<_Tp>(0)) == 1;
+};
+
+int main() {
+ return __is_constructible_helper<int>::__value;
+}