The wall
pascal26:36: error: unknown type: TDoubleRec
in: /home/neo/src/fpc-trunk/compiler/x86_64/cpuinfo.pas
near: bestreal = extended ; bestrealrec = >>> TDoubleRec ; ts32real
Reached 2026-09-11 by [[feature-b-sysutils-has-no-executeprocess-and-no-texecuteflags]]
clearing cfileutl.pas:136 unknown type: TExecuteFlags.
Why this was re-laned within hours of being filed
It was filed on the strength of grep -rn TDoubleRec lib/rtl/ compiler/builtin/
coming back empty, which is true and which does not locate the fix. Two things
had to be checked and were not:
- Where fpc puts it.
rtl/inc/mathh.inc, included bysystemh.inc— the System unit, in scope everywhere without auses.cpuinfo.pas's interface uses onlyglobtype, which is the proof: nothing it names could supply the type. - Whether pxx has an equivalent shelf.
compiler/builtin/builtin.pasis auto-included for specific constructs, not globally scoped. Measured: a bare program declaringvar r: TVariantRecord— a type that unit does declare at :1123 — answersunknown type: TVariantRecord.
So the fix is a compiler-side type the frontend knows, not an RTL declaration, and the lane is P/A rather than B.
And it buys nothing until the unit cycle is fixed
The expectation was written before looking and it held. cfileutl is the only unit standing at this wall, and its implementation section reads:
implementation
uses
Comphook,
Globals;
globals on its own already fails —
comphook.pas:251 undefined variable (V_Status), where V_Status is declared
inside the corpus at globals.pas:149 — so cfileutl is behind
[[bug-p-a-units-interface-constants-are-invisible-to-a-second-units-implementation-uses]]
no matter what happens to TDoubleRec. (This ticket named the unit-cycle bug
until the same evening; that one is DONE and its shape passes.) That is why this is
blocked-by it and priced at 25.
This did not need a build to settle: globals failing alone plus cfileutl
depending on globals is a proof, not a prediction.
Shape, when it is worth doing
fpc's is a packed record over a Double with a private Bias = $3FF and six
private accessors behind public sign / exponent / fraction properties. The
siblings TSingleRec and TExtended80Rec sit beside it and are equally
absent — cpuinfo.pas:34 takes the TExtended80Rec arm under
FPC_HAS_TYPE_EXTENDED, so check which arm our define profile selects before
building only one.