Valgrind Help Needed

Hi all,

This program:

@protocol CPTransferThreadObserving;

@interface CPMode {}
@end

@implementation CPMode
-(void) copyInBackgroundAndNotifyUsingPorts {
  id client;
  [client setProtocolForProxy:
            @protocol(CPTransferThreadObserving)];
}
@end

produces this internal compiler error:

$ llvm-gcc -x objective-c -arch ppc64 -std=c99 -c testcase.mi
testcase.mi:12: internal compiler error: Bus error
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://llvm.org/bugs&gt; for instructions.

If I run this with a debug version of LLVM, it doesn't ICE. I don't
have access to a Linux machine, but if someone does, could they run
valgrind on this to see if anything bad is happening?

Thanks!
-bw

In llvm-backend.cpp :

1086 if (GV->getName() != Name) {
1087 Function *F = TheModule->getFunction(Name);
1088 assert(F && F->isDeclaration() && “A function turned into a global?”);
1089
1090 // Replace any uses of “F” with uses of GV.
1091 Value *FInNewType = ConstantExpr::getBitCast(GV, F->getType());

(gdb) p Name
$3 = 0x41819430 “\001L_OBJC_PROTOCOL_$_CPTransferThreadObserving”

However TheModule->getFunction(Name) returns NULL and you get ICE at F->getType() #1091. I’ll let you investigate this further … :slight_smile:

This should have gotten an assertion failure in a compiler built with assertions, surely…

Adding “–enable-assertions” to the llvm-gcc configure line causes the build to fail. Having just LLVM configured with --enable-assertions doesn’t reproduce the error. An assertion build (the Apple way) doesn’t assert.

-bw

How were you able to get gdb to work with this?!

-bw

Adding “–enable-assertions” to the llvm-gcc configure line causes the build to fail. Having just LLVM configured with --enable-assertions doesn’t reproduce the error.

This is all expected behavior. Right ?

An assertion build (the Apple way) doesn’t assert.

Does it enable assertions in llvm-gcc at configure time ?
Note, this assertion failure is in llvm-gcc and not in llvm.

I built llvm-gcc Apple way after applying following build_gcc hack … :slight_smile: