From 77c1d483b0701070676445fe92c2fbb5b563a47c Mon Sep 17 00:00:00 2001 From: Erich Keane Date: Thu, 25 Oct 2018 19:13:46 +0000 Subject: [PATCH] Change keep-static-consts to work on static storage duration, not storage class. To be more in line with what GCC does, switch the condition to be based on the Static Storage duration instead of the storage class. Change-Id: I8e959d762433cda48855099353bf3c950b9d54b8 git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@345302 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/CodeGen/CodeGenModule.cpp | 5 +++-- test/CodeGen/keep-static-consts.cpp | 7 ++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/CodeGen/CodeGenModule.cpp b/lib/CodeGen/CodeGenModule.cpp index 129a7703e6..9192d860ad 100644 --- a/lib/CodeGen/CodeGenModule.cpp +++ b/lib/CodeGen/CodeGenModule.cpp @@ -1386,7 +1386,8 @@ void CodeGenModule::SetCommonAttributes(GlobalDecl GD, llvm::GlobalValue *GV) { if (CodeGenOpts.KeepStaticConsts && D && isa(D)) { const auto *VD = cast(D); - if (VD->getType().isConstQualified() && VD->getStorageClass() == SC_Static) + if (VD->getType().isConstQualified() && + VD->getStorageDuration() == SD_Static) addUsedGlobal(GV); } } @@ -2024,7 +2025,7 @@ bool CodeGenModule::MustBeEmitted(const ValueDecl *Global) { if (CodeGenOpts.KeepStaticConsts) { const auto *VD = dyn_cast(Global); if (VD && VD->getType().isConstQualified() && - VD->getStorageClass() == SC_Static) + VD->getStorageDuration() == SD_Static) return true; } diff --git a/test/CodeGen/keep-static-consts.cpp b/test/CodeGen/keep-static-consts.cpp index 3cdac7ad1a..d89f21cf65 100644 --- a/test/CodeGen/keep-static-consts.cpp +++ b/test/CodeGen/keep-static-consts.cpp @@ -1,6 +1,11 @@ // RUN: %clang_cc1 -fkeep-static-consts -emit-llvm %s -o - -triple=x86_64-unknown-linux-gnu | FileCheck %s // CHECK: @_ZL7srcvers = internal constant [4 x i8] c"xyz\00", align 1 -// CHECK: @llvm.used = appending global [1 x i8*] [i8* getelementptr inbounds ([4 x i8], [4 x i8]* @_ZL7srcvers, i32 0, i32 0)], section "llvm.metadata" +// CHECK: @_ZL8srcvers2 = internal constant [4 x i8] c"abc\00", align 1 +// CHECK: @_ZL1N = internal constant i32 2, align 4 +// CHECK: @llvm.used = appending global [4 x i8*] [i8* getelementptr inbounds ([4 x i8], [4 x i8]* @_ZL7srcvers, i32 0, i32 0), i8* bitcast (i32* @b to i8*), i8* getelementptr inbounds ([4 x i8], [4 x i8]* @_ZL8srcvers2, i32 0, i32 0), i8* bitcast (i32* @_ZL1N to i8*)], section "llvm.metadata" + static const char srcvers[] = "xyz"; extern const int b = 1; +const char srcvers2[] = "abc"; +constexpr int N = 2; -- 2.50.1