Commit Graph

453 Commits

Author SHA1 Message Date
florian
d63ad582a7 * cherry picked commit did not compile, fixing it, resolves #24863 2022-01-08 23:06:11 +01:00
florian
5a17765841 * if a variant is read/written, include the variants unit
git-svn-id: trunk@47459 -
(cherry picked from commit bcdfd07bdd)
2022-01-08 22:55:18 +01:00
svenbarth
e6ad8a0dfa Merged revision(s) 44172, 44188, 45457 - 45458, 45645, 46218, 46953 from trunk:
r46953
* fix for Mantis #37806: allow undefineddefs for Include() and Exclude() + added tests
---------------------
r46218
* fix for Mantis #37187: inside generics the constant code in pexpr does not handle all cases and thus current_procinfo needs to be checked as well + added test
---------------------
r45645
* correctly set the generic related defoptions for an outlined procdef
---------------------
r45458
  * make more use of is_typeparam
---------------------
r45457
  * constrained type parameters are not undefined defs, resolves #37107
---------------------
r44188
* keep track of the fileposinfo for generic constraints
---------------------
r44172
* only resolve a dummy symbol if it is a type symbol (thus truly a dummy symbol) + added tests
---------------------

git-svn-id: branches/fixes_3_2@47802 -
2020-12-17 21:31:16 +00:00
svenbarth
7988446f1a Merged revision(s) 39802, 39816-39817 from trunk:
* fix for Mantis #34332: allow 2 parameter form of Copy also for ShortString variables
+ added test
........
* have the fpc_*_copy compiler intrinsics reference the intrinsic symbol they belong to
........
* fix for Mantis #34333: improve error output for incorrect calls to Copy()
........

git-svn-id: branches/fixes_3_2@47586 -
2020-11-25 21:24:41 +00:00
pierre
2dbe24fec5 * Merge commit #39997
------------------------------------------------------------------------
r39997 | pierre | 2018-10-20 18:11:25 +0000 (Sat, 20 Oct 2018) | 1 line

 Also fix first_abs_real like in rev 39988
------------------------------------------------------------------------
--- Merging r39997 into '.':
U    compiler/ninl.pas
--- Recording mergeinfo for merge of r39997 into '.':
 U   .

git-svn-id: branches/fixes_3_2@46555 -
2020-08-22 21:12:55 +00:00
pierre
4ba3bfb227 * Also merge 39991 to avoid wrong typecast in first_sqrt_real
------------------------------------------------------------------------
r39991 | florian | 2018-10-20 10:18:45 +0000 (Sat, 20 Oct 2018) | 2 lines

* same fix as in r39988 for fpc_first_sqrt

------------------------------------------------------------------------
--- Merging r39991 into '.':
U    compiler/ninl.pas
--- Recording mergeinfo for merge of r39991 into '.':
 U   .

git-svn-id: branches/fixes_3_2@46285 -
2020-08-06 09:13:20 +00:00
pierre
cc46cc56e2 Merge invalid typecast fix 39988
------------------------------------------------------------------------
r39988 | pierre | 2018-10-19 23:04:55 +0000 (Fri, 19 Oct 2018) | 1 line

 Fix wrong explicit typecast that lead to memory corruption in first_sqr_real
------------------------------------------------------------------------
--- Merging r39988 into '.':
U    compiler/ninl.pas
--- Recording mergeinfo for merge of r39988 into '.':
 U   .

git-svn-id: branches/fixes_3_2@46238 -
2020-08-05 06:33:11 +00:00
pierre
d1f31fab15 Merge commits 42525 and 45891 that add
checks for fpu exceptions for arm and aarch64.
------------------------------------------------------------------------
r42525 | florian | 2019-07-28 21:06:36 +0000 (Sun, 28 Jul 2019) | 2 lines

+ software handling of exceptions on arm
* reworked software handling of exceptions so they can be check lazily
------------------------------------------------------------------------
--- Merging r42525 into '.':
U    compiler/arm/cgcpu.pas
U    compiler/arm/narmadd.pas
U    compiler/arm/narminl.pas
U    compiler/arm/narmmat.pas
U    compiler/ncgcal.pas
U    compiler/procinfo.pas
U    rtl/arm/arm.inc
--- Recording mergeinfo for merge of r42525 into '.':
 U   .
