diff options
author | Jason Merrill <jason@redhat.com> | 2019-03-07 10:10:22 -0500 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2019-03-07 10:10:22 -0500 |
commit | d4babd373b9634c6964cad53423470ac8f38addf (patch) | |
tree | 6af919ee11170b35a1dd5ac2f872e4eaeba7038d /gcc/gimple-fold.c | |
parent | 5161ffa4f5ae6133167673afc607c07e0be787f8 (diff) | |
download | gcc-d4babd373b9634c6964cad53423470ac8f38addf.zip gcc-d4babd373b9634c6964cad53423470ac8f38addf.tar.gz gcc-d4babd373b9634c6964cad53423470ac8f38addf.tar.bz2 |
PR c++/80916 - spurious "static but not defined" warning.
Nothing can refer to an internal decl with no definition, so we shouldn't
treat such a decl as a possible devirtualization target.
* gimple-fold.c (can_refer_decl_in_current_unit_p): Return false
for an internal symbol with DECL_EXTERNAL.
From-SVN: r269459
Diffstat (limited to 'gcc/gimple-fold.c')
-rw-r--r-- | gcc/gimple-fold.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/gcc/gimple-fold.c b/gcc/gimple-fold.c index 7ef5004..62d2e0a 100644 --- a/gcc/gimple-fold.c +++ b/gcc/gimple-fold.c @@ -121,9 +121,12 @@ can_refer_decl_in_current_unit_p (tree decl, tree from_decl) || !VAR_OR_FUNCTION_DECL_P (decl)) return true; - /* Static objects can be referred only if they was not optimized out yet. */ - if (!TREE_PUBLIC (decl) && !DECL_EXTERNAL (decl)) + /* Static objects can be referred only if they are defined and not optimized + out yet. */ + if (!TREE_PUBLIC (decl)) { + if (DECL_EXTERNAL (decl)) + return false; /* Before we start optimizing unreachable code we can be sure all static objects are defined. */ if (symtab->function_flags_ready) |