[cfe-dev] CanQualType for ssize_t

Александр Шапошников via cfe-dev cfe-dev at lists.llvm.org
Thu Jul 13 12:09:11 PDT 2017


Sounds good, thanks!
Kind regards,
Alexander Shaposhnikov

On Thu, Jul 13, 2017 at 2:38 AM, Alex L via cfe-dev <cfe-dev at lists.llvm.org>
wrote:

>
>
> On 12 July 2017 at 21:00, Alexander Shaposhnikov <
> alexander.v.shaposhnikov at gmail.com> wrote:
>
>> 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
>>
>>
> I think that the standard says that we can just take the signed version of
> the SizeType. A method like this in TargetInfo should suffice then:
>
> IntType getSignedSizeType() const {
>   switch (SizeType) {
>   case UnsignedLongLong: return SignedLongLong;
>   ....
>   }
> }
>
> Then you should be able to add an appropriate method to the ASTContext
> that returns a QualType that corresponds to this Target type.
>
> In my opinion this is a reasonable solution to the problem,
> Alex
>
>
>>
>>
>> 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 at 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
>>>>>
>>>>
>>>>
>>>
>>
>
> _______________________________________________
> cfe-dev mailing list
> cfe-dev at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-dev
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-dev/attachments/20170713/4e89516a/attachment.html>


More information about the cfe-dev mailing list