diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 0db7144ee0f4..6439776555fe 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2001-04-03 Mark Mitchell + + * decl2.c (import_export_decl): Don't call import_export_class + when processing an inline member function. + * semantics.c (expand_body): Call import_export_decl before + emitting inline functions. + 2001-03-28 Richard Henderson IA-64 ABI Exception Handling: diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index 35c8ca77e9eb..38db639d3efa 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -2672,21 +2672,23 @@ import_export_decl (decl) } else if (DECL_FUNCTION_MEMBER_P (decl)) { - tree ctype = DECL_CONTEXT (decl); - import_export_class (ctype); - if (CLASSTYPE_INTERFACE_KNOWN (ctype) - && ! DECL_THIS_INLINE (decl)) + if (!DECL_THIS_INLINE (decl)) { - DECL_NOT_REALLY_EXTERN (decl) - = ! (CLASSTYPE_INTERFACE_ONLY (ctype) - || (DECL_THIS_INLINE (decl) && ! flag_implement_inlines - && !DECL_VINDEX (decl))); + tree ctype = DECL_CONTEXT (decl); + import_export_class (ctype); + if (CLASSTYPE_INTERFACE_KNOWN (ctype)) + { + DECL_NOT_REALLY_EXTERN (decl) + = ! (CLASSTYPE_INTERFACE_ONLY (ctype) + || (DECL_THIS_INLINE (decl) && ! flag_implement_inlines + && !DECL_VINDEX (decl))); - /* Always make artificials weak. */ - if (DECL_ARTIFICIAL (decl) && flag_weak) - comdat_linkage (decl); - else - maybe_make_one_only (decl); + /* Always make artificials weak. */ + if (DECL_ARTIFICIAL (decl) && flag_weak) + comdat_linkage (decl); + else + maybe_make_one_only (decl); + } } else comdat_linkage (decl); diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 6990e2c37679..ced8c5168d9c 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -2448,6 +2448,11 @@ expand_body (fn) return; } + /* Compute the appropriate object-file linkage for inline + functions. */ + if (DECL_INLINE (fn)) + import_export_decl (fn); + /* Emit any thunks that should be emitted at the same time as FN. */ emit_associated_thunks (fn);