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

Richard Trieu rtrieu at google.com
Wed Aug 22 11:25:45 PDT 2012


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.

>
>
>> tree:
>> vector<
>>   [const != (no qualifiers)] vector<
>>
>
> But I like this to show no qualifiers in the != display of the tree.
>
>
>>     [...]>>
>>
>> vector<const vector<int>> and vector<volatile vector<int>>
>> inline: vector<const (missing volatile) vector<[...]>> vs vector<volatile
>> (missing const) vector<[...]>>
>> tree:
>> vector<
>>   [const != volatile] vector<
>>     [...]>>
>>
>> Highlighting is also added for the differing qualifiers.
>>
>> _______________________________________________
>> cfe-commits mailing list
>> cfe-commits at cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120822/36e864b5/attachment.html>


More information about the cfe-commits mailing list