Assertion failure during RaiseIR

Hi,

I'm getting an assertion failure that I can't seem to track down. I wondered if you might be able to help me.

I've enabled break on assertions, and it's breaking somewhere in PhaseList.DoPhaseList that I'm running over a ModuleUnit. This is the message:

Phoenix Assertion Failure: e:\sdkjul2007wix\src\phx\types\type-resolve.cpp, Line 763

!newType->IsAggregateType && !operandType->IsAggregateType

in (Function number 159004) GetBranch [line 0] during RaiseIR

in (PEModule) C:\tmp\Project.dll during IR Unit Function Phases

in (Program) <unnamed unit>

Here is the stack trace:

phxd.dll!Phx.Asserts.AssertFailed(string expressionString = "!newType->IsAggregateType && !operandType->IsAggregateType", string messageString = "", string fileNameString = "e:\\sdkjul2007wix\\src\\phx\\types\\type-resolve.cpp", uint line = 763)


phxd.dll!Phx.Types.Resolve.Convert(Phx.Opcode opcode = {ASSIGN}, Phx.IR.Operand operand = {tv402}, Phx.IR.Instruction insertAfterInstruction = {_$merge93: (references=0)}, Phx.Types.Type newType = {Aggregate?})


phxd.dll!Phx.Types.Resolve.Convert(Phx.IR.Operand operand = {tv402}, Phx.IR.Instruction insertAfterInstruction = {_$merge93: (references=0)}, Phx.Types.Type newType = {Aggregate?}) + 0x2f bytes
runtime-vccrt-win-msild.dll!Phx.Targets.Runtimes.Vccrt.Win.Msil.Raise.ConvertOperand(Phx.IR.Instruction instruction = { GOTO $L26}, Phx.Types.Type type = {Aggregate?}, Phx.IR.Operand operand = {tv402})


runtime-vccrt-win-msild.dll!Phx.Targets.Runtimes.Vccrt.Win.Msil.Raise.StackMerge(Phx.Targets.Runtimes.Vccrt.Win.Msil.LabelExtensionObject stackState = {Phx:Surprisebject}, Phx.IR.LabelInstruction labelInstruction = {$L26: (references=3) Offset: 307(0x0133)}, Phx.IR.Instruction lastInstruction = { br $L26})


runtime-vccrt-win-msild.dll!Phx.Targets.Runtimes.Vccrt.Win.Msil.Raise.Function(Phx.FunctionUnitState targetState = {State: HasOriginalLayout HasRaisedEH Mir})

phxd.dll!Phx.FunctionUnit.DisassembleSymbolically(Phx.FunctionUnitState targetState = {State: HasOriginalLayout HasRaisedEH Mir})

phxd.dll!Phx.PEModuleUnit.Raise(Phx.Symbols.FunctionSymbol functionSymbol = {GetBranch}, Phx.FunctionUnitState functionUnitState = {State: HasOriginalLayout HasRaisedEH Mir})

phxd.dll!Phx.PE.RaiseIRPhase.Execute(Phx.Unit unit = {Project.Management.TreeManager::GetBranch (State: HasOriginalLayout HasRaisedEH IsPostFrameGenerated IsPostRegisterAllocated NeedRecoverFrameInfo NeedRecoverSymbolicId Lir)})

phxd.dll!Phx.Phases.Phase.DoPhase(Phx.Unit unit = {Project.Management.TreeManager::GetBranch (State: HasOriginalLayout HasRaisedEH IsPostFrameGenerated IsPostRegisterAllocated NeedRecoverFrameInfo NeedRecoverSymbolicId Lir)})

phxd.dll!Phx.Phases.PhaseList.DoPhaseList(Phx.Unit unit = {Project.Management.TreeManager::GetBranch (State: HasOriginalLayout HasRaisedEH IsPostFrameGenerated IsPostRegisterAllocated NeedRecoverFrameInfo NeedRecoverSymbolicId Lir)})

phxd.dll!Phx.PEModuleUnit.ProcessGlobalSymbols(Phx.PE.UnitListPhaseList unitListPhaseList = {IR Unit Function Phases (no control) [PhaseList]})

phxd.dll!Phx.PE.UnitListPhaseList.Execute(Phx.Unit unit = {C:\tmp\Project.Client.dll})

phxd.dll!Phx.Phases.Phase.DoPhase(Phx.Unit unit = {C:\tmp\Project.Client.dll})

phxd.dll!Phx.Phases.PhaseList.DoPhaseList(Phx.Unit unit = {C:\tmp\Project.Client.dll})

I have tracked down some of the functions being analysed where this failure occurs, but I can't seem to see any reason for this to happen, and I'm not sure which lines in the IR are causing this failure

Any help would be appreciated.

Thanks

Andy

[4758 byte] By [Andymaule] at [2008-2-21]
# 1

The assertion is saying that you have what appear to be two different aggregate types (when raising MSIL these are typically value classes) that need to be reconciled at a stack merge point (a control flow join where the MSIL operand stack is not empty coming into the join).

You might try dumping out the type for tv402 to see if it gives you any clues about where things are going bad; you can also look at the MSIL flowing into offset 307 and see if there are value types on the stack.

AndyAyers-MSFT at 2007-10-2 > top of Msdn Tech,Visual Studio,Phoenix...

Visual Studio

Site Classified