Skip to content

Commit

Permalink
Change keep-static-consts to work on static storage duration, not
Browse files Browse the repository at this point in the history
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
llvm-svn: 345302
  • Loading branch information
Erich Keane committed Oct 25, 2018
1 parent d4bf99a commit 85822b3
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 3 deletions.
5 changes: 3 additions & 2 deletions clang/lib/CodeGen/CodeGenModule.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1386,7 +1386,8 @@ void CodeGenModule::SetCommonAttributes(GlobalDecl GD, llvm::GlobalValue *GV) {

if (CodeGenOpts.KeepStaticConsts && D && isa<VarDecl>(D)) {
const auto *VD = cast<VarDecl>(D);
if (VD->getType().isConstQualified() && VD->getStorageClass() == SC_Static)
if (VD->getType().isConstQualified() &&
VD->getStorageDuration() == SD_Static)
addUsedGlobal(GV);
}
}
Expand Down Expand Up @@ -2024,7 +2025,7 @@ bool CodeGenModule::MustBeEmitted(const ValueDecl *Global) {
if (CodeGenOpts.KeepStaticConsts) {
const auto *VD = dyn_cast<VarDecl>(Global);
if (VD && VD->getType().isConstQualified() &&
VD->getStorageClass() == SC_Static)
VD->getStorageDuration() == SD_Static)
return true;
}

Expand Down
7 changes: 6 additions & 1 deletion clang/test/CodeGen/keep-static-consts.cpp
Original file line number Diff line number Diff line change
@@ -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;

0 comments on commit 85822b3

Please sign in to comment.