Просмотр исходного кода

* convert pointer(0) into a niln

florian 3 дней назад
Родитель
Сommit
b3afae567b
1 измененных файлов с 15 добавлено и 13 удалено
  1. 15 13
      compiler/ncon.pas

+ 15 - 13
compiler/ncon.pas

@@ -233,7 +233,7 @@ implementation
       defcmp,defutil,procinfo,
       aasmdata,aasmtai,
       cgbase,
-      nld,nbas;
+      nld,nbas,ncnv;
 
     function genintconstnode(const v : TConstExprInt) : tordconstnode;
       var
@@ -734,11 +734,10 @@ implementation
 *****************************************************************************}
 
     constructor tpointerconstnode.create(v : TConstPtrUInt;def:tdef);
-
       begin
-         inherited create(pointerconstn);
-         value:=v;
-         typedef:=def;
+        inherited create(pointerconstn);
+        value:=v;
+        typedef:=def;
       end;
 
 
@@ -773,29 +772,32 @@ implementation
 
 
     function tpointerconstnode.dogetcopy : tnode;
-
       var
          n : tpointerconstnode;
-
       begin
-         n:=tpointerconstnode(inherited dogetcopy);
-         n.value:=value;
-         n.typedef := typedef;
-         dogetcopy:=n;
+        n:=tpointerconstnode(inherited dogetcopy);
+        n.value:=value;
+        n.typedef := typedef;
+        dogetcopy:=n;
       end;
 
+
     function tpointerconstnode.pass_typecheck:tnode;
       begin
         result:=nil;
         resultdef:=typedef;
+        if is_voidpointer(resultdef) and (value=0) then
+          result:=cnilnode.create;
       end;
 
+
     function tpointerconstnode.pass_1 : tnode;
       begin
-         result:=nil;
-         expectloc:=LOC_CONSTANT;
+        result:=nil;
+        expectloc:=LOC_CONSTANT;
       end;
 
+
     function tpointerconstnode.docompare(p: tnode): boolean;
       begin
         docompare :=