[cfe-dev] CanQualType for ssize_t

Alexander Shaposhnikov via cfe-dev cfe-dev at lists.llvm.org
Wed Jul 12 13:00:22 PDT 2017


Yeah, I think you are right,
my question was mostly about if it's on purpose that  TargetInfo
<https://clang.llvm.org/doxygen/classclang_1_1TargetInfo.html> and
ASTContext don't expose this information (like they do for size_t).
I mean that there is getSizeType method, but there isn't getSignedSizeType
and I'm wondering if it's expected.
If it's not on purpose  - what would people say to adding it ? or what we
should use instead.
Many thanks for the reply,
Kind regards,
Alexander Shaposhnikov



On Wed, Jul 12, 2017 at 4:10 AM, Alex L <arphaman at gmail.com> wrote:

> The C11 standard has the following paragraph for 'z':
>
> Specifies that a following d, i, o, u, x, or X conversion specifier
> applies to a size_t or the corresponding signed integer type argument; or
> that a following n conversion specifier applies to a pointer to a signed
> integer type corresponding to size_t argument.
>
> If I interpret it correctly (please correct me if I'm wrong) then this
> means that for '%zd' you can use a type that identical to the target's
> SizeType, except that it has to be signed.
>
> Alex
>
> On 12 July 2017 at 03:01, Александр Шапошников <alexander.v.shaposhnikov@
> gmail.com> wrote:
>
>>
>>
>> On Tue, Jul 11, 2017 at 5:19 PM, Alexander Shaposhnikov <
>> shal1t712 at gmail.com> wrote:
>>
>>> Hi,
>>> I have a question regarding the right way to get CanQualType/QualType
>>> for "ssize_t".
>>>
>>> The class ASTContext
>>> <https://clang.llvm.org/doxygen/classclang_1_1ASTContext.html#a7c89acd533ffea38c5011885d8d029e4>
>>>  (https://clang.llvm.org/doxygen/ASTContext_8cpp_source.html#l04524)
>>> has a number of methods: getIntMaxType, getUintMaxType, getSizeType etc
>>> but if i am not mistaken it doesn't have the counterpart for "ssize_t".
>>> After looking at the implementation of those methods i see that it's
>>> missing in the class TargetInfo
>>> <https://clang.llvm.org/doxygen/classclang_1_1TargetInfo.html> either.
>>> https://clang.llvm.org/doxygen/include_2clang_2Basic_2Target
>>> Info_8h_source.html#l00228 .
>>>
>>> Some context:
>>>
>>> in PrintfSpecifier::getArgType (in ./lib/Analysis/PrintfForma
>>> tString.cpp)
>>> there is a FIXME:
>>>
>>>      case LengthModifier::AsSizeT:
>>>          return ArgType(); // FIXME: ssize_t
>>>
>>> as a result Clang doesn't analyze the format string "%zd" correctly
>>> and doesn't warn on the following (broken) code:
>>>
>>>     int main() {
>>>       printf("%zd", 12.2);
>>>       return 0;
>>>     }
>>>
>>> Kind regards,
>>> Alexander Shaposhnikov
>>>
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170712/fab75762/attachment.html>


More information about the cfe-dev mailing list