+2019-01-08 Jonathan Wakely <jwakely@redhat.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/88554
+ * decl.c (finish_function): For -Wreturn-type don't add a return *this;
+ fixit hint if current_class_ref is NULL. Use a single if instead of
+ two nested ones.
+
2019-01-07 Paolo Carlini <paolo.carlini@oracle.com>
* decl.c (start_decl): Improve two error_at locations.
{
tree valtype = TREE_TYPE (DECL_RESULT (fndecl));
if (TREE_CODE (valtype) == REFERENCE_TYPE
+ && current_class_ref
&& same_type_ignoring_top_level_qualifiers_p
- (TREE_TYPE (valtype), TREE_TYPE (current_class_ref)))
- if (global_dc->option_enabled (OPT_Wreturn_type,
- global_dc->option_state))
- add_return_star_this_fixit (&richloc, fndecl);
+ (TREE_TYPE (valtype), TREE_TYPE (current_class_ref))
+ && global_dc->option_enabled (OPT_Wreturn_type,
+ global_dc->option_state))
+ add_return_star_this_fixit (&richloc, fndecl);
}
warning_at (&richloc, OPT_Wreturn_type,
"no return statement in function returning non-void");
+2019-01-08 Jonathan Wakely <jwakely@redhat.com>
+ Jakub Jelinek <jakub@redhat.com>
+
+ PR c++/88554
+ * g++.dg/warn/Wreturn-type-11.C: New test.
+
2019-01-07 David Malcolm <dmalcolm@redhat.com>
PR jit/88747
--- /dev/null
+// PR c++/88554
+// { dg-do compile }
+// { dg-options "-Wreturn-type" }
+
+struct X {
+ friend X & operator+= (X &, int) { } // { dg-warning "no return statement in function returning non-void" }
+ // { dg-bogus "return \\*this;" "" { target *-*-* } .-1 }
+};
+struct Y {};
+Y & operator += (Y &, Y &) { } // { dg-warning "no return statement in function returning non-void" }
+ // { dg-bogus "return \\*this;" "" { target *-*-* } .-1 }