diff options
author | Jason Merrill <jason@redhat.com> | 2021-09-02 17:42:32 -0400 |
---|---|---|
committer | Jason Merrill <jason@redhat.com> | 2021-09-03 11:12:09 -0400 |
commit | 5ec4990bc777dd191b86aee6156be3f60cf9de24 (patch) | |
tree | 64e4426904dacbc9a75ebd66d1a54d8adf2681be /gcc | |
parent | 943c65c4494145e993af43c821c82000013c6375 (diff) | |
download | gcc-5ec4990bc777dd191b86aee6156be3f60cf9de24.zip gcc-5ec4990bc777dd191b86aee6156be3f60cf9de24.tar.gz gcc-5ec4990bc777dd191b86aee6156be3f60cf9de24.tar.bz2 |
c++: Avoid bogus -Wunused with recent change
My change to make limit_bad_template_recursion avoid instantiating members
of erroneous classes produced a bogus "used but not defined" warning for
23_containers/unordered_set/instantiation_neg.cc; it's not defined because
we decided not to instantiate it. So we need to suppress that warning.
gcc/cp/ChangeLog:
* pt.c (limit_bad_template_recursion): Suppress -Wunused for decls
we decide not to instantiate.
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/pt.c | 26 |
1 files changed, 19 insertions, 7 deletions
diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 72b22d8..1b81501 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -10890,15 +10890,27 @@ limit_bad_template_recursion (tree decl) return false; /* Avoid instantiating members of an ill-formed class. */ - if (DECL_CLASS_SCOPE_P (decl) - && CLASSTYPE_ERRONEOUS (DECL_CONTEXT (decl))) - return true; + bool refuse + = (DECL_CLASS_SCOPE_P (decl) + && CLASSTYPE_ERRONEOUS (DECL_CONTEXT (decl))); - for (; lev; lev = lev->next) - if (neglectable_inst_p (lev->maybe_get_node ())) - break; + if (!refuse) + { + for (; lev; lev = lev->next) + if (neglectable_inst_p (lev->maybe_get_node ())) + break; + refuse = (lev && errs > lev->errors); + } - return (lev && errs > lev->errors); + if (refuse) + { + /* Don't warn about it not being defined. */ + suppress_warning (decl, OPT_Wunused); + tree clone; + FOR_EACH_CLONE (clone, decl) + suppress_warning (clone, OPT_Wunused); + } + return refuse; } static int tinst_depth; |