r273159 - [modules] Allow emission of update records for predefined __va_list_tag.
Vassil Vassilev via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 20 08:10:40 PDT 2016
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
More information about the cfe-commits
mailing list