From fc5fccdee994a93c1360b9a2934f0232820f9333 Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Sun, 21 Mar 2004 17:48:39 +0000 Subject: [PATCH] re PR c++/14616 (disjoint_set_test.cpp from boost does not compile (sizeof)) PR c++/14616 * decl.c (cp_finish_decl): Compute the size of arrays declared in templates, if their type is non-dependent. PR c++/14616 * g++.dg/init/array13.C: New test. From-SVN: r79788 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/decl.c | 4 ++++ gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/init/array13.C | 9 +++++++++ 4 files changed, 24 insertions(+) create mode 100644 gcc/testsuite/g++.dg/init/array13.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 654e6a37a869..8f5130663f3e 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2004-03-21 Mark Mitchell + + PR c++/14616 + * decl.c (cp_finish_decl): Compute the size of arrays declared in + templates, if their type is non-dependent. + 2004-03-19 Mark Mitchell * call.c (build_op_delete_call): Do not forget the placement diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index b8a578f9ee0f..0b802ff7578f 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -4711,6 +4711,10 @@ cp_finish_decl (tree decl, tree init, tree asmspec_tree, int flags) if (init && DECL_INITIAL (decl)) DECL_INITIAL (decl) = init; + if (TREE_CODE (decl) == VAR_DECL + && !DECL_PRETTY_FUNCTION_P (decl) + && !dependent_type_p (TREE_TYPE (decl))) + maybe_deduce_size_from_array_init (decl, init); goto finish_end0; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b53e941f1627..2ec9fe62044c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2004-03-21 Mark Mitchell + + PR c++/14616 + * g++.dg/init/array13.C: New test. + 2004-03-20 Roger Sayle PR target/13889 diff --git a/gcc/testsuite/g++.dg/init/array13.C b/gcc/testsuite/g++.dg/init/array13.C new file mode 100644 index 000000000000..aa66e33acfc7 --- /dev/null +++ b/gcc/testsuite/g++.dg/init/array13.C @@ -0,0 +1,9 @@ +template +struct test_disjoint_set { + static void do_test() + { + unsigned int elts[] + = { 0, 1, 2, 3 }; + const int N = sizeof(elts)/sizeof(*elts); + } +}; -- 2.43.5