r232411 - [modules] If we find more formerly-canonical declarations of an entity while

Richard Smith richard-llvm at metafoo.co.uk
Mon Mar 16 13:54:08 PDT 2015


Author: rsmith
Date: Mon Mar 16 15:54:07 2015
New Revision: 232411

URL: http://llvm.org/viewvc/llvm-project?rev=232411&view=rev
Log:
[modules] If we find more formerly-canonical declarations of an entity while
building its redecl chains, make sure we pull in the redeclarations of those
canonical declarations.

It's pretty difficult to reach a situation where we can find more canonical
declarations of an entity while building its redecl chains; I think the
provided testcase (4 modules and 7 declarations) cannot be reduced further.

Added:
    cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/
    cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/a.h
    cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/b.h
    cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/c.h
    cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/d.h
    cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/module.modulemap
    cfe/trunk/test/Modules/redecl-found-building-chains.cpp
Modified:
    cfe/trunk/lib/Serialization/ASTReader.cpp

Modified: cfe/trunk/lib/Serialization/ASTReader.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTReader.cpp?rev=232411&r1=232410&r2=232411&view=diff
==============================================================================
--- cfe/trunk/lib/Serialization/ASTReader.cpp (original)
+++ cfe/trunk/lib/Serialization/ASTReader.cpp Mon Mar 16 15:54:07 2015
@@ -8304,8 +8304,8 @@ void ASTReader::finishPendingActions() {
 
     // Load pending declaration chains.
     for (unsigned I = 0; I != PendingDeclChains.size(); ++I) {
-      loadPendingDeclChain(PendingDeclChains[I]);
       PendingDeclChainsKnown.erase(PendingDeclChains[I]);
+      loadPendingDeclChain(PendingDeclChains[I]);
     }
     assert(PendingDeclChainsKnown.empty());
     PendingDeclChains.clear();

Added: cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/a.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/a.h?rev=232411&view=auto
==============================================================================
--- cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/a.h (added)
+++ cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/a.h Mon Mar 16 15:54:07 2015
@@ -0,0 +1 @@
+struct A;

Added: cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/b.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/b.h?rev=232411&view=auto
==============================================================================
--- cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/b.h (added)
+++ cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/b.h Mon Mar 16 15:54:07 2015
@@ -0,0 +1,2 @@
+struct A; // ensure that loading b's canonical decl doesn't load the definition
+struct A {};

Added: cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/c.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/c.h?rev=232411&view=auto
==============================================================================
--- cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/c.h (added)
+++ cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/c.h Mon Mar 16 15:54:07 2015
@@ -0,0 +1 @@
+struct A;

Added: cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/d.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/d.h?rev=232411&view=auto
==============================================================================
--- cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/d.h (added)
+++ cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/d.h Mon Mar 16 15:54:07 2015
@@ -0,0 +1,6 @@
+#include "a.h" // ensure that our canonical decl is not from b
+struct A;
+#include "b.h"
+struct A;
+#include "c.h" // ensure that our type for A doesn't reference the definition in b
+struct A;

Added: cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/module.modulemap
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/module.modulemap?rev=232411&view=auto
==============================================================================
--- cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/module.modulemap (added)
+++ cfe/trunk/test/Modules/Inputs/redecl-found-building-chains/module.modulemap Mon Mar 16 15:54:07 2015
@@ -0,0 +1,4 @@
+module a { header "a.h" export * }
+module b { header "b.h" export * }
+module c { header "c.h" export * }
+module d { header "d.h" export * }

Added: cfe/trunk/test/Modules/redecl-found-building-chains.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/redecl-found-building-chains.cpp?rev=232411&view=auto
==============================================================================
--- cfe/trunk/test/Modules/redecl-found-building-chains.cpp (added)
+++ cfe/trunk/test/Modules/redecl-found-building-chains.cpp Mon Mar 16 15:54:07 2015
@@ -0,0 +1,6 @@
+// RUN: rm -rf %t
+// RUN: %clang_cc1 -fmodules -fmodules-cache-path=%t -I%S/Inputs/redecl-found-building-chains -verify %s
+// expected-no-diagnostics
+int n, m;
+#include "d.h"
+A a;





More information about the cfe-commits mailing list