On Wed, Jul 27, 2011 at 11:46 PM, Jacob Carlborg <d...@me.com> wrote:

> On 2011-07-28 03:23, Andrew Wiley wrote:
>
>> On Wed, Jul 27, 2011 at 2:10 AM, Jacob Carlborg <d...@me.com
>> <mailto:d...@me.com>> wrote:
>>
>>        Cannot be implemented in GDC. The driver/compiler/assembler/__**
>> linker
>>        structure doesn't allow it.
>>
>>
>>    Why is that?
>>
>>
>> Well, the short version is that GDC (the executable) is not a compiler.
>> GDC is a driver that runs cc1d to compile your code, runs as (at least I
>> think that's the name offhand) to assemble it, then runs ld to link it.
>> As far as I know, there's no way for cc1d to communicate the contents of
>> pragmas like this back to the driver, which it would have to do if you
>> wanted the driver to include the library in the arguments to the linker.
>> It's possible that I just don't know the infrastructure well enough, but
>> I think this is one of the reasons the GCC guys refused to implement
>> #pragma in C/C++ as well.
>>
>
> I don't really get this. GDC is a D front end for the GCC back end. So the
> the front end should handle all language specific things, like the pragma.
> Then I assume the front end can pass options to the linker. Is this not the
> case?


In traditional terms, cc1d is a compiler, including both the frontend and
the backend. It takes parameters and spits out assembly. That's it.
The GDC executable is the driver responsible for running cc1d to compile the
source to assembly, as to assemble the object files, and ld to link it all
into a binary. cc1d cannot pass options to the linker because it does not
invoke the linker.

Reply via email to