mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-08-17 15:09:19 +02:00
* disallow conversion between regular pointers and WasmExternRef
This commit is contained in:
parent
021c1a7bb4
commit
a47a1c093a
@ -38,6 +38,8 @@ interface
|
|||||||
procedure second_int_to_bool;override;
|
procedure second_int_to_bool;override;
|
||||||
procedure second_ansistring_to_pchar;override;
|
procedure second_ansistring_to_pchar;override;
|
||||||
procedure second_class_to_intf;override;
|
procedure second_class_to_intf;override;
|
||||||
|
public
|
||||||
|
function target_specific_explicit_typeconv: boolean;override;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
implementation
|
implementation
|
||||||
@ -253,6 +255,16 @@ implementation
|
|||||||
internalerror(2002081301);
|
internalerror(2002081301);
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function twasmtypeconvnode.target_specific_explicit_typeconv: boolean;
|
||||||
|
begin
|
||||||
|
result:=false;
|
||||||
|
if is_pointer(left.resultdef) and
|
||||||
|
is_pointer(resultdef) and
|
||||||
|
not tpointerdef(left.resultdef).compatible_with_pointerdef_size(tpointerdef(resultdef)) then
|
||||||
|
CGMessage2(type_e_illegal_type_conversion,left.resultdef.typename,resultdef.typename);
|
||||||
|
end;
|
||||||
|
|
||||||
begin
|
begin
|
||||||
ctypeconvnode:=twasmtypeconvnode;
|
ctypeconvnode:=twasmtypeconvnode;
|
||||||
end.
|
end.
|
||||||
|
@ -69,6 +69,7 @@ type
|
|||||||
constructor create_externref(def: tdef);
|
constructor create_externref(def: tdef);
|
||||||
function getcopy: tstoreddef; override;
|
function getcopy: tstoreddef; override;
|
||||||
function GetTypeName: string; override;
|
function GetTypeName: string; override;
|
||||||
|
function compatible_with_pointerdef_size(ptr: tpointerdef): boolean; override;
|
||||||
end;
|
end;
|
||||||
tcpupointerdefclass = class of tcpupointerdef;
|
tcpupointerdefclass = class of tcpupointerdef;
|
||||||
|
|
||||||
@ -294,6 +295,12 @@ implementation
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
|
|
||||||
|
function tcpupointerdef.compatible_with_pointerdef_size(ptr: tpointerdef): boolean;
|
||||||
|
begin
|
||||||
|
result:=tcpupointerdef(ptr).is_wasm_externref=is_wasm_externref;
|
||||||
|
end;
|
||||||
|
|
||||||
|
|
||||||
{****************************************************************************
|
{****************************************************************************
|
||||||
tcpuprocdef
|
tcpuprocdef
|
||||||
****************************************************************************}
|
****************************************************************************}
|
||||||
|
16
tests/test/wasm/twasmexternref3.pp
Normal file
16
tests/test/wasm/twasmexternref3.pp
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{ %cpu=wasm32 }
|
||||||
|
{ %fail }
|
||||||
|
|
||||||
|
program twasmexternref3;
|
||||||
|
|
||||||
|
procedure testproc;
|
||||||
|
var
|
||||||
|
p: WasmExternRef;
|
||||||
|
q: Pointer;
|
||||||
|
begin
|
||||||
|
{ WasmExternRef cannot be converted to pointer }
|
||||||
|
q := Pointer(p);
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
end.
|
16
tests/test/wasm/twasmexternref3a.pp
Normal file
16
tests/test/wasm/twasmexternref3a.pp
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
{ %cpu=wasm32 }
|
||||||
|
{ %fail }
|
||||||
|
|
||||||
|
program twasmexternref3a;
|
||||||
|
|
||||||
|
procedure testproc;
|
||||||
|
var
|
||||||
|
p: WasmExternRef;
|
||||||
|
q: Pointer;
|
||||||
|
begin
|
||||||
|
{ A pointer cannot be converted to WasmExternRef }
|
||||||
|
p := WasmExternRef(q);
|
||||||
|
end;
|
||||||
|
|
||||||
|
begin
|
||||||
|
end.
|
Loading…
Reference in New Issue
Block a user