Summary of conflicts:
  Tree conflicts: 1
------------------------------------------------------------------------
r42891 | florian | 2019-09-01 17:26:11 +0000 (Sun, 01 Sep 2019) | 1 line

+ support for software floating point exception handling on AArch64 (-CE)
------------------------------------------------------------------------
--- Merging r42891 into '.':
U    compiler/aarch64/cgcpu.pas
U    compiler/aarch64/ncpuadd.pas
U    compiler/aarch64/ncpuinl.pas
U    compiler/aarch64/ncpumat.pas
U    rtl/aarch64/aarch64.inc
U    rtl/aarch64/math.inc
U    rtl/aarch64/mathu.inc
--- Recording mergeinfo for merge of r42891 into '.':
 G   .

git-svn-id: branches/fixes_3_2@46225 -
2020-08-04 10:30:50 +00:00
marco
775567e8f7 # revisions: 44598,45635,45757,45764,45772
git-svn-id: branches/fixes_3_2@45849 -
2020-07-24 21:09:00 +00:00
Jonas Maebe
3129605195 --- Merging r40180 into '.':
U    compiler/ninl.pas
--- Recording mergeinfo for merge of r40180 into '.':
 U   .
--- Merging r40216 into '.':
U    compiler/htypechk.pas
G    compiler/ninl.pas
U    tests/tbf/tb0258.pp
A    tests/tbf/tb0259.pp
A    tests/tbf/tb0260.pp
A    tests/tbs/tb0653.pp
--- Recording mergeinfo for merge of r40216 into '.':
 G   .
--- Merging r40217 into '.':
U    compiler/systems/t_bsd.pas
--- Recording mergeinfo for merge of r40217 into '.':
 G   .
--- Merging r40218 into '.':
G    compiler/systems/t_bsd.pas
--- Recording mergeinfo for merge of r40218 into '.':
 G   .

git-svn-id: branches/fixes_3_2@44000 -
2020-01-19 19:20:31 +00:00
marco
ab533f43aa # revisions: 43409,43473,43474,43482
git-svn-id: branches/fixes_3_2@43944 -
2020-01-14 13:28:25 +00:00
pierre
1b4fb37948 Merge commit r42337, to fix avr-embedded packages compilation
------------------------------------------------------------------------
r42337 | laksen | 2019-07-07 14:37:45 +0000 (Sun, 07 Jul 2019) | 1 line

- Fix result type of SizeOf and BitSizeOf to use sizesint instead of sint.
------------------------------------------------------------------------
--- Merging r42337 into '.':
U    compiler/ninl.pas
U    compiler/pexpr.pas
--- Recording mergeinfo for merge of r42337 into '.':
 U   .

git-svn-id: branches/fixes_3_2@43514 -
2019-11-19 22:28:04 +00:00
Jonas Maebe
858bf743ef --- Merging r43347 into '.':
C    compiler/nmat.pas
--- Recording mergeinfo for merge of r43347 into '.':
 G   .
--- Merging r43436 into '.':
U    compiler/defutil.pas
U    compiler/nadd.pas
U    compiler/ncnv.pas
U    compiler/ncon.pas
U    compiler/ngtcon.pas
U    compiler/ninl.pas
G    compiler/nmat.pas
U    compiler/nutils.pas
U    compiler/pstatmnt.pas
--- Recording mergeinfo for merge of r43436 into '.':
 G   .
--- Merging r43438 into '.':
A    tests/test/tinlrange1.pp
A    tests/test/tinlrange2.pp
A    tests/test/tinlrange3.pp
--- Recording mergeinfo for merge of r43438 into '.':
 G   .
--- Merging r43451 into '.':
U    tests/test/tinlrange1.pp
--- Recording mergeinfo for merge of r43451 into '.':
 G   .
--- Merging r43497 into '.':
C    compiler/nmat.pas
A    tests/test/tinlrange4.pp
--- Recording mergeinfo for merge of r43497 into '.':
 G   .

