[LLVMdev] EXC_BAD_ACCESS: invalid MemoryBuffer from ContentCache::getBuffer

Wesley Smith wesley.hoke at gmail.com
Wed Oct 13 07:28:04 PDT 2010


I'm using the latest llvm/clang 2.8 releases and am getting
EXC_BAD_ACCESS crashes in ContentCache::getBuffer.  This happens when
I'm printing out errors from a compilation run and iterating over
TextDiagnosticBuffer returned errors.

When checking the errors, I construct a FullSourceLoc and do:

int LineNum = SourceLoc.getInstantiationLineNumber();
int ColNum = SourceLoc.getInstantiationColumnNumber();

which return sane values. Checking SourceLoc.isInvalid() always
returns false, so I'm confident SourceLoc is valid.  However, when I
do:

const char * bufname = SourceLoc.getManager().getBufferName(SourceLoc,
&invalid);

I get crashes.  The different here I noticed is that
SourceLoc.getInstantiationColumnNumber() uses
getDecomposedInstantiationLoc(Loc) to grab the FileID while getBuffer
name uses getFileID(Loc), which in the case of the crash return
different values for FileID.


First, is the way I'm attempting to get the name of the source
location valid?  Or, is there something I should be checking related
to the SourceLoc so that this crash doesn't happen?  I guess I'm
wondering if getBufferName as any assumptions about SourceLoc that I
should know about.

thanks,
wes



More information about the llvm-dev mailing list