[LLVMdev] How to handle size_t in front ends?

Talin viridia at gmail.com
Wed May 21 01:43:01 PDT 2008


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?

Chris Lattner wrote:
> On May 6, 2008, at 11:12 PM, Talin wrote:
>
>   
>> For the most part, it appears that writing a front end can be almost
>> entirely platform-independent. For example, my front end doesn't know
>> how big a pointer is, and for the most part doesn't care. All of the
>> platform-specific aspects of compilation have, up to this point, been
>> hidden behind the IR.
>>     
>
> 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
>
>   




More information about the llvm-dev mailing list