aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorNathan Sidwell <nathan@acm.org>2020-11-19 08:00:49 -0800
committerNathan Sidwell <nathan@acm.org>2020-11-19 09:56:30 -0800
commit255483e5b70beade63efdf1f3efa6b814831da08 (patch)
treef9abf5a9329e47af9c023413e96ab45badb49c52 /gcc
parent5ace1776b88d4b0fc371414d0b3983015e22fead (diff)
downloadgcc-255483e5b70beade63efdf1f3efa6b814831da08.zip
gcc-255483e5b70beade63efdf1f3efa6b814831da08.tar.gz
gcc-255483e5b70beade63efdf1f3efa6b814831da08.tar.bz2
c++: Relax new assert [PR 97905]
It turns out there are legitimate cases for the new decl to not have lang-specific. PR c++/97905 gcc/cp/ * decl.c (duplicate_decls): Relax new assert. gcc/testsuite/ * g++.dg/lookup/pr97905.C: New.
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/decl.c5
-rw-r--r--gcc/testsuite/g++.dg/lookup/pr97905.C7
2 files changed, 9 insertions, 3 deletions
diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index d90e984..f5c6f5c 100644
--- a/gcc/cp/decl.c
+++ b/gcc/cp/decl.c
@@ -2749,9 +2749,8 @@ duplicate_decls (tree newdecl, tree olddecl, bool hiding, bool was_hidden)
with that from NEWDECL below. */
if (DECL_LANG_SPECIFIC (olddecl))
{
- gcc_checking_assert (DECL_LANG_SPECIFIC (newdecl)
- && (DECL_LANG_SPECIFIC (olddecl)
- != DECL_LANG_SPECIFIC (newdecl)));
+ gcc_checking_assert (DECL_LANG_SPECIFIC (olddecl)
+ != DECL_LANG_SPECIFIC (newdecl));
ggc_free (DECL_LANG_SPECIFIC (olddecl));
}
diff --git a/gcc/testsuite/g++.dg/lookup/pr97905.C b/gcc/testsuite/g++.dg/lookup/pr97905.C
new file mode 100644
index 0000000..22a7e5c
--- /dev/null
+++ b/gcc/testsuite/g++.dg/lookup/pr97905.C
@@ -0,0 +1,7 @@
+// PR 97905
+
+
+template <typename> void a() {
+ extern int *b; // This decl gets an (unneeded) decl-lang-specific
+}
+int *b; // this does not