[LLVMdev] How to handle size_t in front ends?
Chris Lattner
sabre at nondot.org
Wed May 21 14:09:26 PDT 2008
On Wed, 21 May 2008, Talin wrote:
> On a related topic: The source-level debugging descriptors require you
> to know up front what the sizeof pointer types are. Is there any hope of
> the frontend remaining blissfully unaware of platform details?
I really don't know how to do this. The current debug info stuff depends
on emitting size info into the IR. At this point, I don't think there is
a good way around this. Improvements to the design are welcome of course.
-Chris
>> Nice.
>>
>>
>>> However, where things get tricky is in calling C functions that take a
>>> size_t as a parameter. Since a size_t is the same size as a pointer,
>>> it
>>> may be either 32 or 64 bits depending on the target platform. All of a
>>> sudden, I can no longer generate 'target-neutral' IR, but instead must
>>> introduce into the front end knowledge about the target platform.
>>>
>>
>> Right, this is ugliness of C. :( Remember that even the size of int
>> (and certainly the size of long!) is target specific as well. This
>> implies that you cannot generate truly portable interfaces to C code
>> if they take an int.
>>
>>
>>> So my questions are:
>>>
>>> 1) Is there a way to declare an integer type in the IR that represents
>>> "an int the same size as a pointer" without specifying exactly the
>>> size
>>> of a pointer?
>>>
>>
>> No.
>>
>>
>>> 2) Assuming the above answer is "no", what's the best way for the
>>> front
>>> end to measure the size of a pointer?
>>>
>>
>> It doesn't help for interfacing to C, but you can do things like this:
>> http://llvm.org/docs/tutorial/LangImpl8.html#offsetofsizeof
>>
>> If you want to generate a constant as a Value* in the IR.
>>
>> For emitting the right sized integer type, I'm afraid that your front-
>> end needs to know the size of the integer.
>>
>>
>> If you are willing to accept an ugly hack that works almost always on
>> common targets, you can just declare the size_t argument *as being a
>> pointer*, and use inttoptr to pass it. This works because common ABIs
>> pass integers and pointers the same way.
>>
>> -Chris
>>
>> _______________________________________________
>> LLVM Developers mailing list
>> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
>> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>>
>>
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
-Chris
--
http://nondot.org/sabre/
http://llvm.org/
More information about the llvm-dev
mailing list