From 41d93b16cac5b348b7883e259f7880b4a0addc23 Mon Sep 17 00:00:00 2001 From: Nathan Sidwell Date: Mon, 17 Jun 2019 13:46:59 +0000 Subject: [PATCH] [PR c++/90754] name lookup ICE https://gcc.gnu.org/ml/gcc-patches/2019-06/msg00952.html PR c++/90754 * name-lookup.c (lookup_type_scope_1): Calll qualify_lookup before checking context. PR c++/90754 * g++.dg/lookup/pr90754.C: New. From-SVN: r272384 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/name-lookup.c | 18 +++++++++--------- gcc/testsuite/ChangeLog | 5 +++++ gcc/testsuite/g++.dg/lookup/pr90754.C | 11 +++++++++++ 4 files changed, 31 insertions(+), 9 deletions(-) create mode 100644 gcc/testsuite/g++.dg/lookup/pr90754.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ad35314..4e6d626 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2019-06-17 Nathan Sidwell + + PR c++/90754 + * name-lookup.c (lookup_type_scope_1): Calll qualify_lookup before + checking context. + 2019-06-14 Marek Polacek PR c++/90884 - stray note with -Wctor-dtor-privacy. diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index 632253a..f4c34ed 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -6487,15 +6487,15 @@ lookup_type_scope_1 (tree name, tag_scope scope) typedef struct C {} C; correctly. */ if (tree type = iter->type) - if ((scope != ts_current - || LOCAL_BINDING_P (iter) - || DECL_CONTEXT (type) == iter->scope->this_entity) - && qualify_lookup (iter->type, LOOKUP_PREFER_TYPES)) - return iter->type; - - if ((scope != ts_current - || !INHERITED_VALUE_BINDING_P (iter)) - && qualify_lookup (iter->value, LOOKUP_PREFER_TYPES)) + if (qualify_lookup (type, LOOKUP_PREFER_TYPES) + && (scope != ts_current + || LOCAL_BINDING_P (iter) + || DECL_CONTEXT (type) == iter->scope->this_entity)) + return type; + + if (qualify_lookup (iter->value, LOOKUP_PREFER_TYPES) + && (scope != ts_current + || !INHERITED_VALUE_BINDING_P (iter))) return iter->value; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index aba3d20..13cd469 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-06-17 Nathan Sidwell + + PR c++/90754 + * g++.dg/lookup/pr90754.C: New. + 2019-06-17 Wilco Dijkstra PR middle-end/64242 diff --git a/gcc/testsuite/g++.dg/lookup/pr90754.C b/gcc/testsuite/g++.dg/lookup/pr90754.C new file mode 100644 index 0000000..f68f6d4 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/pr90754.C @@ -0,0 +1,11 @@ +// PR c++/90754 ICE in type lookup. + +class A { + struct COMTypeInfo; +}; +class B { + struct COMTypeInfo; +}; +class C : A, B { + struct COMTypeInfo; +}; -- 2.7.4