Revert "PR c++/81525 - wrong constant value with generic lambda"

From-SVN: r251002
This commit is contained in:
Jason Merrill 2017-08-09 16:18:59 -04:00
parent c02c8b11e1
commit 5b6f97c9a7
3 changed files with 0 additions and 38 deletions

View File

@ -1,9 +1,3 @@
2017-08-09 Jason Merrill <jason@redhat.com>
PR c++/81525 - wrong constant value with generic lambda
* pt.c (tsubst_decl) [VAR_DECL]: Avoid clobbering auto.
(tsubst_copy) [VAR_DECL]: Handle auto.
2017-08-09 Leonid Koppel <lkoppel@uwaterloo.ca>
PR c++/67054 - Inherited ctor with non-default-constructible members

View File

@ -12896,15 +12896,7 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain)
&& VAR_HAD_UNKNOWN_BOUND (t)
&& type != error_mark_node)
type = strip_array_domain (type);
tree auto_node = type_uses_auto (type);
int len = TREE_VEC_LENGTH (args);
if (auto_node)
/* Mask off any template args past the variable's context so we
don't replace the auto with an unrelated argument. */
TREE_VEC_LENGTH (args) = TEMPLATE_TYPE_LEVEL (auto_node) - 1;
type = tsubst (type, args, complain, in_decl);
if (auto_node)
TREE_VEC_LENGTH (args) = len;
}
if (VAR_P (r))
{
@ -14695,10 +14687,6 @@ tsubst_copy (tree t, tree args, tsubst_flags_t complain, tree in_decl)
DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r)
= TREE_CONSTANT (r) = true;
DECL_INITIAL (r) = init;
if (tree auto_node = type_uses_auto (TREE_TYPE (r)))
TREE_TYPE (r)
= do_auto_deduction (TREE_TYPE (r), init, auto_node,
complain, adc_variable_type);
}
gcc_assert (cp_unevaluated_operand || TREE_STATIC (r)
|| decl_constant_var_p (r)

View File

@ -1,20 +0,0 @@
// PR c++/81525
// { dg-do compile { target c++14 } }
template <int i> struct A {
constexpr operator int () const { return i; }
};
template <int i> constexpr A<i> a = {};
template <typename F> void foo (F f) {
f (A<0>{});
}
template <typename T>
void bar (T) {
constexpr auto N = a<1>;
auto f = [&] (auto i) {
static_assert (static_cast<int>(N) == 1, "");
};
foo (f);
}
int main () { bar (0); }