aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
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