mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-04-08 04:48:07 +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_ansistring_to_pchar;override;
|
||||
procedure second_class_to_intf;override;
|
||||
public
|
||||
function target_specific_explicit_typeconv: boolean;override;
|
||||
end;
|
||||
|
||||
implementation
|
||||
@ -253,6 +255,16 @@ implementation
|
||||
internalerror(2002081301);
|
||||
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
|
||||
ctypeconvnode:=twasmtypeconvnode;
|
||||
end.
|
||||
|
@ -69,6 +69,7 @@ type
|
||||
constructor create_externref(def: tdef);
|
||||
function getcopy: tstoreddef; override;
|
||||
function GetTypeName: string; override;
|
||||
function compatible_with_pointerdef_size(ptr: tpointerdef): boolean; override;
|
||||
end;
|
||||
tcpupointerdefclass = class of tcpupointerdef;
|
||||
|
||||
@ -294,6 +295,12 @@ implementation
|
||||
end;
|
||||
|
||||
|
||||
function tcpupointerdef.compatible_with_pointerdef_size(ptr: tpointerdef): boolean;
|
||||
begin
|
||||
result:=tcpupointerdef(ptr).is_wasm_externref=is_wasm_externref;
|
||||
end;
|
||||
|
||||
|
||||
{****************************************************************************
|
||||
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