diff options
author | Paolo Carlini <paolo@gcc.gnu.org> | 2011-11-18 15:31:38 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2011-11-18 15:31:38 +0000 |
commit | 112eadc76334c1709962ddf47ebf5b11bae685c1 (patch) | |
tree | 23474098ba45504e537d9fb7d27be404fdc1181d | |
parent | 39cc8c3d6bc5bd2d202a368bec2770c86497a408 (diff) | |
download | gcc-112eadc76334c1709962ddf47ebf5b11bae685c1.zip gcc-112eadc76334c1709962ddf47ebf5b11bae685c1.tar.gz gcc-112eadc76334c1709962ddf47ebf5b11bae685c1.tar.bz2 |
re PR c++/51150 ([C++11][4.6/4.7 Regression] ICE when result of -> initializes const variable of different type)
/cp
2011-11-18 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/51150
* pt.c (tsubst_copy_and_build): Handle FIX_TRUNC_EXPR.
/testsuite
2011-11-18 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/51150
* g++.dg/cpp0x/pr51150.C: New.
From-SVN: r181478
-rw-r--r-- | gcc/cp/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/cp/pt.c | 4 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/pr51150.C | 20 |
4 files changed, 35 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 26d3c29..c1d347d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2011-11-18 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/51150 + * pt.c (tsubst_copy_and_build): Handle FIX_TRUNC_EXPR. + 2011-11-18 Dodji Seketeli <dodji@redhat.com> PR c++/51191 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 78e263f..987b70b 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -13387,6 +13387,10 @@ tsubst_copy_and_build (tree t, return build_x_unary_op (TREE_CODE (t), RECUR (TREE_OPERAND (t, 0)), complain); + case FIX_TRUNC_EXPR: + return cp_build_unary_op (FIX_TRUNC_EXPR, RECUR (TREE_OPERAND (t, 0)), + 0, complain); + case ADDR_EXPR: op1 = TREE_OPERAND (t, 0); if (TREE_CODE (op1) == LABEL_DECL) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 1edc46c..b22ebc6 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2011-11-18 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/51150 + * g++.dg/cpp0x/pr51150.C: New. + 2011-11-18 Martin Jambor <mjambor@suse.cz> PR tree-optimization/50605 @@ -16,7 +21,7 @@ 2011-11-17 Andrew MacLeod <amacleod@redhat.com> - * gcc.dg/atomic-generic-aux.c (__atomic_compare_exchange): Fail if + * gcc.dg/atomic-generic-aux.c (__atomic_compare_exchange): Fail if memory model parameters don't match expected values. * gcc.dg/atomic-generic.c: Pass specific memory model parameters to __atomic_compare_exchange. diff --git a/gcc/testsuite/g++.dg/cpp0x/pr51150.C b/gcc/testsuite/g++.dg/cpp0x/pr51150.C new file mode 100644 index 0000000..37eb166 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/pr51150.C @@ -0,0 +1,20 @@ +// PR c++/51150 +// { dg-options "-std=c++0x" } + +struct Clock { + double Now(); +}; +template <class T> void Foo(Clock* clock) { + const int now = clock->Now(); +} + +template void Foo<float>(Clock*); + +template <class T> void Boo(int val) { + const int now1 = (double)(val); + const int now2 = const_cast<double>(val); // { dg-error "invalid" } + const int now3 = static_cast<double>(val); + const int now4 = reinterpret_cast<double>(val); // { dg-error "invalid" } +} + +template void Boo<float>(int); |