We also need unlowered_expr_type when considering associated types for ADL.

Tested x86_64-pc-linux-gnu, applying to trunk.

        * name-lookup.c: Use unlowered_expr_type.
---
 gcc/cp/name-lookup.c                       |  2 +-
 gcc/testsuite/g++.dg/overload/bit-field1.C | 18 ++++++++++++++++++
 2 files changed, 19 insertions(+), 1 deletion(-)
 create mode 100644 gcc/testsuite/g++.dg/overload/bit-field1.C

diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c
index e82eaf222c0..e64cd9a9d66 100644
--- a/gcc/cp/name-lookup.c
+++ b/gcc/cp/name-lookup.c
@@ -908,7 +908,7 @@ name_lookup::adl_expr (tree expr)
 
   if (TREE_TYPE (expr) != unknown_type_node)
     {
-      adl_type (TREE_TYPE (expr));
+      adl_type (unlowered_expr_type (expr));
       return;
     }
 
diff --git a/gcc/testsuite/g++.dg/overload/bit-field1.C 
b/gcc/testsuite/g++.dg/overload/bit-field1.C
new file mode 100644
index 00000000000..318caaaeb65
--- /dev/null
+++ b/gcc/testsuite/g++.dg/overload/bit-field1.C
@@ -0,0 +1,18 @@
+// PR c++/92859
+// { dg-do compile { target c++11 } }
+
+void f(int) = delete;
+
+struct ES { 
+  enum E { v }; 
+  friend void f(E) { }
+};
+
+struct S {
+  ES::E e : 1; 
+};
+
+int main() {
+  S s{}; 
+  f (s.e);
+}

base-commit: 945f2b19497eff52ef44923d291bf0fdba043299
-- 
2.18.1

Reply via email to