2019-06-17 Nathan Sidwell <nathan@acm.org>
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.
===================================================================
@@ -6488,13 +6488,13 @@ lookup_type_scope_1 (tree name, tag_scop
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 (qualify_lookup (type, LOOKUP_PREFER_TYPES)
+ && (scope != ts_current
+ || LOCAL_BINDING_P (iter)
+ || DECL_CONTEXT (type) == iter->scope->this_entity))
+ return type;
- if ((scope != ts_current
- || !INHERITED_VALUE_BINDING_P (iter))
- && qualify_lookup (iter->value, LOOKUP_PREFER_TYPES))
+ if (qualify_lookup (iter->value, LOOKUP_PREFER_TYPES)
+ && (scope != ts_current
+ || !INHERITED_VALUE_BINDING_P (iter)))
return iter->value;
}
===================================================================
@@ -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;
+};