File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -1808,20 +1808,27 @@ public:
18081808 }
18091809 // Little sanity check to make sure it's really a Throwable
18101810 ClassReferenceExp boss = oldest.thrown;
1811- assert ((* boss.value.elements)[4 ].type.ty == Tclass); // Throwable.next
1811+ const next = 4 ; // index of Throwable.next
1812+ assert ((* boss.value.elements)[next].type.ty == Tclass); // Throwable.next
18121813 ClassReferenceExp collateral = newest.thrown;
18131814 if (isAnErrorException(collateral.originalClass()) && ! isAnErrorException(boss.originalClass()))
18141815 {
1816+ /* Find the index of the Error.bypassException field
1817+ */
1818+ auto bypass = next + 1 ;
1819+ if ((* collateral.value.elements)[bypass].type.ty == Tuns32)
1820+ bypass += 1 ; // skip over _refcount field
1821+ assert ((* collateral.value.elements)[bypass].type.ty == Tclass);
1822+
18151823 // The new exception bypass the existing chain
1816- assert ((* collateral.value.elements)[5 ].type.ty == Tclass);
1817- (* collateral.value.elements)[5 ] = boss;
1824+ (* collateral.value.elements)[bypass] = boss;
18181825 return newest;
18191826 }
1820- while ((* boss.value.elements)[4 ].op == TOKclassreference)
1827+ while ((* boss.value.elements)[next ].op == TOKclassreference)
18211828 {
1822- boss = cast (ClassReferenceExp)(* boss.value.elements)[4 ];
1829+ boss = cast (ClassReferenceExp)(* boss.value.elements)[next ];
18231830 }
1824- (* boss.value.elements)[4 ] = collateral;
1831+ (* boss.value.elements)[next ] = collateral;
18251832 return oldest;
18261833 }
18271834
You can’t perform that action at this time.
0 commit comments