diff options
author | Mark Mitchell <mark@codesourcery.com> | 2005-10-11 06:26:04 +0000 |
---|---|---|
committer | Mark Mitchell <mmitchel@gcc.gnu.org> | 2005-10-11 06:26:04 +0000 |
commit | 4bff36d30616df91fbfb4d9c427721d52c0a1527 (patch) | |
tree | 6d07951a67aba9a6a06cbd65f4095f615df7cf21 /gcc | |
parent | eb2182e29917811d90278a649a100e8bc8c1d13a (diff) | |
download | gcc-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.c | 16 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/static20.C | 14 |
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>(); |