diff options
author | Richard Biener <rguenther@suse.de> | 2022-02-14 09:29:20 +0100 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2022-02-14 09:31:17 +0100 |
commit | f7e26913187ce0ed35e340c4fd14104bbcd1932e (patch) | |
tree | ed5f56554192bcf897860116ef41be7309c65c75 | |
parent | 3f10e0d50b5e3b3f64bc9a1a29177518d5f4468d (diff) | |
download | gcc-f7e26913187ce0ed35e340c4fd14104bbcd1932e.zip gcc-f7e26913187ce0ed35e340c4fd14104bbcd1932e.tar.gz gcc-f7e26913187ce0ed35e340c4fd14104bbcd1932e.tar.bz2 |
c/104505 - ICE with internal function call in diagnostic expression
The following handles internal function calls similar to how the
C++ frontend does, avoiding ICEing on those.
2022-02-14 Richard Biener <rguenther@suse.de>
PR c/104505
gcc/c-family/
* c-pretty-print.cc (c_pretty_printer::postfix_expression): Handle
internal function calls.
gcc/testsuite/
* c-c++-common/pr104505.c: New testcase.
-rw-r--r-- | gcc/c-family/c-pretty-print.cc | 6 | ||||
-rw-r--r-- | gcc/testsuite/c-c++-common/pr104505.c | 12 |
2 files changed, 17 insertions, 1 deletions
diff --git a/gcc/c-family/c-pretty-print.cc b/gcc/c-family/c-pretty-print.cc index ceedaea..dac1775 100644 --- a/gcc/c-family/c-pretty-print.cc +++ b/gcc/c-family/c-pretty-print.cc @@ -32,6 +32,7 @@ along with GCC; see the file COPYING3. If not see #include "selftest.h" #include "langhooks.h" #include "options.h" +#include "internal-fn.h" /* The pretty-printer code is primarily designed to closely follow (GNU) C and C++ grammars. That is to be contrasted with spaghetti @@ -1601,7 +1602,10 @@ c_pretty_printer::postfix_expression (tree e) { call_expr_arg_iterator iter; tree arg; - postfix_expression (CALL_EXPR_FN (e)); + if (CALL_EXPR_FN (e) != NULL_TREE) + postfix_expression (CALL_EXPR_FN (e)); + else + pp_string (this, internal_fn_name (CALL_EXPR_IFN (e))); pp_c_left_paren (this); FOR_EACH_CALL_EXPR_ARG (arg, iter, e) { diff --git a/gcc/testsuite/c-c++-common/pr104505.c b/gcc/testsuite/c-c++-common/pr104505.c new file mode 100644 index 0000000..7fa3d84 --- /dev/null +++ b/gcc/testsuite/c-c++-common/pr104505.c @@ -0,0 +1,12 @@ +/* { dg-do compile } */ + +typedef char __attribute__((__vector_size__ (8))) U; +typedef short __attribute__((__vector_size__ (16))) V; + +U u; + +void +foo (V v) +{ + u = __builtin_shufflevector (u, u, __builtin_convertvector (v, U)); /* { dg-error "invalid element index" } */ +} |