git-svn-id: branches/fixes_3_2@43498 -
2019-11-16 15:18:43 +00:00
marco
d24f4b0926 --- Merging r42998 into '.':
U    compiler/blockutl.pas
U    compiler/jvm/njvmutil.pas
U    compiler/jvm/pjvm.pas
U    compiler/ncal.pas
U    compiler/ninl.pas
U    compiler/pdecl.pas
U    compiler/pdecsub.pas
U    compiler/pdecvar.pas
U    compiler/pexpr.pas
U    compiler/pgenutil.pas
U    compiler/pmodules.pas
U    compiler/pparautl.pas
U    compiler/pstatmnt.pas
U    compiler/psub.pas
U    compiler/psystem.pas
U    compiler/ptype.pas
U    compiler/symcreat.pas
U    compiler/symdef.pas
U    compiler/symsym.pas
U    compiler/symutil.pas
--- Recording mergeinfo for merge of r42998 into '.':
 U   .
--- Merging r43116 into '.':
G    compiler/symsym.pas
A    tests/webtbf/tw36114.pp
--- Recording mergeinfo for merge of r43116 into '.':
 G   .

# revisions: 42998,43116

git-svn-id: branches/fixes_3_2@43442 -
2019-11-10 16:12:48 +00:00
florian
b6e7ebdd3c -- Zusammenführen von r42272 in ».«:
U    compiler/defutil.pas
A    tests/webtbf/tw35671.pp
-- Aufzeichnung der Informationen für Zusammenführung von r42272 in ».«:
 U   .
-- Zusammenführen von r42274 in ».«:
U    compiler/cgbase.pas
-- Aufzeichnung der Informationen für Zusammenführung von r42274 in ».«:
 G   .
-- Zusammenführen von r42275 in ».«:
U    compiler/defcmp.pas
C    compiler/defutil.pas
U    compiler/ncnv.pas
U    compiler/ncon.pas
U    compiler/ngtcon.pas
U    compiler/ninl.pas
U    compiler/pstatmnt.pas
A    tests/webtbf/tw35753.pp
-- Aufzeichnung der Informationen für Zusammenführung von r42275 in ».«:
 G   .

git-svn-id: branches/fixes_3_2@43367 -
2019-11-02 18:07:58 +00:00
Jonas Maebe
3ac703506c * rest of the previous accidental partial commit
git-svn-id: branches/fixes_3_2@41250 -
2019-02-07 19:56:21 +00:00
Jonas Maebe
fc9e9e804a --- Merging r40512 into '.':
A    tests/webtbs/tw33607.pp
U    compiler/aarch64/hlcgcpu.pas
--- Recording mergeinfo for merge of r40512 into '.':
 U   .
--- Merging r40566 into '.':
U    compiler/aarch64/cpupara.pas
--- Recording mergeinfo for merge of r40566 into '.':
 G   .
--- Merging r40567 into '.':
G    compiler/aarch64/cpupara.pas
--- Recording mergeinfo for merge of r40567 into '.':
 G   .
--- Merging r40573 into '.':
G    compiler/aarch64/cpupara.pas
--- Recording mergeinfo for merge of r40573 into '.':
 G   .
--- Merging r40629 into '.':
U    compiler/ncnv.pas
U    compiler/llvm/nllvmcnv.pas
--- Recording mergeinfo for merge of r40629 into '.':
 G   .
--- Merging r40637 into '.':
U    compiler/ncon.pas
A    tests/webtbs/tw33666.pp
--- Recording mergeinfo for merge of r40637 into '.':
 G   .
--- Merging r40729 into '.':
U    compiler/ncal.pas
U    compiler/jvm/njvminl.pas
U    compiler/ninl.pas
--- Recording mergeinfo for merge of r40729 into '.':
 G   .

git-svn-id: branches/fixes_3_2@40735 -
2019-01-01 16:49:46 +00:00
pierre
92cd9502ef Merge of revisions 40277
40307
40309
40314
40319
40322
40324
40326
40377
40378 from trunk to fixes_3_2
------------------------------------------------------------------------
r40277 | pierre | 2018-11-08 20:18:30 +0000 (Thu, 08 Nov 2018) | 1 line

 Implement mark_write override for tinilinenode
