Here we ICE with deleted main which is later redefined at
gcc_assert (DECL_SAVED_TREE (fn));
because for some reason when deleting main I chose NULL_TREE instead of
error_mark_node as its DECL_INITIAL. For other deleted functions we
also use error_mark_node so that
void foo() = delete;
void foo() {}
results in the "redefinition of" error. Let's do the same for main, then.
PR c++/120338
gcc/cp/ChangeLog:
* decl.cc (cp_finish_decl): Set DECL_INITIAL to error_mark_node
instead of NULL_TREE for deleted main.
gcc/testsuite/ChangeLog:
* g++.dg/cpp0x/deleted19.C: New test.
Reviewed-by: Jason Merrill <jason@redhat.com>
/* [basic.start.main]/3: A program that defines main as deleted
is ill-formed. */
error ("%<::main%> cannot be deleted");
- DECL_INITIAL (decl) = NULL_TREE;
+ DECL_INITIAL (decl) = error_mark_node;
}
else
{
--- /dev/null
+// PR c++/120338
+// { dg-do compile { target c++11 } }
+
+int main() = delete; // { dg-error "cannot be deleted" }
+int main() {} // { dg-error "redefinition" }