Node: Fixed Bugs, Previous: Planned Features, Up: To Do

### Problems that have been solved

This section lists the bugs fixed since the last (non alpha/beta) GPC release, together with the date (YYYYMMDD) on which they were fixed, so you can check if some problem has already been solved in a recent release or developer version. For new features, see News.

- 20041203: accessing components of a constant (EP) constructor (indexed by a constant for arrays) must yield a constant again (dave3*.pas)
- 20041202: GPC crashes when using two variables with identically-named fields in a single `with` statement (withbug.pas)
- 20041125: GPC doesn't accept `case` statements without case-list-elements (fjf982*.pas)
- 20041125: gcc-3.x: options are wrongly reordered (so, e.g., `--gnu-pascal -Wno-underscore` doesn't work as expected) (avo7.pas)
- 20041124: applying `not` to a function result in parentheses doesn't work (avo6.pas)
- 20041123: packed array indices containing `mod` don't work (avo4.pas)
- 20041120: GPC sometimes prints `???` instead of the actual file name in messages
- 20041028: function results (of record type) must not be allowed as `with` elements (only a warning in `--delphi` and `--mac-pascal` modes for compatibility); fields of non-lvalue `with` elements must not be lvalues either (fjf493*.pas)
- 20041022: value parameters of type `String` (undiscriminated) must take the capacity of the actual parameter, according to EP (waldek11*.pas)
- 20041021: initialized types in arrays (fjf233.pas, fjf974*.pas)
- 20041020: initializers are ignored in `New` and `Initialize` (fjf967[j-l].pas)
- 20041020: the address of global routines is not allowed in initializers (avo2*.pas)
- 20041015: `Index` and `Pos` cannot be used in constant expressions (fjf970*.pas)
- 20041012: initializers of variant records don't work (fjf259.pas), (peter6.pas) <C1256791.0021F002.00@synln01.synstar.de>
- 20041012: initializers of packed arrays don't work (emil5.pas)
- 20041007: the `__FILE__` and `__BASE_FILE__` macros should return full paths
- 20041006: `Sqr` sometimes evaluates its argument twice (fjf963.pas)
- 20041004: memory leak in routines with a local variable of file type that are left via `Exit` or `Return` (fjf962.pas)
- 20040916: using a Boolean function as a condition in a `repeat` loop doesn't work correctly (artur1*.pas)
- 20040913: overstrict type-checking in comparisons involving procedural types (fjf960*.pas)
- 20040908: `Read`, `Write` etc. evaluate its arguments in the wrong order (az43*.pas)
- 20040908: `Read` etc. evaluate references to string parameters twice (fjf958.pas)
- 20040907: on targets with 16 bit `Integer` type, the `MicroSecond` field of `TimeStamp` causes a compilation error
- 20040907: character arrays indexed by non-integer ordinal types treated as strings cause internal compiler errors (fjf957*.pas)
- 20040906: `-W[no-]cast-align` does not work (fjf956*.pas)
- 20040903: in `FormatTime` `%Z` and `%z` unless provided by system library ignore DST
- 20040710: powerpc: `--strength-reduce` doesn't work with `for` loops (was kludged before, fixed in gcc-3.3.3)
- 20040710: AIX: `ReturnAddress` doesn't work after use of dynmamic variables (backend bug, fixed in gcc-3.3.3)
- 20040622: functions returning sets are called twice if range-checking is on (inga1*.pas)
- 20040512: `pow` and `**` are really EP conformant now (in particular `x pow y` and `x ** y` are an error if x = 0 and y <= 0) (emil27*.pas)
- 20040511: bug with `absolute` variables in strange situations (waldek8.pas)
- 20040511: `protected var` parameters must only accept references (unlike `const` parameters) (gale5*.pas)
- 20040507: `pack` must not pack the component type of arrays (fjf940[b-e].pas)
- 20040507: in some circumstances packed fields are allowed as `var` parameters (fjf940a.pas)
- 20040427: parameters of procedural types don't support Standard Pascal procedural parameters, conformant/open arrays and `type of` inquiries (fjf939*.pas)
- 20040422: bugs with nonlocal gotos out of routines declaring file variables (nonloc*.pas) (fix involved a change in the internal representation of file variables)
- 20040331: `'foo'#42` is rejected in `--borland-pascal` (chief53.pas)
- 20040330: records/objects with many fields are handled slowly
- 20040328: `--implementation-only` doesn't work correctly (bo4-19.pas)
- 20040325: messages referring to object methods point to the end of the object type rather than the method declaration
- 20040325: bug when slice-accessing a function result of type `Pointer` type-casted to `PString` (bo4-18.pas)
- 20040210: incorrect errors with packed arrays and records (fb[12].pas, gale[34].pas)
- 20040204: GPC crashes on `else` after a missing semicolon in some circumstances (fjf926.pas)
- 20031007: spurious errors about `result types in forward declared functions` in `--extended-pascal` etc. (dave2.pas)
- 20031004: do not allow disposing of `nil` pointers in standard Pascal modes (fjf917*.pas)
- 20031001: arithmetic expressions don't work as lower array/subrange bounds (fjf248.pas, fjf293.pas, fjf336.pas, fjf346a.pas, fjf622.pas)
- 20030925: initializers for types containing nested schemata don't work (fjf914*.pas)
- 20030830: open internal files with `O_EXCL` on `Rewrite` (as a protection against symlink attacks)
- 20030819: GPC accepts, but ignores, options with invalid suffixes (e.g. `--delphi-pascal`)
- 20030729: `pow` and `**` are EP conformant now (in particular `x pow y = (1 div x) pow (y)` if `y` is negative and `x <> 0`) (fjf908.pas)
- 20030714: `--enable-keyword`/`--disable-keyword` on the command-line makes GPC crash (david5.pas)
- 20030704: wrong type-error when applying `Inc` to a type-casted pointer (peter3.pas)
- 20030702: with range checking enabled, check dynamic subrange/array size (fjf222*.pas, fjf813*.pas, fjf900*.pas)
- 20030701: GPC allows modification of conformant array bounds, result of `High`/`Low` etc. (fjf897*.pas)
- 20030626: don't allow linker names starting with a digit (fjf894.pas)
- 20030625: `SubStr` with constant arguments doesn't work in constants (gale1.pas)
- 20030617: handle `BitSizeOf` correctly for packed array fields, don't allow `SizeOf` on them (fjf891*.pas)
- 20030612: System: `BPReal` must be a packed record <3EE8A26D.C919BE7D@flexim.de>
- 20030610: schema types with initializers (drf1.pas, fjf886*.pas)
- 20030610: `Return` doesn't work for sets (fjf885.pas)
- 20030609: bug with arrays as fields of `packed` records (waldek6.pas)
- 20030607: don't allow duplicate imports in a module interface and implementation (nick1b.pas)
- 20030604: compensate for parser read-ahead in the lexer, so compiler directives don't become effective too early and error messages refer more closely to the correct source position
- 20030603: bug when dividing two integers with `/` (fjf481.pas)
- 20030509: don't allow `absolute` in type definitions
- 20030502: subranges with variable limits (couper[23].pas)
- 20030502: Sparc with gcc-2.95.x: `goto` jumping out of two procedure nesting levels doesn't work (GCC bug; fixed in gcc-3) <200111170922.KAA09125@goedel.fjf.gnu.de> (fjf558[op].pas) (fixed with gcc-3 or when using `--longjmp-all-nonlocal-labels`)
- 20030502: the parser does not always recover well after a parse error <199911040915.KAA11168@humulus.daimi.au.dk> (fixed the case given in this report; if there are other cases, please report)
- 20030501: detect conflicts between object fields and local variables in methods
- 20030430: packed array/record fields don't work in `Read` etc. (tom5.pas)
- 20030430: file parameters must not automatically be bindable in `--extended-pascal` (fjf193[c-e].pas)
- 20030423: give an error rather than a warning when casting between types of different size in `{$X-}`
- 20030423: simplify code generated to compute size of dynamical variables if no bitfields are involved (ok with gcc-3)
- 20030422: initialized object variables don't work (fjf445*.pas)
- 20030422: declarations of a module interface are not visible in the implementation (kevin13.pas, mod12.pas) <Pine.BSI.3.96.971110210330.7570A-100000@malasada.lava.net>
- 20030422: detect invalid array slice access with constant indices at compile-time (peter2*.pas)
- 20030421: automatically close dynamically allocated files on `Dispose` and files declared in a statement block at the end of the statement block <6r9ir5$7v5$1@nntpd.lkg.dec.com> (fjf219[a-d].pas, fjf502.pas)
- 20030421: initialize local static variables in the main constructor, not in each routine call (fjf458*.pas)
- 20030421: check parameter and result variable names in repeated forward etc. declarations <20010321204051.A611@plato> (fjf284.pas, markus8.pas, fjf850*.pas)
- 20030417: modifying `for`-loop counters within the loop or in a subroutine is not allowed <200005240807.EAA05355@mail.bcpl.net>, <Pine.LNX.4.44.0210281004000.31943-100000@duch.mimuw.edu.pl> (az47.pas, fjf837*.pas)
- 20030417: possible stack overflow when using string concatenation in a loop (fjf419*.pas, fjf345e.pas, fjf460b.pas) – breaks berend3.pas (less important because strange test case, and just another instance of existing contourbug.pas)
- 20030416: some functions in boolean shortcuts are always called (fjf226*.pas)
- 20030414: label declarations must not be allowed in unit/module interfaces and module implementations (but in unit implementations, BP compatible, though we don't allow nonlocal `goto`s into the constructor) (fjf835*.pas)
- 20030321: variables declared in interfaces of modules are not initialized (capacity of strings etc.) (daj3.pas, sven14c.pas, nick1.pas)
- 20030321: subranges whose size is exactly one or two bytes are not packed in packed arrays (daj14a.pas)
- 20030321: `prior parameter's size depends on `Foo'` with `const` string parameters in module interfaces (fjf667.pas)
- 20030313: operators don't always work across units (fjf803.pas)
- 20030312: overloading `<=`, `>=`, `<>` and some certain words doesn't work (fjf789.pas, fjf794*.pas, fjf800.pas, fjf802.pas, fjf804.pas)
- 20030311: when passing a schema variable as an untyped argument, the whole schema, including the discriminants is passed (fjf798.pas)
- 20030302: discriminant identifiers as variant record selectors
- 20030227: GPC crashes when taking the address of local variables in an initializer (nicola4*.pas)
- 20030225: the warnings about uninitialized/unused variables don't work for strings, objects, etc. (fjf779*.pas)
- 20030221: gcc-2.95.x: `configure --silent` doesn't work (passes wrong options to sub-configures, so the subsequent make fails) (GCC bug; fixed in 3.x)
- 20030215: forward referencing pointers generate debug info that appears as generic pointers
- 20030202: count of parameters in error messages should not include `Self` in methods or internal parameters for conformant or open arrays
- 20030129: check for unresolved `forward`, interface and method declarations (az32.pas, fjf758*.pas)
- 20030129: several standard conformance bugs (az{1..24,26..42,44..46}*.pas, emil23*.pas)
- 20030126: some bugs with complicated schema usage (emil22*.pas, fjf750*.pas)
- 20030122: subtraction of unsigned types with a negative result doesn't work (ml4.pas)
- 20021229: declaring huge enum types and exporting subranges of them is very slow (quadratic time behaviour); some bugs regarding exporting of subranges (fjf736*.pas)
- 20021213: Linux: `crtscreen` should react to `SIGWINCH`
- 20021120: `Card` doesn't work with set constructors; `Include` and `Exclude` should not accept set constructors (eike3*.pas)
- 20021105: type initializers are not type-checked until a variable of the type is declared (fjf704.pas); with gcc-2.x: bug when variables of a type with initializer are declared locally in more than one routine (couper13.pas)
- 20021105: `packed object` should not be allowed (fjf703.pas)
- 20021101: bug when replacing a non-virtual method by a virtual one in a descendant object type (fjf702.pas)
- 20021027: classic Pascal does not know the empty string <Pine.LNX.4.44.0210181332470.29475-100000@duch.mimuw.edu.pl> (fjf693*.pas)
- 20021027: relational and exponentiation operators have no associativity <Pine.LNX.4.44.0210210807410.18095-100000@duch.mimuw.edu.pl> (fjf692.pas, fjf566[k-m].pas)
- 20021002: `gpc -B` dir`` requires a trailing dir separator
- 20021001: constructors are accepted as the argument to `Dispose` (fjf674.pas)
- 20021001: align file fields in packed records on machines with strict alignment requirements (chief38*.pas)
- 20021001: bug on machines with strict alignment requirements <199906021618.MAA06228@sten27.software.mitel.com> (richard1.pas)
- 20020930: duplicate variable declarations are allowed
- 20020929: `attribute`s of variables are ignored (fjf673.pas)
- 20020929: `volatile` for `external` variables without `asmname` is ignored (fjf672.pas)
- 20020926: numbers with base specifiers are allowed as labels (fjf417*.pas)
- 20020923: System: `MemAvail`/`MaxAvail` can go into an endless loop
- 20020920: the number of times the preprocessor is invoked by the automake mechanism might grow exponentially with the number of units involved <02091610572303.14626@dutw54.wbmt.tudelft.nl>
- 20020918: importing `StandardOutput` etc. in the interface of a module doesn't work (sietse2*.pas)
- 20020904: comparisons between signed and unsigned integers sometimes give wrong results (eike2.pas, fjf664.pas, martin5.pas)
- 20020903: `IOSelect` fails with file handles >= 8 on some systems (e.g., Solaris) (fjf663.pas)
- 20020831: GPC creates wrong debug info for many built-in types <200208280012.g7S0CWj07637@mail.bcpl.net>
- 20020827: comparisons of `packed` subrange variables don't work right (martin4[ab].pas)
- 20020824: operators defined in units don't always work (maur11.pas)
- 20020824: object methods that contain an ISO style procedural parameter forget the implicit `with Self do` (fjf662a.pas)
- 20020615: `if Pass[i] in 'A' .. 'Z'` makes GPC crash (miklos6.pas)
- 20020603: compiling a program (not a unit or module) with `--interface-only` or `--syntax-only` segfaults (waldek1.pas)
- 20020603: `--nested-comments` fails without `-Wall` (waldek2.pas)
- 20020514: powerpc: `--strength-reduce` doesn't work with `for` loops [kludged now]
- 20020514: guarantee complete evaluation in `{$B+}` mode (fjf552*.pas)
- 20020514: spurious warning with `for` loops using a `ByteCard` counter (toby1.pas)