------------------------------------------------------------------------
--- Merging r40277 into '.':
U    compiler/ninl.pas
--- Recording mergeinfo for merge of r40277 into '.':
 U   .
------------------------------------------------------------------------
r40307 | pierre | 2018-11-13 15:10:21 +0000 (Tue, 13 Nov 2018) | 6 lines

  + Introduce PPC_SUFFIXES, new make variable that lists all ppc suffixes
    for all different CPUs supported.
  * Use PPC_SUFFIXES in execlean and CPU_clean targets.
  * Also delete CPU/bin subbirectory.


------------------------------------------------------------------------
--- Merging r40307 into '.':
U    compiler/Makefile
U    compiler/Makefile.fpc
--- Recording mergeinfo for merge of r40307 into '.':
 G   .
------------------------------------------------------------------------
r40309 | pierre | 2018-11-13 15:51:32 +0000 (Tue, 13 Nov 2018) | 1 line

 Try to avoid expectloc not set after first pass error for call node
------------------------------------------------------------------------
--- Merging r40309 into '.':
U    compiler/ncal.pas
--- Recording mergeinfo for merge of r40309 into '.':
 G   .
------------------------------------------------------------------------
r40314 | pierre | 2018-11-14 13:13:19 +0000 (Wed, 14 Nov 2018) | 4 lines

  * Change first parameter type of function is_continuous_maks to aword type.
    Add typecasts where needed to allow for successful compilation of arm-linux target
    with -CriotR options when building the compiler.

------------------------------------------------------------------------
--- Merging r40314 into '.':
U    compiler/arm/cpubase.pas
U    compiler/arm/cgcpu.pas
--- Recording mergeinfo for merge of r40314 into '.':
 G   .
------------------------------------------------------------------------
r40319 | pierre | 2018-11-15 16:58:40 +0000 (Thu, 15 Nov 2018) | 1 line

 Disable range check in m68k:tiscv32 and riscv64 cgcpu units
------------------------------------------------------------------------
--- Merging r40319 into '.':
   C compiler/riscv64
U    compiler/m68k/cgcpu.pas
   C compiler/riscv32
--- Recording mergeinfo for merge of r40319 into '.':
 G   .
Summary of conflicts:
  Tree conflicts: 2
------------------------------------------------------------------------
r40322 | pierre | 2018-11-15 22:01:25 +0000 (Thu, 15 Nov 2018) | 1 line

 Also disable range checking in arm/aoptcpu unit
------------------------------------------------------------------------
--- Merging r40322 into '.':
U    compiler/arm/aoptcpu.pas
--- Recording mergeinfo for merge of r40322 into '.':
 G   .
------------------------------------------------------------------------
r40324 | pierre | 2018-11-16 10:27:42 +0000 (Fri, 16 Nov 2018) | 4 lines

  * Disable range check for m68k/aoptcpu unit
  * Add missing change of var parameter p to next instruction
    in TryToOptimizeMove method after instruction removal.

------------------------------------------------------------------------
--- Merging r40324 into '.':
U    compiler/m68k/aoptcpu.pas
--- Recording mergeinfo for merge of r40324 into '.':
 G   .
------------------------------------------------------------------------
r40326 | pierre | 2018-11-16 13:28:26 +0000 (Fri, 16 Nov 2018) | 1 line

 Change local variables offsetdec and extraoffset type to ASizeInt
------------------------------------------------------------------------
--- Merging r40326 into '.':
U    compiler/ncgmem.pas
--- Recording mergeinfo for merge of r40326 into '.':
 G   .
------------------------------------------------------------------------
r40377 | pierre | 2018-11-27 10:19:36 +0000 (Tue, 27 Nov 2018) | 1 line

 Fix bug report 34605 and add corresponding test
------------------------------------------------------------------------
--- Merging r40377 into '.':
A    tests/webtbs/tw34605.pp
U    compiler/nutils.pas
--- Recording mergeinfo for merge of r40377 into '.':
 G   .
------------------------------------------------------------------------
r40378 | pierre | 2018-11-27 10:21:37 +0000 (Tue, 27 Nov 2018) | 1 line

 Avoid range errors or overflows on for AVR cpu, when computing address offsets
