On Wed, 20 Dec 2023, Hairy Pixels via fpc-pascal wrote:
I feel like this was addressed but I couldn't find any references. The program below prints the following: Initialize Create Finalize Finalize Why is Finalize called twice? I thought those were supposed to be called in pairs with initialize?
If you look at the generated code, you see that there is an implicit try/finally block and the finally block does a finalize. call fpc_pushexceptaddr movq %rax,%rdi call fpc_setjmp movl %eax,-92(%rbp) cmpl $0,%eax jne .Lj10 leaq -96(%rbp),%rdi call P$TEST$_$TMANAGEDOBJECT_$__$$_CREATE$$TMANAGEDOBJECT movq $INIT_$P$TEST_$$_TMANAGEDOBJECT,%rsi leaq -96(%rbp),%rdi call fpc_finalize .Lj10: call fpc_popaddrstack movq $INIT_$P$TEST_$$_TMANAGEDOBJECT,%rsi leaq -96(%rbp),%rdi call fpc_finalize movl -92(%rbp),%eax Michael. _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal