[Bug c++/70403] New: A null pointer check removed with -O2 even with -fno-delete-null-pointers-checks

thadula at ciena dot com gcc-bugzilla@gcc.gnu.org
Thu Mar 24 17:21:00 GMT 2016


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70403

            Bug ID: 70403
           Summary: A null pointer check removed with -O2 even with
                    -fno-delete-null-pointers-checks
           Product: gcc
           Version: 4.9.2
            Status: UNCONFIRMED
          Severity: major
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: thadula at ciena dot com
  Target Milestone: ---

g++, powerpc-e500-linux-gnuspe-g++, version 4.9.2
compiled with -O2 and -fno-delete-null-pointers-checks

Code (look for ==> to mark the point in the code):


    static const char* fnName = "NewLs::CpSelect - ";
    tbr_t  tbrStart, tbrEnd, timediff;

    tbrStart = tbrGet();

    McId         newCpId((McIdHandle)cpId);
    McId         newSelId((McIdHandle)selId);
    McCpId*      pCpId        = static_cast<McCpId*>(&newCpId);
    ComplexXCon* pXCon        = NULL;
    CtpCpBase*   pNewSel      = NULL;
    ComplexXCon* pNewXCon     = NULL;
    UniCp*       pCp          = NULL;

    rFailureReason = LS_SUCCESS;

    if (!pCpId)
    {
        MEMORY_LOG_MCHECK (getSwitchCoreMemoryLog(), pCpId, NULL,
               "!!!ERROR!!!: " << fnName << "null CP id");
        return false;
    }

    // Find the CP object
    pCp = FindCpFromHashList(*pCpId);
    if (!pCp)
    {
        LOGIC_SWITCH_ERRLOG_PRINTF (getSwitchCoreMemoryLog(),
                "%sCannot find CP 0x%llX", fnName, cpId);
        rFailureReason = END_POINT_NOT_FOUND;
        return false;
    }

    McCpProtectionApp protApp = pCp->GetProtApp();

    if (rxProtApp != protApp)
    {
        .
        .
        .
        return false;
    }

    pXCon = pCp->GetXCon();
    if (!pXCon)
    {
        char mcBuf[ 64 ];

        pCpId->toString (mcBuf, sizeof (mcBuf));
        LOGIC_SWITCH_ERRLOG_PRINTF (getSwitchCoreMemoryLog(),
                "%sCannot find XCon for CP: %s", fnName, mcBuf);
        rFailureReason = CROSS_CONNECT_NOT_FOUND;
        return false;
    }

    if (!squelch)
    {
        if (newSelId == McId::InvalidId)
        {
            rFailureReason = BAD_END_POINT_ID;
            return false;
        }

        //
        // Find the CTP or CP (if it exists) and verify that it belongs to
pXCon
        //
        if (newSelId.IsCtpId())
        {
            McCtpId ctpId(newSelId);
            pNewSel = FindCtpFromHashList(ctpId);
        }
        else if (newSelId.IsCpId())
        {
            McCpId newCpId((McCpIdHandle) newSelId.GetId());
            pNewSel = FindCpFromHashList(newCpId);
        }
==>     if (pNewSel)
            pNewXCon = pNewSel->GetXCon();
    }
    else
    {
        char mcBuf[ 64 ];

        pCpId->toString (mcBuf, sizeof (mcBuf));
        getSwitchCoreMemoryLog()->PrintRamLog ("%sSetting %s to be squelched.",
                fnName, mcBuf);
    }

    if (squelch || (pNewSel && pNewXCon == pXCon))
    {
        if (pCp->GetSelectedCtpCp() == pNewSel
                || (isDefaultFromCac && pCp->GetDefaultSelector() == pNewSel))
        {
            .
            .
            .
            return false;   // already selected
        }

        // Update current selector on CP.
        pCp->SetSelectedCtpCp(pNewSel);
        .
        .
        .
    }