------------------------------------------------------------------------
--- Merging r40378 into '.':
U    compiler/ncgset.pas
U    compiler/ngtcon.pas
--- Recording mergeinfo for merge of r40378 into '.':
 G   .

git-svn-id: branches/fixes_3_2@40716 -
2018-12-31 15:48:08 +00:00
svenbarth
3d740f13e4 * ensure that the data of the temp node is freed correctly in case of an error (the error might be non-fatal in case of a generic passing an untyped type to Write/Read)
git-svn-id: trunk@39566 -
2018-08-04 08:37:07 +00:00
svenbarth
781303c0d8 * ensure that the file parameter for the Read/Write family of intrinsics is (and can be) freed in tinlinenode.handle_read_write()
git-svn-id: trunk@39565 -
2018-08-04 08:37:01 +00:00
florian
9af9658fa7 * first parameter of SetLength must be valid, as it is read
git-svn-id: trunk@39347 -
2018-06-30 11:25:43 +00:00
svenbarth
9b45f58c0b + add flags that allow checking for overloads with isbinaryoverloaded() and isunaryoverloaded() without modifying the passed in node or even checking for normally non-overloadable operators
git-svn-id: trunk@39258 -
2018-06-20 19:53:34 +00:00
svenbarth
0e5a598b6a * don't use a vecnode to convert a dynamic array or an array constructor to a pointer as that will lead to problems with range checking if the array should be empty; fixes run of tarray12 with -Cr
git-svn-id: trunk@38368 -
2018-02-27 21:43:21 +00:00
svenbarth
916ff0b92c + extend Concat() with support for dynamic arrays
+ added test

git-svn-id: trunk@37723 -
2017-12-12 19:54:08 +00:00
florian
194c0c7073 * compilation fixed
git-svn-id: trunk@37546 -
2017-11-01 16:54:08 +00:00
florian
4752b0ef96 + tinlinenode calls cpu specific routines for unknown inline numbers
git-svn-id: trunk@37543 -
2017-11-01 16:33:32 +00:00
svenbarth
f6a867ef04 * move handling of Concat to tinlinenode so that it can be easily extended for dynamic arrays
+ added test

git-svn-id: trunk@37429 -
2017-10-08 10:39:34 +00:00
svenbarth
b3ee9339b8 * also report the dynamic array "overloads" for the Insert() intrinsics
git-svn-id: trunk@37343 -
2017-09-27 21:18:04 +00:00
svenbarth
c5b33f51f9 * fix for Mantis #32412: correctly handle an incorrect parameter count for Delete() and Insert() intrinsics
+ added tests

git-svn-id: trunk@37342 -
2017-09-27 21:15:00 +00:00
svenbarth
0b02dab684 + new Delphi-compatible intrinsic GetTypeKind() which returns the TTypeKind of a type as a constant value (and thus can be optimized away in If- and Case-statements)
+ added test

git-svn-id: trunk@36875 -
2017-08-11 22:12:53 +00:00
svenbarth
29d9beb40c * initialize datatemp
git-svn-id: trunk@36308 -
2017-05-23 19:27:08 +00:00
svenbarth
72c595eefe + implement support for Insert() for dynamic arrays; the parameter that is inserted can be a dynamic or static array of the same type, an array constructor or a single element of the arrays type; all that is determined based on the second type
+ added test

git-svn-id: trunk@36307 -
2017-05-23 19:11:49 +00:00
nickysn
a7ca75a4b6 * use current node's localswitches field for checking whether range and overflow
checking is on, when handling the inc/dec inline nodes, instead of using
  current_settings.localswitches
* when creating inline nodes in the optloadmodifystore optimization pass, copy
  localswitches from the node, that is being replaced, because otherwise,
  localswitches is copied from current_settings.localswitches at the time the
  new node is created, and that can already be in a different state, since
  optloadmodifystore is performed in a separate pass, after the current
  procedure has already been parsed and in this moment, it reflects the state
  of localswitches after the end of the procedure.
* these two fixes fix a bug, where an internalerror 2017032701 can happen, when
  compiling with -O3 code that turns on and off range/overflow checking in the
  middle of a procedure.

