./trunk/gcc137/vcs_diff_compiler.patch 2026-06-24-03:36
> uname -a Linux cfarm137 6.12.90+deb13.1-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.12.90-2 (2026-05-27) x86_64 GNU/Linux
diff --git a/compiler/arm/agarmgas.pas b/compiler/arm/agarmgas.pas
index a152371522..89571b9268 100644
--- a/compiler/arm/agarmgas.pas
+++ b/compiler/arm/agarmgas.pas
@@ -212,9 +212,16 @@ TArmAppleGNUAssembler=class(TAppleGNUassembler)
if assigned(symbol) then
begin
+{$ifdef DEBUG_THUMB_ISSUE}
+ s:='';
+ if (base<>NR_NO) and not(is_pc(base)) then
+ s:='['+gas_regname(base)+']';
+ s:=s+symbol.name;
+{$else not DEBUG_THUMB_ISSUE}
if (base<>NR_NO) and not(is_pc(base)) then
internalerror(200309011);
s:=symbol.name;
+{$endif not DEBUG_THUMB_ISSUE}
if offset<>0 then
s:=s+tostr_with_plus(offset);
if refaddr=addr_pic then
diff --git a/compiler/jvm/njvmcnv.pas b/compiler/jvm/njvmcnv.pas
index 5e47b14760..7ec3a0d3cd 100644
--- a/compiler/jvm/njvmcnv.pas
+++ b/compiler/jvm/njvmcnv.pas
@@ -1432,6 +1432,9 @@ if resultdef.typ=classrefdef then
dummyres: tnode;
begin
result:=do_target_specific_explicit_typeconv(true,dummyres);
+ if result and assigned(current_procinfo) and
+ assigned(current_procinfo.procdef) then
+ include(current_procinfo.procdef.implprocoptions,pio_inline_not_possible);
end;
diff --git a/compiler/pdecvar.pas b/compiler/pdecvar.pas
index f4c5b7d938..711892ca68 100644
--- a/compiler/pdecvar.pas
+++ b/compiler/pdecvar.pas
@@ -1356,9 +1356,14 @@ implementation
{ the whole record -- which is why we use pt and not hp) }
{ we can't take the size of an open array or an array of const }
+ { Different types (even with matching size) can cause wrong
+ codegen when the absolute var gets inlined, because the
+ register-resident target is updated in place via SUBSETREG
+ ops without first loading its current value. Force memory. }
if is_open_array(pt.resultdef) or
is_array_of_const(pt.resultdef) or
- (vs.vardef.size <> pt.resultdef.size) then
+ (vs.vardef.size <> pt.resultdef.size) or
+ not equal_defs(vs.vardef,pt.resultdef) then
make_not_regable(pt,[ra_addr_regable]);
tabsolutevarsym(abssym).adjust_varregable;
end;