Segmentation fault:

Program terminated with signal 11, Segmentation fault.
#0  CtpCpBase::GetXCon (this=this@entry=0x0) at
src/software/centaur/apps/core/txn/Switching/NewLS/CtpCpBase.cpp:79
79          if( mpXCon && mpXCon->IsRemoteTAP() && !mpXCon->IsRemoteTAPParent()
)
(gdb) bt
#0  CtpCpBase::GetXCon (this=this@entry=0x0) at
src/software/centaur/apps/core/txn/Switching/NewLS/CtpCpBase.cpp:79
#1  0x1149b610 in NewLogicalSwitch::CpSelect (this=0x671d0038, cpId=<optimized
out>, selId=<optimized out>, 
    rFailureReason=@0x7019e6f0: LS_SUCCESS,
rxProtApp=rxProtApp@entry=MC_CP_PROTECTION_APP_UPSR_SNCP, squelch=true, 
    isDefaultFromCac=isDefaultFromCac@entry=false) at
src/software/centaur/apps/core/txn/Switching/NewLS/NewLogicalSwitch.cpp:8221
#2  0x1149bfb4 in NewLogicalSwitch::CpSelectTest (this=<optimized out>,
cpId=cpId@entry=2, newSelId=<optimized out>)
    at
src/software/centaur/apps/core/txn/Switching/NewLS/NewLogicalSwitch.cpp:5869
#3  0x114c704c in NewLsDcraft::ImplementMsg (this=0x6df9b338, pObj=0x836ea7e8)
    at src/software/centaur/apps/core/txn/Switching/NewLS/NewLsDcraft.cpp:711
#4  0x11cafe6c in Actor::Run (this=0x6df9b338) at
src/generic/component/Actor/Actor.cpp:929
#5  0x11bdff9c in RunnableTask::TaskFunction (this=0x6df9c970) at
src/generic/component/UtilProg/RunnableTask.cpp:35
#6  0x11593080 in LnTask::TaskEntry (pThis=0x6df9c970) at
src/generic/component/Osencap/linux/LnTask.cpp:627
#7  0x0f1ecc04 in ?? ()
#8  0x09e4a5b4 in ?? ()
(gdb) up
#1  0x1149b610 in NewLogicalSwitch::CpSelect (this=0x671d0038, cpId=<optimized
out>, selId=<optimized out>, 
    rFailureReason=@0x7019e6f0: LS_SUCCESS,
rxProtApp=rxProtApp@entry=MC_CP_PROTECTION_APP_UPSR_SNCP, squelch=true, 
    isDefaultFromCac=isDefaultFromCac@entry=false) at
src/software/centaur/apps/core/txn/Switching/NewLS/NewLogicalSwitch.cpp:8221
8221                pNewXCon = pNewSel->GetXCon();

(gdb) p pNewXcon
No symbol "pNewXcon" in current context.
(gdb) p pNewXCon
$1 = (ComplexXCon *) 0x0
(gdb) p pNewSel
$2 = (CtpCpBase *) 0x0

(gdb) disassemble
Dump of assembler code for function NewLogicalSwitch::CpSelect(unsigned long
long, unsigned long long, RStatus&, McCpProtectionApp, bool, bool):
   0x1149b494 <+0>:     stwu    r1,-448(r1)
   0x1149b498 <+4>:     mflr    r0
   0x1149b49c <+8>:     bcl-    20,4*cr7+so,0x1149b4a0
