aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorMark Mitchell <mark@codesourcery.com>2005-10-11 06:26:04 +0000
committerMark Mitchell <mmitchel@gcc.gnu.org>2005-10-11 06:26:04 +0000
commit4bff36d30616df91fbfb4d9c427721d52c0a1527 (patch)
tree6d07951a67aba9a6a06cbd65f4095f615df7cf21 /gcc
parenteb2182e29917811d90278a649a100e8bc8c1d13a (diff)
downloadgcc-4bff36d30616df91fbfb4d9c427721d52c0a1527.zip
gcc-4bff36d30616df91fbfb4d9c427721d52c0a1527.tar.gz
gcc-4bff36d30616df91fbfb4d9c427721d52c0a1527.tar.bz2
re PR c++/24277 (Boost causes ICE in build_c_cast, at cp/typeck.c:5231)
PR c++/24277 * pt.c (instantiate_decl): Call finish_static_data_member_decl for static data members. PR c++/24277 * g++.dg/template/static20.C: New test. From-SVN: r105228
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/pt.c16
-rw-r--r--gcc/testsuite/ChangeLog3
-rw-r--r--gcc/testsuite/g++.dg/template/static20.C14
3 files changed, 28 insertions, 5 deletions
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c
index 2bd96a6..a5a7c1e 100644
--- a/gcc/cp/pt.c
+++ b/gcc/cp/pt.c
@@ -11558,13 +11558,19 @@ instantiate_decl (tree d, int defer_ok,
&& !DECL_INITIAL (d)
&& DECL_INITIAL (code_pattern))
{
- tree ns = decl_namespace_context (d);
+ tree ns;
+ tree init;
+
+ ns = decl_namespace_context (d);
push_nested_namespace (ns);
push_nested_class (DECL_CONTEXT (d));
- DECL_INITIAL (d)
- = tsubst_expr (DECL_INITIAL (code_pattern),
- args,
- tf_error | tf_warning, NULL_TREE);
+ init = tsubst_expr (DECL_INITIAL (code_pattern),
+ args,
+ tf_error | tf_warning, NULL_TREE);
+ DECL_INITIAL (d) = NULL_TREE;
+ finish_static_data_member_decl (d, init,
+ /*asmspec_tree=*/NULL_TREE,
+ LOOKUP_ONLYCONVERTING);
pop_nested_class ();
pop_nested_namespace (ns);
}
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index aa4a66f..dd19af6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,5 +1,8 @@
2005-10-10 Mark Mitchell <mark@codesourcery.com>
+ PR c++/24277
+ * g++.dg/template/static20.C: New test.
+
PR c++/24302
* g++.dg/warn/Wunused-12.C: New test.
diff --git a/gcc/testsuite/g++.dg/template/static20.C b/gcc/testsuite/g++.dg/template/static20.C
new file mode 100644
index 0000000..6f1096b
--- /dev/null
+++ b/gcc/testsuite/g++.dg/template/static20.C
@@ -0,0 +1,14 @@
+// PR c++/24277
+
+template< int Bits > struct uint_t {
+ typedef unsigned short fast;
+};
+template < int Bits > struct mask_uint_t {
+ typedef typename uint_t< Bits >::fast fast;
+ static const fast sig_bits = 1;
+ static const fast sig_bits_fast = fast(sig_bits);
+};
+template < int Bits> int checksum ( ) {
+ return 1 & mask_uint_t<Bits>::sig_bits_fast;
+}
+int i = checksum<1>();