Ignore:
Timestamp:
Mar 15, 2008, 3:33:36 PM (16 years ago)
Author:
dai_9181
Message:

関数の戻り値の構造体など、一時メモリに保持された構造体のメンバに直接アクセスした場合、その一時メモリの解放が正常に行われないバグを修正(64bit版も修正した)。

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/abdev/BasicCompiler64/Compile_Calc.cpp

    r417 r436  
    190190    //NumOpe...(rax、またはxmm0に答えが格納される)
    191191    int reg=REG_RAX;
    192     BOOL bCalcUseHeap;
    193192    Type calcType;
    194     if( !NumOpe(&reg,Command+i+1,varType,calcType,&bCalcUseHeap) ){
     193    bool isNeedHeapFreeStructure;
     194    if( !NumOpe(&reg,Command+i+1,varType,calcType,&isNeedHeapFreeStructure) ){
    195195        return;
    196196    }
     
    222222    if( varType.IsStruct() ){
    223223        //構造体インスタンスへの代入
    224         SetStructVariableFromRax(varType,calcType,&VarRelativeVar,bCalcUseHeap);
     224        SetStructVariableFromRax(varType,calcType,&VarRelativeVar,isNeedHeapFreeStructure);
    225225        return;
    226226    }
     
    235235        if( !isUpCast ){
    236236            //キャスト演算子のオーバーロードに対応する
    237             CallCastOperatorProc(REG_RAX,calcType,bCalcUseHeap,varType);
     237            CallCastOperatorProc(REG_RAX,calcType,isNeedHeapFreeStructure,varType);
    238238        }
    239239    }
     
    269269    /////////////////////////////////////////////////
    270270    SetVariableFromRax(varType,calcType.GetBasicType(),&VarRelativeVar);
     271
     272
     273    // コード生成過程で発生した構造体の一時メモリを破棄する
     274    compiler.codeGenerator.op_FreeTempStructure();
    271275}
Note: See TracChangeset for help on using the changeset viewer.