From: Jason Merrill Date: Tue, 31 May 2022 20:31:35 +0000 (-0400) Subject: c++: auto and dependent member name [PR105734] X-Git-Tag: basepoints/gcc-14~6287 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=e2e471d83d16449a325315c0f33dc52b90ce0fac;p=thirdparty%2Fgcc.git c++: auto and dependent member name [PR105734] In r12-3643 I improved our handling of type names after . or -> when unqualified lookup doesn't find anything, but it needs to handle auto specially. PR c++/105734 gcc/cp/ChangeLog: * parser.cc (cp_parser_postfix_dot_deref_expression): Use typeof if the expression has auto type. gcc/testsuite/ChangeLog: * g++.dg/cpp0x/auto57.C: New test. --- diff --git a/gcc/cp/parser.cc b/gcc/cp/parser.cc index 0eefa740dc5..3fc73442da5 100644 --- a/gcc/cp/parser.cc +++ b/gcc/cp/parser.cc @@ -8262,7 +8262,7 @@ cp_parser_postfix_dot_deref_expression (cp_parser *parser, tree type = TREE_TYPE (postfix_expression); /* If we don't have a (type-dependent) object of class type, use typeof to figure out the type of the object. */ - if (type == NULL_TREE) + if (type == NULL_TREE || is_auto (type)) type = finish_typeof (postfix_expression); parser->context->object_type = type; } diff --git a/gcc/testsuite/g++.dg/cpp0x/auto57.C b/gcc/testsuite/g++.dg/cpp0x/auto57.C new file mode 100644 index 00000000000..fedcfde2f0c --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/auto57.C @@ -0,0 +1,15 @@ +// PR c++/105734 +// { dg-do compile { target c++11 } } + +namespace N { + struct A { }; + A f(A); +} + +template +void bar() { + auto m = f(T()); + m.~A(); +} + +void foo() { bar(); }