diff options
Diffstat (limited to 'gcc/ipa-visibility.c')
-rw-r--r-- | gcc/ipa-visibility.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/ipa-visibility.c b/gcc/ipa-visibility.c index da4a22e..cfd90c6 100644 --- a/gcc/ipa-visibility.c +++ b/gcc/ipa-visibility.c @@ -622,9 +622,12 @@ function_and_variable_visibility (bool whole_program) int flags = flags_from_decl_or_type (node->decl); /* Optimize away PURE and CONST constructors and destructors. */ - if (optimize + if (node->analyzed + && (DECL_STATIC_CONSTRUCTOR (node->decl) + || DECL_STATIC_CONSTRUCTOR (node->decl)) && (flags & (ECF_CONST | ECF_PURE)) - && !(flags & ECF_LOOPING_CONST_OR_PURE)) + && !(flags & ECF_LOOPING_CONST_OR_PURE) + && opt_for_fn (node->decl, optimize)) { DECL_STATIC_CONSTRUCTOR (node->decl) = 0; DECL_STATIC_DESTRUCTOR (node->decl) = 0; @@ -876,7 +879,7 @@ static unsigned int whole_program_function_and_variable_visibility (void) { function_and_variable_visibility (flag_whole_program); - if (optimize) + if (optimize || in_lto_p) ipa_discover_readonly_nonaddressable_vars (); return 0; } |