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