diff options
author | Richard Biener <rguenther@suse.de> | 2021-02-24 09:18:05 +0100 |
---|---|---|
committer | Richard Biener <rguenther@suse.de> | 2021-02-24 10:24:14 +0100 |
commit | 084963dcaca2f0836366fdb001561e29ecbfb483 (patch) | |
tree | 82d4dda97d0aad40838f141f07ea0bfb05f2c382 /gcc/builtins.c | |
parent | 71e24b060145e2eed070a52bdd0a13e37f60db77 (diff) | |
download | gcc-084963dcaca2f0836366fdb001561e29ecbfb483.zip gcc-084963dcaca2f0836366fdb001561e29ecbfb483.tar.gz gcc-084963dcaca2f0836366fdb001561e29ecbfb483.tar.bz2 |
c/99224 - avoid ICEing on invalid __builtin_next_arg
This avoids crashes with __builtin_next_arg on non-parameters. For
the specific testcase we arrive with an anonymous SSA_NAME so that
SSA_NAME_VAR becomes NULL and we crash.
2021-02-24 Richard Biener <rguenther@suse.de>
PR c/99224
* builtins.c (fold_builtin_next_arg): Avoid NULL arg.
* gcc.dg/pr99224.c: New testcase.
Diffstat (limited to 'gcc/builtins.c')
-rw-r--r-- | gcc/builtins.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/builtins.c b/gcc/builtins.c index 0aed008..42150ce 100644 --- a/gcc/builtins.c +++ b/gcc/builtins.c @@ -12597,7 +12597,8 @@ fold_builtin_next_arg (tree exp, bool va_start_p) arg = CALL_EXPR_ARG (exp, 0); } - if (TREE_CODE (arg) == SSA_NAME) + if (TREE_CODE (arg) == SSA_NAME + && SSA_NAME_VAR (arg)) arg = SSA_NAME_VAR (arg); /* We destructively modify the call to be __builtin_va_start (ap, 0) |