[gcc(refs/users/giulianob/heads/autopar_rebase2)] c-family: Avoid ICEs on calls to internal functions [PR95963]
Giuliano Belinassi
giulianob@gcc.gnu.org
Tue Aug 18 00:18:25 GMT 2020
https://gcc.gnu.org/g:269bee37b973e84f33235a5c1f95e4f4e8f75454
commit 269bee37b973e84f33235a5c1f95e4f4e8f75454
Author: Jakub Jelinek <jakub@redhat.com>
Date: Tue Jun 30 11:42:54 2020 +0200
c-family: Avoid ICEs on calls to internal functions [PR95963]
The following testcase ICEs since recent Martin's -Wnonnull changes,
we see a CALL_EXPR and ICE because CALL_EXPR_FN is NULL, which is
valid for internal function calls. Internal function calls don't have a
function type, and will never have format_arg attribute on them nor will
serve as the i18n routines -Wformat cares about.
2020-06-30 Jakub Jelinek <jakub@redhat.com>
PR c++/95963
* c-common.c (check_function_arguments_recurse): Don't crash on
calls to internal functions.
* g++.dg/cpp1z/launder9.C: New test.
Diff:
---
gcc/c-family/c-common.c | 2 +-
gcc/testsuite/g++.dg/cpp1z/launder9.C | 11 +++++++++++
2 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/gcc/c-family/c-common.c b/gcc/c-family/c-common.c
index cfd12c0177f..aae1ddb6b89 100644
--- a/gcc/c-family/c-common.c
+++ b/gcc/c-family/c-common.c
@@ -5815,7 +5815,7 @@ check_function_arguments_recurse (void (*callback)
return;
}
- if (TREE_CODE (param) == CALL_EXPR)
+ if (TREE_CODE (param) == CALL_EXPR && CALL_EXPR_FN (param))
{
tree type = TREE_TYPE (TREE_TYPE (CALL_EXPR_FN (param)));
tree attrs;
diff --git a/gcc/testsuite/g++.dg/cpp1z/launder9.C b/gcc/testsuite/g++.dg/cpp1z/launder9.C
new file mode 100644
index 00000000000..89d7ecfddb6
--- /dev/null
+++ b/gcc/testsuite/g++.dg/cpp1z/launder9.C
@@ -0,0 +1,11 @@
+// PR c++/95963
+// { dg-do compile }
+// { dg-options "-Wnonnull" }
+
+struct A { virtual void foo (); };
+
+void
+bar (A *p)
+{
+ __builtin_launder (p)->foo ();
+}
More information about the Gcc-cvs
mailing list