Commit 16225110 by Jakub Jelinek Committed by Jakub Jelinek

re PR ipa/84628 (attribute(warning/error) functions should not be merged together)

	PR ipa/84628
	* expr.c (expand_expr_real_1) <case CALL_EXPR>: Don't emit diagnostics
	for error or warning attributes if CALL_FROM_THUNK_P is set.
	Formatting fixes.

	* gcc.dg/pr84628.c: New test.

Co-Authored-By: Richard Biener <rguenther@suse.de>

From-SVN: r258140
parent e3a72bc5
2018-03-02 Jakub Jelinek <jakub@redhat.com>
Richard Biener <rguenther@suse.de>
PR ipa/84628
* expr.c (expand_expr_real_1) <case CALL_EXPR>: Don't emit diagnostics
for error or warning attributes if CALL_FROM_THUNK_P is set.
Formatting fixes.
2018-03-02 Jakub Jelinek <jakub@redhat.com>
PR target/56540
* config/pa/pa.h (TARGET_CPU_CPP_BUILTINS): Predefine
......
......@@ -10963,18 +10963,30 @@ expand_expr_real_1 (tree exp, rtx target, machine_mode tmode,
tree fndecl = get_callee_fndecl (exp), attr;
if (fndecl
/* Don't diagnose the error attribute in thunks, those are
artificially created. */
&& !CALL_FROM_THUNK_P (exp)
&& (attr = lookup_attribute ("error",
DECL_ATTRIBUTES (fndecl))) != NULL)
error ("%Kcall to %qs declared with attribute error: %s",
exp, identifier_to_locale (lang_hooks.decl_printable_name (fndecl, 1)),
TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr))));
{
const char *ident = lang_hooks.decl_printable_name (fndecl, 1);
error ("%Kcall to %qs declared with attribute error: %s", exp,
identifier_to_locale (ident),
TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr))));
}
if (fndecl
/* Don't diagnose the warning attribute in thunks, those are
artificially created. */
&& !CALL_FROM_THUNK_P (exp)
&& (attr = lookup_attribute ("warning",
DECL_ATTRIBUTES (fndecl))) != NULL)
warning_at (tree_nonartificial_location (exp),
0, "%Kcall to %qs declared with attribute warning: %s",
exp, identifier_to_locale (lang_hooks.decl_printable_name (fndecl, 1)),
TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr))));
{
const char *ident = lang_hooks.decl_printable_name (fndecl, 1);
warning_at (tree_nonartificial_location (exp), 0,
"%Kcall to %qs declared with attribute warning: %s",
exp, identifier_to_locale (ident),
TREE_STRING_POINTER (TREE_VALUE (TREE_VALUE (attr))));
}
/* Check for a built-in function. */
if (fndecl && DECL_BUILT_IN (fndecl))
......
2018-03-02 Jakub Jelinek <jakub@redhat.com>
PR ipa/84628
* gcc.dg/pr84628.c: New test.
PR target/56540
* gcc.target/ia64/pr56540.c: New test.
......
/* PR ipa/84628 */
/* { dg-do compile } */
/* { dg-options "-O2" } */
int f0 (void);
__attribute__((error ("err"))) void f1 (void) { f0 (); f0 (); }
__attribute__((error ("err"))) void f2 (void) { f0 (); f0 (); }
/* { dg-bogus "declared with attribute error" "" { target *-*-* } 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