<NewLogicalSwitch::CpSelect(unsigned long long, unsigned long long, RStatus&,
McCpProtectionApp, bool, bool)+12>
   0x1149b4a0 <+12>:    li      r11,0
   0x1149b4a4 <+16>:    stw     r30,440(r1)
   0x1149b4a8 <+20>:    mflr    r30
   0x1149b4ac <+24>:    stw     r0,452(r1)
   0x1149b4b0 <+28>:    lwz     r0,-16(r30)
   0x1149b4b4 <+32>:    stw     r21,404(r1)
   0x1149b4b8 <+36>:    stw     r18,392(r1)
   0x1149b4bc <+40>:    add     r30,r0,r30
   0x1149b4c0 <+44>:    stw     r19,396(r1)
   0x1149b4c4 <+48>:    lwz     r21,-32608(r30)
   0x1149b4c8 <+52>:    mr      r19,r3
   0x1149b4cc <+56>:    stw     r20,400(r1)
   0x1149b4d0 <+60>:    mr      r20,r9
   0x1149b4d4 <+64>:    stw     r24,416(r1)
   0x1149b4d8 <+68>:    mr      r24,r7
   0x1149b4dc <+72>:    lbz     r10,0(r21)
   0x1149b4e0 <+76>:    stw     r25,420(r1)
   0x1149b4e4 <+80>:    mr      r25,r8
   0x1149b4e8 <+84>:    stw     r26,424(r1)
   0x1149b4ec <+88>:    mr      r26,r5
   0x1149b4f0 <+92>:    cmpwi   cr7,r10,0
   0x1149b4f4 <+96>:    stw     r27,428(r1)
   0x1149b4f8 <+100>:   stw     r22,408(r1)
   0x1149b4fc <+104>:   mr      r27,r6
   0x1149b500 <+108>:   stw     r23,412(r1)
   0x1149b504 <+112>:   stw     r28,432(r1)
   0x1149b508 <+116>:   stw     r29,436(r1)
   0x1149b50c <+120>:   stw     r31,444(r1)
   0x1149b510 <+124>:   lbz     r18,463(r1)
   0x1149b514 <+128>:   stw     r11,376(r1)
   0x1149b518 <+132>:   stw     r11,380(r1)
   0x1149b51c <+136>:   bne-    cr7,0x1149b698
<NewLogicalSwitch::CpSelect(unsigned long long, unsigned long long, RStatus&,
McCpProtectionApp, bool, bool)+516>
   0x1149b520 <+140>:   bl      0x1159415c <tbrGet()>
   0x1149b524 <+144>:   lwz     r29,-32576(r30)
   0x1149b528 <+148>:   li      r9,0
   0x1149b52c <+152>:   addi    r28,r1,264
   0x1149b530 <+156>:   stw     r9,0(r20)
   0x1149b534 <+160>:   mr      r23,r4
---Type <return> to continue, or q <return> to quit---
   0x1149b538 <+164>:   mr      r22,r3
   0x1149b53c <+168>:   mr      r4,r28
   0x1149b540 <+172>:   addi    r3,r1,360
   0x1149b544 <+176>:   stw     r29,360(r1)
   0x1149b548 <+180>:   li      r5,64
   0x1149b54c <+184>:   stw     r26,368(r1)
   0x1149b550 <+188>:   stw     r27,372(r1)
   0x1149b554 <+192>:   stw     r29,344(r1)
   0x1149b558 <+196>:   stw     r24,352(r1)
   0x1149b55c <+200>:   stw     r25,356(r1)
   0x1149b560 <+204>:   bl      0x11389960 <McId::toString(char*, unsigned int)
const>
   0x1149b564 <+208>:   addi    r24,r1,344
   0x1149b568 <+212>:   addi    r31,r1,200
   0x1149b56c <+216>:   mr      r3,r24
   0x1149b570 <+220>:   mr      r4,r31
   0x1149b574 <+224>:   li      r5,64
   0x1149b578 <+228>:   bl      0x11389960 <McId::toString(char*, unsigned int)
