aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJason Merrill <jason@redhat.com>2011-03-02 13:18:31 -0500
committerJason Merrill <jason@gcc.gnu.org>2011-03-02 13:18:31 -0500
commitc6f54c7aa725bb4bb8bb3af16cc49a855b3587ae (patch)
treeb6733e230013cc491b7cced2c8b8ccffb202e1cd /gcc
parentf158c8d0ed150a33356f17f9b8a80e1525a98263 (diff)
downloadgcc-c6f54c7aa725bb4bb8bb3af16cc49a855b3587ae.zip
gcc-c6f54c7aa725bb4bb8bb3af16cc49a855b3587ae.tar.gz
gcc-c6f54c7aa725bb4bb8bb3af16cc49a855b3587ae.tar.bz2
re PR c++/47200 ([C++0x] ICE: in adjust_temp_type, at cp/semantics.c:5821 with missing definition of constexpr function)
PR c++/47200 * semantics.c (cxx_bind_parameters_in_call): Don't call adjust_temp_type on non-constant args. From-SVN: r170620
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog4
-rw-r--r--gcc/cp/semantics.c3
-rw-r--r--gcc/testsuite/ChangeLog4
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/constexpr-non-const-arg2.C16
4 files changed, 27 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog
index 1a522e7..2a5244f 100644
--- a/gcc/cp/ChangeLog
+++ b/gcc/cp/ChangeLog
@@ -1,5 +1,9 @@
2011-03-01 Jason Merrill <jason@redhat.com>
+ PR c++/47200
+ * semantics.c (cxx_bind_parameters_in_call): Don't call
+ adjust_temp_type on non-constant args.
+
PR c++/47851
* call.c (standard_conversion): Provide requested cv-quals on
class rvalue conversion.
diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c
index a33a7ed..6b3e914 100644
--- a/gcc/cp/semantics.c
+++ b/gcc/cp/semantics.c
@@ -5906,6 +5906,9 @@ cxx_bind_parameters_in_call (const constexpr_call *old_call, tree t,
/* Just discard ellipsis args after checking their constantitude. */
if (!parms)
continue;
+ if (*non_constant_p)
+ /* Don't try to adjust the type of non-constant args. */
+ goto next;
/* Make sure the binding has the same type as the parm. */
if (TREE_CODE (type) != REFERENCE_TYPE)
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ebe736c..1ac00aa 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,7 @@
+2011-03-01 Jason Merrill <jason@redhat.com>
+
+ * g++.dg/cpp0x/constexpr-non-const-arg2.C: New.
+
2011-03-02 Richard Sandiford <richard.sandiford@linaro.org>
PR rtl-optimization/47925
diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-non-const-arg2.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-non-const-arg2.C
new file mode 100644
index 0000000..20e05c3
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-non-const-arg2.C
@@ -0,0 +1,16 @@
+// PR c++/47200
+// { dg-options "-std=c++0x -w" }
+
+template < int > struct duration
+{
+ constexpr int count ();
+ static constexpr duration min ();
+};
+
+constexpr int
+f (duration < 0 > d, duration < 0 > )
+{
+ return d.count ();
+}
+
+static_assert (f (duration < 0 >::min (), duration < 0 > ()), ""); // { dg-error "non-constant|before its definition" }