[fpc-devel] Incompatible assignments but no compile error (char array and shortstring)
Sven Barth
pascaldragon at googlemail.com
Sun Apr 17 22:29:34 CEST 2022
Am 16.04.2022 um 22:35 schrieb Wayne Sherman via fpc-devel:
> Tested with fpc 3.3.1 trunk (as of 2022-Mar-12) and 3.2.2 stable.
> Ubuntu 20.04 64-bit
>
> Good compile time error checking is one of the wonderful things about
> Pascal. But some char array and shortstring assignments which are not
> size compatible do not produce a compile error as expected. Please
> see below.
>
> {$mode objfpc}{$H+}
> type
> TCharArray8 = packed array[0..7] of Char;
> TCharArray9 = packed array[0..8] of Char;
> TShortString8 = string[8];
>
> const
> StringConst8 = '12345678';
> StringConst9 = '123456789';
>
> CharArrayConst8a: TCharArray8 = '12345678';
> CharArrayConst8b: TCharArray8 = StringConst8;
> CharArrayConst8c: TCharArray8 = ('1','2','3','4','5','6','7','8');
>
> //CharArrayConst8d: TCharArray8 = '123456789'; //compile error as expected
> //CharArrayConst8e: TCharArray8 = StringConst9; //compile error as expected
> //CharArrayConst8f: TCharArray8 =
> ('1','2','3','4','5','6','7','8','9'); //compile error as expected
>
> ShortStringConst8a: TShortString8 = '12345678';
> ShortStringConst8b: TShortString8 = StringConst8;
> ShortStringConst8c: TShortString8 = '123456789'; //did not get
> expected compile error (bug?)
> ShortStringConst8d: TShortString8 = StringConst9; //did not get
> expected compile error (bug?)
>
> var
> CharArrayVar8: TCharArray8;
> CharArrayVar9: TCharArray9;
> ShortStringVar8: TShortString8;
>
> begin
> CharArrayVar8 := '12345678';
> CharArrayVar8 := StringConst8;
> CharArrayVar8 := ['1','2','3','4','5','6','7','8']; //requires fpc 3.3.1
> CharArrayVar8 := CharArrayConst8c;
>
> //CharArrayVar8 := ['1','2','3','4','5','6','7','8','9']; //compile
> error as expected
> CharArrayVar8 := '123456789'; //did not get expected compile error (bug?)
> CharArrayVar8 := StringConst9; //did not get expected compile error (bug?)
>
> CharArrayVar8 := ShortStringVar8;
> ShortStringVar8 := CharArrayVar8;
>
> ShortStringVar8 := '12345678';
> ShortStringVar8 := CharArrayConst8a;
> ShortStringVar8 := TCharArray8(['1','2','3','4','5','6','7','8']);
> //requires fpc 3.3.1
>
> ShortStringVar8 := '123456789'; //did not get expected compile error (bug?)
> ShortStringVar8 := CharArrayVar9; //did not get expected compile error (bug?)
> ShortStringVar8 :=
> TCharArray9(['1','2','3','4','5','6','7','8','9']); //did not get
> expected compile error (bug?) (requires fpc 3.3.1)
>
> end;
>
> Should I open a couple of bug reports?
For ShortString types it is by design that they're truncated implicitely
(the most that current Delphi versions do is issue a warning). However
the assignments to the static char array should be checked.
Regards,
Sven
More information about the fpc-devel
mailing list