c++: Make extern-C mismatch an error
authorNathan Sidwell <nathan@acm.org>
Tue, 3 Nov 2020 16:35:53 +0000 (08:35 -0800)
committerNathan Sidwell <nathan@acm.org>
Tue, 3 Nov 2020 16:49:26 +0000 (08:49 -0800)
duplicate_decls was being lenient about extern-c mismatches, allowing
you to have two declarations in the symbol table after emitting an
error.  This resulted in duplicate error messages in modules, when we
find the same problem multiple times.  Let's just not let that happen.

gcc/cp/
* decl.c (duplicate_decls): Return error_mark_node fo extern-c
mismatch.

gcc/cp/decl.c

index 114e8d0cb011f988e5d1870fdfaeaf11a0b0eeed..9428fa052586f0f4f768ae6aea130938bcbcff5f 100644 (file)
@@ -1776,7 +1776,7 @@ duplicate_decls (tree newdecl, tree olddecl, bool hiding, bool was_hidden)
                        newdecl);
              inform (olddecl_loc,
                      "previous declaration %q#D", olddecl);
-             return NULL_TREE;
+             return error_mark_node;
            }
          /* For function versions, params and types match, but they
             are not ambiguous.  */