diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -1642,7 +1642,8 @@ if (!hasUnwindExceptions(LangOpts)) B.addAttribute(llvm::Attribute::NoUnwind); - if (D && D->hasAttr()) + if (LangOpts.getStackProtector() == LangOptions::SSPOff || + (D && D->hasAttr())) B.addAttribute(llvm::Attribute::NoStackProtect); else if (LangOpts.getStackProtector() == LangOptions::SSPOn) B.addAttribute(llvm::Attribute::StackProtect); diff --git a/clang/lib/Driver/ToolChains/Clang.cpp b/clang/lib/Driver/ToolChains/Clang.cpp --- a/clang/lib/Driver/ToolChains/Clang.cpp +++ b/clang/lib/Driver/ToolChains/Clang.cpp @@ -3010,6 +3010,8 @@ StackProtectorLevel = LangOptions::SSPStrong; else if (A->getOption().matches(options::OPT_fstack_protector_all)) StackProtectorLevel = LangOptions::SSPReq; + else if (A->getOption().matches(options::OPT_fno_stack_protector)) + StackProtectorLevel = LangOptions::SSPOff; } else { StackProtectorLevel = DefaultStackProtectorLevel; } @@ -6746,11 +6748,13 @@ // This controls whether or not we emit stack-protector instrumentation. // In MSVC, Buffer Security Check (/GS) is on by default. + LangOptions::StackProtectorMode SPM = LangOptions::SSPOff; if (!isNVPTX && Args.hasFlag(options::OPT__SLASH_GS, options::OPT__SLASH_GS_, /*Default=*/true)) { - CmdArgs.push_back("-stack-protector"); - CmdArgs.push_back(Args.MakeArgString(Twine(LangOptions::SSPStrong))); + SPM = LangOptions::SSPStrong; } + CmdArgs.push_back("-stack-protector"); + CmdArgs.push_back(Args.MakeArgString(Twine(SPM))); // Emit CodeView if -Z7, -Zd, or -gline-tables-only are present. if (Arg *DebugInfoArg = diff --git a/clang/test/CXX/special/class.dtor/p3-0x.cpp b/clang/test/CXX/special/class.dtor/p3-0x.cpp --- a/clang/test/CXX/special/class.dtor/p3-0x.cpp +++ b/clang/test/CXX/special/class.dtor/p3-0x.cpp @@ -176,4 +176,4 @@ template TVC::~TVC() {} -// CHECK: attributes [[ATTRGRP]] = { noinline nounwind{{.*}} } +// CHECK: attributes [[ATTRGRP]] = { noinline nossp nounwind{{.*}} } diff --git a/clang/test/CodeGen/2008-04-08-NoExceptions.c b/clang/test/CodeGen/2008-04-08-NoExceptions.c --- a/clang/test/CodeGen/2008-04-08-NoExceptions.c +++ b/clang/test/CodeGen/2008-04-08-NoExceptions.c @@ -9,4 +9,4 @@ // CHECK-NOT: declare void @f() [[NUW]] -// CHECK: attributes [[NUW]] = { noinline nounwind{{.*}} } +// CHECK: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } diff --git a/clang/test/CodeGen/address-safety-attr-flavors.cpp b/clang/test/CodeGen/address-safety-attr-flavors.cpp --- a/clang/test/CodeGen/address-safety-attr-flavors.cpp +++ b/clang/test/CodeGen/address-safety-attr-flavors.cpp @@ -25,51 +25,51 @@ // RUN: FileCheck -check-prefix=CHECK-KHWASAN %s int HasSanitizeAddress() { return 1; } -// CHECK-NOASAN: {{Function Attrs: noinline nounwind mustprogress$}} -// CHECK-ASAN: Function Attrs: noinline nounwind sanitize_address mustprogress -// CHECK-KASAN: Function Attrs: noinline nounwind sanitize_address mustprogress -// CHECK-HWASAN: Function Attrs: noinline nounwind sanitize_hwaddress mustprogress -// CHECK-KHWASAN: Function Attrs: noinline nounwind sanitize_hwaddress mustprogress +// CHECK-NOASAN: {{Function Attrs: noinline nossp nounwind mustprogress$}} +// CHECK-ASAN: Function Attrs: noinline nossp nounwind sanitize_address mustprogress +// CHECK-KASAN: Function Attrs: noinline nossp nounwind sanitize_address mustprogress +// CHECK-HWASAN: Function Attrs: noinline nossp nounwind sanitize_hwaddress mustprogress +// CHECK-KHWASAN: Function Attrs: noinline nossp nounwind sanitize_hwaddress mustprogress __attribute__((no_sanitize("address"))) int NoSanitizeQuoteAddress() { return 0; } -// CHECK-NOASAN: {{Function Attrs: noinline nounwind mustprogress$}} -// CHECK-ASAN: {{Function Attrs: noinline nounwind mustprogress$}} -// CHECK-KASAN: {{Function Attrs: noinline nounwind mustprogress$}} -// CHECK-HWASAN: {{Function Attrs: noinline nounwind sanitize_hwaddress mustprogress$}} -// CHECK-KHWASAN: {{Function Attrs: noinline nounwind sanitize_hwaddress mustprogress$}} +// CHECK-NOASAN: {{Function Attrs: noinline nossp nounwind mustprogress$}} +// CHECK-ASAN: {{Function Attrs: noinline nossp nounwind mustprogress$}} +// CHECK-KASAN: {{Function Attrs: noinline nossp nounwind mustprogress$}} +// CHECK-HWASAN: {{Function Attrs: noinline nossp nounwind sanitize_hwaddress mustprogress$}} +// CHECK-KHWASAN: {{Function Attrs: noinline nossp nounwind sanitize_hwaddress mustprogress$}} __attribute__((no_sanitize_address)) int NoSanitizeAddress() { return 0; } -// CHECK-NOASAN: {{Function Attrs: noinline nounwind mustprogress$}} -// CHECK-ASAN: {{Function Attrs: noinline nounwind mustprogress$}} -// CHECK-KASAN: {{Function Attrs: noinline nounwind mustprogress$}} -// CHECK-HWASAN: {{Function Attrs: noinline nounwind sanitize_hwaddress mustprogress$}} -// CHECK-KHWASAN: {{Function Attrs: noinline nounwind sanitize_hwaddress mustprogress$}} +// CHECK-NOASAN: {{Function Attrs: noinline nossp nounwind mustprogress$}} +// CHECK-ASAN: {{Function Attrs: noinline nossp nounwind mustprogress$}} +// CHECK-KASAN: {{Function Attrs: noinline nossp nounwind mustprogress$}} +// CHECK-HWASAN: {{Function Attrs: noinline nossp nounwind sanitize_hwaddress mustprogress$}} +// CHECK-KHWASAN: {{Function Attrs: noinline nossp nounwind sanitize_hwaddress mustprogress$}} __attribute__((no_sanitize("kernel-address"))) int NoSanitizeKernelAddress() { return 0; } -// CHECK-NOASAN: {{Function Attrs: noinline nounwind mustprogress$}} -// CHECK-ASAN: {{Function Attrs: noinline nounwind mustprogress$}} -// CHECK-KASAN: {{Function Attrs: noinline nounwind mustprogress$}} -// CHECK-HWASAN: {{Function Attrs: noinline nounwind sanitize_hwaddress mustprogress$}} -// CHECK-KHWASAN: {{Function Attrs: noinline nounwind sanitize_hwaddress mustprogress$}} +// CHECK-NOASAN: {{Function Attrs: noinline nossp nounwind mustprogress$}} +// CHECK-ASAN: {{Function Attrs: noinline nossp nounwind mustprogress$}} +// CHECK-KASAN: {{Function Attrs: noinline nossp nounwind mustprogress$}} +// CHECK-HWASAN: {{Function Attrs: noinline nossp nounwind sanitize_hwaddress mustprogress$}} +// CHECK-KHWASAN: {{Function Attrs: noinline nossp nounwind sanitize_hwaddress mustprogress$}} __attribute__((no_sanitize("hwaddress"))) int NoSanitizeHWAddress() { return 0; } -// CHECK-NOASAN: {{Function Attrs: noinline nounwind mustprogress$}} -// CHECK-ASAN: {{Function Attrs: noinline nounwind sanitize_address mustprogress$}} -// CHECK-KASAN: {{Function Attrs: noinline nounwind sanitize_address mustprogress$}} -// CHECK-HWASAN: {{Function Attrs: noinline nounwind mustprogress$}} -// CHECK-KHWASAN: {{Function Attrs: noinline nounwind mustprogress$}} +// CHECK-NOASAN: {{Function Attrs: noinline nossp nounwind mustprogress$}} +// CHECK-ASAN: {{Function Attrs: noinline nossp nounwind sanitize_address mustprogress$}} +// CHECK-KASAN: {{Function Attrs: noinline nossp nounwind sanitize_address mustprogress$}} +// CHECK-HWASAN: {{Function Attrs: noinline nossp nounwind mustprogress$}} +// CHECK-KHWASAN: {{Function Attrs: noinline nossp nounwind mustprogress$}} __attribute__((no_sanitize("kernel-hwaddress"))) int NoSanitizeKernelHWAddress() { return 0; } -// CHECK-NOASAN: {{Function Attrs: noinline nounwind mustprogress$}} -// CHECK-ASAN: {{Function Attrs: noinline nounwind sanitize_address mustprogress$}} -// CHECK-KASAN: {{Function Attrs: noinline nounwind sanitize_address mustprogress$}} -// CHECK-HWASAN: {{Function Attrs: noinline nounwind mustprogress$}} -// CHECK-KHWASAN: {{Function Attrs: noinline nounwind mustprogress$}} +// CHECK-NOASAN: {{Function Attrs: noinline nossp nounwind mustprogress$}} +// CHECK-ASAN: {{Function Attrs: noinline nossp nounwind sanitize_address mustprogress$}} +// CHECK-KASAN: {{Function Attrs: noinline nossp nounwind sanitize_address mustprogress$}} +// CHECK-HWASAN: {{Function Attrs: noinline nossp nounwind mustprogress$}} +// CHECK-KHWASAN: {{Function Attrs: noinline nossp nounwind mustprogress$}} diff --git a/clang/test/CodeGen/address-safety-attr.cpp b/clang/test/CodeGen/address-safety-attr.cpp --- a/clang/test/CodeGen/address-safety-attr.cpp +++ b/clang/test/CodeGen/address-safety-attr.cpp @@ -142,13 +142,13 @@ // BLFUNC: @__cxx_global_var_init{{.*}}[[WITH:#[0-9]+]] // ASAN: @__cxx_global_var_init{{.*}}[[WITH:#[0-9]+]] -// WITHOUT: attributes [[NOATTR]] = { noinline nounwind{{.*}} } +// WITHOUT: attributes [[NOATTR]] = { noinline nossp nounwind{{.*}} } -// BLFILE: attributes [[WITH]] = { noinline nounwind sanitize_address{{.*}} } -// BLFILE: attributes [[NOATTR]] = { noinline nounwind{{.*}} } +// BLFILE: attributes [[WITH]] = { noinline nossp nounwind sanitize_address{{.*}} } +// BLFILE: attributes [[NOATTR]] = { noinline nossp nounwind{{.*}} } -// BLFUNC: attributes [[WITH]] = { noinline nounwind sanitize_address{{.*}} } -// BLFUNC: attributes [[NOATTR]] = { noinline nounwind{{.*}} } +// BLFUNC: attributes [[WITH]] = { noinline nossp nounwind sanitize_address{{.*}} } +// BLFUNC: attributes [[NOATTR]] = { noinline nossp nounwind{{.*}} } -// ASAN: attributes [[WITH]] = { noinline nounwind sanitize_address{{.*}} } -// ASAN: attributes [[NOATTR]] = { noinline nounwind{{.*}} } +// ASAN: attributes [[WITH]] = { noinline nossp nounwind sanitize_address{{.*}} } +// ASAN: attributes [[NOATTR]] = { noinline nossp nounwind{{.*}} } diff --git a/clang/test/CodeGen/address-space-field1.c b/clang/test/CodeGen/address-space-field1.c --- a/clang/test/CodeGen/address-space-field1.c +++ b/clang/test/CodeGen/address-space-field1.c @@ -37,4 +37,4 @@ p1->b = p2->a; } -// CHECK: attributes [[NUW]] = { noinline nounwind{{.*}} } +// CHECK: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } diff --git a/clang/test/CodeGen/alias.c b/clang/test/CodeGen/alias.c --- a/clang/test/CodeGen/alias.c +++ b/clang/test/CodeGen/alias.c @@ -83,9 +83,9 @@ // CHECKCC: call arm_aapcs_vfpcc i32 @inner_weak(i32 %{{.*}}) // CHECKCC: define internal arm_aapcs_vfpcc i32 @inner_weak(i32 %a) [[NUW]] { -// CHECKBASIC: attributes [[NUW]] = { noinline nounwind{{.*}} } +// CHECKBASIC: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } -// CHECKCC: attributes [[NUW]] = { noinline nounwind{{.*}} } +// CHECKCC: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } void test8_bar() {} void test8_foo() __attribute__((weak, alias("test8_bar"))); diff --git a/clang/test/CodeGen/arm-cmse-attr.c b/clang/test/CodeGen/arm-cmse-attr.c --- a/clang/test/CodeGen/arm-cmse-attr.c +++ b/clang/test/CodeGen/arm-cmse-attr.c @@ -38,6 +38,6 @@ // CHECK-NOSE-NOT: cmse_nonsecure_entry // CHECK-NOSE-NOT: cmse_nonsecure_call -// CHECK-SE: attributes #0 = { nounwind +// CHECK-SE: attributes #0 = { nossp nounwind // CHECK-SE: attributes #1 = { {{.*}} "cmse_nonsecure_entry" // CHECK-SE: attributes #2 = { {{.*}} "cmse_nonsecure_call" diff --git a/clang/test/CodeGen/attr-mustprogress-0.c b/clang/test/CodeGen/attr-mustprogress-0.c --- a/clang/test/CodeGen/attr-mustprogress-0.c +++ b/clang/test/CodeGen/attr-mustprogress-0.c @@ -5,7 +5,7 @@ int a = 0; int b = 0; -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @f1( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[FOR_COND:%.*]] @@ -21,7 +21,7 @@ } } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @f2( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[FOR_COND:%.*]] @@ -40,7 +40,7 @@ } } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @F( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[FOR_COND:%.*]] @@ -67,7 +67,7 @@ } } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @w1( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[WHILE_BODY:%.*]] @@ -79,7 +79,7 @@ } } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @w2( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[WHILE_COND:%.*]] @@ -98,7 +98,7 @@ } } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @W( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[WHILE_COND:%.*]] @@ -121,7 +121,7 @@ } } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @d1( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[DO_BODY:%.*]] @@ -137,7 +137,7 @@ } while (1); } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @d2( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[DO_BODY:%.*]] @@ -156,7 +156,7 @@ } while (a == b); } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @D( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[DO_BODY:%.*]] diff --git a/clang/test/CodeGen/attr-mustprogress-0.cpp b/clang/test/CodeGen/attr-mustprogress-0.cpp --- a/clang/test/CodeGen/attr-mustprogress-0.cpp +++ b/clang/test/CodeGen/attr-mustprogress-0.cpp @@ -4,7 +4,7 @@ int a = 0; int b = 0; -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @_Z2f1v( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[FOR_COND:%.*]] @@ -20,7 +20,7 @@ } } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @_Z2f2v( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[FOR_COND:%.*]] @@ -39,7 +39,7 @@ } } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @_Z1Fv( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[FOR_COND:%.*]] @@ -66,7 +66,7 @@ } } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @_Z2w1v( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[WHILE_BODY:%.*]] @@ -78,7 +78,7 @@ } } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @_Z2w2v( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[WHILE_COND:%.*]] @@ -97,7 +97,7 @@ } } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @_Z1Wv( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[WHILE_COND:%.*]] @@ -120,7 +120,7 @@ } } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @_Z2d1v( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[DO_BODY:%.*]] @@ -136,7 +136,7 @@ } while (1); } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @_Z2d2v( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[DO_BODY:%.*]] @@ -155,7 +155,7 @@ } while (a == b); } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @_Z1Dv( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[DO_BODY:%.*]] diff --git a/clang/test/CodeGen/attr-mustprogress-1.c b/clang/test/CodeGen/attr-mustprogress-1.c --- a/clang/test/CodeGen/attr-mustprogress-1.c +++ b/clang/test/CodeGen/attr-mustprogress-1.c @@ -7,7 +7,7 @@ int a = 0; int b = 0; -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @f1( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[FOR_COND:%.*]] @@ -23,7 +23,7 @@ } } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @f2( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[FOR_COND:%.*]] @@ -42,7 +42,7 @@ } } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @F( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[FOR_COND:%.*]] @@ -69,7 +69,7 @@ } } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @w1( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[WHILE_BODY:%.*]] @@ -81,7 +81,7 @@ } } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @w2( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[WHILE_COND:%.*]] @@ -100,7 +100,7 @@ } } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @W( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[WHILE_COND:%.*]] @@ -123,7 +123,7 @@ } } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @d1( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[DO_BODY:%.*]] @@ -139,7 +139,7 @@ } while (1); } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @d2( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[DO_BODY:%.*]] @@ -158,7 +158,7 @@ } while (a == b); } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @D( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[DO_BODY:%.*]] diff --git a/clang/test/CodeGen/attr-mustprogress-1.cpp b/clang/test/CodeGen/attr-mustprogress-1.cpp --- a/clang/test/CodeGen/attr-mustprogress-1.cpp +++ b/clang/test/CodeGen/attr-mustprogress-1.cpp @@ -7,7 +7,7 @@ int a = 0; int b = 0; -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @_Z2f1v( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[FOR_COND:%.*]] @@ -23,7 +23,7 @@ ; } -// CHECK: Function Attrs: noinline nounwind optnone mustprogress +// CHECK: Function Attrs: noinline nossp nounwind optnone mustprogress // CHECK-LABEL: @_Z2f2v( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[FOR_COND:%.*]] @@ -42,7 +42,7 @@ ; } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @_Z1Fv( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[FOR_COND:%.*]] @@ -69,7 +69,7 @@ ; } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @_Z2F2v( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[FOR_COND:%.*]] @@ -96,7 +96,7 @@ ; } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @_Z2w1v( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[WHILE_BODY:%.*]] @@ -108,7 +108,7 @@ ; } -// CHECK: Function Attrs: noinline nounwind optnone mustprogress +// CHECK: Function Attrs: noinline nossp nounwind optnone mustprogress // CHECK-LABEL: @_Z2w2v( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[WHILE_COND:%.*]] @@ -127,7 +127,7 @@ ; } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @_Z1Wv( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[WHILE_COND:%.*]] @@ -150,7 +150,7 @@ ; } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @_Z2W2v( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[WHILE_BODY:%.*]] @@ -164,7 +164,7 @@ ; } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @_Z2d1v( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[DO_BODY:%.*]] @@ -181,7 +181,7 @@ while (1); } -// CHECK: Function Attrs: noinline nounwind optnone mustprogress +// CHECK: Function Attrs: noinline nossp nounwind optnone mustprogress // CHECK-LABEL: @_Z2d2v( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[DO_BODY:%.*]] @@ -201,7 +201,7 @@ while (a == b); } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @_Z1Dv( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[DO_BODY:%.*]] @@ -230,7 +230,7 @@ while (a == b); } -// CHECK: Function Attrs: noinline nounwind optnone +// CHECK: Function Attrs: noinline nossp nounwind optnone // CHECK-LABEL: @_Z2D2v( // CHECK-NEXT: entry: // CHECK-NEXT: br label [[DO_BODY:%.*]] diff --git a/clang/test/CodeGen/attr-naked.c b/clang/test/CodeGen/attr-naked.c --- a/clang/test/CodeGen/attr-naked.c +++ b/clang/test/CodeGen/attr-naked.c @@ -23,5 +23,5 @@ // CHECK: unreachable } -// CHECK: attributes [[NAKED_OPTNONE]] = { naked noinline nounwind optnone{{.*}} } -// CHECK: attributes [[NAKED]] = { naked noinline nounwind{{.*}} } +// CHECK: attributes [[NAKED_OPTNONE]] = { naked noinline nossp nounwind optnone{{.*}} } +// CHECK: attributes [[NAKED]] = { naked noinline nossp nounwind{{.*}} } diff --git a/clang/test/CodeGen/attributes.c b/clang/test/CodeGen/attributes.c --- a/clang/test/CodeGen/attributes.c +++ b/clang/test/CodeGen/attributes.c @@ -107,8 +107,8 @@ (*p)(); } -// CHECK: attributes [[NUW]] = { noinline nounwind{{.*}} } -// CHECK: attributes [[NR]] = { noinline noreturn nounwind{{.*}} } +// CHECK: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } +// CHECK: attributes [[NR]] = { noinline noreturn nossp nounwind{{.*}} } // CHECK: attributes [[COLDDEF]] = { cold {{.*}}} // CHECK: attributes [[COLDDECL]] = { cold {{.*}}} // CHECK: attributes [[NOCF_CHECK_FUNC]] = { nocf_check {{.*}}} diff --git a/clang/test/CodeGen/exceptions-seh-finally.c b/clang/test/CodeGen/exceptions-seh-finally.c --- a/clang/test/CodeGen/exceptions-seh-finally.c +++ b/clang/test/CodeGen/exceptions-seh-finally.c @@ -284,4 +284,4 @@ // Look for the absence of noinline. nounwind is expected; any further // attributes should be string attributes. -// CHECK: attributes [[finally_attrs]] = { nounwind "{{.*}}" } +// CHECK: attributes [[finally_attrs]] = { nossp nounwind "{{.*}}" } diff --git a/clang/test/CodeGen/function-attributes.c b/clang/test/CodeGen/function-attributes.c --- a/clang/test/CodeGen/function-attributes.c +++ b/clang/test/CodeGen/function-attributes.c @@ -109,11 +109,11 @@ _setjmp(0); } -// CHECK: attributes [[NUW]] = { nounwind optsize{{.*}} } -// CHECK: attributes [[AI]] = { alwaysinline nounwind optsize{{.*}} } -// CHECK: attributes [[NUW_OS_RN]] = { nounwind optsize readnone{{.*}} } -// CHECK: attributes [[SR]] = { nounwind optsize{{.*}} "stackrealign"{{.*}} } -// CHECK: attributes [[RT]] = { nounwind optsize returns_twice{{.*}} } +// CHECK: attributes [[NUW]] = { nossp nounwind optsize{{.*}} } +// CHECK: attributes [[AI]] = { alwaysinline nossp nounwind optsize{{.*}} } +// CHECK: attributes [[NUW_OS_RN]] = { nossp nounwind optsize readnone{{.*}} } +// CHECK: attributes [[SR]] = { nossp nounwind optsize{{.*}} "stackrealign"{{.*}} } +// CHECK: attributes [[RT]] = { nossp nounwind optsize returns_twice{{.*}} } // CHECK: attributes [[NR]] = { noreturn optsize } // CHECK: attributes [[NUW_RN]] = { nounwind optsize readnone } // CHECK: attributes [[RT_CALL]] = { optsize returns_twice } diff --git a/clang/test/CodeGen/incomplete-function-type-2.c b/clang/test/CodeGen/incomplete-function-type-2.c --- a/clang/test/CodeGen/incomplete-function-type-2.c +++ b/clang/test/CodeGen/incomplete-function-type-2.c @@ -16,4 +16,4 @@ p1(0.0); } -// CHECK: attributes [[NUW]] = { noinline nounwind{{.*}} } +// CHECK: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } diff --git a/clang/test/CodeGen/memtag-attr.cpp b/clang/test/CodeGen/memtag-attr.cpp --- a/clang/test/CodeGen/memtag-attr.cpp +++ b/clang/test/CodeGen/memtag-attr.cpp @@ -9,11 +9,11 @@ // RUN: FileCheck -check-prefix=CHECK-MEMTAG %s int HasSanitizeMemTag() { return 1; } -// CHECK-NO: {{Function Attrs: noinline nounwind mustprogress$}} -// CHECK-MEMTAG: Function Attrs: noinline nounwind sanitize_memtag +// CHECK-NO: {{Function Attrs: noinline nossp nounwind mustprogress$}} +// CHECK-MEMTAG: Function Attrs: noinline nossp nounwind sanitize_memtag __attribute__((no_sanitize("memtag"))) int NoSanitizeQuoteAddress() { return 0; } -// CHECK-NO: {{Function Attrs: noinline nounwind mustprogress$}} -// CHECK-MEMTAG: {{Function Attrs: noinline nounwind mustprogress$}} +// CHECK-NO: {{Function Attrs: noinline nossp nounwind mustprogress$}} +// CHECK-MEMTAG: {{Function Attrs: noinline nossp nounwind mustprogress$}} diff --git a/clang/test/CodeGen/micromips-attr.c b/clang/test/CodeGen/micromips-attr.c --- a/clang/test/CodeGen/micromips-attr.c +++ b/clang/test/CodeGen/micromips-attr.c @@ -8,5 +8,5 @@ // CHECK: define void @nofoo() [[NOMICROMIPS:#[0-9]+]] -// CHECK: attributes [[MICROMIPS]] = { noinline nounwind {{.*}} "micromips" {{.*}} } -// CHECK: attributes [[NOMICROMIPS]] = { noinline nounwind {{.*}} "nomicromips" {{.*}} } +// CHECK: attributes [[MICROMIPS]] = { noinline nossp nounwind {{.*}} "micromips" {{.*}} } +// CHECK: attributes [[NOMICROMIPS]] = { noinline nossp nounwind {{.*}} "nomicromips" {{.*}} } diff --git a/clang/test/CodeGen/mips-vector-arg.c b/clang/test/CodeGen/mips-vector-arg.c --- a/clang/test/CodeGen/mips-vector-arg.c +++ b/clang/test/CodeGen/mips-vector-arg.c @@ -26,6 +26,6 @@ test_v4i32_2(a3, a2, a1); } -// O32: attributes [[NUW]] = { nounwind{{.*}} } +// O32: attributes [[NUW]] = { nossp nounwind{{.*}} } -// N64: attributes [[NUW]] = { nounwind{{.*}} } +// N64: attributes [[NUW]] = { nossp nounwind{{.*}} } diff --git a/clang/test/CodeGen/mips16-attr.c b/clang/test/CodeGen/mips16-attr.c --- a/clang/test/CodeGen/mips16-attr.c +++ b/clang/test/CodeGen/mips16-attr.c @@ -11,7 +11,7 @@ // CHECK: define void @nofoo() [[NOMIPS16:#[0-9]+]] -// CHECK: attributes [[MIPS16]] = { noinline nounwind {{.*}} "mips16" {{.*}} } +// CHECK: attributes [[MIPS16]] = { noinline nossp nounwind {{.*}} "mips16" {{.*}} } -// CHECK: attributes [[NOMIPS16]] = { noinline nounwind {{.*}} "nomips16" {{.*}} } +// CHECK: attributes [[NOMIPS16]] = { noinline nossp nounwind {{.*}} "nomips16" {{.*}} } diff --git a/clang/test/CodeGen/mrtd.c b/clang/test/CodeGen/mrtd.c --- a/clang/test/CodeGen/mrtd.c +++ b/clang/test/CodeGen/mrtd.c @@ -25,4 +25,4 @@ // CHECK-LABEL: define x86_stdcallcc void @quux // CHECK: call void (i32, ...) @qux -// CHECK: attributes [[NUW]] = { noinline nounwind{{.*}} } +// CHECK: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } diff --git a/clang/test/CodeGen/ms-declspecs.c b/clang/test/CodeGen/ms-declspecs.c --- a/clang/test/CodeGen/ms-declspecs.c +++ b/clang/test/CodeGen/ms-declspecs.c @@ -37,8 +37,8 @@ // CHECK: call void @noalias_callee({{.*}}) [[NA:#[0-9]+]] void noalias_caller(int *x) { noalias_callee(x); } -// CHECK: attributes [[NAKED]] = { naked noinline nounwind{{.*}} } -// CHECK: attributes [[NUW]] = { nounwind{{.*}} } -// CHECK: attributes [[NI]] = { noinline nounwind{{.*}} } +// CHECK: attributes [[NAKED]] = { naked noinline nossp nounwind{{.*}} } +// CHECK: attributes [[NUW]] = { nossp nounwind{{.*}} } +// CHECK: attributes [[NI]] = { noinline nossp nounwind{{.*}} } // CHECK: attributes [[NR]] = { noreturn } // CHECK: attributes [[NA]] = { argmemonly nounwind{{.*}} } diff --git a/clang/test/CodeGen/ppc64-complex-parms.c b/clang/test/CodeGen/ppc64-complex-parms.c --- a/clang/test/CodeGen/ppc64-complex-parms.c +++ b/clang/test/CodeGen/ppc64-complex-parms.c @@ -191,4 +191,4 @@ // CHECK: %[[VAR77:[A-Za-z0-9.]+]] = load i64, i64* %[[VAR76]], align 8 // CHECK: %{{[A-Za-z0-9.]+}} = call i64 @foo_long_long(i64 %[[VAR75]], i64 %[[VAR77]]) -// CHECK: attributes [[NUW]] = { noinline nounwind{{.*}} } +// CHECK: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } diff --git a/clang/test/CodeGen/ppc64-complex-return.c b/clang/test/CodeGen/ppc64-complex-return.c --- a/clang/test/CodeGen/ppc64-complex-return.c +++ b/clang/test/CodeGen/ppc64-complex-return.c @@ -148,4 +148,4 @@ // CHECK: extractvalue { i64, i64 } [[VAR8]], 1 -// CHECK: attributes [[NUW]] = { noinline nounwind{{.*}} } +// CHECK: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } diff --git a/clang/test/CodeGen/ppc64-extend.c b/clang/test/CodeGen/ppc64-extend.c --- a/clang/test/CodeGen/ppc64-extend.c +++ b/clang/test/CodeGen/ppc64-extend.c @@ -13,4 +13,4 @@ unsigned int f4(void) { return 0; } // CHECK: define zeroext i32 @f4() [[NUW]] -// CHECK: attributes [[NUW]] = { noinline nounwind{{.*}} } +// CHECK: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } diff --git a/clang/test/CodeGen/pragma-weak.c b/clang/test/CodeGen/pragma-weak.c --- a/clang/test/CodeGen/pragma-weak.c +++ b/clang/test/CodeGen/pragma-weak.c @@ -188,5 +188,5 @@ int correct_linkage; -// CHECK: attributes [[NI]] = { noinline nounwind{{.*}} } -// CHECK: attributes [[RN]] = { noinline nounwind optnone readnone{{.*}} } +// CHECK: attributes [[NI]] = { noinline nossp nounwind{{.*}} } +// CHECK: attributes [[RN]] = { noinline nossp nounwind optnone readnone{{.*}} } diff --git a/clang/test/CodeGen/sanitize-thread-attr.cpp b/clang/test/CodeGen/sanitize-thread-attr.cpp --- a/clang/test/CodeGen/sanitize-thread-attr.cpp +++ b/clang/test/CodeGen/sanitize-thread-attr.cpp @@ -54,9 +54,9 @@ // BL: @__cxx_global_var_init{{.*}}[[NOATTR:#[0-9]+]] // TSAN: @__cxx_global_var_init{{.*}}[[WITH:#[0-9]+]] -// WITHOUT: attributes [[NOATTR]] = { noinline nounwind{{.*}} } +// WITHOUT: attributes [[NOATTR]] = { noinline nossp nounwind{{.*}} } -// BL: attributes [[NOATTR]] = { noinline nounwind{{.*}} } +// BL: attributes [[NOATTR]] = { noinline nossp nounwind{{.*}} } -// TSAN: attributes [[NOATTR]] = { noinline nounwind{{.*}} } -// TSAN: attributes [[WITH]] = { noinline nounwind sanitize_thread{{.*}} } +// TSAN: attributes [[NOATTR]] = { noinline nossp nounwind{{.*}} } +// TSAN: attributes [[WITH]] = { noinline nossp nounwind sanitize_thread{{.*}} } diff --git a/clang/test/CodeGen/sanitize-thread-no-checking-at-run-time.m b/clang/test/CodeGen/sanitize-thread-no-checking-at-run-time.m --- a/clang/test/CodeGen/sanitize-thread-no-checking-at-run-time.m +++ b/clang/test/CodeGen/sanitize-thread-no-checking-at-run-time.m @@ -38,4 +38,4 @@ // TSAN: define linkonce_odr hidden void @__destroy_helper_block_8_32o(i8* %0) unnamed_addr [[ATTR:#[0-9]+]] } -// TSAN: attributes [[ATTR]] = { noinline nounwind {{.*}} "sanitize_thread_no_checking_at_run_time" {{.*}} } +// TSAN: attributes [[ATTR]] = { noinline nossp nounwind {{.*}} "sanitize_thread_no_checking_at_run_time" {{.*}} } diff --git a/clang/test/CodeGen/stackrealign-main.c b/clang/test/CodeGen/stackrealign-main.c --- a/clang/test/CodeGen/stackrealign-main.c +++ b/clang/test/CodeGen/stackrealign-main.c @@ -13,7 +13,7 @@ return 0; } -// CHECK: attributes [[OTHER]] = { noinline nounwind optnone +// CHECK: attributes [[OTHER]] = { noinline nossp nounwind optnone // CHECK-NOT: "stackrealign" // CHECK: } -// CHECK: attributes [[MAIN]] = { noinline nounwind optnone {{.*}}"stackrealign"{{.*}} } +// CHECK: attributes [[MAIN]] = { noinline nossp nounwind optnone {{.*}}"stackrealign"{{.*}} } diff --git a/clang/test/CodeGen/unwind-attr.c b/clang/test/CodeGen/unwind-attr.c --- a/clang/test/CodeGen/unwind-attr.c +++ b/clang/test/CodeGen/unwind-attr.c @@ -23,7 +23,7 @@ return 0; } -// CHECK: attributes [[TF]] = { noinline optnone "{{.*}} } -// CHECK: attributes [[NUW]] = { noinline nounwind{{.*}} } +// CHECK: attributes [[TF]] = { noinline nossp optnone "{{.*}} } +// CHECK: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } -// CHECK-NOEXC: attributes [[NUW]] = { noinline nounwind{{.*}} } +// CHECK-NOEXC: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } diff --git a/clang/test/CodeGen/xray-global-init.cpp b/clang/test/CodeGen/xray-global-init.cpp --- a/clang/test/CodeGen/xray-global-init.cpp +++ b/clang/test/CodeGen/xray-global-init.cpp @@ -10,4 +10,4 @@ // Check that the xray-instruction-threshold was applied // CHECK: define internal void @_GLOBAL__sub_I_xray_global_init.cpp() [[NUX:#[0-9]+]] section ".text.startup" { -// CHECK: attributes [[NUX]] = { noinline nounwind {{.*}}"xray-instruction-threshold"="1"{{.*}} } +// CHECK: attributes [[NUX]] = { noinline nossp nounwind {{.*}}"xray-instruction-threshold"="1"{{.*}} } diff --git a/clang/test/CodeGenCXX/apple-kext.cpp b/clang/test/CodeGenCXX/apple-kext.cpp --- a/clang/test/CodeGenCXX/apple-kext.cpp +++ b/clang/test/CodeGenCXX/apple-kext.cpp @@ -40,5 +40,5 @@ // CHECK: call void @_ZN5test01AD1Ev([[A]]* @_ZN5test01aE) // CHECK-NEXT: ret void -// CHECK: attributes #[[ATTR0]] = { alwaysinline nounwind {{.*}} } -// CHECK: attributes #[[ATTR1]] = { noinline nounwind {{.*}} } +// CHECK: attributes #[[ATTR0]] = { alwaysinline nossp nounwind {{.*}} } +// CHECK: attributes #[[ATTR1]] = { noinline nossp nounwind {{.*}} } diff --git a/clang/test/CodeGenCXX/attr.cpp b/clang/test/CodeGenCXX/attr.cpp --- a/clang/test/CodeGenCXX/attr.cpp +++ b/clang/test/CodeGenCXX/attr.cpp @@ -31,4 +31,4 @@ // CHECK at top of file extern "C" int test2() __attribute__((alias("_Z5test1v"))); -// CHECK: attributes [[NUW]] = { noinline nounwind{{.*}} } +// CHECK: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } diff --git a/clang/test/CodeGenCXX/cxx11-exception-spec.cpp b/clang/test/CodeGenCXX/cxx11-exception-spec.cpp --- a/clang/test/CodeGenCXX/cxx11-exception-spec.cpp +++ b/clang/test/CodeGenCXX/cxx11-exception-spec.cpp @@ -121,7 +121,7 @@ } // CHECK: attributes [[NONE]] = { {{.*}} } -// CHECK: attributes [[NUW]] = { noinline nounwind{{.*}} } +// CHECK: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } // CHECK: attributes [[NUW2]] = { nounwind{{.*}} } diff --git a/clang/test/CodeGenCXX/cxx11-noreturn.cpp b/clang/test/CodeGenCXX/cxx11-noreturn.cpp --- a/clang/test/CodeGenCXX/cxx11-noreturn.cpp +++ b/clang/test/CodeGenCXX/cxx11-noreturn.cpp @@ -7,4 +7,4 @@ while (g()) {} } -// CHECK: attributes [[NR]] = { noinline noreturn nounwind{{.*}} } +// CHECK: attributes [[NR]] = { noinline noreturn nossp nounwind{{.*}} } diff --git a/clang/test/CodeGenCXX/derived-to-base.cpp b/clang/test/CodeGenCXX/derived-to-base.cpp --- a/clang/test/CodeGenCXX/derived-to-base.cpp +++ b/clang/test/CodeGenCXX/derived-to-base.cpp @@ -46,4 +46,4 @@ } } -// CHECK: attributes [[NUW]] = { noinline nounwind{{.*}} } +// CHECK: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } diff --git a/clang/test/CodeGenCXX/exceptions-seh-filter-uwtable.cpp b/clang/test/CodeGenCXX/exceptions-seh-filter-uwtable.cpp --- a/clang/test/CodeGenCXX/exceptions-seh-filter-uwtable.cpp +++ b/clang/test/CodeGenCXX/exceptions-seh-filter-uwtable.cpp @@ -35,7 +35,7 @@ // Check for the uwtable attribute on the filter funclet. // CHECK: define internal i32 @"?filt$0@0@at@@"(i8* %exception_pointers, i8* %frame_pointer) #[[MD:[0-9]+]] -// CHECK: attributes #[[MD]] = { nounwind uwtable +// CHECK: attributes #[[MD]] = { nossp nounwind uwtable void at() { i ar; diff --git a/clang/test/CodeGenCXX/global-dtor-no-atexit.cpp b/clang/test/CodeGenCXX/global-dtor-no-atexit.cpp --- a/clang/test/CodeGenCXX/global-dtor-no-atexit.cpp +++ b/clang/test/CodeGenCXX/global-dtor-no-atexit.cpp @@ -43,4 +43,4 @@ static A a1, a2; } -// CHECK: attributes [[NUW]] = { noinline nounwind{{.*}} } +// CHECK: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } diff --git a/clang/test/CodeGenCXX/global-init.cpp b/clang/test/CodeGenCXX/global-init.cpp --- a/clang/test/CodeGenCXX/global-init.cpp +++ b/clang/test/CodeGenCXX/global-init.cpp @@ -204,12 +204,12 @@ // rdar://problem/8090834: this should be nounwind // CHECK-NOEXC: define internal void @_GLOBAL__sub_I_global_init.cpp() [[NUW:#[0-9]+]] section "__TEXT,__StaticInit,regular,pure_instructions" { -// CHECK-NOEXC: attributes [[NUW]] = { noinline nounwind{{.*}} } +// CHECK-NOEXC: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } // Make sure we mark global initializers with the no-builtins attribute. // CHECK-NOBUILTIN: define internal void @_GLOBAL__sub_I_global_init.cpp() [[NUW:#[0-9]+]] section "__TEXT,__StaticInit,regular,pure_instructions" { -// CHECK-NOBUILTIN: attributes [[NUW]] = { noinline nounwind{{.*}}"no-builtins"{{.*}} } +// CHECK-NOBUILTIN: attributes [[NUW]] = { noinline nossp nounwind{{.*}}"no-builtins"{{.*}} } // PR21811: attach the appropriate attribute to the global init function // CHECK-FP: define internal void @_GLOBAL__sub_I_global_init.cpp() [[NUX:#[0-9]+]] section "__TEXT,__StaticInit,regular,pure_instructions" { -// CHECK-FP: attributes [[NUX]] = { noinline nounwind {{.*}}"frame-pointer"="non-leaf"{{.*}} } +// CHECK-FP: attributes [[NUX]] = { noinline nossp nounwind {{.*}}"frame-pointer"="non-leaf"{{.*}} } diff --git a/clang/test/CodeGenCXX/microsoft-abi-array-cookies.cpp b/clang/test/CodeGenCXX/microsoft-abi-array-cookies.cpp --- a/clang/test/CodeGenCXX/microsoft-abi-array-cookies.cpp +++ b/clang/test/CodeGenCXX/microsoft-abi-array-cookies.cpp @@ -68,4 +68,4 @@ void delete_s(S *s) { delete[] s; } } -// CHECK: attributes [[NUW]] = { noinline nounwind{{.*}} } +// CHECK: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } diff --git a/clang/test/CodeGenCXX/no-exceptions.cpp b/clang/test/CodeGenCXX/no-exceptions.cpp --- a/clang/test/CodeGenCXX/no-exceptions.cpp +++ b/clang/test/CodeGenCXX/no-exceptions.cpp @@ -11,4 +11,4 @@ // CHECK: ret void } -// CHECK: attributes [[NUW]] = { noinline nounwind{{.*}} } +// CHECK: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } diff --git a/clang/test/CodeGenCXX/noinline-template.cpp b/clang/test/CodeGenCXX/noinline-template.cpp --- a/clang/test/CodeGenCXX/noinline-template.cpp +++ b/clang/test/CodeGenCXX/noinline-template.cpp @@ -15,4 +15,4 @@ strs.growStorageBy(); } -// CHECK: attributes [[NI]] = { noinline nounwind{{.*}} } +// CHECK: attributes [[NI]] = { noinline nossp nounwind{{.*}} } diff --git a/clang/test/CodeGenCXX/optnone-def-decl.cpp b/clang/test/CodeGenCXX/optnone-def-decl.cpp --- a/clang/test/CodeGenCXX/optnone-def-decl.cpp +++ b/clang/test/CodeGenCXX/optnone-def-decl.cpp @@ -89,7 +89,7 @@ // CHECK: @_Z36user_of_forceinline_optnone_functionv() [[NORMAL]] // CHECK: @_Z28forceinline_optnone_functionii({{.*}}) [[OPTNONE]] -// CHECK: attributes [[OPTNONE]] = { noinline nounwind optnone {{.*}} } +// CHECK: attributes [[OPTNONE]] = { noinline nossp nounwind optnone {{.*}} } // CHECK: attributes [[NORMAL]] = // CHECK-NOT: noinline // CHECK-NOT: optnone diff --git a/clang/test/CodeGenCXX/reference-cast.cpp b/clang/test/CodeGenCXX/reference-cast.cpp --- a/clang/test/CodeGenCXX/reference-cast.cpp +++ b/clang/test/CodeGenCXX/reference-cast.cpp @@ -193,4 +193,4 @@ // CHECK: store i64 } -// CHECK: attributes [[NUW]] = { noinline nounwind{{.*}} } +// CHECK: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } diff --git a/clang/test/CodeGenCXX/threadsafe-statics.cpp b/clang/test/CodeGenCXX/threadsafe-statics.cpp --- a/clang/test/CodeGenCXX/threadsafe-statics.cpp +++ b/clang/test/CodeGenCXX/threadsafe-statics.cpp @@ -22,6 +22,6 @@ // NO-TSS-NOT: call void @__cxa_guard_release // NO-TSS: ret void -// WITH-TSS: attributes [[NUW]] = { noinline nounwind{{.*}} } +// WITH-TSS: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } -// NO-TSS: attributes [[NUW]] = { noinline nounwind{{.*}} } +// NO-TSS: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } diff --git a/clang/test/CodeGenCXX/thunks.cpp b/clang/test/CodeGenCXX/thunks.cpp --- a/clang/test/CodeGenCXX/thunks.cpp +++ b/clang/test/CodeGenCXX/thunks.cpp @@ -542,5 +542,5 @@ // WIN64-LABEL: define linkonce_odr dso_local void @"?foo@C@Test10@@UEAAXXZ"( // WIN64-LABEL: define linkonce_odr dso_local void @"?foo@C@Test10@@W7EAAXXZ"( -// CHECK-NONOPT: attributes [[NUW]] = { noinline nounwind optnone uwtable{{.*}} } -// CHECK-OPT: attributes [[NUW]] = { nounwind uwtable{{.*}} } +// CHECK-NONOPT: attributes [[NUW]] = { noinline nossp nounwind optnone uwtable{{.*}} } +// CHECK-OPT: attributes [[NUW]] = { nossp nounwind uwtable{{.*}} } diff --git a/clang/test/CodeGenCXX/virtual-base-cast.cpp b/clang/test/CodeGenCXX/virtual-base-cast.cpp --- a/clang/test/CodeGenCXX/virtual-base-cast.cpp +++ b/clang/test/CodeGenCXX/virtual-base-cast.cpp @@ -82,4 +82,4 @@ // MSVC: add nsw i32 4, %[[offset]] // MSVC: } -// CHECK: attributes [[NUW]] = { noinline nounwind{{.*}} } +// CHECK: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } diff --git a/clang/test/CodeGenObjC/gnu-exceptions.m b/clang/test/CodeGenObjC/gnu-exceptions.m --- a/clang/test/CodeGenObjC/gnu-exceptions.m +++ b/clang/test/CodeGenObjC/gnu-exceptions.m @@ -32,4 +32,4 @@ log(1); } -// CHECK: attributes [[TF]] = { noinline optnone "{{.*}} } +// CHECK: attributes [[TF]] = { noinline nossp optnone "{{.*}} } diff --git a/clang/test/CodeGenObjC/objc-literal-tests.m b/clang/test/CodeGenObjC/objc-literal-tests.m --- a/clang/test/CodeGenObjC/objc-literal-tests.m +++ b/clang/test/CodeGenObjC/objc-literal-tests.m @@ -94,4 +94,4 @@ bar(^(void) { return YES; }); } -// CHECK: attributes [[NUW]] = { noinline {{(norecurse )?}}nounwind{{.*}} } +// CHECK: attributes [[NUW]] = { noinline {{(norecurse )?}}nossp nounwind{{.*}} } diff --git a/clang/test/CodeGenObjCXX/lambda-expressions.mm b/clang/test/CodeGenObjCXX/lambda-expressions.mm --- a/clang/test/CodeGenObjCXX/lambda-expressions.mm +++ b/clang/test/CodeGenObjCXX/lambda-expressions.mm @@ -164,5 +164,5 @@ #endif -// ARC: attributes [[NUW]] = { noinline nounwind{{.*}} } -// MRC: attributes [[NUW]] = { noinline nounwind{{.*}} } +// ARC: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } +// MRC: attributes [[NUW]] = { noinline nossp nounwind{{.*}} } diff --git a/clang/test/CodeGenOpenCL/convergent.cl b/clang/test/CodeGenOpenCL/convergent.cl --- a/clang/test/CodeGenOpenCL/convergent.cl +++ b/clang/test/CodeGenOpenCL/convergent.cl @@ -139,7 +139,7 @@ __asm__ volatile("s_barrier"); } -// CHECK: attributes #0 = { nofree noinline norecurse nounwind " +// CHECK: attributes #0 = { nofree noinline norecurse nossp nounwind " // CHECK: attributes #1 = { {{[^}]*}}convergent{{[^}]*}} } // CHECK: attributes #2 = { {{[^}]*}}convergent{{[^}]*}} } // CHECK: attributes #3 = { {{[^}]*}}convergent noduplicate{{[^}]*}} } diff --git a/clang/test/Driver/cl-options.c b/clang/test/Driver/cl-options.c --- a/clang/test/Driver/cl-options.c +++ b/clang/test/Driver/cl-options.c @@ -90,7 +90,7 @@ // GS: "-stack-protector" "2" // RUN: %clang_cl /GS- -### -- %s 2>&1 | FileCheck -check-prefix=GS_ %s -// GS_-NOT: -stack-protector +// GS_: "-stack-protector" "0" // RUN: %clang_cl /Gy -### -- %s 2>&1 | FileCheck -check-prefix=Gy %s // Gy: -ffunction-sections diff --git a/clang/test/PCH/objc_container.m b/clang/test/PCH/objc_container.m --- a/clang/test/PCH/objc_container.m +++ b/clang/test/PCH/objc_container.m @@ -21,5 +21,5 @@ // CHECK-IR: {{call.*objc_msgSend}} // CHECK-IR: ret void -// CHECK-IR: attributes #0 = { noinline nounwind {{.*}} } +// CHECK-IR: attributes #0 = { noinline nossp nounwind {{.*}} } // CHECK-IR: attributes #1 = { nonlazybind } diff --git a/clang/test/utils/update_cc_test_checks/Inputs/check-attributes.cpp.funcattrs.expected b/clang/test/utils/update_cc_test_checks/Inputs/check-attributes.cpp.funcattrs.expected --- a/clang/test/utils/update_cc_test_checks/Inputs/check-attributes.cpp.funcattrs.expected +++ b/clang/test/utils/update_cc_test_checks/Inputs/check-attributes.cpp.funcattrs.expected @@ -11,7 +11,7 @@ struct RT Z; }; -// CHECK: Function Attrs: noinline nounwind optnone mustprogress +// CHECK: Function Attrs: noinline nossp nounwind optnone mustprogress // CHECK-LABEL: @_Z3fooP2ST( // CHECK-NEXT: entry: // CHECK-NEXT: [[S_ADDR:%.*]] = alloca %struct.ST*, align 8