diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c
index d90e9840f401232b344440ef454a8084ae81e33c..f5c6f5c0d10f76903ab5c2fd8883daf916d44a8c 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 0000000000000000000000000000000000000000..22a7e5cf6d4523c56c61431f7ac313a89a4722e6
--- /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