Approximately the same as Dan's, F30, gcc 9.2.1-1. My optimize flags are `-Og -mcpu=power9` for a debug build but that shouldn't affect this. I see the startup crash, but it's actually an assertion: `Assertion failure: &toObject() == &obj, at /home/spectre/src/mozilla-central/obj-powerpc64le-unknown-linux-gnu/dist/include/js/Value.h:450`. The backtrace is the same as Dan's, namely, ``` #0 0x00007fffe3e35f0c in JS::Value::setObject(JSObject&) (this=<optimized out>, obj=...) at /home/spectre/src/mozilla-central/obj-powerpc64le-unknown-linux-gnu/dist/include/js/Value.h:450 #1 0x00007fffebfe99a8 in JS::Value::setObjectOrNull(JSObject*) (arg=<optimized out>, this=<optimized out>) at /home/spectre/src/mozilla-central/obj-powerpc64le-unknown-linux-gnu/dist/include/js/Value.h:501 #2 0x00007fffebfe99a8 in JS::ObjectOrNullValue (obj=<optimized out>) at /home/spectre/src/mozilla-central/obj-powerpc64le-unknown-linux-gnu/dist/include/js/Value.h:1045 #3 0x00007fffebfe99a8 in js::EnvironmentObject::initEnclosingEnvironment(JSObject*) (this=0x21e38f52e040, enclosing=<optimized out>) at /home/spectre/src/mozilla-central/js/src/vm/EnvironmentObject.h:277 #4 0x00007fffebfc4e00 in js::LexicalEnvironmentObject::createTemplateObject(JSContext*, JS::Handle<js::Shape*>, JS::Handle<JSObject*>, js::gc::InitialHeap) (cx=<optimized out>, shape=..., shape@entry=..., enclosing=..., heap=heap@entry=js::gc::TenuredHeap) at /home/spectre/src/mozilla-central/js/src/vm/EnvironmentObject.cpp:928 ``` This actually occurs with or without my prior workaround. I threw a couple `trap` instructions in and looked at the code in the debugger. ``` void setObject(JSObject& obj) { MOZ_ASSERT(js::gc::IsCellPointerValid(&obj)); +__asm__("trap\n"); setObjectNoCheck(&obj); +__asm__("trap\n"); MOZ_ASSERT(&toObject() == &obj); } ``` ``` => 0x00007fffe3e35d04 <+228>: trap 0x00007fffe3e35d08 <+232>: li r9,-1 0x00007fffe3e35d0c <+236>: mr r10,r30 0x00007fffe3e35d10 <+240>: rldimi r10,r9,49,0 0x00007fffe3e35d14 <+244>: std r10,0(r3) 0x00007fffe3e35d18 <+248>: trap ``` Again, this generated code is a little odd. We move `r30` to `r10`, but then immediately obliterate `r10` with the following rotate instruction, so the move served no purpose. More importantly, however, `r9` was loaded with a constant and not the provided object, so the assertion is correct, because the resulting `asBits_` as stored in the struct (`r10` to `r3 + 0`) doesn't seem to have anything to do with the object's value (it was never in the computation). Is there a reason that `bitsFromTagAndPayload` must be `constexpr`, other than to initialize `Value()`? It seems like the compiler is assuming that it can just optimize the whole object away.
Bug 1576303 Comment 32 Edit History
Note: The actual edited comment in the bug view page will always show the original commenter’s name and original timestamp.
Approximately the same as Dan's, F30, gcc 9.2.1-1. My optimize flags are `-Og -mcpu=power9` for a debug build but that shouldn't affect this. I see the startup crash, but it's actually an assertion: `Assertion failure: &toObject() == &obj, at /home/spectre/src/mozilla-central/obj-powerpc64le-unknown-linux-gnu/dist/include/js/Value.h:450`. The backtrace is the same as Dan's, namely, ``` #0 0x00007fffe3e35f0c in JS::Value::setObject(JSObject&) (this=<optimized out>, obj=...) at /home/spectre/src/mozilla-central/obj-powerpc64le-unknown-linux-gnu/dist/include/js/Value.h:450 #1 0x00007fffebfe99a8 in JS::Value::setObjectOrNull(JSObject*) (arg=<optimized out>, this=<optimized out>) at /home/spectre/src/mozilla-central/obj-powerpc64le-unknown-linux-gnu/dist/include/js/Value.h:501 #2 0x00007fffebfe99a8 in JS::ObjectOrNullValue (obj=<optimized out>) at /home/spectre/src/mozilla-central/obj-powerpc64le-unknown-linux-gnu/dist/include/js/Value.h:1045 #3 0x00007fffebfe99a8 in js::EnvironmentObject::initEnclosingEnvironment(JSObject*) (this=0x21e38f52e040, enclosing=<optimized out>) at /home/spectre/src/mozilla-central/js/src/vm/EnvironmentObject.h:277 #4 0x00007fffebfc4e00 in js::LexicalEnvironmentObject::createTemplateObject(JSContext*, JS::Handle<js::Shape*>, JS::Handle<JSObject*>, js::gc::InitialHeap) (cx=<optimized out>, shape=..., shape@entry=..., enclosing=..., heap=heap@entry=js::gc::TenuredHeap) at /home/spectre/src/mozilla-central/js/src/vm/EnvironmentObject.cpp:928 ``` This actually occurs with or without my prior workaround.