FPC conformance
Free Pascal's own test suite, run against the pxx Pascal frontend. wontfix = probes FPC internals or an intentional divergence (never counts against us); gap = a real unimplemented feature; untriaged = skip-listed, not yet classified; auto-gated = needs suite infra or other targets we don't model here. What each language targets lives under Compliance.
pass
324
fail
2
skip
190
gap 172 · wontfix
17 · untriaged
1
auto-gated
34
pass rate (excl. wontfix/auto)
64.9%
By category
| Category | pass | fail | skip | auto |
|---|---|---|---|---|
tarray |
6 | 12 | 2 | |
tarrconstr |
4 | 4 | ||
tcase |
53 | 1 | ||
tclass |
8 | 1 | 15 | 6 |
tdefault |
12 | 2 | 1 | |
tenum |
2 | 5 | ||
terecs |
23 | 9 | ||
texception |
1 | 3 | 6 | |
tforin |
8 | 20 | ||
tgenconstraint |
36 | 4 | ||
tgeneric |
54 | 1 | 49 | 3 |
tgenfunc |
5 | 14 | 1 | |
tint64 |
3 | 1 | ||
tinterface |
0 | 2 | 4 | |
tmoperator |
1 | 10 | ||
tobject |
0 | 6 | 4 | |
toperator |
85 | 10 | 1 | |
tover |
1 | 3 | ||
tprocvar |
0 | 3 | ||
tprop |
2 | 2 | ||
trange |
3 | 1 | 2 | |
tsealed |
5 | 1 | ||
tset |
6 | 5 | 2 | |
tstatic |
4 | 1 | ||
tstring |
2 | 8 | 1 |
All tests (550)
| status | name | category | tag | reason |
|---|---|---|---|---|
| auto | tarray4.pp |
tarray | knownrunerror | |
| auto | tarray9.pp |
tarray | opt | |
| auto | tclass1.pp |
tclass | version | |
| auto | tclass2.pp |
tclass | version | |
| auto | tclass4.pp |
tclass | opt | |
| auto | tclass6.pp |
tclass | version | |
| auto | tclass7.pp |
tclass | version | |
| auto | tclass8.pp |
tclass | version | |
| auto | tdefault15.pp |
tdefault | target=darwin | |
| auto | texception4.pp |
texception | opt | |
| auto | texception5.pp |
texception | version | |
| auto | texception6.pp |
texception | version | |
| auto | texception7.pp |
texception | version | |
| auto | texception8.pp |
texception | version | |
| auto | texception9.pp |
texception | version | |
| auto | tgeneric104.pp |
tgeneric | recompile | |
| auto | tgeneric74.pp |
tgeneric | recompile | |
| auto | tgeneric75.pp |
tgeneric | recompile | |
| auto | tgenfunc16.pp |
tgenfunc | opt | |
| auto | tint644.pp |
tint64 | opt | |
| auto | tinterface1.pp |
tinterface | version | |
| auto | tinterface2.pp |
tinterface | version | |
| auto | tinterface3.pp |
tinterface | version | |
| auto | tinterface5.pp |
tinterface | version | |
| auto | tobject10.pp |
tobject | opt | |
| auto | tobject3.pp |
tobject | opt | |
| auto | tobject8.pp |
tobject | opt | |
| auto | tobject9.pp |
tobject | opt | |
| auto | toperator5.pp |
toperator | version | |
| auto | trange1.pp |
trange | version | |
| auto | trangeob.pp |
trange | opt | |
| auto | tset5.pp |
tset | opt | |
| auto | tset6.pp |
tset | opt | |
| auto | tstring6.pp |
tstring | version | |
| fail | tclass13b.pp |
tclass | compile error | |
| fail | tgeneric72.pp |
tgeneric | compile error | |
| pass | tarray1.pp |
tarray | ||
| pass | tarray10.pp |
tarray | ||
| pass | tarray19.pp |
tarray | ||
| pass | tarray20.pp |
tarray | ||
| pass | tarray5.pp |
tarray | ||
| pass | tarray8.pp |
tarray | ||
| pass | tarrconstr2.pp |
tarrconstr | ||
| pass | tarrconstr3.pp |
tarrconstr | ||
| pass | tarrconstr4.pp |
tarrconstr | ||
| pass | tarrconstr8.pp |
tarrconstr | ||
| pass | tcase0.pp |
tcase | ||
| pass | tcase1.pp |
tcase | ||
| pass | tcase10.pp |
tcase | ||
| pass | tcase11.pp |
tcase | ||
| pass | tcase12.pp |
tcase | ||
| pass | tcase13.pp |
tcase | ||
| pass | tcase14.pp |
tcase | ||
| pass | tcase15.pp |
tcase | ||
| pass | tcase16.pp |
tcase | ||
| pass | tcase17.pp |
tcase | ||
| pass | tcase18.pp |
tcase | ||
| pass | tcase19.pp |
tcase | ||
| pass | tcase20.pp |
tcase | ||
| pass | tcase21.pp |
tcase | ||
| pass | tcase22.pp |
tcase | ||
| pass | tcase23.pp |
tcase | ||
| pass | tcase24.pp |
tcase | ||
| pass | tcase25.pp |
tcase | ||
| pass | tcase26.pp |
tcase | ||
| pass | tcase27.pp |
tcase | ||
| pass | tcase28.pp |
tcase | ||
| pass | tcase29.pp |
tcase | ||
| pass | tcase3.pp |
tcase | ||
| pass | tcase30.pp |
tcase | ||
| pass | tcase31.pp |
tcase | ||
| pass | tcase32.pp |
tcase | ||
| pass | tcase33.pp |
tcase | ||
| pass | tcase34.pp |
tcase | ||
| pass | tcase35.pp |
tcase | ||
| pass | tcase36.pp |
tcase | ||
| pass | tcase37.pp |
tcase | ||
| pass | tcase38.pp |
tcase | ||
| pass | tcase39.pp |
tcase | ||
| pass | tcase4.pp |
tcase | ||
| pass | tcase40.pp |
tcase | ||
| pass | tcase41.pp |
tcase | ||
| pass | tcase42.pp |
tcase | ||
| pass | tcase43.pp |
tcase | ||
| pass | tcase44.pp |
tcase | ||
| pass | tcase45.pp |
tcase | ||
| pass | tcase45_2.pp |
tcase | ||
| pass | tcase46.pp |
tcase | ||
| pass | tcase46_2.pp |
tcase | ||
| pass | tcase47.pp |
tcase | ||
| pass | tcase47_2.pp |
tcase | ||
| pass | tcase48.pp |
tcase | ||
| pass | tcase48_2.pp |
tcase | ||
| pass | tcase5.pp |
tcase | ||
| pass | tcase50.pp |
tcase | ||
| pass | tcase6.pp |
tcase | ||
| pass | tcase7.pp |
tcase | ||
| pass | tcase8.pp |
tcase | ||
| pass | tcase9.pp |
tcase | ||
| pass | tclass10.pp |
tclass | ||
| pass | tclass10a.pp |
tclass | ||
| pass | tclass10b.pp |
tclass | ||
| pass | tclass10c.pp |
tclass | ||
| pass | tclass11b.pp |
tclass | ||
| pass | tclass14a.pp |
tclass | ||
| pass | tclass14b.pp |
tclass | ||
| pass | tclass17.pp |
tclass | ||
| pass | tdefault10.pp |
tdefault | ||
| pass | tdefault11.pp |
tdefault | ||
| pass | tdefault12.pp |
tdefault | ||
| pass | tdefault13.pp |
tdefault | ||
| pass | tdefault14.pp |
tdefault | ||
| pass | tdefault2.pp |
tdefault | ||
| pass | tdefault3.pp |
tdefault | ||
| pass | tdefault4.pp |
tdefault | ||
| pass | tdefault6.pp |
tdefault | ||
| pass | tdefault7.pp |
tdefault | ||
| pass | tdefault8.pp |
tdefault | ||
| pass | tdefault9.pp |
tdefault | ||
| pass | tenum4.pp |
tenum | ||
| pass | tenum5.pp |
tenum | ||
| pass | terecs1.pp |
terecs | ||
| pass | terecs12.pp |
terecs | ||
| pass | terecs12a.pp |
terecs | ||
| pass | terecs12b.pp |
terecs | ||
| pass | terecs12c.pp |
terecs | ||
| pass | terecs12d.pp |
terecs | ||
| pass | terecs13.pp |
terecs | ||
| pass | terecs13a.pp |
terecs | ||
| pass | terecs13b.pp |
terecs | ||
| pass | terecs13c.pp |
terecs | ||
| pass | terecs13d.pp |
terecs | ||
| pass | terecs16.pp |
terecs | ||
| pass | terecs17.pp |
terecs | ||
| pass | terecs17a.pp |
terecs | ||
| pass | terecs18.pp |
terecs | ||
| pass | terecs18a.pp |
terecs | ||
| pass | terecs19.pp |
terecs | ||
| pass | terecs2.pp |
terecs | ||
| pass | terecs21.pp |
terecs | ||
| pass | terecs4.pp |
terecs | ||
| pass | terecs5.pp |
terecs | ||
| pass | terecs7.pp |
terecs | ||
| pass | terecs9.pp |
terecs | ||
| pass | texception2.pp |
texception | ||
| pass | tforin10.pp |
tforin | ||
| pass | tforin11.pp |
tforin | ||
| pass | tforin18.pp |
tforin | ||
| pass | tforin20.pp |
tforin | ||
| pass | tforin21.pp |
tforin | ||
| pass | tforin22.pp |
tforin | ||
| pass | tforin23.pp |
tforin | ||
| pass | tforin5.pp |
tforin | ||
| pass | tgenconstraint10.pp |
tgenconstraint | ||
| pass | tgenconstraint11.pp |
tgenconstraint | ||
| pass | tgenconstraint12.pp |
tgenconstraint | ||
| pass | tgenconstraint13.pp |
tgenconstraint | ||
| pass | tgenconstraint14.pp |
tgenconstraint | ||
| pass | tgenconstraint15.pp |
tgenconstraint | ||
| pass | tgenconstraint16.pp |
tgenconstraint | ||
| pass | tgenconstraint17.pp |
tgenconstraint | ||
| pass | tgenconstraint18.pp |
tgenconstraint | ||
| pass | tgenconstraint19.pp |
tgenconstraint | ||
| pass | tgenconstraint2.pp |
tgenconstraint | ||
| pass | tgenconstraint20.pp |
tgenconstraint | ||
| pass | tgenconstraint21.pp |
tgenconstraint | ||
| pass | tgenconstraint22.pp |
tgenconstraint | ||
| pass | tgenconstraint23.pp |
tgenconstraint | ||
| pass | tgenconstraint24.pp |
tgenconstraint | ||
| pass | tgenconstraint25.pp |
tgenconstraint | ||
| pass | tgenconstraint26.pp |
tgenconstraint | ||
| pass | tgenconstraint27.pp |
tgenconstraint | ||
| pass | tgenconstraint28.pp |
tgenconstraint | ||
| pass | tgenconstraint29.pp |
tgenconstraint | ||
| pass | tgenconstraint3.pp |
tgenconstraint | ||
| pass | tgenconstraint30.pp |
tgenconstraint | ||
| pass | tgenconstraint31.pp |
tgenconstraint | ||
| pass | tgenconstraint32.pp |
tgenconstraint | ||
| pass | tgenconstraint33.pp |
tgenconstraint | ||
| pass | tgenconstraint34.pp |
tgenconstraint | ||
| pass | tgenconstraint35.pp |
tgenconstraint | ||
| pass | tgenconstraint36.pp |
tgenconstraint | ||
| pass | tgenconstraint4.pp |
tgenconstraint | ||
| pass | tgenconstraint40.pp |
tgenconstraint | ||
| pass | tgenconstraint5.pp |
tgenconstraint | ||
| pass | tgenconstraint6.pp |
tgenconstraint | ||
| pass | tgenconstraint7.pp |
tgenconstraint | ||
| pass | tgenconstraint8.pp |
tgenconstraint | ||
| pass | tgenconstraint9.pp |
tgenconstraint | ||
| pass | tgeneric100.pp |
tgeneric | ||
| pass | tgeneric101.pp |
tgeneric | ||
| pass | tgeneric12.pp |
tgeneric | ||
| pass | tgeneric13.pp |
tgeneric | ||
| pass | tgeneric17.pp |
tgeneric | ||
| pass | tgeneric18.pp |
tgeneric | ||
| pass | tgeneric19.pp |
tgeneric | ||
| pass | tgeneric2.pp |
tgeneric | ||
| pass | tgeneric22.pp |
tgeneric | ||
| pass | tgeneric24.pp |
tgeneric | ||
| pass | tgeneric25.pp |
tgeneric | ||
| pass | tgeneric28.pp |
tgeneric | ||
| pass | tgeneric31.pp |
tgeneric | ||
| pass | tgeneric32.pp |
tgeneric | ||
| pass | tgeneric33.pp |
tgeneric | ||
| pass | tgeneric34.pp |
tgeneric | ||
| pass | tgeneric35.pp |
tgeneric | ||
| pass | tgeneric36.pp |
tgeneric | ||
| pass | tgeneric37.pp |
tgeneric | ||
| pass | tgeneric38.pp |
tgeneric | ||
| pass | tgeneric39.pp |
tgeneric | ||
| pass | tgeneric4.pp |
tgeneric | ||
| pass | tgeneric40.pp |
tgeneric | ||
| pass | tgeneric41.pp |
tgeneric | ||
| pass | tgeneric42.pp |
tgeneric | ||
| pass | tgeneric43.pp |
tgeneric | ||
| pass | tgeneric44.pp |
tgeneric | ||
| pass | tgeneric45.pp |
tgeneric | ||
| pass | tgeneric46.pp |
tgeneric | ||
| pass | tgeneric47.pp |
tgeneric | ||
| pass | tgeneric49.pp |
tgeneric | ||
| pass | tgeneric51.pp |
tgeneric | ||
| pass | tgeneric52.pp |
tgeneric | ||
| pass | tgeneric53.pp |
tgeneric | ||
| pass | tgeneric54.pp |
tgeneric | ||
| pass | tgeneric55.pp |
tgeneric | ||
| pass | tgeneric56.pp |
tgeneric | ||
| pass | tgeneric57.pp |
tgeneric | ||
| pass | tgeneric58.pp |
tgeneric | ||
| pass | tgeneric69.pp |
tgeneric | ||
| pass | tgeneric70.pp |
tgeneric | ||
| pass | tgeneric71.pp |
tgeneric | ||
| pass | tgeneric73.pp |
tgeneric | ||
| pass | tgeneric80.pp |
tgeneric | ||
| pass | tgeneric81.pp |
tgeneric | ||
| pass | tgeneric82.pp |
tgeneric | ||
| pass | tgeneric86.pp |
tgeneric | ||
| pass | tgeneric87.pp |
tgeneric | ||
| pass | tgeneric88.pp |
tgeneric | ||
| pass | tgeneric89.pp |
tgeneric | ||
| pass | tgeneric9.pp |
tgeneric | ||
| pass | tgeneric90.pp |
tgeneric | ||
| pass | tgeneric96.pp |
tgeneric | ||
| pass | tgeneric98.pp |
tgeneric | ||
| pass | tgenfunc11.pp |
tgenfunc | ||
| pass | tgenfunc13.pp |
tgenfunc | ||
| pass | tgenfunc14.pp |
tgenfunc | ||
| pass | tgenfunc17.pp |
tgenfunc | ||
| pass | tgenfunc18.pp |
tgenfunc | ||
| pass | tint641.pp |
tint64 | ||
| pass | tint642.pp |
tint64 | ||
| pass | tint643.pp |
tint64 | ||
| pass | tmoperator6.pp |
tmoperator | ||
| pass | toperator10.pp |
toperator | ||
| pass | toperator11.pp |
toperator | ||
| pass | toperator12.pp |
toperator | ||
| pass | toperator13.pp |
toperator | ||
| pass | toperator14.pp |
toperator | ||
| pass | toperator15.pp |
toperator | ||
| pass | toperator16.pp |
toperator | ||
| pass | toperator17.pp |
toperator | ||
| pass | toperator18.pp |
toperator | ||
| pass | toperator19.pp |
toperator | ||
| pass | toperator20.pp |
toperator | ||
| pass | toperator21.pp |
toperator | ||
| pass | toperator22.pp |
toperator | ||
| pass | toperator23.pp |
toperator | ||
| pass | toperator24.pp |
toperator | ||
| pass | toperator25.pp |
toperator | ||
| pass | toperator26.pp |
toperator | ||
| pass | toperator27.pp |
toperator | ||
| pass | toperator28.pp |
toperator | ||
| pass | toperator29.pp |
toperator | ||
| pass | toperator30.pp |
toperator | ||
| pass | toperator31.pp |
toperator | ||
| pass | toperator32.pp |
toperator | ||
| pass | toperator33.pp |
toperator | ||
| pass | toperator34.pp |
toperator | ||
| pass | toperator35.pp |
toperator | ||
| pass | toperator36.pp |
toperator | ||
| pass | toperator37.pp |
toperator | ||
| pass | toperator38.pp |
toperator | ||
| pass | toperator39.pp |
toperator | ||
| pass | toperator40.pp |
toperator | ||
| pass | toperator41.pp |
toperator | ||
| pass | toperator42.pp |
toperator | ||
| pass | toperator43.pp |
toperator | ||
| pass | toperator44.pp |
toperator | ||
| pass | toperator45.pp |
toperator | ||
| pass | toperator46.pp |
toperator | ||
| pass | toperator47.pp |
toperator | ||
| pass | toperator48.pp |
toperator | ||
| pass | toperator49.pp |
toperator | ||
| pass | toperator50.pp |
toperator | ||
| pass | toperator51.pp |
toperator | ||
| pass | toperator52.pp |
toperator | ||
| pass | toperator53.pp |
toperator | ||
| pass | toperator54.pp |
toperator | ||
| pass | toperator55.pp |
toperator | ||
| pass | toperator56.pp |
toperator | ||
| pass | toperator57.pp |
toperator | ||
| pass | toperator58.pp |
toperator | ||
| pass | toperator59.pp |
toperator | ||
| pass | toperator60.pp |
toperator | ||
| pass | toperator61.pp |
toperator | ||
| pass | toperator62.pp |
toperator | ||
| pass | toperator63.pp |
toperator | ||
| pass | toperator64.pp |
toperator | ||
| pass | toperator65.pp |
toperator | ||
| pass | toperator66.pp |
toperator | ||
| pass | toperator67.pp |
toperator | ||
| pass | toperator68.pp |
toperator | ||
| pass | toperator69.pp |
toperator | ||
| pass | toperator7.pp |
toperator | ||
| pass | toperator70.pp |
toperator | ||
| pass | toperator71.pp |
toperator | ||
| pass | toperator72.pp |
toperator | ||
| pass | toperator73.pp |
toperator | ||
| pass | toperator74.pp |
toperator | ||
| pass | toperator75.pp |
toperator | ||
| pass | toperator76.pp |
toperator | ||
| pass | toperator77.pp |
toperator | ||
| pass | toperator79.pp |
toperator | ||
| pass | toperator8.pp |
toperator | ||
| pass | toperator80.pp |
toperator | ||
| pass | toperator81.pp |
toperator | ||
| pass | toperator82.pp |
toperator | ||
| pass | toperator83.pp |
toperator | ||
| pass | toperator84.pp |
toperator | ||
| pass | toperator85.pp |
toperator | ||
| pass | toperator86.pp |
toperator | ||
| pass | toperator87.pp |
toperator | ||
| pass | toperator88.pp |
toperator | ||
| pass | toperator90.pp |
toperator | ||
| pass | toperator92.pp |
toperator | ||
| pass | toperator93.pp |
toperator | ||
| pass | toperator95.pp |
toperator | ||
| pass | toperatorerror.pp |
toperator | ||
| pass | tover2.pp |
tover | ||
| pass | tprop.pp |
tprop | ||
| pass | tprop2.pp |
tprop | ||
| pass | trange2.pp |
trange | ||
| pass | trange3.pp |
trange | ||
| pass | trange4.pp |
trange | ||
| pass | tsealed1.pp |
tsealed | ||
| pass | tsealed2.pp |
tsealed | ||
| pass | tsealed3.pp |
tsealed | ||
| pass | tsealed4.pp |
tsealed | ||
| pass | tsealed5.pp |
tsealed | ||
| pass | tset1.pp |
tset | ||
| pass | tset2.pp |
tset | ||
| pass | tset3.pp |
tset | ||
| pass | tset4.pp |
tset | ||
| pass | tset5a.pp |
tset | ||
| pass | tset7.pp |
tset | ||
| pass | tstatic1.pp |
tstatic | ||
| pass | tstatic3.pp |
tstatic | ||
| pass | tstatic4.pp |
tstatic | ||
| pass | tstatic5.pp |
tstatic | ||
| pass | tstring7.pp |
tstring | ||
| pass | tstring8.pp |
tstring | ||
| skip | tarray11.pp |
tarray | gap | dynamic array of interfaces — refcount/lifetime on SetLength/copy (exit 30) |
| skip | tarray12.pp |
tarray | gap | IInterface/TInterfacedObject base + specialize TArray<T> as result type |
| skip | tarray13.pp |
tarray | gap | DynArraySize/DynArrayIndex/DynArraySetLength RTL helpers missing |
| skip | tarray14.pp |
tarray | gap | Concat() on dynamic arrays and array-of-array constructors |
| skip | tarray15.pp |
tarray | gap | dynamic-array typed constants/initializers (Nil, (), nested) |
| skip | tarray16.pp |
tarray | gap | dynamic-array const initializers ([1,2,3]) and delphi-mode generic function CheckArray<T> |
| skip | tarray17.pp |
tarray | gap | {$modeswitch arrayoperators} — dynarray + and += concatenation |
| skip | tarray18.pp |
tarray | gap | `class operator :=` / Explicit on records taking open `array of LongInt` |
| skip | tarray2.pp |
tarray | gap | array of const / TVarRec (vtype fields, VExtended^, VPointer) |
| skip | tarray3.pp |
tarray | gap | typed-const array-of-char from string literal, openstring {$P+}, char-array/string compare |
| skip | tarray6.pp |
tarray | gap | local var-section initializers (`var S: AnsiString = 'abcd'`) + wide/ansi conversions |
| skip | tarray7.pp |
tarray | gap | open-array slice syntax a[lo..hi] passed to open-array param |
| skip | tarrconstr1.pp |
tarrconstr | gap | Delphi dynamic-array constructor TAB.Create(...) |
| skip | tarrconstr5.pp |
tarrconstr | gap | inline specialize TArray<specialize TArray<String>> in type decl |
| skip | tarrconstr6.pp |
tarrconstr | gap | dynarray-type constructor TLongIntArray.Create + open-array overload pick |
| skip | tarrconstr7.pp |
tarrconstr | gap | IInterface/TInterfacedObject; array constructor of interfaces refcount |
| skip | tcase2.pp |
tcase | gap | subrange-of-enum type (workdays = mon..fri) and case over it |
| skip | tclass11a.pp |
tclass | gap | nested class types inside a class (strict private / public `type` sections) |
| skip | tclass12a.pp |
tclass | gap | Extended-precision Str formatting — value identical, pxx prints double-width 3.1400000000000001E+000 vs FPC's 20-digit extended (no 80-bit Extended print path) |
| skip | tclass12b.pp |
tclass | untriaged | accepts-invalid: access control unenforced by project policy — see bug-pascal-member-visibility-unenforced |
| skip | tclass12c.pp |
tclass | gap | class-local const/type/var sections, `type Integer` distinct type, property default |
| skip | tclass12d.pp |
tclass | gap | nested class const/type sections (class-scoped const SomeValue) |
| skip | tclass13.pp |
tclass | wontfix | needs FPC typinfo/RTTI (TypeInfo/GetEnumName) and FPC's nested-class ClassName strings |
| skip | tclass13a.pp |
tclass | gap | nested `type` sections inside classes (nested class overriding parent's) |
| skip | tclass13c.pp |
tclass | gap | accepts-invalid — TRootClass.Integer nested-type member; needs per-class nested-type registry — PARKED (user call 2026-07-11, near-zero value; note in bug-pascal-missing-diagnostics-fail-tests) |
| skip | tclass13d.pp |
tclass | gap | `const` section inside a class (class constants / typed class consts) |
| skip | tclass15.pp |
tclass | gap | nested class type + Classes TCustomMemoryStream/SetPointer |
| skip | tclass16.pp |
tclass | gap | `class threadvar` in a class + threading RTL (RTLEvent, BeginThread) |
| skip | tclass3.pp |
tclass | gap | bare `inherited;` forwarding the caller's arguments to the ancestor constructor |
| skip | tclass5.pp |
tclass | gap | class constructor `fail` + range-check error 210 semantics |
| skip | tclass9.pp |
tclass | gap | `class var` / `var` sections in class, class property with static method |
| skip | tclassinfo1.pp |
tclass | wontfix | TObject.ClassInfo = TypeInfo(TObject) — FPC RTTI/typeinfo internals |
| skip | tdefault1.pp |
tdefault | wontfix | needs FPC `variants` unit as shipped (Default() over Variant types) |
| skip | tdefault5.pp |
tdefault | gap | Default() on record/object containing TextFile field (delphi mode) |
| skip | tenum1.pp |
tenum | gap | subrange type over an enum (`weekend = sat..sun`) not parsed |
| skip | tenum2.pp |
tenum | wontfix | dialect-pass — inc(enum) past range — PXX's lax enum-as-ordinal model, deterministic; not a bug, FPC-strict candidate |
| skip | tenum3.pp |
tenum | gap | {$SCOPEDENUMS} + Enum.Element syntax and subrange-of-enum |
| skip | tenum6.pp |
tenum | gap | `Str()` of boolean / ByteBool / WordBool / LongBool / QWordBool ('FALSE') |
| skip | tenumerators1.pp |
tenum | gap | Classes TList/TFPList GetEnumerator + custom enumerator classes |
| skip | terecs10.pp |
terecs | gap | default indexed property on a record (advanced records) |
| skip | terecs11.pp |
terecs | gap | nested type section inside a record (private type: class/record/object/interface/range) |
| skip | terecs14.pp |
terecs | gap | `class operator` set on records (Explicit, :=, =, In, comparison operators) |
| skip | terecs15.pp |
terecs | gap | record constructors with overloads (advanced records) |
| skip | terecs20.pp |
terecs | gap | `class threadvar` inside a record + threading RTL |
| skip | terecs3.pp |
terecs | gap | advanced-record features from a unit — class var/const/nested type, static class methods |
| skip | terecs6.pp |
terecs | gap | Delphi `class operator` names (Explicit/Implicit/Add/BitwiseOr/...) |
| skip | terecs8.pp |
terecs | gap | `class var` in a record referencing its own type + class property |
| skip | terecs_u1.pp |
terecs | gap | advanced records in units — nested type/const/var/class var sections, static class methods |
| skip | texception1.pp |
texception | gap | `on <ExceptionClass> do` handler without a variable name (bare `On TAObject do`) |
| skip | texception10.pp |
texception | gap | constructor call as a bare statement; AV in ctor caught as Exception (Classes unit) |
| skip | texception3.pp |
texception | gap | RTL `ExitCode` variable missing; try/finally with exit/break/continue |
| skip | tforin1.pp |
tforin | gap | for-in over subrange type / enum type / set (basic for-in forms) |
| skip | tforin12.pp |
tforin | gap | initializing array-of-char elements from string literals in an array const |
| skip | tforin13.pp |
tforin | gap | for-in over a set constructor with ranges (`for ch in ['a'..'c', ...]`) |
| skip | tforin14.pp |
tforin | gap | for-in variant prints ADDRESSES not element values (silent wrong output, exit 0) — re-triaged 2026-07-15, needs its own minimal repro |
| skip | tforin15.pp |
tforin | gap | `operator enumerator` (custom enumerator operator) not supported |
| skip | tforin16.pp |
tforin | gap | for-in over a string constant |
| skip | tforin17.pp |
tforin | gap | for-in over a string literal |
| skip | tforin19.pp |
tforin | gap | for-in over an empty set constructor `[]` |
| skip | tforin2.pp |
tforin | gap | for-in over a CALL-result string container (getstring(s)) + string op-enumerator |
| skip | tforin24.pp |
tforin | gap | enumerator SELECTION by loop-var type (exit 0 with wrong output — keep skipped; re-confirmed 2026-07-15) |
| skip | tforin25.pp |
tforin | gap | for-in form prints nothing where FPC prints four 0 lines (silent wrong output, exit 0) — re-triaged 2026-07-15 |
| skip | tforin26.pp |
tforin | gap | user function named `Write` (builtin name shadowing) + for-in over array of const/TVarRec |
| skip | tforin27.pp |
tforin | gap | user function named `Write` (builtin name shadowing) + for-in over dynamic array |
| skip | tforin28.pp |
tforin | gap | for-in over a set constructor literal [One, Three] |
| skip | tforin3.pp |
tforin | gap | for-in over class GetEnumerator returning nil (segfault, want clean run) |
| skip | tforin4.pp |
tforin | gap | for-in over function-returned and open/dynamic arrays with body mutation |
| skip | tforin6.pp |
tforin | gap | `operator enumerator` for a class, returning an `object`-type enumerator |
| skip | tforin7.pp |
tforin | gap | `enumerator MoveNext` / `enumerator Current` method+property directives |
| skip | tforin8.pp |
tforin | gap | IEnumerable/IEnumerator interfaces driving for-in |
| skip | tforin9.pp |
tforin | gap | `enumerator MoveNext/Current` directives + operator Enumerator |
| skip | tgenconstraint1.pp |
tgenconstraint | gap | Delphi generic constraint syntax (class/record/constructor/interface constraints) |
| skip | tgenconstraint37.pp |
tgenconstraint | gap | generic constraints on forward-declared class/interface (T: IInterface) |
| skip | tgenconstraint38.pp |
tgenconstraint | wontfix | dialect-pass — PXX does not enforce generic constraints (compile-time safety net only; runtime semantics well-defined) — not a bug, FPC-strict candidate |
| skip | tgenconstraint39.pp |
tgenconstraint | wontfix | dialect-pass — PXX does not enforce generic constraints (compile-time safety net only; runtime semantics well-defined) — not a bug, FPC-strict candidate |
| skip | tgeneric1.pp |
tgeneric | gap | objfpc `generic TList<_T> = class` / `specialize` syntax not parsed |
| skip | tgeneric10.pp |
tgeneric | gap | objfpc generic/specialize syntax + nested type (TCompareFunc) of a specialization |
| skip | tgeneric102.pp |
tgeneric | gap | specialize of generic class declared in another unit (inline class funcs) |
| skip | tgeneric103.pp |
tgeneric | gap | standalone `generic procedure Test<T>` + specialize; also unit-only compilation |
| skip | tgeneric105.pp |
tgeneric | gap | %FAIL diagnostic — impl type params must match interface decl (TTest<S> vs <T>) |
| skip | tgeneric106.pp |
tgeneric | gap | generic class with `class var` procvar field of type G<T>, method-of-object |
| skip | tgeneric107.pp |
tgeneric | gap | inline specialize expression (specialize G<T>.Create as expression/procvar) |
| skip | tgeneric11.pp |
tgeneric | gap | objfpc generic/specialize syntax; `specialize TList<_T>` as a param type |
| skip | tgeneric14.pp |
tgeneric | wontfix | dialect-pass — test header says %fail is an FPC IMPLEMENTATION limitation ("assembler symbols not global"), not a language rule — PXX passing is correct |
| skip | tgeneric15.pp |
tgeneric | gap | class inheriting from `specialize TStack<Integer>` as parent type |
| skip | tgeneric16.pp |
tgeneric | gap | generic class inheriting from specialize of another generic |
| skip | tgeneric20.pp |
tgeneric | wontfix | dialect-pass — generic method impl without <T> marker — PXX's generics surface deliberately accepts the stripped form (3d71edcf); not a bug |
| skip | tgeneric21.pp |
tgeneric | gap | accepts-invalid — nested generic-in-generic declaration — semantics unverified, real gap (see bug-pascal-missing-diagnostics-fail-tests triage 2026-07-11) |
| skip | tgeneric23.pp |
tgeneric | wontfix | requires FPC `fgl` unit as shipped (TFPGList) |
| skip | tgeneric26.pp |
tgeneric | gap | accepts-invalid — type parameter in a variant part must be rejected (substitution model has no pre-specialization check) |
| skip | tgeneric27.pp |
tgeneric | gap | enum-tagged variant part with INLINE enum type in a template's record element (`case enum:(one,two) of`) |
| skip | tgeneric29.pp |
tgeneric | gap | generic interface IGenericInterface<T>, generic record, generic array |
| skip | tgeneric3.pp |
tgeneric | gap | objfpc generic/specialize syntax with the generic declared in another unit |
| skip | tgeneric30.pp |
tgeneric | wontfix | dialect-pass — mode-delphi generic method impl without <T> — PXX's Delphi-generics rewriter deliberately accepts the bare name (3d71edcf); not a bug |
| skip | tgeneric48.pp |
tgeneric | gap | mixed generic overloads by arity (class/record/interface/procvar/array) |
| skip | tgeneric5.pp |
tgeneric | gap | objfpc generic syntax + `typeinfo(_T)` intrinsic and typinfo unit |
| skip | tgeneric50.pp |
tgeneric | gap | hint directives (deprecated/platform/experimental) on generics and specializations |
| skip | tgeneric59.pp |
tgeneric | gap | same generic name with different arity (TTest<T> vs TTest<T,S>) in delphi mode |
| skip | tgeneric6.pp |
tgeneric | gap | objfpc generic syntax + nested record/pointer types inside a generic class |
| skip | tgeneric60.pp |
tgeneric | gap | nested non-generic record inside generic class, incl. out-of-line static method |
| skip | tgeneric61.pp |
tgeneric | gap | nested class inside generic class + out-of-line TTest<T>.TTestSub.Test impl |
| skip | tgeneric62.pp |
tgeneric | gap | nested `object` type inside generic class |
| skip | tgeneric63.pp |
tgeneric | gap | generic record with nested record type |
| skip | tgeneric64.pp |
tgeneric | gap | generic record with nested class type |
| skip | tgeneric65.pp |
tgeneric | gap | generic record with nested `object` type |
| skip | tgeneric66.pp |
tgeneric | gap | generic `object` type with nested record |
| skip | tgeneric67.pp |
tgeneric | gap | generic `object` type with nested class |
| skip | tgeneric68.pp |
tgeneric | gap | generic `object` type with nested `object` |
| skip | tgeneric7.pp |
tgeneric | gap | generics across units + $R range-check state per unit (expects runtime error 201) |
| skip | tgeneric76.pp |
tgeneric | gap | generic record with static class methods + specialized aliases (TPointEx<T>) unsupported |
| skip | tgeneric77.pp |
tgeneric | gap | generic record templates (`generic TPointEx<T> = record`), non-class generics |
| skip | tgeneric78.pp |
tgeneric | gap | generic class implementing specialized interface + method resolution clause |
| skip | tgeneric79.pp |
tgeneric | gap | inline `class(specialize IGenericIntf<T>)` parent-list specialize (interface templates capture now) |
| skip | tgeneric8.pp |
tgeneric | gap | objfpc generic syntax + inline methods over nested generic types |
| skip | tgeneric83.pp |
tgeneric | gap | accepts-invalid — invalid generic record body accepted (pre-specialization checking) |
| skip | tgeneric84.pp |
tgeneric | gap | accepts-invalid — invalid generic record body accepted (pre-specialization checking) |
| skip | tgeneric85.pp |
tgeneric | gap | accepts-invalid — invalid generic record body accepted (pre-specialization checking) |
| skip | tgeneric91.pp |
tgeneric | gap | Self in class procedure of a generic class specialized cross-unit |
| skip | tgeneric92.pp |
tgeneric | gap | objfpc generic syntax + `with` over a generic type parameter record |
| skip | tgeneric93.pp |
tgeneric | gap | {$if declared(TName<,>)} generic-arity form of declared() |
| skip | tgeneric94.pp |
tgeneric | gap | generic FUNCTION bodies with nested type sections (SizeOf/local types inside generic routines) |
| skip | tgeneric95.pp |
tgeneric | gap | specialize inside a generic routine signature (`expected name` at line 16) |
| skip | tgeneric97.pp |
tgeneric | wontfix | expects FPC's internal specialized ClassName 'ttest<system.longint>' |
| skip | tgeneric99.pp |
tgeneric | gap | unit-/class-qualified `specialize` syntax (ugeneric99.specialize TTest<...>) |
| skip | tgenfunc1.pp |
tgenfunc | gap | generic (standalone) functions + inline specialize call expression |
| skip | tgenfunc10.pp |
tgenfunc | gap | inline `specialize` expression inside generic function body |
| skip | tgenfunc12.pp |
tgenfunc | gap | generic methods with class/interface constraints and generic global functions |
| skip | tgenfunc15.pp |
tgenfunc | gap | generic array type templates + generic method overloads with array-of-T params |
| skip | tgenfunc19.pp |
tgenfunc | gap | generic global function + class helper method resolution via specialize |
| skip | tgenfunc2.pp |
tgenfunc | gap | generic (parameterized) standalone functions in mode delphi |
| skip | tgenfunc23.pp |
tgenfunc | gap | generic procedure overload on T vs array of T + inline specialize call |
| skip | tgenfunc3.pp |
tgenfunc | gap | generic class functions (generic class function Add<T>) not supported |
| skip | tgenfunc4.pp |
tgenfunc | gap | delphi-mode generic class function with inline type args |
| skip | tgenfunc5.pp |
tgenfunc | gap | generic instance methods (objfpc generic function ... <T>) |
| skip | tgenfunc6.pp |
tgenfunc | gap | delphi-mode generic instance method Add<T> |
| skip | tgenfunc7.pp |
tgenfunc | gap | generic functions/methods imported from another unit and specialized |
| skip | tgenfunc8.pp |
tgenfunc | gap | generic FUNCTION with <T> in result/args (scalar operators land; parse dies at the generic func decl) |
| skip | tgenfunc9.pp |
tgenfunc | gap | generic methods with private/protected visibility specialized from caller |
| skip | tinterface4.pp |
tinterface | wontfix | needs FPC's `variants` unit and FPC's IInterface/NewInstance refcount internals |
| skip | tinterface6.pp |
tinterface | gap | interface GUID/CORBA-UID usable as a typed constant (tguid/shortstring init) |
| skip | tmoperator1.pp |
tmoperator | gap | management operators Initialize/Finalize (advancedrecords) |
| skip | tmoperator10.pp |
tmoperator | wontfix | probes TypInfo GetTypeData ElType/ElType2 RTTI layout of dyn array |
| skip | tmoperator11.pp |
tmoperator | gap | management operator class operator Initialize on records |
| skip | tmoperator2.pp |
tmoperator | gap | record Initialize/Finalize management operators with managed fields |
| skip | tmoperator3.pp |
tmoperator | gap | record management operators Initialize/Finalize lifecycle |
| skip | tmoperator4.pp |
tmoperator | gap | management operators across multiple record types |
| skip | tmoperator5.pp |
tmoperator | gap | management operators Initialize/Finalize invocation order |
| skip | tmoperator7.pp |
tmoperator | gap | management operators inside object/dynarray of records + class var |
| skip | tmoperator8.pp |
tmoperator | gap | management operators AddRef/Copy/Initialize/Finalize on records |
| skip | tmoperator9.pp |
tmoperator | gap | record management operators Initialize/Finalize called for locals |
| skip | tobject1.pp |
tobject | gap | object constructor `fail`, erroru/ExitCode RTL support |
| skip | tobject2.pp |
tobject | gap | old-style `object` types with virtual methods, constructor/destructor |
| skip | tobject4.pp |
tobject | gap | direct destructor call as a statement (`o1.destroy;`) not parsed |
| skip | tobject5.pp |
tobject | gap | TObject.Equals/GetHashCode/UnitName/ToString RTL methods |
| skip | tobject6.pp |
tobject | gap | `object` type with nested type/class var/const sections and class property |
| skip | tobject7.pp |
tobject | gap | `object` with private nested type, typed const and static class property |
| skip | toperator1.pp |
toperator | gap | operator overloading (+) on records declared in units; cross-unit operator resolution |
| skip | toperator2.pp |
toperator | gap | unit-level `operator +` overload on records (global operator overloading) |
| skip | toperator3.pp |
toperator | gap | unit-level `operator +` overload on records, mutually-used units |
| skip | toperator4.pp |
toperator | gap | unit-level `operator +` overload on records with real fields |
| skip | toperator6.pp |
toperator | gap | `operator :=` implicit-conversion overload + qword/int64 overload selection |
| skip | toperator78.pp |
toperator | gap | global operator overloads on primitive/set types (**, ><, div, mod, and) |
| skip | toperator89.pp |
toperator | gap | overloading implicit assignment operator `:=` (global operator) |
| skip | toperator9.pp |
toperator | gap | operator overload for `in` on a record type not supported by the parser |
| skip | toperator91.pp |
toperator | gap | class operators Explicit/Implicit overloaded on ShortString[N] result types |
| skip | toperator94.pp |
toperator | gap | objfpc `class operator :=` implicit conversion to shortstring types — the duplicate-conversion check (parser.inc ~1860) falsely collides distinct frozen-string result kinds; root is the same String[N] tk inconsistency (tyString vs tyFixedString vs tyShortString) that toperator93 exposed at the use site |
| skip | tover1.pp |
tover | gap | overload resolution across shortstring/ansistring/widestring/pchar params |
| skip | tover3.pp |
tover | wontfix | dialect-pass — overload ambiguity — PXX deterministically ranks (picks longint for cardinal arg) by design; FPC-parity ambiguity errors belong to --strict-overload |
| skip | tover4.pp |
tover | gap | 80-bit extended/cextended float type and overload resolution across single/double/extended |
| skip | tprocvar1.pp |
tprocvar | gap | method pointers (`procedure(l:longint) of object`), @Class.Method, typed-const procvars |
| skip | tprocvar2.pp |
tprocvar | gap | typed const procvar initialized with bare proc name (TP mode), procvar via move() |
| skip | tprocvar3.pp |
tprocvar | gap | delphi-mode procvar of object, @-less proc assignment, codepointer method addresses |
| skip | tprop1.pp |
tprop | gap | global `property` section in a program (FPC-mode global properties) |
| skip | tpropdef.pp |
tprop | wontfix | depends on FPC Classes/TComponent published-property RTTI streaming (stored/nodefault) |
| skip | trange5.pp |
trange | gap | `with` over a record typecast (int64rec(q)) plus 64-bit {$R+} range checks |
| skip | tsealed6.pp |
tsealed | gap | `object abstract` / `object sealed` modifiers in object declarations |
| skip | tset2a.pp |
tset | gap | explicit enum ordinal values (dA:=8) + {$packset 1} packed-set semantics |
| skip | tset2b.pp |
tset | gap | explicit enum ordinal values (dA:=8) + {$packset 2} packed-set semantics |
| skip | tset2c.pp |
tset | gap | explicit enum ordinal values (dA:=17) + {$packset 1} packed-set semantics |
| skip | tset2d.pp |
tset | gap | explicit enum ordinal values (dA:=17) + {$packset 2} packed-set semantics |
| skip | tsetsize.pp |
tset | wontfix | asserts FPC's exact set-size/packing layout (SizeOf(set of subrange)) |
| skip | tstatic2.pp |
tstatic | gap | class var with static class property and inherited access |
| skip | tstring1.pp |
tstring | gap | shortstring Insert/Delete/Copy with out-of-range/negative indices crashes |
| skip | tstring10.pp |
tstring | gap | punicodechar/pwidechar value casts + unicodestring/widestring conversions (Flush/Output landed) |
| skip | tstring11.pp |
tstring | gap | overload resolution RawByteString vs UnicodeString (char/array/pchar args) |
| skip | tstring2.pp |
tstring | gap | RTL `ExitCode` variable missing (needed by erroru unit); char-array to shortstring assign |
| skip | tstring3.pp |
tstring | gap | typed-const array of short/ansistring initialized from char & resourcestring consts |
| skip | tstring4.pp |
tstring | wontfix | reads ansistring refcount/length header words — FPC internal string layout |
| skip | tstring5.pp |
tstring | gap | RTL `ExitCode` variable missing (needed by testsuite erroru unit); ansistring compares |
| skip | tstring9.pp |
tstring | gap | pchar / array-of-char assignment to string and widestring conversions |