Commit Graph

686 Commits

Author SHA1 Message Date
Jonas Maebe
a079e5fa80 * synchronised with trunk till r41449
git-svn-id: branches/debug_eh@41450 -
2019-02-24 20:01:53 +00:00
Jonas Maebe
bc77aad3d9 * give an error when trying to call through to a C varargs routine with a
high level code generator
   o we cannot create a high-level stub in that case

git-svn-id: trunk@41443 -
2019-02-24 19:58:44 +00:00
florian
9514bd9162 * refactored psabieh handling, most code is now in psabiehpi
git-svn-id: branches/debug_eh@41367 -
2019-02-17 21:20:40 +00:00
florian
dcf9744f12 * reverts accidentally changed identifier spelling
git-svn-id: branches/debug_eh@41305 -
2019-02-11 20:27:29 +00:00
florian
65aebd22b0 + initial implementation of dwarf/eh_frame based exception handling for i386-linux, basic stuff works, open todos
* nested exception handling statments in one procedure need to be fixed
  * clean up, finally factor out tcgprocinfo from psub at least
  * extensive testing

git-svn-id: branches/debug_eh@41289 -
2019-02-10 18:07:33 +00:00
Jonas Maebe
d93c05a90c * synchronised with trunk till r41207
git-svn-id: branches/debug_eh@41208 -
2019-02-03 21:05:37 +00:00
Jonas Maebe
503ea604f3 + nolinline modifier to specify that a routine must never be inlined
git-svn-id: trunk@41198 -
2019-02-03 21:00:17 +00:00
Jonas Maebe
b3a8543a56 * synchronised with trunk till r40942
git-svn-id: branches/debug_eh@40943 -
2019-01-20 17:37:07 +00:00
Jonas Maebe
51e68eb302 * fixed several places where the interface crc could change:
o unsetting po_inline while parsing the implementation for various reasons
     (interprocedural goto/label, accessing a local in a parent frame,
      having nested procedures)
   o instead handle this via the pio_inline_not_possible flag
   o noreturn can no longer be specified only in the implementation

git-svn-id: trunk@40789 -
2019-01-06 20:35:56 +00:00
Jonas Maebe
51b58f342f * synchronised with trunk till r40775
git-svn-id: branches/debug_eh@40776 -
2019-01-05 22:12:28 +00:00
Jonas Maebe
91d5457b38 * moved around/replaced the following procedures to stop nflw from depending
on pdecsub (node units should not depend on parser units):
   o maybe_add_public_default_java_constructor()
   o handle_calling_convention()
   o create_finalizer_procdef() (replaced with create_outline_procdef())
   o insert_record_hidden_paras()
   o handle_calling_convention()
   o proc_add_definition()
   o build_parentfpstruct()
   o maybe_guarantee_record_typesym()
   o get_first_proc_str()
  * factored out the creation of a procinfo for a nested procdef based on a
    subnodetree of the current procdef into tprocinfo.create_for_outlining()

git-svn-id: trunk@40773 -
2019-01-05 16:26:33 +00:00
Jonas Maebe
2f8fcf7819 + new tf_use_psabieh target flag to indicate a target uses PSABI/Dwarf EH
o use this flag to set the personality routine of a function if it uses
     exception handlinga
   o also define FPC_USE_PSABIEH if this target flag is set
   o set this target flag for darwin/x86-64 if the compiler is compiled with
     -dllvm

git-svn-id: branches/debug_eh@40415 -
2018-11-29 21:31:30 +00:00
Jonas Maebe
4cd6f59bc3 * changed create_hlcodegen into a procvar, so that we don't have to insert
hlcgllvm in the uses clause of every unit that calls create_hlcodegen
   o prevents dependency cycles that can cause llvm codegen units to init
     before the cpu variants, which is bad since the llvm versions have to
     override the cpu variants in their init code (+ added checks in the
     init code that they are in fact initialised later)

git-svn-id: branches/debug_eh@40410 -
2018-11-29 21:31:15 +00:00
Jonas Maebe
3a5a69619e * moved initialisation of parentfpstruct to just behind where the local vars
get initialised, so that parameters in this struct are already available
    in any wrappers generated for the parent routine (e.g. in case self is
    moved to the parentfpstruct in a destructor, which calls beforestruction
    in its wrapper)

