diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ad1788b304e..8af98a4f8ae 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ Mon Nov 24 12:15:55 1997 Jason Merrill + * typeck.c (mark_addressable): Don't assume a FUNCTION_DECL + has DECL_LANG_SPECIFIC. + * exception.cc (struct cp_eh_info): Add handlers field. (__cp_push_exception): Initialize it. (__cp_pop_exception): Decrement it. Don't pop unless it's 0. diff --git a/gcc/cp/typeck.c b/gcc/cp/typeck.c index 39a71205b99..bd5a43cd9ec 100644 --- a/gcc/cp/typeck.c +++ b/gcc/cp/typeck.c @@ -4807,12 +4807,15 @@ mark_addressable (exp) return 1; case FUNCTION_DECL: - /* We have to test both conditions here. The first may - be non-zero in the case of processing a default function. - The second may be non-zero in the case of a template function. */ - x = DECL_MAIN_VARIANT (x); - if (DECL_TEMPLATE_INFO (x) && !DECL_TEMPLATE_SPECIALIZATION (x)) - mark_used (x); + if (DECL_LANG_SPECIFIC (x) != 0) + { + x = DECL_MAIN_VARIANT (x); + /* We have to test both conditions here. The first may be + non-zero in the case of processing a default function. The + second may be non-zero in the case of a template function. */ + if (DECL_TEMPLATE_INFO (x) && !DECL_TEMPLATE_SPECIALIZATION (x)) + mark_used (x); + } TREE_ADDRESSABLE (x) = 1; TREE_USED (x) = 1; TREE_ADDRESSABLE (DECL_ASSEMBLER_NAME (x)) = 1;