Breakage in CVS?

The following function produces a segv when the begin() is taken from
vmap, the ScalarMap...

bool StaticMemAnalysis::isSingleMalloc(DSGraph* theGraph,DSNode* theNode)
{
  int count = 0;
  std::map<Value*, DSNodeHandle>& vmap = theGraph->getScalarMap();
  for (std::map<Value*, DSNodeHandle>::iterator i = vmap.begin(); i
!= vmap.end(); ++i) {
    if(i->second.getNode() == theNode) {
      if(isa<MallocInst>(i->first)) count++;
    }
  }
  if(count == 1) return true;
  return false;
}

This code used to work... Has something changed or is our code wrong? I
rebuilt two days ago...

Dave

The following function produces a segv when the begin() is taken from
vmap, the ScalarMap...
  int count = 0;
  std::map<Value*, DSNodeHandle>& vmap = theGraph->getScalarMap();

Are you sure "theGraph" is not null at this point?

-Chris

  for (std::map<Value*, DSNodeHandle>::iterator i = vmap.begin(); i
!= vmap.end(); ++i) {
    if(i->second.getNode() == theNode) {
      if(isa<MallocInst>(i->first)) count++;
    }
  }
  if(count == 1) return true;
  return false;
}

This code used to work... Has something changed or is our code wrong? I
rebuilt two days ago...

Dave

_______________________________________________
LLVM Developers mailing list
LLVMdev@cs.uiuc.edu http://llvm.cs.uiuc.edu
http://mail.cs.uiuc.edu/mailman/listinfo/llvmdev

-Chris

> The following function produces a segv when the begin() is taken from
> vmap, the ScalarMap...
> int count = 0;
> std::map<Value*, DSNodeHandle>& vmap = theGraph->getScalarMap();

Are you sure "theGraph" is not null at this point?

yes... that call returns sucessfully. the segfault occurs after...

> > The following function produces a segv when the begin() is taken from
> > vmap, the ScalarMap...
> > int count = 0;
> > std::map<Value*, DSNodeHandle>& vmap = theGraph->getScalarMap();
>
> Are you sure "theGraph" is not null at this point?
yes... that call returns sucessfully. the segfault occurs after...

I don't doubt the call successfully returns. The call basically does some
pointer arithmetic, adding a small constant to "theGraph". When you
dereference vmap later, you are loading this. If theGraph is null going
into the call you won't get a segfault there, you will get it later. So
are you _sure_ theGraph is not null?

-Chris

Turns out my CVS build was really old, and just needed to be rebuilt from
scratch... I was pretty sure of the non-nullness, and everything seems to
work now...

Dave