Fix InitAndRegisterGlobal in new MM (#4673)
This commit is contained in:
committed by
Vasily Levchenko
parent
c01ad100a3
commit
2b69a0d03a
@@ -2865,6 +2865,10 @@ task initializers7(type: KonanLocalTest) {
|
|||||||
source = "runtime/basic/initializers7.kt"
|
source = "runtime/basic/initializers7.kt"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
task initializers8(type: KonanLocalTest) {
|
||||||
|
source = "runtime/basic/initializers8.kt"
|
||||||
|
}
|
||||||
|
|
||||||
task expression_as_statement(type: KonanLocalTest) {
|
task expression_as_statement(type: KonanLocalTest) {
|
||||||
expectedFail = (project.testTarget == 'wasm32') // uses exceptions.
|
expectedFail = (project.testTarget == 'wasm32') // uses exceptions.
|
||||||
goldValue = "Ok\n"
|
goldValue = "Ok\n"
|
||||||
|
|||||||
@@ -0,0 +1,14 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license
|
||||||
|
* that can be found in the LICENSE file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package runtime.basic.initializers8
|
||||||
|
|
||||||
|
import kotlin.test.*
|
||||||
|
|
||||||
|
var globalString = "abc"
|
||||||
|
|
||||||
|
@Test fun runTest() {
|
||||||
|
assertEquals("abc", globalString)
|
||||||
|
}
|
||||||
@@ -144,7 +144,10 @@ extern "C" ALWAYS_INLINE OBJ_GETTER(InitSingleton, ObjHeader** location, const T
|
|||||||
extern "C" RUNTIME_NOTHROW void InitAndRegisterGlobal(ObjHeader** location, const ObjHeader* initialValue) {
|
extern "C" RUNTIME_NOTHROW void InitAndRegisterGlobal(ObjHeader** location, const ObjHeader* initialValue) {
|
||||||
auto* threadData = mm::ThreadRegistry::Instance().CurrentThreadData();
|
auto* threadData = mm::ThreadRegistry::Instance().CurrentThreadData();
|
||||||
mm::GlobalsRegistry::Instance().RegisterStorageForGlobal(threadData, location);
|
mm::GlobalsRegistry::Instance().RegisterStorageForGlobal(threadData, location);
|
||||||
mm::SetHeapRef(location, const_cast<ObjHeader*>(initialValue));
|
// Null `initialValue` means that the appropriate value was already set by static initialization.
|
||||||
|
if (initialValue != nullptr) {
|
||||||
|
mm::SetHeapRef(location, const_cast<ObjHeader*>(initialValue));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
extern "C" const MemoryModel CurrentMemoryModel = MemoryModel::kExperimental;
|
extern "C" const MemoryModel CurrentMemoryModel = MemoryModel::kExperimental;
|
||||||
|
|||||||
Reference in New Issue
Block a user