mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-08-21 03:29:40 +00:00
Make sure that the exception handling data has the same visibility as the
function it's generated for. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@86779 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
3691393b86
commit
ee161a6824
@ -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
|
||||
|
30
test/CodeGen/X86/hidden-vis-5.ll
Normal file
30
test/CodeGen/X86/hidden-vis-5.ll
Normal file
@ -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
Block a user