[PATCH] avoid -Wredundant-tags on a first declaration in use (PR 93824)
Martin Sebor
msebor@gmail.com
Fri Feb 28 17:45:00 GMT 2020
On 2/28/20 9:58 AM, Jason Merrill wrote:
> On 2/24/20 6:58 PM, Martin Sebor wrote:
>> -Wredundant-tags doesn't consider type declarations that are also
>> the first uses of the type, such as in 'void f (struct S);' and
>> issues false positives for those. According to the reported that's
>> making it harder to use the warning to clean up LibreOffice.
>>
>> The attached patch extends -Wredundant-tags to avoid these false
>> positives by relying on the same class_decl_loc_t::class2loc mapping
>> as -Wmismatched-tags. The patch also somewhat improves the detection
>> of both issues in template declarations (though more work is still
>> needed there).
>
>> +Â Â Â Â Â Â Â Â a new entry for it and return unless it's a declaration
>> +Â Â Â Â Â Â Â Â involving a template that may need to be diagnosed by
>> +        -Wredundant-tags. */
>> Â Â Â Â Â Â *rdl = class_decl_loc_t (class_key, false, def_p);
>> -Â Â Â Â Â return;
>> +Â Â Â Â Â if (TREE_CODE (decl) != TEMPLATE_DECL)
>> +Â Â Â Â Â Â Â return;
>
> How can the first appearance of a class template be redundant?
I'm not sure I correctly understand the question. The comment says
"involving a template" (i.e., not one of the first declaration of
a template). The test case that corresponds to this test is:
template <class> struct S7 { };
struct S7<void> s7v; // { dg-warning "\\\[-Wredundant-tags" }
where DECL is the TEPLATE_DECL of S7<void>.
As I mentioned, more work is still needed to handle templates right
because some redundant tags are still not diagnosed. For example:
template <class> struct S7 { };
template <class T>
using U = struct S7<T>; // missing warning
Martin
More information about the Gcc-patches
mailing list