[cfe-commits] r59232 - /cfe/trunk/lib/Analysis/GRExprEngine.cpp

Zhongxing Xu xuzhongxing at gmail.com
Sun Nov 16 21:14:27 PST 2008


On Sun, Nov 16, 2008 at 12:27 PM, Zhongxing Xu <xuzhongxing at gmail.com>wrote:

>
>
> On Sun, Nov 16, 2008 at 11:28 AM, Ted Kremenek <kremenek at apple.com> wrote:
>
>>
>> On Nov 15, 2008, at 5:55 AM, Zhongxing Xu wrote:
>>
>>
>>> One side problem is that I cannot make the MemRegion* in the
>>> ImmutableList const. If I did that, I would get compile error, related to
>>> FoldingSet Profile() overloading.
>>>
>>> It seems that ImmutableList cannot take a const type as template
>>> parameter, otherwise the  two Profile functions in the partial
>>> specialization of FoldingSetTrait would have the same signature.
>>> (FoldingSet.h:444, 447).
>>>
>>
>> Could we provide a partial specialization of FoldingSetTrait just for
>> ImmutableList?  Or, does (something like) this work (i.e., add another
>> partial specialization for const types):
>>
>> template<typename const T> struct FoldingSetTrait<const T*> {
>>  static inline void Profile(const T* X, FoldingSetNodeID& ID) {
>>    ID.AddPointer(X);
>>  }
>> };
>>
>
> Yeah, this works! Thanks. Incidentally, do you think the old problem is
> caused by a g++ bug, because, at FoldingSet.h:234, the parameter for Add()
> already contains 'const', T should not contain 'const' when being
> instantiated.
>

I was wrong. That was not g++ bug.

The template argument const T& need a const type. But const MemRegion* is
not a const type,
but a non-const pointer to const MemRegion. So T must match the entire
'const MemRegion*'.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20081117/9524f959/attachment.html>


More information about the cfe-commits mailing list