Commit 3f3d6a6f by Marek Polacek Committed by Marek Polacek

PR c++/90953 - ICE with -Wmissing-format-attribute.

	* c-common.c (check_function_arguments_recurse): Use
	get_attribute_name.
	(check_missing_format_attribute): Likewise.

	* g++.dg/warn/miss-format-7.C: New test.

From-SVN: r272552
parent 390549c8
2019-06-21 Marek Polacek <polacek@redhat.com>
PR c++/90953 - ICE with -Wmissing-format-attribute.
* c-common.c (check_function_arguments_recurse): Use
get_attribute_name.
(check_missing_format_attribute): Likewise.
2019-06-19 Marek Polacek <polacek@redhat.com> 2019-06-19 Marek Polacek <polacek@redhat.com>
PR c++/60364 - noreturn after first decl not diagnosed. PR c++/60364 - noreturn after first decl not diagnosed.
......
...@@ -5753,7 +5753,7 @@ check_function_arguments_recurse (void (*callback) ...@@ -5753,7 +5753,7 @@ check_function_arguments_recurse (void (*callback)
for (attrs = TYPE_ATTRIBUTES (type); for (attrs = TYPE_ATTRIBUTES (type);
attrs; attrs;
attrs = TREE_CHAIN (attrs)) attrs = TREE_CHAIN (attrs))
if (is_attribute_p ("format_arg", TREE_PURPOSE (attrs))) if (is_attribute_p ("format_arg", get_attribute_name (attrs)))
{ {
tree inner_arg; tree inner_arg;
tree format_num_expr; tree format_num_expr;
...@@ -7601,13 +7601,13 @@ check_missing_format_attribute (tree ltype, tree rtype) ...@@ -7601,13 +7601,13 @@ check_missing_format_attribute (tree ltype, tree rtype)
tree ra; tree ra;
for (ra = TYPE_ATTRIBUTES (ttr); ra; ra = TREE_CHAIN (ra)) for (ra = TYPE_ATTRIBUTES (ttr); ra; ra = TREE_CHAIN (ra))
if (is_attribute_p ("format", TREE_PURPOSE (ra))) if (is_attribute_p ("format", get_attribute_name (ra)))
break; break;
if (ra) if (ra)
{ {
tree la; tree la;
for (la = TYPE_ATTRIBUTES (ttl); la; la = TREE_CHAIN (la)) for (la = TYPE_ATTRIBUTES (ttl); la; la = TREE_CHAIN (la))
if (is_attribute_p ("format", TREE_PURPOSE (la))) if (is_attribute_p ("format", get_attribute_name (la)))
break; break;
return !la; return !la;
} }
......
2019-06-21 Marek Polacek <polacek@redhat.com>
PR c++/90953 - ICE with -Wmissing-format-attribute.
* g++.dg/warn/miss-format-7.C: New test.
2019-06-21 Richard Biener <rguenther@suse.de> 2019-06-21 Richard Biener <rguenther@suse.de>
PR debug/90914 PR debug/90914
......
// PR c++/90953 - ICE with -Wmissing-format-attribute.
// { dg-do compile { target c++11 } }
// { dg-options "-Wmissing-format-attribute" }
namespace std {
union [[gnu::may_alias]] _Any_data{};
enum _Manager_operation { __get_type_info };
template <typename> class A;
class B {
typedef bool (*_Manager_type)(_Any_data, const _Any_data &,
_Manager_operation);
public:
_Any_data _M_functor;
_Manager_type _M_manager;
};
struct type_info { } t;
template <typename _Res, typename... _ArgTypes>
class A<_Res(_ArgTypes...)> : B {
const type_info &target_type() const noexcept;
};
template <typename _Res, typename... _ArgTypes>
const type_info &A<_Res(_ArgTypes...)>::target_type() const noexcept {
_Any_data __typeinfo_result;
_M_manager(__typeinfo_result, _M_functor, __get_type_info);
return t;
}
} // namespace std
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