From 044cc54a7d83c90857187c4cd4a0fd33664a7f7f Mon Sep 17 00:00:00 2001 From: John McCall Date: Tue, 6 Jul 2010 04:38:10 +0000 Subject: [PATCH] When creating functions to run global initializers and destructors, mark them as nounwind in -fno-exceptions. Fixes rdar://problem/8090834. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@107639 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CGDeclCXX.cpp | 3 +++ test/CodeGenCXX/global-init.cpp | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/lib/CodeGen/CGDeclCXX.cpp b/lib/CodeGen/CGDeclCXX.cpp index d7d01847ea..ec3f38667b 100644 --- a/lib/CodeGen/CGDeclCXX.cpp +++ b/lib/CodeGen/CGDeclCXX.cpp @@ -152,6 +152,9 @@ CreateGlobalInitOrDestructFunction(CodeGenModule &CGM, CGM.getContext().Target.getStaticInitSectionSpecifier()) Fn->setSection(Section); + if (!CGM.getLangOptions().Exceptions) + Fn->setDoesNotThrow(); + return Fn; } diff --git a/test/CodeGenCXX/global-init.cpp b/test/CodeGenCXX/global-init.cpp index 80a7a7a62a..8ee087e29d 100644 --- a/test/CodeGenCXX/global-init.cpp +++ b/test/CodeGenCXX/global-init.cpp @@ -1,4 +1,5 @@ -// RUN: %clang_cc1 -triple=x86_64-apple-darwin10 -emit-llvm %s -o - |FileCheck %s +// RUN: %clang_cc1 -triple=x86_64-apple-darwin10 -emit-llvm -fexceptions %s -o - |FileCheck %s +// RUN: %clang_cc1 -triple=x86_64-apple-darwin10 -emit-llvm %s -o - |FileCheck -check-prefix NOEXC %s struct A { A(); @@ -30,3 +31,5 @@ D d; // CHECK: define internal void @_GLOBAL__I_a() section "__TEXT,__StaticInit,regular,pure_instructions" { +// rdar://problem/8090834: this should be nounwind +// CHECK-NOEXC: define internal void @_GLOBAL__I_a() nounwind section "__TEXT,__StaticInit,regular,pure_instructions" { -- 2.40.0