From: kuwamoto shintaro Date: 2010-08-24T15:48:09+09:00 Subject: [ruby-dev:42125] vc9 x64でtrunk dlがコンパイルできない こんにちわ trunkをVC9 x64-mswin64でビルドしようとするとdlのコンパイル時に内部エラーが発生しコンパイルできません。 compiling dl cl -nologo -I. -I../../.ext/include/x64-mswin64_90 -I../../../include -I ../../../ext/dl -MD -Zi -W2 -wd4996 -O2sy- -Zm600 -DRUBY_EXTCONF_H=\"extconf.h\ " -D_WIN32_WINNT=0x600 -Focfunc.obj -c -Tc../../../ext/dl/cfunc.c cfunc.c z:\rubytrunk\ext\dl\cfunc.c(426) : fatal error C1001: コンパイラで内部エラーが発 生しました。 (コンパイラ ファイル 'f:\dd\vctools\compiler\utc\src\p2\main.c[0x000000006C269FD B:0x0000000000000004]'、行 182) この問題を回避するには、上記の場所付近のプログラムを単純化するか変更してくださ い。 詳細については、Visual C++ ヘルプ メニューのサポート情報コマンドを 選択してください。またはサポート情報 ヘルプ ファイルを参照してください。 C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\BIN\amd64\cl.EXE での内部 コンパイラ エラーです。エラー報告をマイクロソフトに送信するために、後でメッセー ジが表示されます。 NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio 9.0\ VC\BIN\amd64\cl.EXE"' : リターン コード '0x1' Stop. NMAKE : fatal error U1077: '.\miniruby.exe' : リターン コード '0x1' Stop. 該当行を展開してコンパイルしてみると、result = LONG2NUM(ret);で同じエラーになります。 /*CASE(17);break;*/  switch( RARRAY_LEN(ary) ){ CASE(0); break; CASE(1); break; CASE(2); break; CASE(3); break; CASE(4); break; CASE(5); break; CASE(6); break; CASE(7); break; CASE(8); break; CASE(9); break; CASE(10);break; CASE(11);break; CASE(12);break; CASE(13);break; CASE(14);break; CASE(15);break; CASE(16);break; case 17: { DECL_FUNC_CDECL(f,long,DLSTACK_PROTO17,cfunc->ptr); long ret; ret = f(DLSTACK_ARGS17(stack)); result = LONG2NUM(ret); /*ここでエラー*/ } break; result = LONG2NUM(ret)をresult = NUM2LONG_internal(ret)に置き換えるとエラーも出なくなりビルドに成功します。 ちなみにVC9 mswin32ではビルド出来ます。 VC9のバグのような気がしますが、なにかご存じの方がいらっしゃいましたら情報いただけると助かります。 -- kuwamoto