[cfe-commits] [PATCH] Add a warning for a function declaration that shadows a tag type
Manuel Klimek
klimek at google.com
Fri Apr 13 09:13:18 PDT 2012
+ "function %0 shadows %1 %0; uses of %1 %0 will require an '%1' tag">,
I'd use 'a' or a selector for enum.
+void Sema::ActOnStartFunctionDeclarator(Scope* S, Declarator& D) {
* and & to the variable.
+ if (TagDecl *TD = dyn_cast_or_null<TagDecl>(*I)) {
I've searched, but couldn't find why *I would ever be NULL here...
Cheers,
/Manuel
On Thu, Apr 12, 2012 at 10:05 PM, Kaelyn Uhrain <rikka at google.com> wrote:
> 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
>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>
More information about the cfe-commits
mailing list