diff options
Diffstat (limited to 'gcc')
-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" } */ +} |