[cfe-commits] r166361 - in /cfe/trunk: lib/CodeGen/CGExpr.cpp lib/Sema/SemaExpr.cpp test/CodeGenCXX/const-init-cxx11.cpp test/CodeGenCXX/for-range.cpp test/CodeGenCXX/lambda-expressions.cpp test/SemaCXX/lambda-expressions.cpp
Richard Smith
richard at metafoo.co.uk
Sat Oct 27 21:48:09 PDT 2012
On Fri, Oct 26, 2012 at 5:08 PM, Argyrios Kyrtzidis <kyrtzidis at apple.com> wrote:
> On Oct 26, 2012, at 4:43 PM, Richard Smith <richard at metafoo.co.uk> wrote:
>
>> On Fri, Oct 26, 2012 at 1:54 PM, Argyrios Kyrtzidis <kyrtzidis at apple.com> wrote:
>>> On Oct 26, 2012, at 1:35 PM, Richard Smith <richard at metafoo.co.uk> wrote:
>>>
>>>> Argyrios: It looks like you added this warning in r129794. Can you
>>>> comment on what it's intended to detect?
>>>
>>> variables/functions with internal linkage that are not used from the codegen perspective.
>>> This differs from -Wunused which will consider a 'use' even in an unevaluated context.
>>
>> Why is that a useful thing to warn on?
>
> Because it means you have unused code/data resulting from a bug (bad) or a refactoring (bad hygiene), etc.
>
>>
>>> For example:
>>>
>>> static void foo() { }
>>>
>>> this gives:
>>> warning: unused function 'foo' [-Wunused-function]
>>>
>>> static void foo() { }
>>> template <typename T>
>>> void goo() {
>>> foo();
>>> }
>>>
>>> this gives:
>>> warning: function 'foo' is not needed and will not be emitted [-Wunneeded-internal-declaration]
>>
>> That code certainly looks bogus, but I don't think that's the right
>> warning. We should warn either on the definition of 'goo' (because it
>> has external linkage but uses an internal linkage function) or warn
>> that 'goo' is unused and can't be used outside this TU.
>
> Here's a more realistic example:
>
> static int data1[100];
> static int data2[300];
>
> int data1_size() {
> return sizeof(data1);
> };
>
> int data2_size() {
> return sizeof(data2);
> };
>
> int *get_data1() {
> return data1;
> }
>
> int *get_data2() {
> return data1; // Oops, typo.
> }
>
>
> This gives:
> warning: variable 'data2' is not needed and will not be emitted [-Wunneeded-internal-declaration]
Thanks for explaining. This warning should be fixed in r166896.
More information about the cfe-commits
mailing list