git-svn-id: trunk@40384 -
2018-11-28 19:23:28 +00:00
Jonas Maebe
b96a8aee61 * don't generate tempsfinalize nodes in except filter procdefs, as that would
finalize the parent's temps twice (fix for r40345, mantis #34574)

git-svn-id: trunk@40357 -
2018-11-20 19:25:06 +00:00
Jonas Maebe
3b9f5a5e96 * moved finalization of code generator temps to a node, so it can be getcopy'd
(needed for LLVM, where we need two copies of the finally code: one in case
     an exception occurs, and one in case none is raised)
   o also first finalize parameters and only then code generator temps, since
     in theory the former could create more of the latter

git-svn-id: trunk@40345 -
2018-11-17 22:38:36 +00:00
florian
a40335de34 * non-linux arm targets fixed
git-svn-id: trunk@40276 -
2018-11-08 19:57:30 +00:00
florian
c37c485eb7 + check if initialization/finalization code uses implicitly thread vars
git-svn-id: trunk@40269 -
2018-11-07 22:03:00 +00:00
florian
9f16c34329 + initial work for tls-based threadvar support on arm-linux
git-svn-id: trunk@40267 -
2018-11-07 22:02:58 +00:00
yury
5c5dc2ed50 * Changed verbosity of ""???" not yet supported inside inline procedure/function" to note to be consistent with note "Call to subroutine "?" marked as inline is not inlined".
git-svn-id: trunk@40255 -
2018-11-07 12:57:23 +00:00
yury
dd60397165 + Added the pio_inline_not_possible flag to timplprocoption. It is set if a function can't be inline (contains an assembler block, etc). When calling such functions, no note "Call to subroutine "?" marked as inline is not inlined" is emitted.
git-svn-id: trunk@40254 -
2018-11-07 12:20:30 +00:00
yury
b115886930 * po_inline can't be removed from procoptions when the interface part is already parsed. It changes the interface's CRC and causes other units to recompile.
git-svn-id: trunk@40238 -
2018-11-06 10:21:06 +00:00
yury
95d18cd052 * If a function can't be inline (contains an assembler block, etc) remove the po_inline flag from its procoptions.
git-svn-id: trunk@40223 -
2018-11-05 14:18:27 +00:00
yury
4357caaad8 * Removed unused local vars.
git-svn-id: trunk@40183 -
2018-11-02 18:44:29 +00:00
Jonas Maebe
0cd85d73e4 * ttryfinallynode now inherits from tbinarynode instead of tloopnode, as its
t1 field was always set to tnothingnode

git-svn-id: trunk@40142 -
2018-11-01 13:19:33 +00:00
florian
a34d4e715c Merged riscv_new branch
git-svn-id: trunk@39813 -
2018-09-26 19:49:08 +00:00
svenbarth
10886d8cef * fix for Mantis #34206: when specializing nested routines of a generic routine we don't need access to their genericdef (which isn't available anyway in other units when loading from PPU) as their definition is completely contained in the token stream
+ added simplified test for the problem

git-svn-id: trunk@39692 -
2018-08-31 16:11:05 +00:00
Jeppe Johansen
76dda5813e Updated dynlinker filename.
Fix passing of vararg register pairs.
Fix passing of big record, and return of records.
Disabled framepointer elimination for the time being.

git-svn-id: branches/laksen/riscv_new@39519 -
2018-07-28 20:06:06 +00:00
Jeppe Johansen
ceb38833f2 Added RiscV32/64 target, from a cleaned up version of branches/laksen/riscv/trunk.
git-svn-id: branches/laksen/riscv_new@39474 -
2018-07-20 08:21:15 +00:00
nickysn
966564aade - removed 'if assigned(code)' before calling code.free in tcgprocinfo.destroy,
since .free already checks for <>nil

git-svn-id: trunk@39312 -
2018-06-27 12:38:58 +00:00
svenbarth
5510b13975 * ensure that sto_has_generic is set when a generic routine has been parsed
git-svn-id: trunk@39230 -
2018-06-15 13:49:03 +00:00
florian
f08d3fdf8f * moved execution weight calculation into a separate pass, so the info is available already available before the code generation pass if needed
git-svn-id: trunk@38717 -
2018-04-08 20:51:27 +00:00
florian
1497b64804 * the temp. locations created by cse were not properly cleanup up, this patch fixes this
git-svn-id: trunk@38624 -
2018-03-25 15:55:34 +00:00
svenbarth
dffe423b10 * fix for Mantis #31945: two fixes for nested routines inside generic methods
a) correctly determine whether token recording is required or not (nested routines of generic routines don't need it)
  b) correctly determine whether the trailing ";" needs to be parsed (nested routines of generic routines need to)

