aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2014-08-14 13:13:41 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2014-08-14 13:13:41 +0000
commit833f94c0119e638645a2adc461e385dc1ffc5e2b (patch)
tree7194779d0703475b4e3427ebc4e5f9580a30f224 /gcc
parente8af7616a98ddf54e872607e874f9bd332b8257d (diff)
downloadgcc-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/ChangeLog5
-rw-r--r--gcc/lto/lto-lang.c11
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