diff options
author | Jason Merrill <jason@redhat.com> | 2012-01-10 09:37:26 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2012-01-10 09:37:26 -0500 |
commit | a1e0490fb89dc31a8c1714be2ea0436affe1e2da (patch) | |
tree | 7c3edfdeeb21375e344025fa348abb3b208e6cad | |
parent | 91f074ced1fa309b50e019a8b3d4bb44d0774647 (diff) | |
download | gcc-a1e0490fb89dc31a8c1714be2ea0436affe1e2da.zip gcc-a1e0490fb89dc31a8c1714be2ea0436affe1e2da.tar.gz gcc-a1e0490fb89dc31a8c1714be2ea0436affe1e2da.tar.bz2 |
re PR c++/51433 (constexpr caching leads to incorrect dynamic initialization)
PR c++/51433
* semantics.c (cxx_eval_call_expression): Always retry previously
non-constant expressions.
From-SVN: r183065
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/constexpr-cache1.C | 9 |
4 files changed, 21 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c0e1cf4..4de8ba1 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2012-01-10 Jason Merrill <jason@redhat.com> + + PR c++/51433 + * semantics.c (cxx_eval_call_expression): Always retry previously + non-constant expressions. + 2012-01-06 Jason Merrill <jason@redhat.com> DR 686 diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index fbb74e1..2c351be 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -6576,7 +6576,7 @@ cxx_eval_call_expression (const constexpr_call *old_call, tree t, else { result = entry->result; - if (!result || (result == error_mark_node && !allow_non_constant)) + if (!result || result == error_mark_node) result = (cxx_eval_constant_expression (&new_call, new_call.fundef->body, allow_non_constant, addr, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f05d3e5..0afad27 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-01-10 Jason Merrill <jason@redhat.com> + + PR c++/51433 + * g++.dg/cpp0x/constexpr-cache1.C: New. + 2012-01-10 Richard Guenther <rguenther@suse.de> PR tree-optimization/51801 diff --git a/gcc/testsuite/g++.dg/cpp0x/constexpr-cache1.C b/gcc/testsuite/g++.dg/cpp0x/constexpr-cache1.C new file mode 100644 index 0000000..b6d7b64 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/constexpr-cache1.C @@ -0,0 +1,9 @@ +// PR c++/51433 +// { dg-options -std=c++0x } + +constexpr int f(); +constexpr int g() { return f(); } +extern const int n = g(); // dynamic initialization +constexpr int f() { return 42; } +extern const int m = g(); +static_assert(m == 42, "m == 42"); |