]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
c++: deleted after first declaration [PR101106]
authorJason Merrill <jason@redhat.com>
Thu, 17 Jun 2021 19:31:15 +0000 (15:31 -0400)
committerJason Merrill <jason@redhat.com>
Thu, 17 Jun 2021 19:48:07 +0000 (15:48 -0400)
An explicitly deleted function must be deleted on its first declaration.  We
were diagnosing this error only with -Wpedantic, but always giving the
"previous declaration" note.  This patch removes the -Wpedantic dependency
and also makes the note depend on the previous diagnostic.

PR c++/101106

gcc/cp/ChangeLog:

* decl.c (duplicate_decls): Make 'deleted after first declaration'
pedwarn on by default.

gcc/testsuite/ChangeLog:

* g++.dg/cpp0x/deleted15.C: New test.

gcc/cp/decl.c
gcc/testsuite/g++.dg/cpp0x/deleted15.C [new file with mode: 0644]

index 02772e94763fe524781329ce86e03a153aef7420..66bcc4be84daf224fcb5e303a80b4980cf70e8de 100644 (file)
@@ -2170,11 +2170,10 @@ duplicate_decls (tree newdecl, tree olddecl, bool hiding, bool was_hidden)
          if (DECL_DELETED_FN (newdecl))
            {
              auto_diagnostic_group d;
-             pedwarn (newdecl_loc, OPT_Wpedantic,
-                      "deleted definition of %qD is not first declaration",
-                      newdecl);
-             inform (olddecl_loc,
-                     "previous declaration of %qD", olddecl);
+             if (pedwarn (newdecl_loc, 0, "deleted definition of %qD "
+                          "is not first declaration", newdecl))
+               inform (olddecl_loc,
+                       "previous declaration of %qD", olddecl);
            }
          DECL_DELETED_FN (newdecl) |= DECL_DELETED_FN (olddecl);
        }
diff --git a/gcc/testsuite/g++.dg/cpp0x/deleted15.C b/gcc/testsuite/g++.dg/cpp0x/deleted15.C
new file mode 100644 (file)
index 0000000..06d2171
--- /dev/null
@@ -0,0 +1,6 @@
+// PR c++/101106
+// { dg-do compile { target c++11 } }
+// { dg-options "" }
+
+int f();
+int f() = delete;              // { dg-message "not first declaration" }