@@ -10,6 +10,7 @@ private import SideEffects
1010private import TranslatedElement
1111private import TranslatedExpr
1212private import TranslatedFunction
13+ private import TranslatedInitialization
1314private import DefaultOptions as DefaultOptions
1415
1516/**
@@ -429,6 +430,9 @@ class TranslatedCallSideEffects extends TranslatedSideEffects, TTranslatedCallSi
429430 or
430431 expr instanceof DeleteOrDeleteArrayExpr and
431432 result = getTranslatedDeleteOrDeleteArray ( expr ) .getInstruction ( CallTag ( ) )
433+ or
434+ expr instanceof ConstructorFieldInit and
435+ result = getTranslatedConstructorFieldInitialization ( expr ) .getInstruction ( CallTag ( ) )
432436 }
433437}
434438
@@ -508,7 +512,7 @@ abstract class TranslatedSideEffect extends TranslatedElement {
508512 * The IR translation of a single argument side effect for a call.
509513 */
510514abstract class TranslatedArgumentSideEffect extends TranslatedSideEffect {
511- Call call ;
515+ CallOrAllocationExpr callOrInit ;
512516 int index ;
513517 SideEffectOpcode sideEffectOpcode ;
514518
@@ -524,7 +528,7 @@ abstract class TranslatedArgumentSideEffect extends TranslatedSideEffect {
524528 result = "(read side effect for " + this .getArgString ( ) + ")"
525529 }
526530
527- override Call getPrimaryExpr ( ) { result = call }
531+ override Expr getPrimaryExpr ( ) { result = callOrInit }
528532
529533 override predicate sortOrder ( int group , int indexInGroup ) {
530534 indexInGroup = index and
@@ -586,7 +590,7 @@ abstract class TranslatedArgumentSideEffect extends TranslatedSideEffect {
586590 tag instanceof OnlyInstructionTag and
587591 operandTag instanceof BufferSizeOperandTag and
588592 result =
589- getTranslatedExpr ( call . getArgument ( call .getTarget ( )
593+ getTranslatedExpr ( callOrInit . ( Call ) . getArgument ( callOrInit .getTarget ( )
590594 .( SideEffectFunction )
591595 .getParameterSizeIndex ( index ) ) .getFullyConverted ( ) ) .getResult ( )
592596 }
@@ -616,7 +620,7 @@ class TranslatedArgumentExprSideEffect extends TranslatedArgumentSideEffect,
616620 Expr arg ;
617621
618622 TranslatedArgumentExprSideEffect ( ) {
619- this = TTranslatedArgumentExprSideEffect ( call , arg , index , sideEffectOpcode )
623+ this = TTranslatedArgumentExprSideEffect ( callOrInit , arg , index , sideEffectOpcode )
620624 }
621625
622626 final override Locatable getAst ( ) { result = arg }
@@ -647,21 +651,24 @@ class TranslatedStructorQualifierSideEffect extends TranslatedArgumentSideEffect
647651 TTranslatedStructorQualifierSideEffect
648652{
649653 TranslatedStructorQualifierSideEffect ( ) {
650- this = TTranslatedStructorQualifierSideEffect ( call , sideEffectOpcode ) and
654+ this = TTranslatedStructorQualifierSideEffect ( callOrInit , sideEffectOpcode ) and
651655 index = - 1
652656 }
653657
654- final override Locatable getAst ( ) { result = call }
658+ final override Locatable getAst ( ) { result = callOrInit }
655659
656- final override Type getIndirectionType ( ) { result = call .getTarget ( ) .getDeclaringType ( ) }
660+ final override Type getIndirectionType ( ) { result = callOrInit .getTarget ( ) .getDeclaringType ( ) }
657661
658662 final override string getArgString ( ) { result = "this" }
659663
660664 final override Instruction getArgInstruction ( ) {
661665 exists ( TranslatedStructorCall structorCall |
662- structorCall .getExpr ( ) = call and
666+ structorCall .getExpr ( ) = callOrInit and
663667 result = structorCall .getQualifierResult ( )
664668 )
669+ or
670+ callOrInit instanceof ConstructorFieldInit and
671+ result = getTranslatedFunction ( callOrInit .getEnclosingFunction ( ) ) .getLoadThisInstruction ( )
665672 }
666673}
667674
0 commit comments