The following code compiles fine with 'dmd -c bug.d', but gives a forward reference error when compiled as 'dmd -c -g bug.d'
-- bug.d ----------------------------
Foofunc f;
alias int function(Foo) Foofunc;
-------------------------------------
This issue prevents being able to produce debug info if you use DerelictFreeType library, which is a pretty big issue for a number of D game developers. Who knows how many times I've explained this bug. I'd suggest this as a 1.0 blocker.
Comment #5 by dvdfrdmn — 2006-09-28T16:55:18Z
Walter Bright wrote:
> [email protected] wrote:
>> http://d.puremagic.com/issues/show_bug.cgi?id=104
>> ------- Comment #4 from [email protected] 2006-09-28 09:17 -------
>> This issue prevents being able to produce debug info if you use
>> DerelictFreeType library, which is a pretty big issue for a number of
>> D game
>> developers. Who knows how many times I've explained this bug. I'd
>> suggest this
>> as a 1.0 blocker.
>
> Why is it a blocker when it is illegal code anyway? (Foo is undefined.)
How about this code?
--- bug.d ---
Foofunc f;
typedef int Foo;
alias int function(Foo) Foofunc;
------
It compiles with dmd -c bug.d, but dmd -c -g bug.d fails with the following:
error: forward reference of Foo
Of course the workaround is to change the code to
typedef int Foo;
alias int function(Foo) Foofunc;
Foofunc f;
Bradley
Comment #6 by clayasaurus — 2006-10-02T19:55:22Z
Walter Bright wrote:
> [email protected] wrote:
>> http://d.puremagic.com/issues/show_bug.cgi?id=104
>> ------- Comment #4 from [email protected] 2006-09-28 09:17 -------
>> This issue prevents being able to produce debug info if you use
>> DerelictFreeType library, which is a pretty big issue for a number of
>> D game
>> developers. Who knows how many times I've explained this bug. I'd
>> suggest this
>> as a 1.0 blocker.
>
> Why is it a blocker when it is illegal code anyway? (Foo is undefined.)
Here is another example, I'm not sure if it is much better.
struct FT_Var_Named_Style{
T1_Decoder_Callback f;
}
alias int function( T1_DecoderRec decoder ) T1_Decoder_Callback;
Comment #7 by dvdfrdmn — 2006-10-02T20:35:18Z
clayasaurus wrote:
> Walter Bright wrote:
>> [email protected] wrote:
>>> http://d.puremagic.com/issues/show_bug.cgi?id=104
>>> ------- Comment #4 from [email protected] 2006-09-28 09:17 -------
>>> This issue prevents being able to produce debug info if you use
>>> DerelictFreeType library, which is a pretty big issue for a number of
>>> D game
>>> developers. Who knows how many times I've explained this bug. I'd
>>> suggest this
>>> as a 1.0 blocker.
>>
>> Why is it a blocker when it is illegal code anyway? (Foo is undefined.)
>
> Here is another example, I'm not sure if it is much better.
>
>
> struct FT_Var_Named_Style{
> T1_Decoder_Callback f;
> }
>
> alias int function( T1_DecoderRec decoder ) T1_Decoder_Callback;
What I don't understand is why the code above does not give an
"T1_DecoderRec undefined" error. Doesn't the compiler require the types
of arguments in function statements to be defined?
This incorrectly compiles without errors. It should give a Foo undefined
error. With -g, compiling gives a Foo forward reference error.
Foofunc f;
alias int function(Foo) Foofunc;
This correctly doesn't compile. It gives a Foo undefined error.
alias int function(Foo) Foofunc;
Foofunc f;
This correctly compiles, but with -g, gives a Foo forward reference error.
Foofunc f;
alias int function(Foo) Foofunc;
alias int Foo;
There appear to be two bugs: the forward reference error, and the
mishandling of the argument types in function aliases.