diff options
Diffstat (limited to 'clang')
-rw-r--r-- | clang/lib/Serialization/ASTReaderDecl.cpp | 2 | ||||
-rw-r--r-- | clang/lib/Serialization/ASTWriter.cpp | 2 | ||||
-rw-r--r-- | clang/test/Modules/cxx17-inline-variables.cpp | 30 |
3 files changed, 34 insertions, 0 deletions
diff --git a/clang/lib/Serialization/ASTReaderDecl.cpp b/clang/lib/Serialization/ASTReaderDecl.cpp index 654a9fa94d4..ae9efa9948b 100644 --- a/clang/lib/Serialization/ASTReaderDecl.cpp +++ b/clang/lib/Serialization/ASTReaderDecl.cpp @@ -3988,6 +3988,8 @@ void ASTDeclReader::UpdateDecl(Decl *D, VarDecl *VD = cast<VarDecl>(D); VD->getMemberSpecializationInfo()->setPointOfInstantiation( ReadSourceLocation()); + VD->NonParmVarDeclBits.IsInline = Record.readInt(); + VD->NonParmVarDeclBits.IsInlineSpecified = Record.readInt(); uint64_t Val = Record.readInt(); if (Val && !VD->getInit()) { VD->setInit(Record.readExpr()); diff --git a/clang/lib/Serialization/ASTWriter.cpp b/clang/lib/Serialization/ASTWriter.cpp index 7e88c59b358..dec8d8f7d77 100644 --- a/clang/lib/Serialization/ASTWriter.cpp +++ b/clang/lib/Serialization/ASTWriter.cpp @@ -5084,6 +5084,8 @@ void ASTWriter::WriteDeclUpdatesBlocks(RecordDataImpl &OffsetsRecord) { case UPD_CXX_INSTANTIATED_STATIC_DATA_MEMBER: { const VarDecl *VD = cast<VarDecl>(D); Record.AddSourceLocation(Update.getLoc()); + Record.push_back(VD->isInline()); + Record.push_back(VD->isInlineSpecified()); if (VD->getInit()) { Record.push_back(!VD->isInitKnownICE() ? 1 : (VD->isInitICE() ? 3 : 2)); diff --git a/clang/test/Modules/cxx17-inline-variables.cpp b/clang/test/Modules/cxx17-inline-variables.cpp new file mode 100644 index 00000000000..be6a190a256 --- /dev/null +++ b/clang/test/Modules/cxx17-inline-variables.cpp @@ -0,0 +1,30 @@ +// RUN: %clang_cc1 -std=c++17 -fsyntax-only -fmodules %s + +#pragma clang module build a +module a {} +#pragma clang module contents +#pragma clang module begin a + +template <class c, c e> struct ak { static constexpr c value = e; }; +ak<bool, true> instantiate_class_definition; + +#pragma clang module end /* a */ +#pragma clang module endbuild + + +#pragma clang module build o +module o {} +#pragma clang module contents +#pragma clang module begin o +#pragma clang module import a + +inline int instantiate_var_definition() { return ak<bool, true>::value; } + +#pragma clang module end +#pragma clang module endbuild + + +#pragma clang module import o +#pragma clang module import a + +int main() { return ak<bool, true>::value; } |