Heute bin ich doch tatsächlich mal auf einen Fehler in der Runtime gestoßen:
Wenn ein Parameter mit "CONST" übergeben wird, wurde immer behaupted, dass eine Kopie des Wertes an die Funktion übergeben wird.
Der Compiler prüft dann, ob es eine Zuweisung zu diesem Feld gibt und lehnt die Umwandlung dann ab.

Hat man aber ein Feld in einer qualified DS und übergibt ein Feld daraus per CONST und die DS per Reference, ist das CONST-Feld nicht vor Überschreiben geschützt.
Der Compiler stell nämlich fest, dass Feld und Parameter identisch definiert sind und legt dann keine Kopie an.

dcl-ds MyDs;
F1 int(5);
end-ds;
dcl-pr MyFunc;
Func int(5) const;
RefDs likeds(MyDs);
end-pr;

callp MyFunc(MyDs.F1 : MyDs);

dcl-proc MyFunc;
dcl-pi *n;
Func int(5) const;
RefDs likeds(MyDs);
end-pi;

clear MyDs;
if Func = 1;
MyDs.F1 = 5;
endif;
end-proc;

Wird der Parameter als "VALUE" definiert funktionierts, da dann immer eine Kopie erstellt wird.