diff options
| author | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-09-08 23:14:54 +0000 |
|---|---|---|
| committer | Richard Smith <richard-llvm@metafoo.co.uk> | 2016-09-08 23:14:54 +0000 |
| commit | 8df390f9ebc87702ae2b6155e5d81477c481db6f (patch) | |
| tree | 493246882f1e97949bb1b2966ca99a3a1da21aaa /clang/lib/Sema/SemaDecl.cpp | |
| parent | 10037b93e90672f1819b3bc32d8d2dbeec68ae83 (diff) | |
| download | bcm5719-llvm-8df390f9ebc87702ae2b6155e5d81477c481db6f.tar.gz bcm5719-llvm-8df390f9ebc87702ae2b6155e5d81477c481db6f.zip | |
C++ Modules TS: Add parsing and some semantic analysis support for
export-declarations. These don't yet have an effect on name visibility;
we still export everything by default.
llvm-svn: 280999
Diffstat (limited to 'clang/lib/Sema/SemaDecl.cpp')
| -rw-r--r-- | clang/lib/Sema/SemaDecl.cpp | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp index e6381fbe49f..773d00bf2d7 100644 --- a/clang/lib/Sema/SemaDecl.cpp +++ b/clang/lib/Sema/SemaDecl.cpp @@ -15422,6 +15422,36 @@ void Sema::createImplicitModuleImportForErrorRecovery(SourceLocation Loc, VisibleModules.setVisible(Mod, Loc); } +/// We have parsed the start of an export declaration, including the '{' +/// (if present). +Decl *Sema::ActOnStartExportDecl(Scope *S, SourceLocation ExportLoc, + SourceLocation LBraceLoc) { + // FIXME: C++ Modules TS: + // An export-declaration [...] shall not contain more than one + // export keyword. + // + // The intent here is that an export-declaration cannot appear within another + // export-declaration. + + ExportDecl *D = ExportDecl::Create(Context, CurContext, ExportLoc); + CurContext->addDecl(D); + PushDeclContext(S, D); + return D; +} + +/// Complete the definition of an export declaration. +Decl *Sema::ActOnFinishExportDecl(Scope *S, Decl *D, SourceLocation RBraceLoc) { + auto *ED = cast<ExportDecl>(D); + if (RBraceLoc.isValid()) + ED->setRBraceLoc(RBraceLoc); + + // FIXME: Diagnose export of internal-linkage declaration (including + // anonymous namespace). + + PopDeclContext(); + return D; +} + void Sema::ActOnPragmaRedefineExtname(IdentifierInfo* Name, IdentifierInfo* AliasName, SourceLocation PragmaLoc, |

