Thread overview
Strange error happens only with -inline flag
Jun 13, 2013
finalpatch
Jun 13, 2013
finalpatch
Jun 13, 2013
David Nadlinger
Jun 13, 2013
Jonathan M Davis
June 13, 2013
The following code compiles fine with the command "dmd test.d"

import std.array, std.algorithm, std.algorithm, std.string;
void main()
{
	int[string] s;
	auto a = join(map!(a=>format("%s %d", a, s[a]))(s.keys));
}

However, if I try to compile it with "dmd -inline test.d", I get this error message:

test.d(5): Error: function D main is a nested function and cannot be accessed from std.array.join!(MapResult!(__lambda2, string[])).join

Isn't -inline supposed to be completely transparent?
June 13, 2013
On Thursday, 13 June 2013 at 06:06:10 UTC, finalpatch wrote:
> The following code compiles fine with the command "dmd test.d"
>
> import std.array, std.algorithm, std.algorithm, std.string;
> void main()
> {
> 	int[string] s;
> 	auto a = join(map!(a=>format("%s %d", a, s[a]))(s.keys));
> }
>
> However, if I try to compile it with "dmd -inline test.d", I get this error message:
>
> test.d(5): Error: function D main is a nested function and cannot be accessed from std.array.join!(MapResult!(__lambda2, string[])).join
>
> Isn't -inline supposed to be completely transparent?

This happens with DMD 2.063. LDC 0.11 compiles this code with -inline or -O3 just fine.
June 13, 2013
On Thursday, June 13, 2013 08:06:06 finalpatch wrote:
> The following code compiles fine with the command "dmd test.d"
> 
> import std.array, std.algorithm, std.algorithm, std.string;
> void main()
> {
> 	int[string] s;
> 	auto a = join(map!(a=>format("%s %d", a, s[a]))(s.keys));
> }
> 
> However, if I try to compile it with "dmd -inline test.d", I get this error message:
> 
> test.d(5): Error: function D main is a nested function and cannot
> be accessed from std.array.join!(MapResult!(__lambda2,
> string[])).join
> 
> Isn't -inline supposed to be completely transparent?

Yes, inlining should have no effect on the semantics of the code, but the inliner is not bug-free. Please report any bugs you find:

http://d.puremagic.com/issues

- Jonathan M Davis
June 13, 2013
On Thursday, 13 June 2013 at 06:10:56 UTC, finalpatch wrote:
> This happens with DMD 2.063. LDC 0.11 compiles this code with -inline or -O3 just fine.

LDC does not employ the AST-based inliner DMD uses.

David