diff options
| author | Chris Lattner <sabre@nondot.org> | 2008-01-12 07:05:38 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2008-01-12 07:05:38 +0000 |
| commit | 38376f159513e5041d04e7cc8b5c62d59e8fa9d0 (patch) | |
| tree | 838d9e92f54ae5f9cdf75f9fbd896ab57c25d32f /clang/CodeGen | |
| parent | 22ad7abdfe6bfbe807cb797b0a446a3a15097afe (diff) | |
| download | bcm5719-llvm-38376f159513e5041d04e7cc8b5c62d59e8fa9d0.tar.gz bcm5719-llvm-38376f159513e5041d04e7cc8b5c62d59e8fa9d0.zip | |
Add first pieces of support for parsing and representing
extern "C" in C++ mode. Patch by Mike Stump!
llvm-svn: 45904
Diffstat (limited to 'clang/CodeGen')
| -rw-r--r-- | clang/CodeGen/CodeGenModule.cpp | 10 | ||||
| -rw-r--r-- | clang/CodeGen/CodeGenModule.h | 4 | ||||
| -rw-r--r-- | clang/CodeGen/ModuleBuilder.cpp | 11 |
3 files changed, 25 insertions, 0 deletions
diff --git a/clang/CodeGen/CodeGenModule.cpp b/clang/CodeGen/CodeGenModule.cpp index 9a65d2e2967..bb61dc7cd82 100644 --- a/clang/CodeGen/CodeGenModule.cpp +++ b/clang/CodeGen/CodeGenModule.cpp @@ -44,6 +44,16 @@ void CodeGenModule::WarnUnsupported(const Stmt *S, const char *Type) { &Msg, 1, &Range, 1); } +/// WarnUnsupported - Print out a warning that codegen doesn't support the +/// specified decl yet. +void CodeGenModule::WarnUnsupported(const Decl *D, const char *Type) { + unsigned DiagID = getDiags().getCustomDiagID(Diagnostic::Warning, + "cannot codegen this %0 yet"); + std::string Msg = Type; + getDiags().Report(Context.getFullLoc(D->getLocation()), DiagID, + &Msg, 1); +} + /// ReplaceMapValuesWith - This is a really slow and bad function that /// searches for any entries in GlobalDeclMap that point to OldVal, changing /// them to point to NewVal. This is badbadbad, FIXME! diff --git a/clang/CodeGen/CodeGenModule.h b/clang/CodeGen/CodeGenModule.h index 6653e508813..b86ceba426b 100644 --- a/clang/CodeGen/CodeGenModule.h +++ b/clang/CodeGen/CodeGenModule.h @@ -95,6 +95,10 @@ public: /// specified stmt yet. void WarnUnsupported(const Stmt *S, const char *Type); + /// WarnUnsupported - Print out a warning that codegen doesn't support the + /// specified decl yet. + void WarnUnsupported(const Decl *D, const char *Type); + private: /// ReplaceMapValuesWith - This is a really slow and bad function that /// searches for any entries in GlobalDeclMap that point to OldVal, changing diff --git a/clang/CodeGen/ModuleBuilder.cpp b/clang/CodeGen/ModuleBuilder.cpp index 49881c36d94..fff5b3fbfff 100644 --- a/clang/CodeGen/ModuleBuilder.cpp +++ b/clang/CodeGen/ModuleBuilder.cpp @@ -13,6 +13,7 @@ #include "clang/CodeGen/ModuleBuilder.h" #include "CodeGenModule.h" +#include "clang/AST/Decl.h" using namespace clang; @@ -34,6 +35,16 @@ void clang::CodeGen::CodeGenFunction(CodeGenModule *B, FunctionDecl *D) { B->EmitFunction(D); } +/// CodeGenLinkageSpec - Emit the specified linkage space to LLVM. +void clang::CodeGen::CodeGenLinkageSpec(CodeGenModule *Builder, + LinkageSpecDecl *LS) { + if (LS->getLanguage() == LinkageSpecDecl::lang_cxx) + Builder->WarnUnsupported(LS, "linkage spec"); + + // FIXME: implement C++ linkage, C linkage works mostly by C + // language reuse already. +} + /// CodeGenGlobalVar - Emit the specified global variable to LLVM. void clang::CodeGen::CodeGenGlobalVar(CodeGenModule *Builder, FileVarDecl *D) { Builder->EmitGlobalVarDeclarator(D); |

