summaryrefslogtreecommitdiff
path: root/src/qml/compiler
Commit message (Collapse)AuthorAgeFilesLines
* V4: Fix issues with very small loops5.8Erik Verbruggen2017-04-183-157/+184
| | | | | | | | | | | | | | | | | | | | | | | | | | Loops consisting of just a single basic block (e.g. a do-while loop with no nested loops or if statements) have a back-edge to themselves. There were 2 problems: - loop detection would create LoopInfo for any loop header referred to by blocks inside the loop (and a 1 block loop doesn't have body blocks), nor would it mark the loop header as such - when splitting critical edges, the newly inserted block would not be marked as part of the loop This is a problem specifically for 1 block loops: the block ends with a CJUMP, so the back-edge is a critical edge. So the new block inserted by edge splitting wouldn't be marked as belonging to the loop. The end result was that the life-time intervals for temporaries that are defined before the loop, but that are used inside the loop, and not after the loop, would have their life-time ended before the loop ends (instead of spanning the whole loop, *including* the back-edge). This in turns could lead to the stack/register allocator re-using the storage for that temporary, resulting in strange things happening. Task-number: QTBUG-59012 Change-Id: Ic946c73913711272efea2151cb85350412ca2fde Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* switch to new way to refer to libdlOswald Buddenhagen2017-04-111-1/+1
| | | | | | | | note that the condition is insufficient (it should include qtConfig(dlopen)), but this is just consistent with the c++ code. Change-Id: I4b447ff504539e4dc07ece3d696e5a85b2f4cc50 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* Clean up type dependency hashing for QML cachingSimon Hausmann2017-03-136-16/+18
| | | | | | | | | | | | | | Instead of passing the engine parameter all the way through the data structure generator, along with the dependent type data structure that is unused otherwise, let's simply provide a function object for the dependency hashing. This is also in preparation for adding singleton types to the dependency hash. Task-number: QTBUG-58486 Change-Id: I5bb5e5c06b7b5c77195cec3da13141333cfea7a8 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Fix move ordering while resolving edges in register allocationErik Verbruggen2017-02-043-67/+102
| | | | | | | | | | | | | | | | | | When register allocation on an IR in SSA form is done, the last step is to turn the Phi nodes into moves and swaps and put those instructions in the predecessors. As the Phi nodes are conceptually "executed in parallel", this can result in cycles: r1 <- r0 r0 <- r1 These have to be turned into a swap instruction. Also, the moves have to be ordered in order to make sure that no values are overwritten: r1 <- r0 r2 <- r1 Here the two moves need to be switched. The comments in the code document the algorithm. Change-Id: I4151988681f7554b00a3eb70d224e6e2f29ebf04 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* Prevent propagating results of a phi node into another phi nodeErik Verbruggen2017-02-011-8/+37
| | | | | | | | | .. of the same basic block. Phi nodes are "executed in parallel", so such a situation will lead to interesting results. Task-number: QTBUG-58553 Change-Id: Ibed439df91d46ea416dcb0a20457310e91dce8b4 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* Fix libs build with msvc on Chinese locale on WindowsLiang Qi2017-02-011-2/+2
| | | | | | | | | | | | | | | Chinese locale means Code Page 936 here. It's also related with removing C4819 warnings. And it's also following Conventions in Qt source code: All code is ascii only (7-bit characters only, run man ascii if unsure) See also http://wiki.qt.io/Coding_Conventions Task-number: QTBUG-56155 Task-number: QTBUG-58161 Change-Id: I1c38a6ce74670716f730663edbcdec3919b438c2 Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io>
* QQmlTypeCompiler: Fix read after free in tst_qqmllanguageRobin Burchell2017-01-281-2/+1
| | | | | | | | | | invalidAlias.11 revealed a problem with the loop here, in that the vector was modified while it was being iterated. There isn't any need to modify the vector being iterated, as it'll be put into pendingObjects for the next loop. Change-Id: If9b537c4ac00697237d12e4b0be67ef39cc8b3c4 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* Fix build without features.temporaryfileTasuku Suzuki2017-01-271-0/+5
| | | | | Change-Id: I31bcf56ee0c4ec9285dccb356b03b89e8ce8356a Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* Fix QML cache not being invalidated when source path changesSimon Hausmann2017-01-021-0/+5
| | | | | | | | | | | | When somebody renames the directory name underneath a QML file and its cache file, then we need to re-generate the cache as it contains the fully path of the source path. That is sometimes used to resolve relative URLs (such as images) and therefore needs updating (by re-creating the cache). Task-number: QTBUG-57644 Change-Id: I9766668859aad8e9d71f278c3f26c0585258c14e Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* Merge remote-tracking branch 'origin/5.8.0' into 5.8Liang Qi2016-12-251-0/+5
|\ | | | | | | Change-Id: I72ed8656ef03d1bc28225e2186f03620b9e119e9
| * V4 Interpreter: reset the exception handler for every catch blockErik Verbruggen2016-12-081-0/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If an exception handler consists of multiple basic-blocks, and is then followed by a finally block (for example: a catch block with a throw followed by a return, and then a subsequent finally block), then the finally block can be reached before the exception handler is reset by skipping the second block of the catch handler with a throw. As the finally block will then rethrow, and the old exception handler is still there, it will end in an endless loop. The fix is to reset the exception handler for every catch block. The problem occurred in ch12/12.14/S12.14_A13_T3 Change-Id: I968b62c6c2af30af32e2717a9ce85f852523dbe8 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Bump QML cache file versionSimon Hausmann2016-12-091-1/+1
| | | | | | | | | | | | | | | | After the recent data structure changes this seems appropriate to force a cache rebuild for those following the branch in release builds. Change-Id: Ie4c0534729a752137068b8f24beb9d15e7895c46 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* | Merge remote-tracking branch 'origin/5.8.0' into 5.8Lars Knoll2016-12-073-21/+53
|\ \ | |/ | | | | Change-Id: I19804e880005c66880eeabfaebf0b1093de80e6b
| * Fix compilation error with ICC 17: it doesn't like auto and commaThiago Macieira2016-12-042-16/+48
| | | | | | | | | | | | | | | | | | | | | | | | The error is a warning upgraded via -Werror and the message doesn't even make sense to me: error #3373: nonstandard use of "auto" to both deduce the type from an initializer and to announce a trailing return type Intel-Issue-ID: 6000164202 Change-Id: I73fa1e59a4844c43a109fffd148caf09a1952e92 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
| * Fix support for namespaced types in property/signal declarationsSimon Hausmann2016-11-301-5/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Declarations such as property Namespace.Item foo or property list<Namespace.Item> foo would get rejected by the grammar due to the lack of productions. This is now encapsulated in the UiPropertyType, which used to be merely an identifier but is now changed to produce a UiQualifiedId - the same type that's also used for MyNamespace.Item { ... } object declarations for example. Task-number: QTBUG-10822 Change-Id: Ic3ac1adbe17c83b24b67950c2f089e267b73b99b Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* | V4: Simplify strict-mode setting on call context objectsErik Verbruggen2016-12-061-3/+3
| | | | | | | | | | | | | | Previously this required an extra shift to move the bit to the lsb. Change-Id: I04674c3bad34d60af13728fe9a7dd120a188c26f Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* | Remove unnecessary testsRobin Burchell2016-12-051-8/+4
| | | | | | | | | | | | | | | | _canSimplify is only set during accept(), so the additional tests do not seem to have any purpose. Change-Id: I0ee337c1457ec89940d1351eecd17cbfbfc7ff83 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | Get rid of most QT_NO_FOO usagesLars Knoll2016-11-292-3/+3
|/ | | | | | | | Instead use QT_CONFIG(foo). This change actually detected a few mis-spelled macros and invalid usages. Change-Id: I06ac327098dd1a458e6bc379d637b8e2dac52f85 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* Merge remote-tracking branch 'origin/5.7' into 5.8Liang Qi2016-11-281-9/+6
|\ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The renderers added in 5.8 had to be adapted to the changed profiling macros from 5.6. Conflicts: src/plugins/scenegraph/d3d12/qsgd3d12renderloop.cpp src/plugins/scenegraph/d3d12/qsgd3d12threadedrenderloop.cpp src/quick/scenegraph/adaptations/software/qsgsoftwarerenderloop.cpp src/quick/scenegraph/adaptations/software/qsgsoftwarethreadedrenderloop.cpp src/quick/util/qquickprofiler_p.h tests/auto/qml/qjsengine/tst_qjsengine.cpp tests/auto/qml/qqmlvaluetypes/tst_qqmlvaluetypes.cpp Change-Id: Icb370b7c95aab12589ad73881ac6d178759a5c6b
| * Merge remote-tracking branch 'origin/5.6' into 5.75.7Liang Qi2016-11-251-9/+6
| |\ | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/qml/compiler/qv4ssa.cpp src/qml/qml/v8/qqmlbuiltinfunctions.cpp src/quick/util/qquickprofiler_p.h Change-Id: I11a89c2a166115d6697adfba09928805643e709e
| | * Improved robustness of the optimizer when removing expressionsSimon Hausmann2016-11-221-9/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For example during dead code elimination we may invalidate statements, but at the same time there may still be instances left in the work list of optimizeSSA(). When we encounter then, we should not process them any further. Task-number: QTBUG-56255 Change-Id: I4c24b1a225ce1bde112172e9606f91c426c19f19 Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
* | | Fix handling of qrc:/// urls with disk cachingSimon Hausmann2016-11-231-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Use the right function for converting a qrc:/// url to a local path. QUrl::toLocalFile() gives us an empty path, which prevents us from getting a time stamp and comparing it against the stamp in the cache file. This fixes disk caching with samegame. Change-Id: Id3eb270f1f7a7f25143d2f075a45f32bdb0384c5 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* | | Add a missing break statementLars Knoll2016-11-221-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | Converting a constant to null or undefined shouldn't happen in practice, but it still shouldn't run into the Q_UNIMPLEMENTED. Change-Id: I994a55defd7f4e29628732a8a9071bc785a80ee2 Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
* | | Change Import::type from quint8 to LEUInt32James McDonnell2016-10-251-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Import::type used to be a quint32. The switch from quint32 to quint8 changed the alignment of other structures in the compiled blob. On QNX, the alignment isn't appropriate for some of the instructions that the compiler uses to access/modify the structures and a BUS error occurs. Changing Import::type to LEUInt32 puts the alignment back the way it was before. Simpler than trying to figure out how to get everything aligned correctly with a quint8 at the front of the structure. Task-number: QTBUG-56341 Change-Id: Ia6f4daff5f615f9c5dbcc34ce8c3c9a89bab2b69 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | Fix crash when loop peeling and basic block mergingSimon Hausmann2016-10-251-0/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When trying to merge the second (original) loop header block of a peeled loop, we would end up with dangling references to that block from the loop body blocks. There's no trivial way to find all these quickly from the header, so for now don't merge these blocks into the predecessor. Change-Id: I2b5e39c5596ffd8c21ca9871af3a8150a019f2a8 Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
* | | Add the ability to explicitly enable the code cache in qmljsSimon Hausmann2016-10-232-2/+36
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This also requires mapping the label pointers in the byte code back to the instruction enum. Fortunately this reverse mapping is only needed in the qmljs case. Normally in the QML engine we persist the byte-code to disk before linking the compilation unit to the engine (where we map the enum to goto labels). Change-Id: If0b79288274bb1031161841b63a85f164502aaec Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* | | Fix bootstrap and qtquick compiler buildSimon Hausmann2016-10-211-2/+6
| | | | | | | | | | | | | | | | | | | | | | | | We need to always include the checksum generating code, even if dummy (for the lack of the md5 code being in the bootstrap library). Change-Id: I3dd9c585a23ffea9bd7c79dbe6dae29b9f93fa6d Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | Improve QML development experienceSimon Hausmann2016-10-182-0/+42
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | With the cache files it is tricky to do changes to the code generator and it is easy to forget that the cache files need to be re-generated. So facilitate this, we add the sha1 checksum of the QtQml library to the checksum embedded in the cache files. This is currently only implemented on Unixy platforms and it is limited to developer builds with shared libraries. This is not intended for release builds. Change-Id: If59f31f700254f7e9c6e3384d2fae4e5396fb698 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* | | Fix excessive invalidation of QML disk cachesSimon Hausmann2016-10-185-7/+42
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | We use an MD5 checksum over the meta-object data to verify that the types a QML file depends on haven't changed since the cache was generated. However when the dependent types are QML types, then the meta-object data contains dynamically generated type names such as QMLTYPE_1234, which is non-deterministic. To address this, we resort to the checksum over the meta-object data only for C++ types (if those change it's likely an incompatible change) and for QML types use the fact that all the information about the QML declared types comes from the QML file only, which means we can in that case simply use a checksum over the QV4::CompiledData memory chunk. In addition we need to ensure that the generated CompiledData memory chunk is deterministic by avoiding any uninitialized bytes (memset) and using a map instead of a hash for the mapping of object index to object id. Task-number: QTBUG-55926 Change-Id: I27c840b1960ad36b486198e504b70989c22a3972 Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
* | | QML: Align CompiledData::Function fields betterErik Verbruggen2016-10-111-6/+8
| | | | | | | | | | | | | | | | | | | | | | | | Align all fields on an 8-byte boundary to make sure there are no bus errors or penalties for unaligned access. Change-Id: Ia455860bb0403178882b80e1036f067666386e77 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | Make the Moth interpreter configurableLars Knoll2016-10-103-6/+15
| | | | | | | | | | | | | | | | | | Change-Id: I2b784820c4e39a7932f81bfee9ce78e01a2e96b5 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com> Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | Fix warningMaurice Kalinowski2016-09-031-0/+1
| | | | | | | | | | | | | | | | | | | | | Otherwise breaks developer build for Windows Phone 8.1 Change-Id: I7810521f82de6b23ebb6b770374596c799bd135b Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | Bump cache file format versionSimon Hausmann2016-08-301-1/+1
| | | | | | | | | | | | | | | | | | | | | ... after the recent changes to codegen and runtime API. Change-Id: Id6f1ebf7b0c4dfab050c7262209dbe26116b2e7b Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | Fix binding dependencies when used in together with functionsSimon Hausmann2016-08-305-6/+10
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When a function called from a binding would access a scope or context property, we would end up registering those dependencies as permanent dependencies in the expression and set m_permanentDependenciesRegistered to true. Then after the binding evaluation itself, we would not end up registering the real binding's permanent dependencies. Change-Id: I3b6c1c181aa064d535362c736b5b2bbc4f576ba9 Done-with: Erik Task-number: QTBUG-54394 Reviewed-by: Erik Verbruggen <erik.verbruggen@qt.io>
* | | QML: Make sure the integer data is aligned on 4-byte boundariesErik Verbruggen2016-08-301-0/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | The packing for a the compiled data is 1 byte, but integers clearly need 4 byte alignment. This worked before by accident, but broke when a single quint8 was added to the Function. Change-Id: Ia7954423d5a7b4a0e6ef177fc3ee350889f43154 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | V4: Replace the ranges QVector with a QVarLengthArrayErik Verbruggen2016-08-242-8/+8
| | | | | | | | | | | | | | | | | | | | | | | | Reduces the instruction count of Optimizer::lifeTimeIntervals with about 33% on x86_64, and the number of malloc calls with about 20%. Change-Id: I2ca303a3919dc940f29e40b2487016ff85e678fb Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | V4: Remove another use of QSetErik Verbruggen2016-08-241-19/+83
| | | | | | | | | | | | | | | | | | | | | | | | Reduces the instruction count of Optimizer::lifeTimeIntervals with about 35% on x86_64, and the amount of malloc calls with 25%. Change-Id: I1f1d847addee86c63ab7ac17bec926500e2901e1 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | V4: Sort unprocessed ranges in reverse orderErik Verbruggen2016-08-232-9/+11
| | | | | | | | | | | | | | | | | | | | | This prevents the copy overhead that a removeFirst() would impose. Change-Id: I4d3507784792e9bc3c4347f43ea6fdb087c6f201 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | Merge remote-tracking branch 'origin/5.7' into devLiang Qi2016-08-191-0/+7
|\ \ \ | |/ / | | | | | | Change-Id: I326616356ee26d4532c6d57558c43c919f0a900d
| * | Merge remote-tracking branch 'origin/5.6' into 5.7Liang Qi2016-08-181-0/+7
| |\ \ | | |/ | | | | | | Change-Id: I20c622263f40c322954328e4d10a8071db3ca6d1
| | * Fix throwing an exception inside a finally block with a return in catchSimon Hausmann2016-08-161-0/+7
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | When exiting a catch block with a return statement, we'll unwind the exception handling manually and emit finally statements right before jumping to the exit block. If we throw an exception in the final block, we'll end up using the exception handler of the catch block that contains the return statement, which means we'll end up popping the exception scope one too many times, once through ScopeAndFinally::CatchScope in unwindException() and then when executing the exception handler block. The latter we should not be executing, instead we should jump straight to the exit block. Therefore any statements emitted as part of the manual exception unwinding (finally block here) need to be part of a new basic block with no exception handler. This bug became visible in debug builds where the Scope destructor compares the scope mark against the engine stack top to ensure correct cleanup order (which was wrong). However that in turn was hidden in debug builds again due to an accidental = instead of == in a Q_ASSERT. With the Q_ASSERT fixed this use-case is covered by ch12/12.14/S12.14_A13_T3 Change-Id: Id74a1b2bb3e063871b89cc05353b601dd60df08e Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* | | Merge "Merge remote-tracking branch 'origin/5.7' into dev" into refs/staging/devLiang Qi2016-08-173-163/+165
|\ \ \
| * \ \ Merge remote-tracking branch 'origin/5.7' into devLiang Qi2016-08-173-163/+165
| |\ \ \ | | |/ / | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/qml/compiler/qqmltypecompiler.cpp src/qml/compiler/qv4isel_moth.cpp src/qml/compiler/qv4ssa_p.h src/qml/qml/qqmlobjectcreator.cpp Change-Id: I8bb7fe773d657f908f20ee5e72c2b9bd643f6260
| | * | Merge remote-tracking branch 'origin/5.6' into 5.7Liang Qi2016-08-133-163/+165
| | |\ \ | | | |/ | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Conflicts: src/qml/compiler/qv4isel_moth.cpp src/qml/compiler/qv4ssa_p.h tests/benchmarks/qml/qqmlimage/qqmlimage.pro tests/benchmarks/qml/qqmlimage/tst_qqmlimage.cpp Change-Id: Iad11ce7fdf0c6d200fdebc16a94081bd8069a87a
| | | * Move the moth stack slot allocator into qmldevtoolsSimon Hausmann2016-08-122-162/+164
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This way it's accessible to the QML compiler. Change-Id: I3918a796c698fc75e134b29a61eed2ec028bc851 Reviewed-by: Lars Knoll <lars.knoll@qt.io>
| | | * Fix crash when cache property can not be foundFilipe Azevedo2016-08-051-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | For some reason if a cache property is not found this cause an application crash instead of just reporting an error. Now instead of a crash we get this kind of error visible: qrc:///the_file.qml line 64 column 30: Cannot assign object to property Change-Id: Ic420713df30603f1d164da439cba30a18af8f2bc Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | | Prospective fix for invalidating caches for qml files from resourcesSimon Hausmann2016-08-171-1/+11
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The Qt resource system does not store any time stamps, so to validation purposes fall back to the time stamp of the application binary. Change-Id: Ia1c4d06a634ffdb2d4d281aae55e5ed34f044a3c Reviewed-by: J-P Nurmi <jpnurmi@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>
* | | | Fix return valueMaurice Kalinowski2016-08-171-2/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | CompilationUnitMapper::open is supposed to return a pointer, not bool. Change-Id: I798be4038b8df047d380201b746f8d97cc1db526 Reviewed-by: Simon Hausmann <simon.hausmann@qt.io>
* | | | Enable QML disk cache on WinRT 10Simon Hausmann2016-08-171-5/+5
| | | | | | | | | | | | | | | | | | | | Change-Id: I6a61d015c93bf507c0b68f3a975d8574334a05e5 Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>
* | | | Make the unit mapping on Windows configurable with regards to executable mappingSimon Hausmann2016-08-176-7/+13
|/ / / | | | | | | | | | | | | | | | | | | | | | | | | | | | If we generate byte code, then we can mmap without the executable flags, otherwise we need them. This should make things work out of the box on platforms where special rights are needed before executable mappings are allowed. Change-Id: I24e663f85d661bc51cd3bf2463547b1d1590ea32 Reviewed-by: Maurice Kalinowski <maurice.kalinowski@qt.io>