On 05/23/2011 04:20 AM, Jonathan Wakely wrote:
I still think this warning shouldn't be tied to -Winit-self. That isn't included in -Wall or -Wextra, and it implies we're saying that a self-referencing mem-initializer is a GNU extension to silence a warning, when I think it's always a mistake and never done intentionally.
I agree, but I think the answer to that is to enable -Winit-self with -Wextra in C++ mode.
Thanks, I've attached what I committed. I only checked warn_init_self, not both warn_uninitialized&& warn_init_self, I think that's right.
I think so.
I've also just noticed that my change doesn't catch references which are initialized with themselves. I won't try to fix that now, but would that be done by checking for INDIRECT_REF?
Yes, or you can use REFERENCE_REF_P.
I also had some thoughts about making init-self work for class types e.g. std::string s = s; Would checking if the copy constructor's parameter is *this be a simple way to catch that?
Well, in this snippet there's no *this involved, the parameter would be the decl being initialized.
Jason