Author: rsmith
Date: Wed Mar 11 13:21:02 2015
New Revision: 231950
URL: http://llvm.org/viewvc/llvm-project?rev=231950&view=rev
Log:
[modules] When merging the pattern of a class template definition into a prior
definition, be sure to update the definition data on all declarations, not just
the canonical one, since the pattern might not be in the list of pending
definitions (if it used to be canonical itself).
One-line fix by me; reduced testcase by Daniel Jasper!
Added:
cfe/trunk/test/Modules/Inputs/merge-template-friend/
cfe/trunk/test/Modules/Inputs/merge-template-friend/def.h
cfe/trunk/test/Modules/Inputs/merge-template-friend/friend.h
cfe/trunk/test/Modules/Inputs/merge-template-friend/module.modulemap
cfe/trunk/test/Modules/merge-template-friend.cpp
Modified:
cfe/trunk/lib/Serialization/ASTReaderDecl.cpp
Modified: cfe/trunk/lib/Serialization/ASTReaderDecl.cpp
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReaderDecl.cpp?rev=231950&r1=231949&r2=231950&view=diff
==============================================================================
--- cfe/trunk/lib/Serialization/ASTReaderDecl.cpp (original)
+++ cfe/trunk/lib/Serialization/ASTReaderDecl.cpp Wed Mar 11 13:21:02 2015
@@ -2158,6 +2158,7 @@ void ASTDeclReader::mergeTemplatePattern
DClass->IsCompleteDefinition = false;
} else {
ExistingClass->DefinitionData = DClass->DefinitionData;
+ Reader.PendingDefinitions.insert(DClass);
}
}
DClass->DefinitionData = ExistingClass->DefinitionData;
Added: cfe/trunk/test/Modules/Inputs/merge-template-friend/def.h
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/merge-template-friend/def.h?rev=231950&view=auto
==============================================================================
--- cfe/trunk/test/Modules/Inputs/merge-template-friend/def.h (added)
+++ cfe/trunk/test/Modules/Inputs/merge-template-friend/def.h Wed Mar 11
13:21:02 2015
@@ -0,0 +1,3 @@
+namespace ns {
+template <typename T> class C {};
+}
Added: cfe/trunk/test/Modules/Inputs/merge-template-friend/friend.h
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/merge-template-friend/friend.h?rev=231950&view=auto
==============================================================================
--- cfe/trunk/test/Modules/Inputs/merge-template-friend/friend.h (added)
+++ cfe/trunk/test/Modules/Inputs/merge-template-friend/friend.h Wed Mar 11
13:21:02 2015
@@ -0,0 +1,4 @@
+namespace ns { template <typename T> class C; };
+class A {
+ template <typename T> friend class ::ns::C;
+};
Added: cfe/trunk/test/Modules/Inputs/merge-template-friend/module.modulemap
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/merge-template-friend/module.modulemap?rev=231950&view=auto
==============================================================================
--- cfe/trunk/test/Modules/Inputs/merge-template-friend/module.modulemap (added)
+++ cfe/trunk/test/Modules/Inputs/merge-template-friend/module.modulemap Wed
Mar 11 13:21:02 2015
@@ -0,0 +1,3 @@
+module a { header "friend.h" export * }
+module b { header "def.h" export * }
+
Added: cfe/trunk/test/Modules/merge-template-friend.cpp
URL:
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/merge-template-friend.cpp?rev=231950&view=auto
==============================================================================
--- cfe/trunk/test/Modules/merge-template-friend.cpp (added)
+++ cfe/trunk/test/Modules/merge-template-friend.cpp Wed Mar 11 13:21:02 2015
@@ -0,0 +1,22 @@
+// RUN: rm -rf %t
+//
+// RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \
+// RUN: -emit-module -fmodule-name=a -o %t/a.pcm \
+// RUN: %S/Inputs/merge-template-friend/module.modulemap
+//
+// RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \
+// RUN: -emit-module -fmodule-name=b -o %t/b.pcm \
+// RUN: %S/Inputs/merge-template-friend/module.modulemap
+//
+// RUN: %clang_cc1 -fmodules -x c++ -fmodules-cache-path=%t \
+// RUN: -I%S/Inputs/merge-template-friend \
+// RUN: -fmodule-file=%t/a.pcm \
+// RUN: -fmodule-file=%t/b.pcm \
+// RUN: -verify %s
+
+#include "friend.h"
+#include "def.h"
+
+::ns::C<int> c;
+
+// expected-no-diagnostics
_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits