diff options
author | Igor Murashkin <iam@google.com> | 2017-04-06 14:40:08 -0700 |
---|---|---|
committer | Igor Murashkin <iam@google.com> | 2017-04-10 14:59:19 -0700 |
commit | 032cacdbf32c50d3c43590600ed1e171a35fa93c (patch) | |
tree | c3e3eb480f46de2224fe58e8c30d8d5698238998 /compiler/optimizing/optimizing_unit_test.h | |
parent | 8827cec4193238c2261d83c4d2c0404cc20641f0 (diff) |
optimizing: do not illegally remove constructor barriers after inlining
Remove the illegal optimization that destroyed constructor barriers
after inlining invoke-super constructor calls.
---
According to JLS 7.5.1,
"Note that if one constructor invokes another constructor, and the
invoked constructor sets a final field, the freeze for the final field
takes place at the end of the invoked constructor."
This means if an object is published (stored to a location potentially
visible to another thread) inside of an outer constructor, all final
field stores from any inner constructors must be visible to other
threads.
Test: art/test.py
Bug: 37001605
Change-Id: I3b55f6c628ff1773dab88022a6475d50a1a6f906
Diffstat (limited to 'compiler/optimizing/optimizing_unit_test.h')
-rw-r--r-- | compiler/optimizing/optimizing_unit_test.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/compiler/optimizing/optimizing_unit_test.h b/compiler/optimizing/optimizing_unit_test.h index bf963b8996..1cdcbd2e9b 100644 --- a/compiler/optimizing/optimizing_unit_test.h +++ b/compiler/optimizing/optimizing_unit_test.h @@ -79,7 +79,9 @@ void RemoveSuspendChecks(HGraph* graph) { inline HGraph* CreateGraph(ArenaAllocator* allocator) { return new (allocator) HGraph( - allocator, *reinterpret_cast<DexFile*>(allocator->Alloc(sizeof(DexFile))), -1, false, + allocator, + *reinterpret_cast<DexFile*>(allocator->Alloc(sizeof(DexFile))), + /*method_idx*/-1, kRuntimeISA); } |