git-svn-id: trunk@36195 -
2017-05-12 14:07:13 +00:00
nickysn
efc5e339d0 * use an enum instead of integer constants to represent inline numbers
* compinnr.inc include file converted to a unit
* inline number field size stored in ppu increased from byte to longint
* inlines in the parse tree (when written with the -vp option) now printed with
  their enum name, instead of number

git-svn-id: trunk@36174 -
2017-05-10 14:41:43 +00:00
florian
b1dff29cbf * removed unused units
git-svn-id: trunk@36165 -
2017-05-09 19:53:14 +00:00
nickysn
987cf2a9cf * fixed a bug in the maxqword check in the Rol/RorQWord(maxqword,x)->maxqword
optimization, which prevented the optimization from ever being performed. This
  should also fix the test failure of tbs/tb0627b.pp on all 64-bit platforms.

git-svn-id: trunk@36071 -
2017-05-03 15:32:48 +00:00
nickysn
f65f0b125a + optimize sar(0,x) to 0 and sar(-1,x) to -1
git-svn-id: trunk@36044 -
2017-05-01 19:12:04 +00:00
nickysn
c028362f31 * added the missing pop directive after the push directive in handle_const_rox
git-svn-id: trunk@36043 -
2017-05-01 18:25:01 +00:00
nickysn
855cd616f0 + optimize rol(0, x) and ror(0, x) to 0; also optimize the case with all ones,
e.g. rol32(ffffffff, x) = ffffffff, etc.

git-svn-id: trunk@36042 -
2017-05-01 18:19:49 +00:00
nickysn
29429cca3c + mask the shift/rotate count value in the rol/ror/sar inline nodes, before
checking for 0, so that things like sar(int32,32) can be optimized to int32,
  just like sar(int32,0)

git-svn-id: trunk@36031 -
2017-05-01 11:45:23 +00:00
nickysn
b17d97050f + also simplify rol(x,0) and ror(x,0) to x
git-svn-id: trunk@36024 -
2017-04-30 20:45:51 +00:00
nickysn
8ac84ce43a + simplify sar(x,0) to x
git-svn-id: trunk@36023 -
2017-04-30 20:24:44 +00:00
nickysn
d8ec0eff8e + implemented inline code generation for 64-bit sar (the SarInt64 intrinsic) on
less-than-64-bit CPUs that have a 64-bit OP_SHR/OP_SHL/OP_SAR implementation
  in their cg64 backend code generator. This is enabled only for i386 for now.

git-svn-id: trunk@36022 -
2017-04-30 16:06:34 +00:00
nickysn
5393daa994 + added compile time const evaluation for Bsf/Bsr(const) as well
git-svn-id: trunk@35941 -
2017-04-24 20:35:08 +00:00
nickysn
32395bbcbb + added compile time const evaluation optimization for PopCnt(const)
git-svn-id: trunk@35937 -
2017-04-24 16:11:43 +00:00
nickysn
d7c8a081a1 + enable using the cg64 ops OP_SHR/OP_SHL/OP_SAR on i386 for implementing the
64-bit in_sar/shl/shr_assign_x_y inline nodes

git-svn-id: trunk@35835 -
2017-04-18 14:36:41 +00:00
nickysn
b14f277e8f + use rtl helpers for 64-bit shl/shr/sar/rol/ror modify in place operations, on
platforms that don't have native 64-bit implementation of the corresponding
  64-bit shift/rotate operation

git-svn-id: trunk@35787 -
2017-04-13 15:24:32 +00:00
nickysn
f514657e45 + implemented the sar/shl/shr/rol/ror inline modify-in-place nodes; the actual
optimization of "i:=i shl/shr k", etc statements is not performed yet

git-svn-id: trunk@35780 -
2017-04-12 00:41:15 +00:00
nickysn
8d885ffde6 + write the inlinenumber of inline nodes in the node tree
git-svn-id: trunk@35764 -
2017-04-10 14:54:50 +00:00
nickysn
256dc546ac + implemented the in_neg_assign_x and in_not_assign_x inline nodes, which will
be used (TBD in a future commit) for optimizing x:=-x and x:=not x on CPUs
  that support performing these operations directly in memory (such as x86)

git-svn-id: trunk@35749 -
2017-04-07 16:02:40 +00:00