From 5afd809e88788ea53097471a7ee783826475d15a Mon Sep 17 00:00:00 2001 From: florian Date: Mon, 8 Aug 2022 23:14:19 +0200 Subject: [PATCH] + handle LOC_FLAGS in thlcgobj.location_force_mem, resolves #39292 --- compiler/hlcgobj.pas | 13 +++++++++++++ tests/webtbs/tw39292.pp | 19 +++++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 tests/webtbs/tw39292.pp diff --git a/compiler/hlcgobj.pas b/compiler/hlcgobj.pas index 0ca2498872..34d832ddad 100644 --- a/compiler/hlcgobj.pas +++ b/compiler/hlcgobj.pas @@ -4267,6 +4267,7 @@ implementation var r : treference; forcesize: aint; + hregister: TRegister; begin case l.loc of LOC_FPUREGISTER, @@ -4288,6 +4289,18 @@ implementation location_reset_ref(l,LOC_REFERENCE,l.size,size.alignment,[]); l.reference:=r; end; +{$ifdef cpuflags} + LOC_FLAGS : + begin + hregister:=getregisterfordef(list,size); + g_flags2reg(list,size,l.resflags,hregister); + cg.a_reg_dealloc(list,NR_DEFAULTFLAGS); + tg.gethltemp(list,size,size.size,tt_normal,r); + a_load_reg_ref(list,size,size,hregister,r); + location_reset_ref(l,LOC_REFERENCE,l.size,size.alignment,[]); + l.reference:=r; + end; +{$endif cpuflags} LOC_CONSTANT, LOC_REGISTER, LOC_CREGISTER, diff --git a/tests/webtbs/tw39292.pp b/tests/webtbs/tw39292.pp new file mode 100644 index 0000000000..30da9c71f2 --- /dev/null +++ b/tests/webtbs/tw39292.pp @@ -0,0 +1,19 @@ +{$mode objfpc} {$modeswitch typehelpers} +type + BoolHelper = type helper for boolean + function ToChar: char; + end; + + function BoolHelper.ToChar: char; + begin + result := pChar('-+')[ord(self)]; + end; + +var + x: uint32; + +begin + writeln((@x = @x).ToChar); + if (@x = @x).ToChar<>'+' then + halt(1); +end.