[MacRuby-devel] Building MacRuby r2765 with llvm r82747 failed on core duo macbook, Leopard

Laurent Sansonetti lsansonetti at apple.com
Sun Oct 11 22:16:38 PDT 2009


On Oct 11, 2009, at 10:10 PM, Laurent Sansonetti wrote:
> Hi Hiroshi-san,
>
> On Oct 11, 2009, at 7:11 PM, hiroshi saito wrote:
>
>> Hi Laurent,
>>
>>> Strange. Could you try the following in the same directory and  
>>> paste us the
>>> output?
>>>
>>> $ ./miniruby -I. -I./lib bin/rubyc --internal -C "rbconfig.rb" -o
>>> "./rbconfig.rbo" -V
>>
>> MacRuby - Laurent にコマンド実行結果を送る
>>
>> Hi Laurent,
>>
>>
>>
>> $ ./miniruby -I. -I./lib bin/rubyc --internal -C "rbconfig.rb" -o
>> "./rbconfig.rbo" -V
>>
>> $ PATH=$PATH:~/Desktop/wc/MacRuby/llvm-trunk/Release/bin ./miniruby
>> -I. -I./lib bin/rubyc --internal -C "rbconfig.rb" -o "./rbconfig.rbo"
>> -V
>> ./miniruby --emit-llvm
>> "/var/folders/HQ/HQYJapbxHKW7ieZsqEt5-++++TI/-Tmp-/rbconfig.bc"
>> MREP_-107041289 "rbconfig.rb"
>> /Users/hiroshi/Desktop/wc/MacRuby/llvm-trunk/Release/bin/llc -f
>> /var/folders/HQ/HQYJapbxHKW7ieZsqEt5-++++TI/-Tmp-/rbconfig.bc
>> -o=/var/folders/HQ/HQYJapbxHKW7ieZsqEt5-++++TI/-Tmp-/rbconfig.s
>> -march=x86-64 -enable-eh
>> /usr/bin/gcc -c -arch x86_64
>> /var/folders/HQ/HQYJapbxHKW7ieZsqEt5-++++TI/-Tmp-/rbconfig.s -o
>> /var/folders/HQ/HQYJapbxHKW7ieZsqEt5-++++TI/-Tmp-/rbconfig.o
>> /usr/bin/g++ /var/folders/HQ/HQYJapbxHKW7ieZsqEt5-++++TI/-Tmp-/main.c
>> -dynamic -bundle -undefined suppress -flat_namespace -arch x86_64 -L.
>> -lmacruby /var/folders/HQ/HQYJapbxHKW7ieZsqEt5-++++TI/-Tmp-/ 
>> rbconfig.o
>> -o ./rbconfig.rbo
>> /var/folders/HQ/HQYJapbxHKW7ieZsqEt5-++++TI/-Tmp-/main.c:2: error:
>> expected initializer before ‘-’ token
>> /var/folders/HQ/HQYJapbxHKW7ieZsqEt5-++++TI/-Tmp-/main.c: In function
>> ‘void __init__()’:
>> /var/folders/HQ/HQYJapbxHKW7ieZsqEt5-++++TI/-Tmp-/main.c:5: error:
>> ‘MREP_’ was not declared in this scope
>> /var/folders/HQ/HQYJapbxHKW7ieZsqEt5-++++TI/-Tmp-/main.c:5: error:
>> ‘107041289’ cannot be used as a function
>> Error when executing `/usr/bin/g++
>> /var/folders/HQ/HQYJapbxHKW7ieZsqEt5-++++TI/-Tmp-/main.c -dynamic
>> -bundle -undefined suppress -flat_namespace -arch x86_64 -L. - 
>> lmacruby
>> /var/folders/HQ/HQYJapbxHKW7ieZsqEt5-++++TI/-Tmp-/rbconfig.o -o
>> ./rbconfig.rbo'
>>
>> At the line around 100 of bin/rubyc:
>>
>>   init_func = "MREP_#{File.read(path).hash}"
>>
>> I extracted this line and execute it with -e option
>>
>> $ ./miniruby -I. -I./lib -e "p File.read('rbconfig.rb').hash"
>> -107041289
>>
>> I suppose that String#hash method will return an integer, that could
>> be nagative value. I don't know why on other environments
>> the method return positive value everytime...
>
> Indeed, it's weird that nobody reported that problem, yet.
>
>> Anyway, I hack the line of code to continue like that:
>>
>> Index: bin/rubyc
>> ===================================================================
>> --- bin/rubyc   (revision 2779)
>> +++ bin/rubyc   (working copy)
>> @@ -96,7 +96,7 @@
>>    output ||= File.join(File.dirname(path), base + '.o')
>>
>>    # Generate init function (must be unique).
>> -    init_func = "MREP_#{File.read(path).hash}"
>> +    init_func = "MREP_#{File.read(path).hash.abs}"
>>
>>    # Compile the file into LLVM bitcode.
>>    bc = gen_tmpfile(base, 'bc')
>
> I committed this change in r2781.
>
>> It passed, but I got another error.
>>
>> $ ./miniruby -I. -I./lib bin/rubyc --internal -C "lib/date.rb" -o  
>> "lib/date.rbo"
>> Error when executing `./miniruby --emit-llvm
>> "/var/folders/HQ/HQYJapbxHKW7ieZsqEt5-++++TI/-Tmp-/date.bc"
>> MREP_146681552 "lib/date.rb"'
>> rake aborted!
>>
>> The exact error of the executed subcommand is:
>>
>> $ ./miniruby --emit-llvm
>> "/var/folders/HQ/HQYJapbxHKW7ieZsqEt5-++++TI/-Tmp-/date.bc"
>> MREP_146681552 "lib/date.rb"
>> unrecognized literal `86400000000000' (class `Bignum' type 10)
>> zsh: abort      ./miniruby --emit-llvm  MREP_146681552 "lib/date.rb"
>>
>> I doubt that numeric or integer part of my llvm or macruby went  
>> wrong,
>> it possibly caused by something bad in my environment.
>> If it is true, farther investigation will be waste of time to you and
>> me, I'm sorry, but I'll give up for now.
>
> In fact, this crash is because of a limitation in the AOT compiler,  
> I forgot to handle literal bignums.
>
> $ ./miniruby --emit-llvm foo omg -e "p  
> 1267650600228229401496703205376"
> unrecognized literal `1267650600228229401496703205376' (class  
> `Bignum' type 10)
> Abort trap
>
> In any case I will fix it. But I don't know yet why this problem  
> hits you when compiling lib/date.rb. The same file appears to  
> compile fine for the rest of us.

Quick investigation:

$ ./miniruby -e 'p 86400000000000.class'
Fixnum
$ arch -i386 ./miniruby -e 'p 86400000000000.class'
Bignum

I think that your miniruby runs in 32-bit mode, which should be the  
case if your computer is a Core Duo as mentioned in the subject of  
this e-mail.

32-bit has not been tested a lot, which could explain these bugs :)

Laurent


More information about the MacRuby-devel mailing list