[cfe-commits] [PATCH] Add a warning for a function declaration that shadows a tag type

Kaelyn Uhrain rikka at google.com
Thu Apr 12 14:05:28 PDT 2012


Ping.

Unless I hear something, I'll go ahead and commit the patch tomorrow
morning.

On Wed, Apr 11, 2012 at 1:44 PM, Kaelyn Uhrain <rikka at google.com> wrote:

> Hi,
>
> This warning is to help make code like:
>
> class Foo {
>  public:
>   enum Bar { X, Y };
>   void SetBar(Bar bar);  // Setter
>   Bar Bar()  // Getter
>  private:
>   Bar bar_;
> };
> void Foo::SetBar(Bar bar) { bar_ = bar; }
> Foo::Bar Foo::Bar() { return bar_; }
>
>
> be a bit easier to diagnose. Currently clang spits out a bunch of errors
> without any real indication of what went wrong (the first error is the only
> remotely helpful one, but it doesn't give any reason why an 'enum' tag has
> to be added):
>
> tmp.cc:7:3: error: must use 'enum' tag to refer to type 'Bar' in this scope
>   Bar bar_;
>   ^
>   enum
> tmp.cc:9:11: error: variable has incomplete type 'void'
> void Foo::SetBar(Bar bar) { bar_ = bar; }
>           ^
> tmp.cc:9:18: error: use of undeclared identifier 'Bar'
> void Foo::SetBar(Bar bar) { bar_ = bar; }
>                  ^
> tmp.cc:9:26: error: expected ';' after top level declarator
> void Foo::SetBar(Bar bar) { bar_ = bar; }
>                          ^
>                          ;
> 4 errors generated.
>
>
> With the patch, clang emits a warning before that cascade of errors:
>
> tmp.cc:5:7: warning: function 'Bar' shadows enum 'Bar'; uses of enum 'Bar'
> will require an 'enum'
>       tag [-Wshadow]
>   Bar Bar();  // Getter
>       ^
> tmp.cc:3:3: note: 'Bar' declared here
>   enum Bar { X, Y };
>   ^
> tmp.cc:7:3: error: must use 'enum' tag to refer to type 'Bar' in this scope
> <and the rest of the messages from the first output example>
>
>
> I'm sending the patch for pre-commit review both because I'm uncertain
> about the wording of the wording, and primarily because I'm not sure that
> modifying Sema::ActOnStartFunctionDeclarator is the right place for the
> check (though it was the best candidate I could find).
>
> I'd also like to clean up the errors (in a separate patch) but the errors
> seem to involve a lot of interactions between the parser and sema and may
> take a while for me to figure out how to get things to work right. ;)
>
> Cheers,
> Kaelyn
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120412/e64c6f9c/attachment.html>


More information about the cfe-commits mailing list