PR c++/81236 - auto variable and auto function
* pt.c (tsubst_baselink): Update the type of the BASELINK after mark_used. From-SVN: r258547
This commit is contained in:
parent
e786e485a7
commit
b149eb04c8
@ -1,3 +1,9 @@
|
||||
2018-03-14 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/81236 - auto variable and auto function
|
||||
* pt.c (tsubst_baselink): Update the type of the BASELINK after
|
||||
mark_used.
|
||||
|
||||
2018-03-14 Jason Merrill <jason@redhat.com>
|
||||
|
||||
PR c++/83916 - ICE with template template parameters.
|
||||
|
13
gcc/cp/pt.c
13
gcc/cp/pt.c
@ -14700,9 +14700,16 @@ tsubst_baselink (tree baselink, tree object_type,
|
||||
/* If lookup found a single function, mark it as used at this point.
|
||||
(If lookup found multiple functions the one selected later by
|
||||
overload resolution will be marked as used at that point.) */
|
||||
if (!template_id_p && !really_overloaded_fn (fns)
|
||||
&& !mark_used (OVL_FIRST (fns), complain) && !(complain & tf_error))
|
||||
return error_mark_node;
|
||||
if (!template_id_p && !really_overloaded_fn (fns))
|
||||
{
|
||||
tree fn = OVL_FIRST (fns);
|
||||
bool ok = mark_used (fn, complain);
|
||||
if (!ok && !(complain & tf_error))
|
||||
return error_mark_node;
|
||||
if (ok && BASELINK_P (baselink))
|
||||
/* We might have instantiated an auto function. */
|
||||
TREE_TYPE (baselink) = TREE_TYPE (fn);
|
||||
}
|
||||
|
||||
if (BASELINK_P (baselink))
|
||||
{
|
||||
|
15
gcc/testsuite/g++.dg/cpp1y/auto-fn48.C
Normal file
15
gcc/testsuite/g++.dg/cpp1y/auto-fn48.C
Normal file
@ -0,0 +1,15 @@
|
||||
// { dg-do compile { target c++14 } }
|
||||
|
||||
template <class T> struct A
|
||||
{
|
||||
static auto fn() { }
|
||||
static void f()
|
||||
{
|
||||
auto x = fn;
|
||||
}
|
||||
};
|
||||
|
||||
int main()
|
||||
{
|
||||
A<int>::f();
|
||||
}
|
12
gcc/testsuite/g++.dg/cpp1y/auto-fn49.C
Normal file
12
gcc/testsuite/g++.dg/cpp1y/auto-fn49.C
Normal file
@ -0,0 +1,12 @@
|
||||
// CWG issue 2335
|
||||
// { dg-do compile { target c++14 } }
|
||||
|
||||
template <class... Ts> struct partition_indices {
|
||||
static auto compute_right () {}
|
||||
static constexpr auto right = compute_right;
|
||||
};
|
||||
auto foo () -> partition_indices<>;
|
||||
void f() {
|
||||
auto x = foo();
|
||||
auto y = x.right;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user