aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorPaolo Carlini <paolo@gcc.gnu.org>2011-11-18 15:31:38 +0000
committerPaolo Carlini <paolo@gcc.gnu.org>2011-11-18 15:31:38 +0000
commit112eadc76334c1709962ddf47ebf5b11bae685c1 (patch)
tree23474098ba45504e537d9fb7d27be404fdc1181d /gcc
parent39cc8c3d6bc5bd2d202a368bec2770c86497a408 (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog5
-rw-r--r--gcc/cp/pt.c4
-rw-r--r--gcc/testsuite/ChangeLog7
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/pr51150.C20
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);