diff options
author | Calin Juravle <calin@google.com> | 2015-04-17 19:12:31 +0100 |
---|---|---|
committer | Calin Juravle <calin@google.com> | 2015-04-20 14:02:51 +0100 |
commit | 27df758e2e7baebb6e3f393f9732fd0d064420c8 (patch) | |
tree | 261207281fd574deffb4dc1c1bc6bea8f150993e /compiler/optimizing/code_generator_x86.cc | |
parent | f8bdd9f3a002970e4b8fdcf6fe6730116f1626c3 (diff) | |
download | art-27df758e2e7baebb6e3f393f9732fd0d064420c8.tar.gz art-27df758e2e7baebb6e3f393f9732fd0d064420c8.tar.bz2 art-27df758e2e7baebb6e3f393f9732fd0d064420c8.zip |
[optimizing] Add memory barriers in constructors when needed
If a class has final fields we must add a memory barrier before
returning from constructor. This makes sure the fields are visible to
other threads.
Bug: 19851497
Change-Id: If8c485092fc512efb9636cd568cb0543fb27688e
Diffstat (limited to 'compiler/optimizing/code_generator_x86.cc')
-rw-r--r-- | compiler/optimizing/code_generator_x86.cc | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/compiler/optimizing/code_generator_x86.cc b/compiler/optimizing/code_generator_x86.cc index 879216d59b..6ac4ad798c 100644 --- a/compiler/optimizing/code_generator_x86.cc +++ b/compiler/optimizing/code_generator_x86.cc @@ -1120,6 +1120,14 @@ void InstructionCodeGeneratorX86::VisitDoubleConstant(HDoubleConstant* constant) UNUSED(constant); } +void LocationsBuilderX86::VisitMemoryBarrier(HMemoryBarrier* memory_barrier) { + memory_barrier->SetLocations(nullptr); +} + +void InstructionCodeGeneratorX86::VisitMemoryBarrier(HMemoryBarrier* memory_barrier) { + GenerateMemoryBarrier(memory_barrier->GetBarrierKind()); +} + void LocationsBuilderX86::VisitReturnVoid(HReturnVoid* ret) { ret->SetLocations(nullptr); } |