forked from OSchip/llvm-project
Make sure that the exception handling data has the same visibility as the
function it's generated for. llvm-svn: 86779
This commit is contained in:
parent
e6c8112572
commit
676f44062e
|
@ -232,11 +232,16 @@ void DwarfException::EmitFDE(const FunctionEHFrameInfo &EHFrameInfo) {
|
|||
// corresponding function is static, this should not be externally visible.
|
||||
if (!TheFunc->hasLocalLinkage())
|
||||
if (const char *GlobalEHDirective = MAI->getGlobalEHDirective())
|
||||
O << GlobalEHDirective << EHFrameInfo.FnName << "\n";
|
||||
O << GlobalEHDirective << EHFrameInfo.FnName << '\n';
|
||||
|
||||
// If corresponding function is weak definition, this should be too.
|
||||
if (TheFunc->isWeakForLinker() && MAI->getWeakDefDirective())
|
||||
O << MAI->getWeakDefDirective() << EHFrameInfo.FnName << "\n";
|
||||
O << MAI->getWeakDefDirective() << EHFrameInfo.FnName << '\n';
|
||||
|
||||
// If corresponding function is hidden, this should be too.
|
||||
if (TheFunc->hasHiddenVisibility())
|
||||
if (const char *HiddenDirective = MAI->getHiddenDirective())
|
||||
O << HiddenDirective << EHFrameInfo.FnName << '\n' ;
|
||||
|
||||
// If there are no calls then you can't unwind. This may mean we can omit the
|
||||
// EH Frame, but some environments do not handle weak absolute symbols. If
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
; RUN: llc < %s -march=x86 -relocation-model=pic -disable-fp-elim -unwind-tables | FileCheck %s
|
||||
; <rdar://problem/7383328>
|
||||
|
||||
@.str = private constant [12 x i8] c"hello world\00", align 1 ; <[12 x i8]*> [#uses=1]
|
||||
|
||||
define hidden void @func() nounwind ssp {
|
||||
entry:
|
||||
%0 = call i32 @puts(i8* getelementptr inbounds ([12 x i8]* @.str, i64 0, i64 0)) nounwind ; <i32> [#uses=0]
|
||||
br label %return
|
||||
|
||||
return: ; preds = %entry
|
||||
ret void
|
||||
}
|
||||
|
||||
declare i32 @puts(i8*)
|
||||
|
||||
define hidden i32 @main() nounwind ssp {
|
||||
entry:
|
||||
%retval = alloca i32 ; <i32*> [#uses=1]
|
||||
%"alloca point" = bitcast i32 0 to i32 ; <i32> [#uses=0]
|
||||
call void @func() nounwind
|
||||
br label %return
|
||||
|
||||
return: ; preds = %entry
|
||||
%retval1 = load i32* %retval ; <i32> [#uses=1]
|
||||
ret i32 %retval1
|
||||
}
|
||||
|
||||
; CHECK: .private_extern _func.eh
|
||||
; CHECK: .private_extern _main.eh
|
Loading…
Reference in New Issue