Target Branch
0.88
Link to commit or PR to be picked
Hermes release 260318099.0.4, to be cut from 260318099.0.0-stable and pinned into 0.88-stable.
Description
0.88 pins 260318099.0.3 today. One fix and one re-land have landed on the Hermes stable branch beyond the hermes-v260318099.0.3 tag and neither reaches the release until a new tag is cut and RN is bumped to it.
The fix
892dc627d Avoid reserve() in ConsecutiveStringStorage (D121660203, grafts D121478636)
Lazy compilation appends to the string storage every time a newly compiled function adds strings. ConsecutiveStringStorage::appendStorage called reserve() before copying and on libc++ reserve() sizes to exactly the requested capacity rather than growing geometrically, so repeated appends were quadratic. Adds a lazy-string-growth micro-benchmark.
The re-land, which needs a decision before pinning
ace586d90 Back out "Back out D116775223 (VariableScope rescan pick)" (D120733339)
This is not a fix. It is a back-out of a back-out, so its effect is to put a previously reverted change back into the release. The chain:
- D116775223 landed the original VariableScope rescan pick
- D118959426 backed it out for a SIGSEGV in AR effects on Messenger Android
- D120733339 re-lands it
Its stated justification is that the crash could not be reproduced and that another fix may have already covered it. That other fix could not be located on 260318099.0.0-stable or on static_h, so the claim is unverified from the branches alone.
It is also a byte-exact restoration rather than a reworked version. All five touched files (IR.h, IR.cpp, IRBuilder.cpp, Utils.cpp, VariableTest.cpp) match their content at the original pick and differ from hermes-v260318099.0.3.
This was foreseen. #1413 recorded that static_h still carried the change and that it was the source the next stable sync would pull from, so its return was expected rather than accidental.
Also in the cut, no behaviour change
The version bump is listed because it is load-bearing rather than incidental. RN Build Static Hermes has no version input: getMainVersion() reads npm/hermes-compiler/package.json verbatim, so the file has to name .0.4 before the workflow can cut it. It read 260318099.0.3 until #2197 landed, which meant a dispatch would have re-cut an already-published version. The stable ref is protected and rejects direct pushes, so the bump had to go through a PR.
Steps
- Cut
hermes-v260318099.0.4 with release-type=release and update-latest-v1=true. The latest-v1 tag points at .0.3 today and 26xxxx is the newest line, so it should move.
- Verify the tag actually contains
892dc627d and ace586d90 before pinning. hermes-v260318099.0.2 was tagged eight hours before a crash fix was backed out and shipped the bad version anyway, so tag contents get checked rather than assumed.
- Bump
packages/react-native/sdks/hermes-engine/version.properties and packages/react-native/package.json on 0.88-stable. Both read 260318099.0.3 today. Do not hand-commit packages/rn-tester/Podfile.lock; the publish workflow regenerates it.
Prior record
#1413 covers the .0.3 cut and the JSI implementation batch that went into it.
Target Branch
0.88
Link to commit or PR to be picked
Hermes release
260318099.0.4, to be cut from260318099.0.0-stableand pinned into0.88-stable.Description
0.88 pins
260318099.0.3today. One fix and one re-land have landed on the Hermes stable branch beyond thehermes-v260318099.0.3tag and neither reaches the release until a new tag is cut and RN is bumped to it.The fix
892dc627dAvoidreserve()inConsecutiveStringStorage(D121660203, grafts D121478636)Lazy compilation appends to the string storage every time a newly compiled function adds strings.
ConsecutiveStringStorage::appendStoragecalledreserve()before copying and on libc++reserve()sizes to exactly the requested capacity rather than growing geometrically, so repeated appends were quadratic. Adds alazy-string-growthmicro-benchmark.The re-land, which needs a decision before pinning
ace586d90Back out "Back out D116775223 (VariableScope rescan pick)" (D120733339)This is not a fix. It is a back-out of a back-out, so its effect is to put a previously reverted change back into the release. The chain:
Its stated justification is that the crash could not be reproduced and that another fix may have already covered it. That other fix could not be located on
260318099.0.0-stableor onstatic_h, so the claim is unverified from the branches alone.It is also a byte-exact restoration rather than a reworked version. All five touched files (
IR.h,IR.cpp,IRBuilder.cpp,Utils.cpp,VariableTest.cpp) match their content at the original pick and differ fromhermes-v260318099.0.3.This was foreseen. #1413 recorded that
static_hstill carried the change and that it was the source the nextstablesync would pull from, so its return was expected rather than accidental.Also in the cut, no behaviour change
e3371863eIEventLoopControl::scheduleTaskd412d3bd8JSIDynamicTest.cpp, test only0ad1d016d.0.4(facebook/hermes#2197)The version bump is listed because it is load-bearing rather than incidental.
RN Build Static Hermeshas no version input:getMainVersion()readsnpm/hermes-compiler/package.jsonverbatim, so the file has to name.0.4before the workflow can cut it. It read260318099.0.3until #2197 landed, which meant a dispatch would have re-cut an already-published version. The stable ref is protected and rejects direct pushes, so the bump had to go through a PR.Steps
hermes-v260318099.0.4withrelease-type=releaseandupdate-latest-v1=true. Thelatest-v1tag points at.0.3today and26xxxxis the newest line, so it should move.892dc627dandace586d90before pinning.hermes-v260318099.0.2was tagged eight hours before a crash fix was backed out and shipped the bad version anyway, so tag contents get checked rather than assumed.packages/react-native/sdks/hermes-engine/version.propertiesandpackages/react-native/package.jsonon0.88-stable. Both read260318099.0.3today. Do not hand-commitpackages/rn-tester/Podfile.lock; the publish workflow regenerates it.Prior record
#1413 covers the
.0.3cut and the JSI implementation batch that went into it.