git-svn-id: trunk@36469 -
2017-06-09 15:46:10 +00:00
florian
b1dff29cbf * removed unused units
git-svn-id: trunk@36165 -
2017-05-09 19:53:14 +00:00
nickysn
012153201a * moved the conversion of "x:=x op k" to inline nodes to a separate optimization
pass, so that it can be done after other optimizations, such as constant
  propagation

git-svn-id: trunk@35961 -
2017-04-26 22:44:01 +00:00
maciej-izak
48b149acd4 New tokens for new management operators: Initialize, Finalize, AddRef and Copy. Small code adjustment for parser (pdecobj.pas, pstatmnt.pas, psub.pas, ptype.pas) was required because few of old token has from now value which is outside range of set: _CONSTRUCTOR, _FINALIZATION.
New tokens for operators:
  * _OP_INITIALIZE, _OP_FINALIZE, _OP_ADDREF, _OP_COPY

New tokens:
  * _INITIALIZE, _FINALIZE, _ADDREF, _COPY

git-svn-id: trunk@35438 -
2017-02-18 18:12:45 +00:00
Jonas Maebe
7013a879c3 - disabled check for existence for texceptaddr/tguid/tjmpbuf in the system
unit for the JVM platform (they do not exist/are not needed there)
    (mantis #31240)

git-svn-id: trunk@35348 -
2017-01-28 14:33:36 +00:00
florian
668b198d7c * fix for issue #29936: check if the internal needed types are available
git-svn-id: trunk@35310 -
2017-01-15 20:54:07 +00:00
svenbarth
109dff8b56 * allow nested procedures and functions in generic routines (and get rid of an untranslated error message :P )
git-svn-id: trunk@35148 -
2016-12-17 21:23:07 +00:00
svenbarth
779799c406 * only record tokens for real generic routines or those that belong to a generic class/record
* don't parse a semicolon at the end for real specializations or specializations of methods that belong to a specialized class/record 

git-svn-id: trunk@35146 -
2016-12-17 21:13:30 +00:00
svenbarth
a76fd967b2 * inherit df_generic and df_specialization from the parent routine and correctly set the genericdef for a specialization
git-svn-id: trunk@35145 -
2016-12-17 21:10:58 +00:00
florian
b527bab087 * better check if we are in the main program which never returns
git-svn-id: trunk@34938 -
2016-11-20 18:01:13 +00:00
pierre
89c1b68b14 * Delete regvars unit.
This unit was empty unless OLDREGVARS macro was set,
    but this does not compile and no change has been made since 2011.

  * Remove regvars from all _USES clauses.

git-svn-id: trunk@34808 -
2016-11-06 14:01:39 +00:00
nickysn
e1792e712a * changed the 'size' parameter of fpc_zeromem and fpc_fillmem from ptruint to sizeuint
git-svn-id: trunk@34741 -
2016-10-18 15:42:29 +00:00
nickysn
cc234e7de9 + when the -vp option is specified, also print the node tree in tree.log right
before pass 2, since there are now quite a lot of changes to the tree
  happening after pass 1.

git-svn-id: trunk@34606 -
2016-10-03 14:15:59 +00:00
Jonas Maebe
1e506ce1d5 * call beforedestruction if an exception happens in afterconstruction
(mantis #30570)

git-svn-id: trunk@34453 -
2016-09-08 14:18:59 +00:00
Jonas Maebe
90f09a599e * simplified flow while adding afterconstruction code
git-svn-id: trunk@34451 -
2016-09-08 14:18:53 +00:00
Jonas Maebe
adcf07aabb * fixed line information for constructor code added to new block while
generating the afterconstruction code

git-svn-id: trunk@34450 -
2016-09-08 14:18:50 +00:00
Jonas Maebe
d22b83ee73 * renamed afterconstructionblock to constructionblock
git-svn-id: trunk@34449 -
2016-09-08 14:18:47 +00:00