diff options
author | Jakub Jelinek <jakub@redhat.com> | 2018-03-02 17:19:43 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2018-03-02 17:19:43 +0100 |
commit | 16225110ca8ae760f001c57571fa7e7e03c2c1fc (patch) | |
tree | 507c8717f341392d7b3c7b820b83416ffbd72560 /gcc/expr.c | |
parent | e3a72bc5dba4df94f74e6c49849e7b1b0c45ac11 (diff) | |
download | gcc-16225110ca8ae760f001c57571fa7e7e03c2c1fc.zip gcc-16225110ca8ae760f001c57571fa7e7e03c2c1fc.tar.gz gcc-16225110ca8ae760f001c57571fa7e7e03c2c1fc.tar.bz2 |
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
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 26 |
1 files changed, 19 insertions, 7 deletions
@@ -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)) |