* method.c (emit_thunk): Don't crash when -fsyntax-only.
From-SVN: r29748
This commit is contained in:
parent
e82d3ca3b9
commit
3b62f22400
@ -1,5 +1,7 @@
|
||||
1999-09-30 Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
* method.c (emit_thunk): Don't crash when -fsyntax-only.
|
||||
|
||||
* cp-tree.h (lang_decl_flags): Add global_ctor_p and
|
||||
global_dtor_p. Add init_priority.
|
||||
(DECL_ACCESS): Adjust accordingly.
|
||||
|
@ -2086,26 +2086,29 @@ emit_thunk (thunk_fndecl)
|
||||
|
||||
TREE_SET_CODE (thunk_fndecl, FUNCTION_DECL);
|
||||
|
||||
{
|
||||
#ifdef ASM_OUTPUT_MI_THUNK
|
||||
char *fnname;
|
||||
current_function_decl = thunk_fndecl;
|
||||
/* Make sure we build up its RTL before we go onto the
|
||||
temporary obstack. */
|
||||
make_function_rtl (thunk_fndecl);
|
||||
temporary_allocation ();
|
||||
DECL_RESULT (thunk_fndecl)
|
||||
= build_decl (RESULT_DECL, 0, integer_type_node);
|
||||
fnname = XSTR (XEXP (DECL_RTL (thunk_fndecl), 0), 0);
|
||||
init_function_start (thunk_fndecl, input_filename, lineno);
|
||||
current_function_is_thunk = 1;
|
||||
assemble_start_function (thunk_fndecl, fnname);
|
||||
ASM_OUTPUT_MI_THUNK (asm_out_file, thunk_fndecl, delta, function);
|
||||
assemble_end_function (thunk_fndecl, fnname);
|
||||
permanent_allocation (1);
|
||||
current_function_decl = 0;
|
||||
current_function = 0;
|
||||
if (!flag_syntax_only)
|
||||
{
|
||||
char *fnname;
|
||||
current_function_decl = thunk_fndecl;
|
||||
/* Make sure we build up its RTL before we go onto the
|
||||
temporary obstack. */
|
||||
make_function_rtl (thunk_fndecl);
|
||||
temporary_allocation ();
|
||||
DECL_RESULT (thunk_fndecl)
|
||||
= build_decl (RESULT_DECL, 0, integer_type_node);
|
||||
fnname = XSTR (XEXP (DECL_RTL (thunk_fndecl), 0), 0);
|
||||
init_function_start (thunk_fndecl, input_filename, lineno);
|
||||
current_function_is_thunk = 1;
|
||||
assemble_start_function (thunk_fndecl, fnname);
|
||||
ASM_OUTPUT_MI_THUNK (asm_out_file, thunk_fndecl, delta, function);
|
||||
assemble_end_function (thunk_fndecl, fnname);
|
||||
permanent_allocation (1);
|
||||
current_function_decl = 0;
|
||||
current_function = 0;
|
||||
}
|
||||
#else /* ASM_OUTPUT_MI_THUNK */
|
||||
{
|
||||
/* If we don't have the necessary macro for efficient thunks, generate a
|
||||
thunk function that just makes a call to the real function.
|
||||
Unfortunately, this doesn't work for varargs. */
|
||||
@ -2157,8 +2160,8 @@ emit_thunk (thunk_fndecl)
|
||||
output_inline_function (thunk_fndecl);
|
||||
permanent_allocation (1);
|
||||
}
|
||||
#endif /* ASM_OUTPUT_MI_THUNK */
|
||||
}
|
||||
#endif /* ASM_OUTPUT_MI_THUNK */
|
||||
|
||||
TREE_SET_CODE (thunk_fndecl, THUNK_DECL);
|
||||
}
|
||||
|
28
gcc/testsuite/g++.old-deja/g++.other/syntax2.C
Normal file
28
gcc/testsuite/g++.old-deja/g++.other/syntax2.C
Normal file
@ -0,0 +1,28 @@
|
||||
// Build don't link:
|
||||
// Special g++ Options: -fsyntax-only
|
||||
// Origin: Mark Mitchell <mark@codesourcery.com>
|
||||
|
||||
struct B
|
||||
{
|
||||
double d;
|
||||
|
||||
virtual void f ();
|
||||
};
|
||||
|
||||
struct C: virtual public B
|
||||
{
|
||||
char c;
|
||||
};
|
||||
|
||||
struct D: virtual public B
|
||||
{
|
||||
int i;
|
||||
virtual void f ();
|
||||
};
|
||||
|
||||
struct E : public C, public D
|
||||
{
|
||||
};
|
||||
|
||||
E e;
|
||||
|
Loading…
Reference in New Issue
Block a user