[cfe-commits] [Patch] Handle qualifiers for template types in during template type diffing.

Richard Trieu rtrieu at google.com
Mon Aug 27 10:51:29 PDT 2012


On Wed, Aug 22, 2012 at 12:59 PM, Chandler Carruth <chandlerc at google.com>wrote:

> On Wed, Aug 22, 2012 at 11:25 AM, Richard Trieu <rtrieu at google.com> wrote:
>
>> On Tue, Aug 21, 2012 at 7:17 PM, Chandler Carruth <chandlerc at google.com>wrote:
>>
>>> On Tue, Aug 21, 2012 at 6:59 PM, Richard Trieu <rtrieu at google.com>wrote:
>>>
>>>> Currently, template diffing does not handle cases where the templates
>>>> have qualifiers.  This can lead to warnings such as:
>>>>
>>>> ... 'vector<vector<[...]>>' cannot convert to 'vector<vector<[...]>>'
>>>> ...
>>>>
>>>> when the message means, can't convert from vector<const vector<int>> to
>>>> vector<vector<int>>.  This patch allows the internal diff tree to store the
>>>> qualifiers for template types and adds new methods for finding the
>>>> difference between sets of qualifiers and to print out the qualifiers.
>>>>  This does not affect non-template types as they already print qualifiers.
>>>>
>>>
>>> Very cool!
>>>
>>>
>>>> Examples:
>>>> vector<const vector<int>> and vector<vector<int>>
>>>> inline: vector<const vector<[...]>> vs. vector<(missing const)
>>>> vector<[...]>
>>>>
>>>
>>> I think I would prefer: vector<const vector<[...]>> vs.
>>> vector<vector<[...]>>
>>>
>>
>>> We can use the cyan highlighting to further emphasize the qualifiers on
>>> both sides (if any) when the qualifiers are different. This would make the
>>> const bright here, and in the example further down, the const bright on one
>>> side and the volatile on the other.
>>>
>>> One reason why I prefer this format is brevity. The other is that the
>>> error might be the *presence* of const just as easily as the absence.
>>>
>>
>> The motivation behind the (missing ...) was that there's
>> no guarantee that the types printed would be close to each other.  There
>> may be cases of : vector<const vector<[...]>> ... long message ...
>> vector<vector<[...]>>.  Going by your suggestion, the second type would be
>> completely unhighlighted.
>>
>
> Seems fine to me? As long as the const is highlighted in the first type, I
> think it's likely to draw the attention to the correct place.
>

New patch.  This includes the changes Chandler and Richard Smith suggested:
when printing types inline, don't print (missing ...) for missing
qualifiers; and maintain consistence by performing qualifier highlighting
on non-template types used as template arguments.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120827/ed0a37af/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: qualifers-type-diffing2.patch
Type: application/octet-stream
Size: 27509 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120827/ed0a37af/attachment.obj>


More information about the cfe-commits mailing list