diff options
-rw-r--r-- | gcc/c-family/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/c-family/c-ada-spec.c | 10 |
2 files changed, 15 insertions, 2 deletions
diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 9a438f0..04b6971 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,6 +1,11 @@ +2012-10-11 Eric Botcazou <ebotcazou@adacore.com> + + * c-ada-spec.c (dump_ada_template): Bail out for template declarations + declaring something coming from another file. + 2012-10-10 Arnaud Charlet <charlet@adacore.com> -PR ada/54845 + PR ada/54845 * c-ada-spec.c (print_ada_struct_decl): Increase buf size. 2012-10-09 Paolo Carlini <paolo.carlini@oracle.com> diff --git a/gcc/c-family/c-ada-spec.c b/gcc/c-family/c-ada-spec.c index 36a86e5..631ee7a 100644 --- a/gcc/c-family/c-ada-spec.c +++ b/gcc/c-family/c-ada-spec.c @@ -1700,10 +1700,18 @@ static int dump_ada_template (pretty_printer *buffer, tree t, int (*cpp_check)(tree, cpp_operation), int spc) { - tree inst = DECL_VINDEX (t); /* DECL_VINDEX is DECL_TEMPLATE_INSTANTIATIONS in this context. */ + tree inst = DECL_VINDEX (t); + /* DECL_RESULT_FLD is DECL_TEMPLATE_RESULT in this context. */ + tree result = DECL_RESULT_FLD (t); int num_inst = 0; + /* Don't look at template declarations declaring something coming from + another file. This can occur for template friend declarations. */ + if (LOCATION_FILE (decl_sloc (result, false)) + != LOCATION_FILE (decl_sloc (t, false))) + return 0; + while (inst && inst != error_mark_node) { tree types = TREE_PURPOSE (inst); |