diff options
author | Jason Merrill <jason@redhat.com> | 2011-03-02 13:18:31 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-03-02 13:18:31 -0500 |
commit | c6f54c7aa725bb4bb8bb3af16cc49a855b3587ae (patch) | |
tree | b6733e230013cc491b7cced2c8b8ccffb202e1cd /gcc | |
parent | f158c8d0ed150a33356f17f9b8a80e1525a98263 (diff) | |
download | gcc-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/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 3 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/constexpr-non-const-arg2.C | 16 |
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" } |