{
if (constructor_erroneous || constructor_type == error_mark_node)
ret.value = error_mark_node;
+ else if (TREE_CODE (constructor_type) == FUNCTION_TYPE)
+ {
+ error_init (loc, "invalid initializer");
+ ret.value = error_mark_node;
+ }
else if (TREE_CODE (constructor_type) == POINTER_TYPE)
/* Ensure this is a null pointer constant in the case of a
'constexpr' object initialized with {}. */
--- /dev/null
+/* PR c/107682 */
+/* PR c/109412 */
+/* { dg-do compile } */
+/* { dg-options "" } */
+
+char bar () = {}; /* { dg-error "function 'bar' is initialized like a variable" } */
+ /* { dg-error "invalid initializer" "" { target *-*-* } .-1 } */
+ /* { dg-message "near initialization for 'bar'" "" { target *-*-* } .-2 } */
+char baz () = { 1 }; /* { dg-error "function 'baz' is initialized like a variable" } */
+ /* { dg-error "invalid initializer" "" { target *-*-* } .-1 } */
+ /* { dg-message "near initialization for 'baz'" "" { target *-*-* } .-2 } */
+void
+foo ()
+{
+ int qux () = {}; /* { dg-error "function 'qux' is initialized like a variable" } */
+ /* { dg-error "invalid initializer" "" { target *-*-* } .-1 } */
+ /* { dg-message "near initialization for 'qux'" "" { target *-*-* } .-2 } */
+ int corge () = { 1 }; /* { dg-error "function 'corge' is initialized like a variable" } */
+ /* { dg-error "invalid initializer" "" { target *-*-* } .-1 } */
+} /* { dg-message "near initialization for 'corge'" "" { target *-*-* } .-2 } */