From 2aa3110af4fe912b83644650f1543541def23372 Mon Sep 17 00:00:00 2001 From: Mark Mitchell Date: Sun, 26 Sep 1999 18:16:47 +0000 Subject: [PATCH] decl.c (start_function): Set x_dont_save_pending_sizes rather than calling get_pending_sizes. * decl.c (start_function): Set x_dont_save_pending_sizes rather than calling get_pending_sizes. * init.c (build_new): Don't save and restore immediate_size_expand; instead, assert that it has the expected value already. From-SVN: r29669 --- gcc/cp/ChangeLog | 8 ++++++++ gcc/cp/decl.c | 2 +- gcc/cp/init.c | 18 ++---------------- gcc/testsuite/g++.old-deja/g++.other/crash12.C | 17 +++++++++++++++++ 4 files changed, 28 insertions(+), 17 deletions(-) create mode 100644 gcc/testsuite/g++.old-deja/g++.other/crash12.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6e3e16e..0b30ff3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,11 @@ +1999-09-26 Mark Mitchell + + * decl.c (start_function): Set x_dont_save_pending_sizes rather + than calling get_pending_sizes. + * init.c (build_new): Don't save and restore + immediate_size_expand; instead, assert that it has the expected + value already. + 1999-09-26 Kaveh R. Ghazi * lex.c (compiler_error): Add missing call to va_end(). diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index d5da38f..3da610d 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -12915,7 +12915,7 @@ start_function (declspecs, declarator, attrs, flags) We haven't necessarily assigned RTL to all variables yet, so it's not safe to try to expand expressions involving them. */ immediate_size_expand = 0; - get_pending_sizes (); + current_function->x_dont_save_pending_sizes_p = 1; /* Let the user know we're compiling this function. */ if (processing_template_decl || !building_stmt_tree ()) diff --git a/gcc/cp/init.c b/gcc/cp/init.c index 19d8c74..d420ff5 100644 --- a/gcc/cp/init.c +++ b/gcc/cp/init.c @@ -1909,14 +1909,10 @@ build_new (placement, decl, init, use_global_new) { tree absdcl = TREE_VALUE (decl); tree last_absdcl = NULL_TREE; - int old_immediate_size_expand = 0; if (current_function_decl && DECL_CONSTRUCTOR_P (current_function_decl)) - { - old_immediate_size_expand = immediate_size_expand; - immediate_size_expand = 0; - } + my_friendly_assert (immediate_size_expand == 0, 19990926); nelts = integer_one_node; @@ -1980,17 +1976,7 @@ build_new (placement, decl, init, use_global_new) type = groktypename (decl); if (! type || type == error_mark_node) - { - immediate_size_expand = old_immediate_size_expand; - return error_mark_node; - } - - if (current_function_decl - && DECL_CONSTRUCTOR_P (current_function_decl)) - { - pending_sizes = get_pending_sizes (); - immediate_size_expand = old_immediate_size_expand; - } + return error_mark_node; } else if (TREE_CODE (decl) == IDENTIFIER_NODE) { diff --git a/gcc/testsuite/g++.old-deja/g++.other/crash12.C b/gcc/testsuite/g++.old-deja/g++.other/crash12.C new file mode 100644 index 0000000..ad81131 --- /dev/null +++ b/gcc/testsuite/g++.old-deja/g++.other/crash12.C @@ -0,0 +1,17 @@ +// Build don't link: +// Origin: Alfred Minarik +// Special g++ Options: + +template +struct S +{ + void f() {} +}; + +int main() +{ + S s; + int len = 50; + char array[len]; + s.f(); +} -- 2.7.4