r280728 - Modules: Fix an assertion in DeclContext::buildLookup.
Manman Ren via cfe-commits
cfe-commits at lists.llvm.org
Tue Sep 6 11:16:54 PDT 2016
Author: mren
Date: Tue Sep 6 13:16:54 2016
New Revision: 280728
URL: http://llvm.org/viewvc/llvm-project?rev=280728&view=rev
Log:
Modules: Fix an assertion in DeclContext::buildLookup.
When calling getMostRecentDecl, we can pull in more definitions from
a module. We call getPrimaryContext afterwards to make sure that
we buildLookup on a primary context.
rdar://27926200
Added:
cfe/trunk/test/Modules/Inputs/lookup-assert/
cfe/trunk/test/Modules/Inputs/lookup-assert/Base.h
cfe/trunk/test/Modules/Inputs/lookup-assert/Derive.h
cfe/trunk/test/Modules/Inputs/lookup-assert/H3.h
cfe/trunk/test/Modules/Inputs/lookup-assert/module.map
cfe/trunk/test/Modules/lookup-assert.m
Modified:
cfe/trunk/lib/AST/DeclBase.cpp
Modified: cfe/trunk/lib/AST/DeclBase.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/DeclBase.cpp?rev=280728&r1=280727&r2=280728&view=diff
==============================================================================
--- cfe/trunk/lib/AST/DeclBase.cpp (original)
+++ cfe/trunk/lib/AST/DeclBase.cpp Tue Sep 6 13:16:54 2016
@@ -1411,10 +1411,6 @@ DeclContext::lookup(DeclarationName Name
assert(DeclKind != Decl::LinkageSpec &&
"Should not perform lookups into linkage specs!");
- const DeclContext *PrimaryContext = getPrimaryContext();
- if (PrimaryContext != this)
- return PrimaryContext->lookup(Name);
-
// If we have an external source, ensure that any later redeclarations of this
// context have been loaded, since they may add names to the result of this
// lookup (or add external visible storage).
@@ -1422,6 +1418,12 @@ DeclContext::lookup(DeclarationName Name
if (Source)
(void)cast<Decl>(this)->getMostRecentDecl();
+ // getMostRecentDecl can change the result of getPrimaryContext. Call
+ // getPrimaryContext afterwards.
+ const DeclContext *PrimaryContext = getPrimaryContext();
+ if (PrimaryContext != this)
+ return PrimaryContext->lookup(Name);
+
if (hasExternalVisibleStorage()) {
assert(Source && "external visible storage but no external source?");
Added: cfe/trunk/test/Modules/Inputs/lookup-assert/Base.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/lookup-assert/Base.h?rev=280728&view=auto
==============================================================================
--- cfe/trunk/test/Modules/Inputs/lookup-assert/Base.h (added)
+++ cfe/trunk/test/Modules/Inputs/lookup-assert/Base.h Tue Sep 6 13:16:54 2016
@@ -0,0 +1,4 @@
+ at interface BaseInterface
+- (void) test;
+ at end
+
Added: cfe/trunk/test/Modules/Inputs/lookup-assert/Derive.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/lookup-assert/Derive.h?rev=280728&view=auto
==============================================================================
--- cfe/trunk/test/Modules/Inputs/lookup-assert/Derive.h (added)
+++ cfe/trunk/test/Modules/Inputs/lookup-assert/Derive.h Tue Sep 6 13:16:54 2016
@@ -0,0 +1,3 @@
+#include "Base.h"
+ at interface DerivedInterface : BaseInterface
+ at end
Added: cfe/trunk/test/Modules/Inputs/lookup-assert/H3.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/lookup-assert/H3.h?rev=280728&view=auto
==============================================================================
--- cfe/trunk/test/Modules/Inputs/lookup-assert/H3.h (added)
+++ cfe/trunk/test/Modules/Inputs/lookup-assert/H3.h Tue Sep 6 13:16:54 2016
@@ -0,0 +1 @@
+#include "Base.h"
Added: cfe/trunk/test/Modules/Inputs/lookup-assert/module.map
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/Inputs/lookup-assert/module.map?rev=280728&view=auto
==============================================================================
--- cfe/trunk/test/Modules/Inputs/lookup-assert/module.map (added)
+++ cfe/trunk/test/Modules/Inputs/lookup-assert/module.map Tue Sep 6 13:16:54 2016
@@ -0,0 +1,4 @@
+module X {
+ header "H3.h"
+ export *
+}
Added: cfe/trunk/test/Modules/lookup-assert.m
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Modules/lookup-assert.m?rev=280728&view=auto
==============================================================================
--- cfe/trunk/test/Modules/lookup-assert.m (added)
+++ cfe/trunk/test/Modules/lookup-assert.m Tue Sep 6 13:16:54 2016
@@ -0,0 +1,10 @@
+// RUN: rm -rf %t
+// RUN: %clang_cc1 -fmodules-cache-path=%t -fmodules -fimplicit-module-maps -I %S/Inputs/lookup-assert %s -verify
+// expected-no-diagnostics
+
+#include "Derive.h"
+#import <H3.h>
+ at implementation DerivedInterface
+- (void)test {
+}
+ at end
More information about the cfe-commits
mailing list