dart-sdk/runtime/vm/compiler
Martin Kustermann 10df757a49 [vm/ffi] Fix issue due to unspecified argument evaluation order in C++
We already have tests that exercise this, namely:

  - ffi_2/regress_39044_test
  - ffi_2/vmspecific_send_port_id_test

Though the bug only appears if C++ compiler decides to evaluate arguments
in a different order. This happens to be only the case on Windows.

We don't have Windows hardware with Android phones on our CI, which is
why this was not caught earlier.

We have manually confirmed (via building app on windows with this fix
and running on android) that the issue is fixed by this change.

Fixes https://github.com/flutter/flutter/issues/54948

Change-Id: I51109cf1062964a5fb77948cffb9e2ba8fe2055f
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149980
Commit-Queue: Martin Kustermann <kustermann@google.com>
Reviewed-by: Daco Harkes <dacoharkes@google.com>
2020-06-04 10:46:11 +00:00
..
aot [vm/aot] Clean static fields handling in precompiler.cc 2020-05-27 10:22:19 +00:00
api [vm/compiler] Split compiler sources out of normal VM sources. 2020-04-16 22:59:03 +00:00
assembler [vm/concurrency] Move locks up from Isolate to IsolateGroup 2020-05-27 17:04:30 +00:00
backend [vm/nnbd] Finish migration of vm/cc tests to NNBD 2020-06-03 18:09:39 +00:00
ffi [vm/ffi] Fix issue due to unspecified argument evaluation order in C++ 2020-06-04 10:46:11 +00:00
frontend [vm/compiler] Optimize lazy field initialization 2020-06-01 21:28:18 +00:00
jit [vm/compiler] Include linear scan tracing code in release builds 2020-05-11 20:24:49 +00:00
asm_intrinsifier.cc [vm/compiler] Add check to prevent inclusion of compiler headers into AOT runtime 2020-04-17 13:11:08 +00:00
asm_intrinsifier.h [vm/compiler] Add check to prevent inclusion of compiler headers into AOT runtime 2020-04-17 13:11:08 +00:00
asm_intrinsifier_arm.cc [vm] Add _allocate and _setAt methods to _TwoByteString. 2020-05-12 17:33:50 +00:00
asm_intrinsifier_arm64.cc [vm] Add _allocate and _setAt methods to _TwoByteString. 2020-05-12 17:33:50 +00:00
asm_intrinsifier_ia32.cc [vm] Add _allocate and _setAt methods to _TwoByteString. 2020-05-12 17:33:50 +00:00
asm_intrinsifier_x64.cc [vm] Add _allocate and _setAt methods to _TwoByteString. 2020-05-12 17:33:50 +00:00
call_specializer.cc [vm/compiler] Optimize lazy field initialization 2020-06-01 21:28:18 +00:00
call_specializer.h [vm] Represent tagged pointers as C++ value types instead of C++ pointer types. 2020-04-25 05:21:27 +00:00
cha.cc [vm/compiler] Add check to prevent inclusion of compiler headers into AOT runtime 2020-04-17 13:11:08 +00:00
cha.h [vm/compiler] Add check to prevent inclusion of compiler headers into AOT runtime 2020-04-17 13:11:08 +00:00
cha_test.cc [vm] Add missing safepoint transitions. 2018-08-28 16:40:17 +00:00
compiler_pass.cc [vm/compiler] Add check to prevent inclusion of compiler headers into AOT runtime 2020-04-17 13:11:08 +00:00
compiler_pass.h [vm/compiler] Add check to prevent inclusion of compiler headers into AOT runtime 2020-04-17 13:11:08 +00:00
compiler_sources.gni [vm/compiler] Use PC-relative calls in AssertAssignable when calling TTS 2020-04-18 20:27:38 +00:00
compiler_state.cc [vm/compiler] Fix code determining if object can be a smi in LoadClassId. 2020-05-27 10:06:49 +00:00
compiler_state.h [vm/compiler] Fix code determining if object can be a smi in LoadClassId. 2020-05-27 10:06:49 +00:00
graph_intrinsifier.cc [vm] Cleanup flags which disable argument type checks and strong mode types 2020-05-08 15:53:09 +00:00
graph_intrinsifier.h [vm/compiler] Add check to prevent inclusion of compiler headers into AOT runtime 2020-04-17 13:11:08 +00:00
graph_intrinsifier_arm.cc [vm/compiler] Add check to prevent inclusion of compiler headers into AOT runtime 2020-04-17 13:11:08 +00:00
graph_intrinsifier_arm64.cc [vm/compiler] Add check to prevent inclusion of compiler headers into AOT runtime 2020-04-17 13:11:08 +00:00
graph_intrinsifier_ia32.cc [vm/compiler] Add check to prevent inclusion of compiler headers into AOT runtime 2020-04-17 13:11:08 +00:00
graph_intrinsifier_x64.cc [vm/compiler] Add check to prevent inclusion of compiler headers into AOT runtime 2020-04-17 13:11:08 +00:00
intrinsifier.cc [vm] Add _allocate and _setAt methods to _TwoByteString. 2020-05-12 17:33:50 +00:00
intrinsifier.h [vm/compiler] Add check to prevent inclusion of compiler headers into AOT runtime 2020-04-17 13:11:08 +00:00
method_recognizer.cc [vm/compiler] Recognize List.filled factory 2020-05-29 03:12:48 +00:00
method_recognizer.h [vm] Represent tagged pointers as C++ value types instead of C++ pointer types. 2020-04-25 05:21:27 +00:00
offsets_extractor.cc [vm] Represent tagged pointers as C++ value types instead of C++ pointer types. 2020-04-25 05:21:27 +00:00
README.md
recognized_methods_list.h [vm] Add _allocate and _setAt methods to _TwoByteString. 2020-05-12 17:33:50 +00:00
relocation.cc [vm] Fix crash in disassembler on trampolines 2020-05-26 17:31:58 +00:00
relocation.h [vm] Represent tagged pointers as C++ value types instead of C++ pointer types. 2020-04-25 05:21:27 +00:00
runtime_api.cc [vm/nnbd] NNBD-related fixes for bytecode mode 2020-05-08 22:10:06 +00:00
runtime_api.h [vm/nnbd] NNBD-related fixes for bytecode mode 2020-05-08 22:10:06 +00:00
runtime_offsets_extracted.h Revert "[vm] Check prefix.loadLibrary is called and returns before prefix members are used." 2020-05-29 09:04:02 +00:00
runtime_offsets_list.h [vm, gc] Rename HeapPage to OldPage for symmetry. 2020-05-08 18:28:06 +00:00
stub_code_compiler.cc [vm/compiler] Optimize lazy field initialization 2020-06-01 21:28:18 +00:00
stub_code_compiler.h [vm] Move megamorphic miss handling into the megamorphic call stub. 2020-05-15 20:28:21 +00:00
stub_code_compiler_arm.cc [vm/concurrency] Avoid stopping mutators when updating subtype test cache 2020-05-29 04:47:22 +00:00
stub_code_compiler_arm64.cc [vm/concurrency] Avoid stopping mutators when updating subtype test cache 2020-05-29 04:47:22 +00:00
stub_code_compiler_ia32.cc [vm/concurrency] Avoid stopping mutators when updating subtype test cache 2020-05-29 04:47:22 +00:00
stub_code_compiler_x64.cc [vm/aot] Fix aot cross-compilation scenario when gen_snapshot runs on Windows targets android x64. 2020-06-01 23:21:38 +00:00
type_testing_stubs_arm.cc [vm/compiler] Use PC-relative calls in AssertAssignable when calling TTS 2020-04-18 20:27:38 +00:00
type_testing_stubs_arm64.cc [vm/compiler] Use PC-relative calls in AssertAssignable when calling TTS 2020-04-18 20:27:38 +00:00
type_testing_stubs_x64.cc [vm/compiler] Use PC-relative calls in AssertAssignable when calling TTS 2020-04-18 20:27:38 +00:00
write_barrier_elimination.cc [vm] Represent tagged pointers as C++ value types instead of C++ pointer types. 2020-04-25 05:21:27 +00:00
write_barrier_elimination.h [vm/compiler] Add check to prevent inclusion of compiler headers into AOT runtime 2020-04-17 13:11:08 +00:00
write_barrier_elimination_test.cc [vm/nnbd] Support NNBD weak mode in vm/cc tests 2020-06-02 20:40:03 +00:00

Dart VM Compilation Pipeline

This folder contains Dart VM compilation pipeline.

Compilation pipeline is mainly responsible for converting AST or Kernel AST into IL flow graphs and then generating native code from IL.

It has the following structure:

Directory What goes there
assembler/ Assemblers and disassemblers
backend/ IL based compilation backend: optimization passes and architecture specific code generation rules
frontend/ Frontends responsible for converting AST into IL
jit/ JIT specific passes and compilation pipeline entry points
aot/ AOT specific passes and compilation pipeline entry points
. Shared code or code without clear designation.

Currently there are no layering restrictions and components from different subfolders can reference each other.