Commit 5b81a980 by Marek Polacek Committed by Marek Polacek

PR c++/88612 - ICE with -Waddress-of-packed-member.

	* call.c (convert_for_arg_passing): Only give warnings with tf_warning.
	* typeck.c (convert_for_assignment): Likewise.

	* g++.dg/warn/Waddress-of-packed-member1.C: New test.

From-SVN: r267532
parent d4bf6975
2019-01-02 Marek Polacek <polacek@redhat.com>
PR c++/88612 - ICE with -Waddress-of-packed-member.
* call.c (convert_for_arg_passing): Only give warnings with tf_warning.
* typeck.c (convert_for_assignment): Likewise.
2019-01-01 Jakub Jelinek <jakub@redhat.com> 2019-01-01 Jakub Jelinek <jakub@redhat.com>
Update copyright years. Update copyright years.
......
...@@ -7630,7 +7630,8 @@ convert_for_arg_passing (tree type, tree val, tsubst_flags_t complain) ...@@ -7630,7 +7630,8 @@ convert_for_arg_passing (tree type, tree val, tsubst_flags_t complain)
maybe_warn_parm_abi (type, cp_expr_loc_or_loc (val, input_location)); maybe_warn_parm_abi (type, cp_expr_loc_or_loc (val, input_location));
} }
warn_for_address_or_pointer_of_packed_member (false, type, val); if (complain & tf_warning)
warn_for_address_or_pointer_of_packed_member (false, type, val);
return val; return val;
} }
......
...@@ -9073,7 +9073,8 @@ convert_for_assignment (tree type, tree rhs, ...@@ -9073,7 +9073,8 @@ convert_for_assignment (tree type, tree rhs,
TREE_NO_WARNING (rhs) = 1; TREE_NO_WARNING (rhs) = 1;
} }
warn_for_address_or_pointer_of_packed_member (false, type, rhs); if (complain & tf_warning)
warn_for_address_or_pointer_of_packed_member (false, type, rhs);
return perform_implicit_conversion_flags (strip_top_quals (type), rhs, return perform_implicit_conversion_flags (strip_top_quals (type), rhs,
complain, flags); complain, flags);
......
2019-01-02 Marek Polacek <polacek@redhat.com>
PR c++/88612 - ICE with -Waddress-of-packed-member.
* g++.dg/warn/Waddress-of-packed-member1.C: New test.
2019-01-02 Martin Sebor <msebor@redhat.com> 2019-01-02 Martin Sebor <msebor@redhat.com>
Jeff Law <law@redhat.com> Jeff Law <law@redhat.com>
......
// PR c++/88612
// { dg-do compile { target c++11 } }
// { dg-options "-fpack-struct -Waddress-of-packed-member" }
// { dg-prune-output "taking address of packed member" }
template<class F, class... T>
auto indirect_call(F f, T... t) -> decltype(f(t...))
{
return f(t...);
}
template<class F, class T>
struct VariadicBind
{
F f;
T t;
template<class... A>
auto operator()(A... a) -> decltype(indirect_call(f, t, a...))
{
return indirect_call(f, t, a...);
}
};
template<class F>
void apply(F f)
{
f();
}
template<class F, class V1, class... V>
void apply(F f, V1 v1, V... v)
{
apply(VariadicBind<F, int>{f, v1}, v...);
}
void func(int, int) { }
int main()
{
apply(func, 0, 0);
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment