diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-04-14 02:25:56 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-04-14 02:25:56 +0000 |
commit | 0ca16601290fa748148bc9cba4b63fb07157ea2d (patch) | |
tree | 162e3061e09aed5495675f5b58882eecb08ea4d9 /clang/lib/CodeGen/CGDecl.cpp | |
parent | b76b745707fd86a94372b9d983cfda4f2399366c (diff) | |
download | bcm5719-llvm-0ca16601290fa748148bc9cba4b63fb07157ea2d.tar.gz bcm5719-llvm-0ca16601290fa748148bc9cba4b63fb07157ea2d.zip |
Audit __private_extern__ handling.
- Exposed quite a few Sema issues and a CodeGen crash.
- See FIXMEs in test case, and in SemaDecl.cpp (PR3983).
I'm skeptical that __private_extern__ should actually be a storage
class value. I think that __private_extern__ basically amounts to
extern A __attribute__((visibility("hidden")))
and would be better off handled (a) as that, or (b) with an extra bit
in the VarDecl.
llvm-svn: 69020
Diffstat (limited to 'clang/lib/CodeGen/CGDecl.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGDecl.cpp | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/clang/lib/CodeGen/CGDecl.cpp b/clang/lib/CodeGen/CGDecl.cpp index 4cb4f5530b2..c9e47eba77e 100644 --- a/clang/lib/CodeGen/CGDecl.cpp +++ b/clang/lib/CodeGen/CGDecl.cpp @@ -68,18 +68,19 @@ void CodeGenFunction::EmitBlockVarDecl(const VarDecl &D) { CGM.ErrorUnsupported(&D, "thread local ('__thread') variable", true); switch (D.getStorageClass()) { + case VarDecl::None: + case VarDecl::Auto: + case VarDecl::Register: + return EmitLocalBlockVarDecl(D); case VarDecl::Static: return EmitStaticBlockVarDecl(D); case VarDecl::Extern: + case VarDecl::PrivateExtern: // Don't emit it now, allow it to be emitted lazily on its first use. return; - default: - assert((D.getStorageClass() == VarDecl::None || - D.getStorageClass() == VarDecl::Auto || - D.getStorageClass() == VarDecl::Register) && - "Unknown storage class"); - return EmitLocalBlockVarDecl(D); } + + assert(0 && "Unknown storage class"); } llvm::GlobalVariable * |