mirror of
https://github.com/intel/llvm.git
synced 2026-02-04 20:00:11 +08:00
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 llvm-svn: 345302
This commit is contained in:
@@ -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);
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user