mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-10-31 08:31:49 +01:00 
			
		
		
		
	* fixed web bug #1396: tpointerord is now a cardinal instead of a longint,
but added a hack in ncnv so that pointer(-1) still works
This commit is contained in:
		
							parent
							
								
									40104b2a7a
								
							
						
					
					
						commit
						74c1d32ce9
					
				| @ -37,7 +37,11 @@ Type | ||||
|    { this must be an ordinal type with the same size as a pointer } | ||||
|    { to allow some dirty type casts for example when using        } | ||||
|    { tconstsym.value                                              } | ||||
|    TPointerOrd = longint; | ||||
|    { Note: must be unsigned!! Otherwise, ugly code like           } | ||||
|    { pointer(-1) will result in a pointer with the value          } | ||||
|    { $fffffffffffffff on a 32bit machine if the compiler uses     } | ||||
|    { int64 constants internally (JM)                              } | ||||
|    TPointerOrd = cardinal; | ||||
| 
 | ||||
| Const | ||||
|    { Size of native extended type } | ||||
| @ -48,7 +52,11 @@ Implementation | ||||
| end. | ||||
| { | ||||
|   $Log$ | ||||
|   Revision 1.1  2000-10-15 09:39:37  peter | ||||
|   Revision 1.2  2001-02-08 13:09:03  jonas | ||||
|     * fixed web bug 1396: tpointerord is now a cardinal instead of a longint, | ||||
|       but added a hack in ncnv so that pointer(-1) still works | ||||
| 
 | ||||
|   Revision 1.1  2000/10/15 09:39:37  peter | ||||
|     * moved cpu*.pas to i386/ | ||||
|     * renamed n386 to common cpunode | ||||
| 
 | ||||
|  | ||||
| @ -96,7 +96,7 @@ implementation | ||||
| {$else newcg} | ||||
|       hcodegen, | ||||
| {$endif newcg} | ||||
|       htypechk,pass_1,cpubase; | ||||
|       htypechk,pass_1,cpubase,cpuinfo; | ||||
| 
 | ||||
| 
 | ||||
|     function gentypeconvnode(node : tnode;t : pdef) : ttypeconvnode; | ||||
| @ -657,7 +657,23 @@ implementation | ||||
|         first_cord_to_pointer:=nil; | ||||
|         if left.nodetype=ordconstn then | ||||
|           begin | ||||
|             t:=genpointerconstnode(tordconstnode(left).value,resulttype); | ||||
|             { check if we have a valid pointer constant (JM) } | ||||
|             if (sizeof(tordconstnode) > sizeof(tpointerord)) then | ||||
|               if (sizeof(tpointerord) = 4) then | ||||
|                 begin | ||||
|                   if (tordconstnode(left).value < low(longint)) or | ||||
|                      (tordconstnode(left).value > high(cardinal)) then | ||||
|                   CGMessage(parser_e_range_check_error); | ||||
|                 end | ||||
|               else if (sizeof(tpointerord) = 8) then | ||||
|                 begin | ||||
|                   if (tordconstnode(left).value < low(int64)) or | ||||
|                      (tordconstnode(left).value > high(qword)) then | ||||
|                   CGMessage(parser_e_range_check_error); | ||||
|                 end | ||||
|               else | ||||
|                 internalerror(2001020801); | ||||
|             t:=genpointerconstnode(tpointerord(tordconstnode(left).value),resulttype); | ||||
|             firstpass(t); | ||||
|             first_cord_to_pointer:=t; | ||||
|             exit; | ||||
| @ -1203,7 +1219,11 @@ begin | ||||
| end. | ||||
| { | ||||
|   $Log$ | ||||
|   Revision 1.16  2000-12-31 11:14:10  jonas | ||||
|   Revision 1.17  2001-02-08 13:09:03  jonas | ||||
|     * fixed web bug 1396: tpointerord is now a cardinal instead of a longint, | ||||
|       but added a hack in ncnv so that pointer(-1) still works | ||||
| 
 | ||||
|   Revision 1.16  2000/12/31 11:14:10  jonas | ||||
|     + implemented/fixed docompare() mathods for all nodes (not tested) | ||||
|     + nopt.pas, nadd.pas, i386/n386opt.pas: optimized nodes for adding strings | ||||
|       and constant strings/chars together | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Jonas Maebe
						Jonas Maebe