[LLVMbugs] [Bug 10228] New: Crash on -dealloc in category with ARC enabled
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Thu Jun 30 07:28:39 PDT 2011
http://llvm.org/bugs/show_bug.cgi?id=10228
Summary: Crash on -dealloc in category with ARC enabled
Product: clang
Version: trunk
Platform: PC
OS/Version: All
Status: NEW
Severity: normal
Priority: P
Component: LLVM Codegen
AssignedTo: unassignedclangbugs at nondot.org
ReportedBy: csdavec at swan.ac.uk
CC: llvmbugs at cs.uiuc.edu
Compiling this file crashes clang:
@interface NSObject
{
Class isa;
}
@end
@interface Foo : NSObject @end
@implementation Foo (Private)
- (void) dealloc {}
@end
This works when I target the NeXT runtime, but not when I target the GNU
runtime, but the crash appears to be in runtime-agnostic code, which is
confusing me. This is the back trace:
#0 0x00007ffff45eb415 in raise (sig=<value optimized out>)
at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#1 0x00007ffff45ee690 in abort () at abort.c:92
#2 0x00007ffff45e45c1 in __assert_fail (
assertion=0x177e600 "isa<X>(Val) && \"cast<Ty>() argument of incompatible
type!\"", file=<value optimized out>, line=194,
function=0x177edc0 "typename llvm::cast_retty<To, From>::ret_type
llvm::cast(const Y&) [with X = clang::ObjCImplementationDecl, Y = const
clang::DeclContext*, typename llvm::cast_retty<To, From>::ret_type = const
clang::"...)
at assert.c:81
#3 0x0000000000d8da16 in llvm::cast<clang::ObjCImplementationDecl,
clang::DeclContext const*> (Val=@0x7fffffffb848)
at /build/theraven/llvm/include/llvm/Support/Casting.h:194
#4 0x0000000000d807fd in (anonymous namespace)::FinishARCDealloc::Emit (
this=0x7fffffffb970, CGF=..., isForEH=false) at CGObjC.cpp:224
#5 0x0000000000d092d4 in EmitCleanup (CGF=..., Fn=0x7fffffffb970,
ForEH=false, ActiveFlag=0x0) at CGCleanup.cpp:459
#6 0x0000000000d09e92 in clang::CodeGen::CodeGenFunction::PopCleanupBlock (
this=0x7fffffffbd60, FallthroughIsBranchThrough=false) at CGCleanup.cpp:665
#7 0x0000000000d08e70 in clang::CodeGen::CodeGenFunction::PopCleanupBlocks (
this=0x7fffffffbd60, Old=...) at CGCleanup.cpp:374
#8 0x0000000000e001e1 in clang::CodeGen::CodeGenFunction::FinishFunction (
this=0x7fffffffbd60, EndLoc=...) at CodeGenFunction.cpp:150
#9 0x0000000000d812c9 in clang::CodeGen::CodeGenFunction::GenerateObjCMethod (
this=0x7fffffffbd60, OMD=0x1fb48b0) at CGObjC.cpp:324
#10 0x0000000000cbd16c in clang::CodeGen::CodeGenModule::EmitTopLevelDecl (
this=0x1fa60f0, D=0x1fb48b0) at CodeGenModule.cpp:2161
#11 0x0000000000cb1a83 in (anonymous
namespace)::CodeGeneratorImpl::HandleTopLevelDecl (this=0x1f862b0, DG=...) at
ModuleBuilder.cpp:65
#12 0x0000000000cb0eaa in clang::BackendConsumer::HandleTopLevelDecl (
this=0x1f86120, D=...) at CodeGenAction.cpp:86
#13 0x0000000000e20b0f in clang::ParseAST (S=..., PrintStats=false)
at ParseAST.cpp:85
#14 0x0000000000b7330d in clang::ASTFrontendAction::ExecuteAction (
this=0x1f730d0) at FrontendAction.cpp:379
#15 0x0000000000cb051c in clang::CodeGenAction::ExecuteAction (this=0x1f730d0)
at CodeGenAction.cpp:341
#16 0x0000000000b72f69 in clang::FrontendAction::Execute (this=0x1f730d0)
at FrontendAction.cpp:299
#17 0x0000000000b58cd9 in clang::CompilerInstance::ExecuteAction (
this=0x1f713a0, Act=...) at CompilerInstance.cpp:601
#18 0x0000000000aff3f3 in clang::ExecuteCompilerInvocation (Clang=0x1f713a0)
at ExecuteCompilerInvocation.cpp:166
#19 0x0000000000af07d6 in cc1_main (ArgBegin=0x7fffffffce30,
ArgEnd=0x7fffffffcf68,
Argv0=0x1f65338 "/build/theraven/llvm/Debug+Asserts/bin/clang",
The problem is in frame #3 - it is trying to cast the -dealloc method's context
to a class implementation context, when it is actually a category
implementation context. I'm not sure why this would work with the Mac
runtime...
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
More information about the llvm-bugs
mailing list