[cfe-dev] Why qualifiers for array elements on the array itself?

Ray Zhang via cfe-dev cfe-dev at lists.llvm.org
Fri Oct 9 01:22:45 PDT 2020


Hi,

I'm currently working on a clang cast tool and ran into a small oddity.
This might be a stupid mistake but I'd love some pointers(no pun intended)
or insight into it:

const int arr[2] {1,2};

should be "an array of fixed size 2 of constant integers". The QualType
associated with arr is an array type, and we can observe that with
Expr->isArrayType(). I checked the qualifiers and found that the qualifier
for const is actually on this level, and not for the individual elements of
ints. I found the elements inside of the array with the following:

const ArrayType* ArrType = dyn_cast<ArrayType>(MyQualType);
ArrType->getElementType();

which I was hoping could give me the const qualifier for the integers. If
it helps at all, I'm using the getLocalFastQualifiers() function to return
an unsigned int, and I'm seeing if 0x1 is masked for constness.

Since arrays can't really have qualifiers(the only example I see is on the
standards <https://en.cppreference.com/w/c/language/array> for function
parameters for C99 and not C++), was there a reason for why clang decided
to put the qualifiers on the array qualtype rather than the elements'
qualtype?

If I made any unreasonable assumptions to reach this conclusion, please let
me know :)

Best,
Ray
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20201009/cbf29b33/attachment.html>


More information about the cfe-dev mailing list