diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 03338fcfa52..92ffefea476 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,7 +1,14 @@ +2009-01-07 Uros Bizjak + + PR target/38706 + * config/alpha/alpha.c (alpha_end_function): For TARGET_ABI_OSF, call + free_after_compilation when outputting a thunk. + (alpha_output_mi_thunk_osf): Assert that we are processing a thunk. + Do not call free_after_compilation here. + 2009-01-07 Uros Bizjak * config/i386/i386.c (ix86_target_string): Use ARRAY_SIZE. - (ix86_target_string): Ditto. (ix86_valid_target_attribute_inner_p): Ditto. 2009-01-07 Jan Sjodin diff --git a/gcc/config/alpha/alpha.c b/gcc/config/alpha/alpha.c index d9ed21fba49..9c79f8883fc 100644 --- a/gcc/config/alpha/alpha.c +++ b/gcc/config/alpha/alpha.c @@ -1,6 +1,7 @@ /* Subroutines used for code generation on the DEC Alpha. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, - 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. + 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 + Free Software Foundation, Inc. Contributed by Richard Kenner (kenner@vlsi1.ultra.nyu.edu) This file is part of GCC. @@ -8272,6 +8273,11 @@ alpha_end_function (FILE *file, const char *fnname, tree decl ATTRIBUTE_UNUSED) if (GET_CODE (insn) == CALL_INSN) output_asm_insn (get_insn_template (CODE_FOR_nop, NULL), NULL); +#if TARGET_ABI_OSF + if (crtl->is_thunk) + free_after_compilation (cfun); +#endif + #if TARGET_ABI_OPEN_VMS alpha_write_linkage (file, fnname, decl); #endif @@ -8311,6 +8317,8 @@ alpha_output_mi_thunk_osf (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED, HOST_WIDE_INT hi, lo; rtx this_rtx, insn, funexp; + gcc_assert (crtl->is_thunk); + /* We always require a valid GP. */ emit_insn (gen_prologue_ldgp ()); emit_note (NOTE_INSN_PROLOGUE_END); @@ -8392,7 +8400,6 @@ alpha_output_mi_thunk_osf (FILE *file, tree thunk_fndecl ATTRIBUTE_UNUSED, final_start_function (insn, file, 1); final (insn, file, 1); final_end_function (); - free_after_compilation (cfun); } #endif /* TARGET_ABI_OSF */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0e605d0e98f..e0fb09524d2 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-01-07 Uros Bizjak + + PR target/38706 + * g++.dg/other/pr38706.C: New test. + 2009-01-07 Jason Merrill * g++.dg/cpp0x/variadic92.C: New test. diff --git a/gcc/testsuite/g++.dg/other/pr38706.C b/gcc/testsuite/g++.dg/other/pr38706.C new file mode 100644 index 00000000000..ec10d90ba69 --- /dev/null +++ b/gcc/testsuite/g++.dg/other/pr38706.C @@ -0,0 +1,19 @@ +// PR target/38706 +// { dg-do compile } +// { dg-options "-O2" } + +class ios_base +{ +public: + virtual ~ios_base (); + +}; + +class istrstream:virtual public ios_base +{ +public: + virtual ~istrstream (); + +}; + +istrstream::~istrstream () {}