Tut mir leid für den vielen Aufwand den ich verursacht habe. Das hätte sich vermeiden lassen wenn ich erst einmal geschaut hätte was an meinen Tests genau fehlgeschlagen ist. Dann hätte ich auch nicht unsinnige Schlüsse gezogen wie dass bei einer Zuweisung das Padding nicht mitkopiert werden würde.
Um genau zu sein ging es um Padding-Bytes am Schluss eines Records. Beispiel:
Delphi-Quellcode:
TPaddingAtEnd = record
a: Integer;
b: Byte;
end;
Hier war unter 10.4 das Padding hinten
immer 0xFF und in den Tests wurde dann das Padding bei Record A auf 0xFF gesetzt und erwartet dass die Bytes ungleich waren mit denen von Record B. In 10.0 scheint das Padding hinten allerdings wie erwartet zufällig zu sein.
Für die ganz interessierten:
Delphi-Quellcode:
paddingAtEnd1.a := 10;
paddingAtEnd1.b := 99;
paddingAtEnd2 := paddingAtEnd1;
TRecordHelper.FillPaddingBytes(paddingAtEnd1, $FF);
CheckFalse( isBytewiseEqual(paddingAtEnd1, paddingAtEnd2) );
wobei
Delphi-Quellcode:
function TestRecordHelper.isBytewiseEqual<T>(const a, b: T): Boolean;
var
comparer: IEqualityComparer<T>;
begin
comparer := TEqualityComparer<T>.Default();
Result := comparer.Equals(a, b);
end;
Das
CheckFalse(..)
schlug jetzt in 10.4 fehl da die beiden
paddingAtEnd
-Records schon von Anfang an am Schluss FFs hatten. Ich habe das Muster in den Tests jetzt gegen 0xAA, 0xBB usw getauscht und die Welt scheint wieder in Ordnung zu sein.