const>
   0x1149b57c <+232>:   bl      0x117fad3c <getSwitchCoreMemoryLog()>
   0x1149b580 <+236>:   lwz     r4,-31828(r30)
   0x1149b584 <+240>:   mr      r5,r28
   0x1149b588 <+244>:   mr      r6,r31
   0x1149b58c <+248>:   crclr   4*cr1+eq
   0x1149b590 <+252>:   bl      0x11273d8c <MemoryLog::PrintRamLog(char const*,
...)>
   0x1149b594 <+256>:   lwz     r25,-32164(r30)
   0x1149b598 <+260>:   mr      r31,r1
   0x1149b59c <+264>:   lwz     r10,368(r1)
   0x1149b5a0 <+268>:   mr      r3,r19
   0x1149b5a4 <+272>:   lwz     r11,372(r1)
   0x1149b5a8 <+276>:   stw     r10,16(r1)
   0x1149b5ac <+280>:   stw     r11,20(r1)
   0x1149b5b0 <+284>:   stwu    r25,8(r31)
   0x1149b5b4 <+288>:   mr      r4,r31
   0x1149b5b8 <+292>:   bl      0x11495e2c
<NewLogicalSwitch::FindCpFromHashList(McCpId)>
   0x1149b5bc <+296>:   mr.     r28,r3
   0x1149b5c0 <+300>:   beq-    0x1149b6b0 <NewLogicalSwitch::CpSelect(unsigned
long long, unsigned long long, RStatus&, McCpProtectionApp, bool, bool)+540>
   0x1149b5c4 <+304>:   bl      0x114ce120 <UniCp::GetProtApp() const>
   0x1149b5c8 <+308>:   mr      r27,r3
   0x1149b5cc <+312>:   mr      r3,r28
   0x1149b5d0 <+316>:   bl      0x114e671c <CtpCpBase::GetXCon() const>
   0x1149b5d4 <+320>:   lwz     r10,352(r1)
   0x1149b5d8 <+324>:   mr      r26,r3
   0x1149b5dc <+328>:   lwz     r9,356(r1)
   0x1149b5e0 <+332>:   cmpwi   cr7,r10,0
   0x1149b5e4 <+336>:   beq-    cr7,0x1149b744
<NewLogicalSwitch::CpSelect(unsigned long long, unsigned long long, RStatus&,
McCpProtectionApp,---Type <return> to continue, or q <return> to quit---
 bool, bool)+688>
   0x1149b5e8 <+340>:   andis.  r8,r9,32768
   0x1149b5ec <+344>:   bne-    0x1149bb14 <NewLogicalSwitch::CpSelect(unsigned
long long, unsigned long long, RStatus&, McCpProtectionApp, bool, bool)+1664>
   0x1149b5f0 <+348>:   mr      r3,r19
   0x1149b5f4 <+352>:   stw     r8,16(r1)
   0x1149b5f8 <+356>:   mr      r4,r31
   0x1149b5fc <+360>:   stw     r9,20(r1)
   0x1149b600 <+364>:   stw     r25,8(r1)
   0x1149b604 <+368>:   bl      0x11495e2c
<NewLogicalSwitch::FindCpFromHashList(McCpId)>
   0x1149b608 <+372>:   mr      r29,r3
   0x1149b60c <+376>:   bl      0x114e671c <CtpCpBase::GetXCon() const>
=> 0x1149b610 <+380>:   mr      r3,r28
   0x1149b614 <+384>:   bl      0x114e6748 <CtpCpBase::GetSelectedCtpCp()
const>
   0x1149b618 <+388>:   cmpw    cr7,r29,r3
   0x1149b61c <+392>:   beq-    cr7,0x1149b76c
<NewLogicalSwitch::CpSelect(unsigned long long, unsigned long long, RStatus&,
McCpProtectionApp, bool, bool)+728>
   0x1149b620 <+396>:   cmpwi   cr7,r18,0
   0x1149b624 <+400>:   bne-    cr7,0x1149b75c
<NewLogicalSwitch::CpSelect(unsigned long long, unsigned long long, RStatus&,
McCpProtectionApp, bool, bool)+712>


More information about the Gcc-bugs mailing list