forked from OSchip/llvm-project
Let CodeGenFunction::EmitVarDecl query the semantic storage class info.
Added testcase corresponding to PR15991. llvm-svn: 181998
This commit is contained in:
parent
ec04c0dba0
commit
cf51a8ac3f
|
@ -114,12 +114,7 @@ void CodeGenFunction::EmitDecl(const Decl &D) {
|
|||
/// EmitVarDecl - This method handles emission of any variable declaration
|
||||
/// inside a function, including static vars etc.
|
||||
void CodeGenFunction::EmitVarDecl(const VarDecl &D) {
|
||||
switch (D.getStorageClass()) {
|
||||
case SC_None:
|
||||
case SC_Auto:
|
||||
case SC_Register:
|
||||
return EmitAutoVarDecl(D);
|
||||
case SC_Static: {
|
||||
if (D.isStaticLocal()) {
|
||||
llvm::GlobalValue::LinkageTypes Linkage =
|
||||
llvm::GlobalValue::InternalLinkage;
|
||||
|
||||
|
@ -134,15 +129,16 @@ void CodeGenFunction::EmitVarDecl(const VarDecl &D) {
|
|||
|
||||
return EmitStaticVarDecl(D, Linkage);
|
||||
}
|
||||
case SC_Extern:
|
||||
case SC_PrivateExtern:
|
||||
|
||||
if (D.hasExternalStorage())
|
||||
// Don't emit it now, allow it to be emitted lazily on its first use.
|
||||
return;
|
||||
case SC_OpenCLWorkGroupLocal:
|
||||
return CGM.getOpenCLRuntime().EmitWorkGroupLocalVarDecl(*this, D);
|
||||
}
|
||||
|
||||
llvm_unreachable("Unknown storage class");
|
||||
if (D.getStorageClass() == SC_OpenCLWorkGroupLocal)
|
||||
return CGM.getOpenCLRuntime().EmitWorkGroupLocalVarDecl(*this, D);
|
||||
|
||||
assert(D.hasLocalStorage());
|
||||
return EmitAutoVarDecl(D);
|
||||
}
|
||||
|
||||
static std::string GetStaticDeclName(CodeGenFunction &CGF, const VarDecl &D,
|
||||
|
|
|
@ -66,3 +66,12 @@ namespace test2 {
|
|||
|
||||
// CHECK-2: define internal void @_ZN5test21A1BINS_12_GLOBAL__N_11CEE3fooEv()
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
int bar() {
|
||||
extern int a;
|
||||
return a;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
|
Loading…
Reference in New Issue