FlasCC での LTO 最適化に問題があります。
-O1 を指定してコンパイルすると、swf は問題なく動作します。
ただし、-O4 を使用すると、最初は正常に実行されますが、特定の仮想関数呼び出しで 15 秒以上ハングし、Flash が停止します。
Flash ログを使用してハングの正確なポイントを追跡するために、printfs を追加しました。
printf( "Program_Step : vis init" ) でハングし、実際の Initialize() 実装には決して入りません。ポインターは IGameVisualizer *m_pVisualizer; として宣言されます。
コード:
virtual void Program_Step( IProgramStep & step )
{
if ( !m_init )
{
if ( m_initCounter > 0 )
{
printf( "\n Program_Step : Later... %d skips left", m_initCounter );
--m_initCounter;
return;
}
printf( "\n Program_Step : Init" );
m_init = true;
m_pVisualizer = Create_SlotsVisualizer_V1();
printf( "\n Program_Step : m_pLogic" );
m_pLogic = Create_SlotsLogic_Test();
if ( m_pVisualizer )
{
printf( "\n Program_Step : vis init" );
m_pVisualizer->Initialize();
}
if ( m_pLogic )
{
printf( "\n Program_Step : logic init" );
m_pLogic->Initialize( *this );
}
printf( "\n Program_Step : after inits" );
}
int dt = step.GetTimeDeltaMsec();
ProcessControls( dt );
if ( m_pLogic )
m_pLogic->Process( dt, *this );
if ( m_pVisualizer )
m_pVisualizer->Process( dt );
}