Author: vvassilev Date: Mon Jun 20 10:10:40 2016 New Revision: 273159 URL: http://llvm.org/viewvc/llvm-project?rev=273159&view=rev Log: [modules] Allow emission of update records for predefined __va_list_tag.
Handles the cases where old __va_list_tag is coming from a module and the new is not, needing an update record. Fixes https://llvm.org/bugs/show_bug.cgi?id=27890 Patch by Cristina Cristescu, Richard Smith and me. Added: cfe/trunk/test/Modules/Inputs/PR27890/ cfe/trunk/test/Modules/Inputs/PR27890/a.h cfe/trunk/test/Modules/Inputs/PR27890/module.modulemap cfe/trunk/test/Modules/pr27890.cpp Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=273159&r1=273158&r2=273159&view=diff ============================================================================== --- cfe/trunk/lib/Serialization/ASTWriter.cpp (original) +++ cfe/trunk/lib/Serialization/ASTWriter.cpp Mon Jun 20 10:10:40 2016 @@ -5654,10 +5654,6 @@ static bool isImportedDeclContext(ASTRea if (D->isFromASTFile()) return true; - // If we've not loaded any modules, this can't be imported. - if (!Chain || !Chain->getModuleManager().size()) - return false; - // The predefined __va_list_tag struct is imported if we imported any decls. // FIXME: This is a gross hack. return D == D->getASTContext().getVaListTagDecl(); Added: cfe/trunk/test/Modules/Inputs/PR27890/a.h URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/PR27890/a.h?rev=273159&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/PR27890/a.h (added) +++ cfe/trunk/test/Modules/Inputs/PR27890/a.h Mon Jun 20 10:10:40 2016 @@ -0,0 +1,9 @@ +template <class DataType> DataType values(DataType) { __builtin_va_list ValueArgs; return DataType(); } + +template <class DataType> +class opt { +public: + template <class Mods> + opt(Mods) {} +}; + Added: cfe/trunk/test/Modules/Inputs/PR27890/module.modulemap URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/PR27890/module.modulemap?rev=273159&view=auto ============================================================================== --- cfe/trunk/test/Modules/Inputs/PR27890/module.modulemap (added) +++ cfe/trunk/test/Modules/Inputs/PR27890/module.modulemap Mon Jun 20 10:10:40 2016 @@ -0,0 +1 @@ +module A { header "a.h" export * } Added: cfe/trunk/test/Modules/pr27890.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/pr27890.cpp?rev=273159&view=auto ============================================================================== --- cfe/trunk/test/Modules/pr27890.cpp (added) +++ cfe/trunk/test/Modules/pr27890.cpp Mon Jun 20 10:10:40 2016 @@ -0,0 +1,9 @@ +// RUN: rm -rf %t +// RUN: %clang_cc1 -std=c++11 -I%S/Inputs/PR27890 -verify %s +// RUN: %clang_cc1 -std=c++11 -fmodules -fmodule-map-file=%S/Inputs/PR27890/module.modulemap -fmodules-cache-path=%t -I%S/Inputs/PR27890 -verify %s + +#include "a.h" +enum ActionType {}; +opt<ActionType> a(values("")); + +// expected-no-diagnostics \ No newline at end of file _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits