On Dec 29, 2009, at 9:58 PM, Chris Lattner wrote:
> On Dec 29, 2009, at 8:53 PM, John McCall wrote:
>> On Dec 29, 2009, at 8:10 PM, Chandler Carruth wrote:
>>> +/// getCVRQualifiersThroughArrayTypes - If there are CVR qualifiers for 
>>> this
>>> +/// type, returns them. Otherwise, if this is an array type, recurses
>>> +/// on the element type until some qualifiers have been found or a 
>>> non-array
>>> +/// type reached.
>>> +inline unsigned QualType::getCVRQualifiersThroughArrayTypes() const {
>>> +  if (unsigned Quals = getCVRQualifiers())
>>> +    return Quals;
>>> +  QualType CT = getTypePtr()->getCanonicalTypeInternal();
>>> +  if (const ArrayType *AT = dyn_cast<ArrayType>(CT))
>>> +    return AT->getElementType().getCVRQualifiersThroughArrayTypes();
>>> +  return 0;
>>> +}
>> 
>> The CVR qualifiers on an array type are the union of the CVR qualifiers on 
>> every level of the type.  You can't just stop at the first level that 
>> defines CVR qualifiers (well, unless it defines all the qualifiers, but 
>> that's not worth checking for).
>> 
>> Also I'm suspicious of adding a new accessor for this;  I think 
>> QualType::getCVRQualifiers(), isConstQualified(), etc. just need to look 
>> through array types the same way getAddressSpace() does.  If that's 
>> prohibitively expensive, we should solve that problem separately, probably 
>> by duplicating qualifiers at all levels in the canonical types for arrays.
> 
> This should just be looking at the CVR qualifiers of the canonical type for 
> the array.  If those CVR qualifiers aren't right, that should be fixed.  It 
> shouldn't be fixed by adding new stuff like this.


To clarify, what is the canonical type for T in the following?
  typedef const int A[10];
  typedef volatile A T[5];
(a)  5-array of 10-array of const volatile int (the current)
(b)  const volatile 5-array of 10-array of int
(c)  const volatile 5-array of const volatile 10-array of const volatile int

I personally favor (c);  I think I've even proposed this before, but I don't 
remember why it was counter-indicated.  It would certainly make qualifier 
queries much easier and faster.

John.
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to