diff options
author | Richard Biener <rguenther@suse.de> | 2014-08-14 13:13:41 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2014-08-14 13:13:41 +0000 |
commit | 833f94c0119e638645a2adc461e385dc1ffc5e2b (patch) | |
tree | 7194779d0703475b4e3427ebc4e5f9580a30f224 /gcc | |
parent | e8af7616a98ddf54e872607e874f9bd332b8257d (diff) | |
download | gcc-833f94c0119e638645a2adc461e385dc1ffc5e2b.zip gcc-833f94c0119e638645a2adc461e385dc1ffc5e2b.tar.gz gcc-833f94c0119e638645a2adc461e385dc1ffc5e2b.tar.bz2 |
re PR lto/62067 (lto-lang.c:549: too many calls to va_end on some code paths ?)
2014-08-14 Richard Biener <rguenther@suse.de>
PR lto/62067
* lto-lang.c (def_fn_type): Fix error handling wrt va_end.
From-SVN: r213960
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/lto/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/lto/lto-lang.c | 11 |
2 files changed, 11 insertions, 5 deletions
diff --git a/gcc/lto/ChangeLog b/gcc/lto/ChangeLog index 18f483c..3483711 100644 --- a/gcc/lto/ChangeLog +++ b/gcc/lto/ChangeLog @@ -1,3 +1,8 @@ +2014-08-14 Richard Biener <rguenther@suse.de> + + PR lto/62067 + * lto-lang.c (def_fn_type): Fix error handling wrt va_end. + 2014-08-08 Richard Biener <rguenther@suse.de> * lto.c (lto_read_decls): Adjust for lto_input_block changes. diff --git a/gcc/lto/lto-lang.c b/gcc/lto/lto-lang.c index b3b9ff7..9e8524a 100644 --- a/gcc/lto/lto-lang.c +++ b/gcc/lto/lto-lang.c @@ -524,6 +524,7 @@ def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...) tree *args = XALLOCAVEC (tree, n); va_list list; int i; + bool err = false; va_start (list, n); for (i = 0; i < n; ++i) @@ -531,22 +532,22 @@ def_fn_type (builtin_type def, builtin_type ret, bool var, int n, ...) builtin_type a = (builtin_type) va_arg (list, int); t = builtin_types[a]; if (t == error_mark_node) - goto egress; + err = true; args[i] = t; } va_end (list); t = builtin_types[ret]; + if (err) + t = error_mark_node; if (t == error_mark_node) - goto egress; - if (var) + ; + else if (var) t = build_varargs_function_type_array (t, n, args); else t = build_function_type_array (t, n, args); - egress: builtin_types[def] = t; - va_end (list); } /* Used to help initialize the builtin-types.def table. When a type of |