mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-03-22 19:41:06 +08:00
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
This commit is contained in:
parent
d43163b742
commit
2aa3110af4
@ -1,3 +1,11 @@
|
||||
1999-09-26 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* 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 <ghazi@caip.rutgers.edu>
|
||||
|
||||
* lex.c (compiler_error): Add missing call to va_end().
|
||||
|
@ -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 ())
|
||||
|
@ -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)
|
||||
{
|
||||
|
17
gcc/testsuite/g++.old-deja/g++.other/crash12.C
Normal file
17
gcc/testsuite/g++.old-deja/g++.other/crash12.C
Normal file
@ -0,0 +1,17 @@
|
||||
// Build don't link:
|
||||
// Origin: Alfred Minarik <a8601248@unet.univie.ac.at>
|
||||
// Special g++ Options:
|
||||
|
||||
template<typename T>
|
||||
struct S
|
||||
{
|
||||
void f() {}
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
S<int> s;
|
||||
int len = 50;
|
||||
char array[len];
|
||||
s.f();
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user