https://sourceware.org/bugzilla/show_bug.cgi?id=30860

--- Comment #1 from jacob at jacob dot remcomp.fr ---
FUNCTION: int  relax_segment(struct frag *segment_frag_root,segT segment,int
pass)
FILE: write.c: 2683
   case rs_org:
         {     
           offsetT     target = offset;
           addressT    after;

           if (symbolP) {
           /* Convert from an actual address to an  offset into the section.
Here
            * it is assumed that the section's VMA is zero,and can omit
subtracting 
            * it from the symbol's value to get the address offset. */
                know(S_GET_SEGMENT(symbolP)->vma == 0);
                target += S_GET_VALUE(symbolP) * OCTETS_PER_BYTE;
           }     
           know(fragP->fr_next); // Not active if NDEBUG is defined
           after = fragP->fr_next->fr_address + stretch;
We know that fragP->fr_next CAN BE NULL, since the controlling condition of
this loop (the switch is inside a loop) is:
 for (fragP = segment_frag_root; fragP; fragP = fragP->fr_next) {

So, we RELY on fr_next being NULL to stop the loop. But we do not test for this
condition before using it here. As you know tghe "know" construct is NOT active
if NDEBUG is active.
PRPOSED FIX:
Replace "know" by "gas_assert"

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Reply via email to