re PR c++/14808 ([win32] Undefined results with virtual base classes)
PR c++/14808 * defaults.h (TARGET_USE_LOCAL_THUNK_ALIAS_P): New macro. Default to 1 if ASM_OUTPUT_DEF is defined. * doc/tm.texi (TARGET_USE_LOCAL_THUNK_ALIAS_P): Document. * config/i386/cygming.h (TARGET_USE_LOCAL_THUNK_ALIAS_P): Define. Set to non-zero iff not a one_only decl. * cp/method.c (use_thunk): Test TARGET_USE_LOCAL_THUNK_ALIAS_P rather than ASM_OUTPUT_DEF. From-SVN: r80525
This commit is contained in:
parent
cc81dde821
commit
4a77e08cfc
@ -1,3 +1,12 @@
|
|||||||
|
2004-04-08 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
|
||||||
|
PR c++/14808
|
||||||
|
* defaults.h (TARGET_USE_LOCAL_THUNK_ALIAS_P): New macro. Default
|
||||||
|
to 1 if ASM_OUTPUT_DEF is defined.
|
||||||
|
* doc/tm.texi (TARGET_USE_LOCAL_THUNK_ALIAS_P): Document.
|
||||||
|
* config/i386/cygming.h (TARGET_USE_LOCAL_THUNK_ALIAS_P): Define.
|
||||||
|
Set to non-zero iff not a one_only decl.
|
||||||
|
|
||||||
2004-04-08 Paul Brook <paul@codesourcery.com>
|
2004-04-08 Paul Brook <paul@codesourcery.com>
|
||||||
|
|
||||||
* arm.h (CLASS_LIKELY_SPILLED_P): Define.
|
* arm.h (CLASS_LIKELY_SPILLED_P): Define.
|
||||||
|
@ -382,6 +382,11 @@ extern int i386_pe_dllimport_name_p (const char *);
|
|||||||
ASM_OUTPUT_DEF (STREAM, alias, IDENTIFIER_POINTER (TARGET)); \
|
ASM_OUTPUT_DEF (STREAM, alias, IDENTIFIER_POINTER (TARGET)); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
/* Decide whether it is safe to use a local alias for a virtual function
|
||||||
|
when constructing thunks. */
|
||||||
|
#undef TARGET_USE_LOCAL_THUNK_ALIAS_P
|
||||||
|
#define TARGET_USE_LOCAL_THUNK_ALIAS_P(DECL) (!DECL_ONE_ONLY (DECL))
|
||||||
|
|
||||||
#undef TREE
|
#undef TREE
|
||||||
|
|
||||||
#ifndef BUFSIZ
|
#ifndef BUFSIZ
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
2004-04-08 Danny Smith <dannysmith@users.sourceforge.net>
|
||||||
|
|
||||||
|
PR c++/14808
|
||||||
|
* method.c (use_thunk): Test TARGET_USE_LOCAL_THUNK_ALIAS_P rather
|
||||||
|
than ASM_OUTPUT_DEF.
|
||||||
|
|
||||||
2004-04-08 Jakub Jelinek <jakub@redhat.com>
|
2004-04-08 Jakub Jelinek <jakub@redhat.com>
|
||||||
|
|
||||||
* decl2.c (mark_used): Don't segfault if cfun != NULL but
|
* decl2.c (mark_used): Don't segfault if cfun != NULL but
|
||||||
|
@ -363,11 +363,10 @@ use_thunk (tree thunk_fndecl, bool emit_p)
|
|||||||
if (!emit_p)
|
if (!emit_p)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
#ifdef ASM_OUTPUT_DEF
|
if (TARGET_USE_LOCAL_THUNK_ALIAS_P (function))
|
||||||
alias = make_alias_for_thunk (function);
|
alias = make_alias_for_thunk (function);
|
||||||
#else
|
else
|
||||||
alias = function;
|
alias = function;
|
||||||
#endif
|
|
||||||
|
|
||||||
fixed_offset = THUNK_FIXED_OFFSET (thunk_fndecl);
|
fixed_offset = THUNK_FIXED_OFFSET (thunk_fndecl);
|
||||||
virtual_offset = THUNK_VIRTUAL_OFFSET (thunk_fndecl);
|
virtual_offset = THUNK_VIRTUAL_OFFSET (thunk_fndecl);
|
||||||
@ -401,8 +400,8 @@ use_thunk (tree thunk_fndecl, bool emit_p)
|
|||||||
|
|
||||||
push_to_top_level ();
|
push_to_top_level ();
|
||||||
|
|
||||||
#ifdef ASM_OUTPUT_DEF
|
if (TARGET_USE_LOCAL_THUNK_ALIAS_P (function)
|
||||||
if (targetm.have_named_sections)
|
&& targetm.have_named_sections)
|
||||||
{
|
{
|
||||||
resolve_unique_section (function, 0, flag_function_sections);
|
resolve_unique_section (function, 0, flag_function_sections);
|
||||||
|
|
||||||
@ -414,7 +413,6 @@ use_thunk (tree thunk_fndecl, bool emit_p)
|
|||||||
DECL_SECTION_NAME (thunk_fndecl) = DECL_SECTION_NAME (function);
|
DECL_SECTION_NAME (thunk_fndecl) = DECL_SECTION_NAME (function);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/* The back-end expects DECL_INITIAL to contain a BLOCK, so we
|
/* The back-end expects DECL_INITIAL to contain a BLOCK, so we
|
||||||
create one. */
|
create one. */
|
||||||
|
@ -484,6 +484,16 @@ do { fputs (integer_asm_op (POINTER_SIZE / BITS_PER_UNIT, TRUE), FILE); \
|
|||||||
#define TARGET_VTABLE_DATA_ENTRY_DISTANCE 1
|
#define TARGET_VTABLE_DATA_ENTRY_DISTANCE 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Decide whether it is safe to use a local alias for a virtual function
|
||||||
|
when constructing thunks. */
|
||||||
|
#ifndef TARGET_USE_LOCAL_THUNK_ALIAS_P
|
||||||
|
#ifdef ASM_OUTPUT_DEF
|
||||||
|
#define TARGET_USE_LOCAL_THUNK_ALIAS_P(DECL) 1
|
||||||
|
#else
|
||||||
|
#define TARGET_USE_LOCAL_THUNK_ALIAS_P(DECL) 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Select a format to encode pointers in exception handling data. We
|
/* Select a format to encode pointers in exception handling data. We
|
||||||
prefer those that result in fewer dynamic relocations. Assume no
|
prefer those that result in fewer dynamic relocations. Assume no
|
||||||
special support here and encode direct references. */
|
special support here and encode direct references. */
|
||||||
|
@ -9209,3 +9209,11 @@ The parameter @var{path} is the include to register. On Darwin
|
|||||||
systems, this is used for Framework includes, which have semantics
|
systems, this is used for Framework includes, which have semantics
|
||||||
that are different from @option{-I}.
|
that are different from @option{-I}.
|
||||||
@end deftypefn
|
@end deftypefn
|
||||||
|
|
||||||
|
@deftypefn {Target Hook} bool TARGET_USE_LOCAL_THUNK_ALIAS_P (tree @var{fndecl})
|
||||||
|
This target hook returns @code{true} if it is safe to use a local alias
|
||||||
|
for a virtual function @var{fndecl} when constructing thunks,
|
||||||
|
@code{false} otherwise. By default, the hook returns @code{true} for all
|
||||||
|
functions, if a target supports aliases (ie. defines
|
||||||
|
@code{ASM_OUTPUT_DEF}), @code{false} otherwise,
|
||||||
|
@end deftypefn
|
||||||
|
Loading…
Reference in New Issue
Block a user