SOme fun with D compiler

wobbles via Digitalmars-d digitalmars-d at puremagic.com
Tue Oct 18 04:07:53 PDT 2016


On Tuesday, 18 October 2016 at 11:06:08 UTC, wobbles wrote:
> On Tuesday, 18 October 2016 at 08:21:09 UTC, Daniel Kozak wrote:
>> Try to compile this:
>>
>> import std.stdio;
>>
>> auto xxx(T)()
>> {
>>      return this;
>> }
>>
>> struct S
>> {
>>     mixin xxx!(typeof(this));
>>     alias xxx this;
>> }
>>
>> void foo(S pos)
>> {
>>     writefln("(%.2f|%.2f)", pos.x, pos.y);
>> }
>>
>> void main()
>> {
>> }
>>
>>
>> Or this:
>>
>> import std.stdio;
>>
>> auto xxx(T)()
>> if (is(T == struct))
>> {
>>      return this;
>> }
>>
>> struct Vector2f
>> {
>>     mixin xxx!(typeof(this));
>>     alias xxx this;
>> }
>>
>> void foo(ref const Vector2f pos) {}
>>
>> void main()
>> {
>>     Vector2f v;
>>     foo(v);
>> }
>
> Compiler bug?
>
> Looks like it's constantly going in circles trying to figure 
> out what the hell 'xxx' is :)
> I cancelled compilation after a minute of 100% CPU usage so not 
> sure if it will ever finish.

With -v on, this is what it prints:
dmd compileFun.d -v
binary    dmd
version   v2.071.0
config    /usr/local/bin/dmd.conf
parse     compileFun
importall compileFun
import    object        
(/Library/D/dmd/src/druntime/import/object.d)
import    core.attribute        
(/Library/D/dmd/src/druntime/import/core/attribute.d)
import    std.stdio     (/Library/D/dmd/src/phobos/std/stdio.d)
import    core.stdc.stdio       
(/Library/D/dmd/src/druntime/import/core/stdc/stdio.d)
import    core.stdc.stdint      
(/Library/D/dmd/src/druntime/import/core/stdc/stdint.d)
import    core.stdc.stddef      
(/Library/D/dmd/src/druntime/import/core/stdc/stddef.d)
import    core.stdc.signal      
(/Library/D/dmd/src/druntime/import/core/stdc/signal.d)
import    core.stdc.wchar_      
(/Library/D/dmd/src/druntime/import/core/stdc/wchar_.d)
import    core.stdc.config      
(/Library/D/dmd/src/druntime/import/core/stdc/config.d)
import    core.stdc.stdarg      
(/Library/D/dmd/src/druntime/import/core/stdc/stdarg.d)
import    core.stdc.stdlib      
(/Library/D/dmd/src/druntime/import/core/stdc/stdlib.d)
import    core.stdc.time        
(/Library/D/dmd/src/druntime/import/core/stdc/time.d)
import    core.sys.posix.sys.types      
(/Library/D/dmd/src/druntime/import/core/sys/posix/sys/types.d)
import    core.sys.posix.config 
(/Library/D/dmd/src/druntime/import/core/sys/posix/config.d)
import    std.typecons  (/Library/D/dmd/src/phobos/std/typecons.d)
import    std.meta      (/Library/D/dmd/src/phobos/std/meta.d)
import    std.traits    (/Library/D/dmd/src/phobos/std/traits.d)
import    std.typetuple 
(/Library/D/dmd/src/phobos/std/typetuple.d)
import    std.stdiobase 
(/Library/D/dmd/src/phobos/std/stdiobase.d)
import    std.range.primitives  
(/Library/D/dmd/src/phobos/std/range/primitives.d)
semantic  compileFun
import    core.stdc.errno       
(/Library/D/dmd/src/druntime/import/core/stdc/errno.d)
import    core.stdc.string      
(/Library/D/dmd/src/druntime/import/core/stdc/string.d)
entry     main          compileFun.d
semantic2 compileFun
semantic3 compileFun


And sticsk on semantic3 forever.


More information about the Digitalmars-d mailing list