+2008-04-28 Jakub Jelinek <jakub@redhat.com>
+
+ PR debug/36060
+ * dwarf2out.c (struct die_struct): Mark as chain_circular through
+ die_sub field.
+ * gengtype.c (walk_type, write_func_for_structure): Handle
+ chain_circular.
+ * doc/gty.texi: Document chain_circular.
+
2008-04-28 Richard Guenther <rguenther@suse.de>
PR tree-optimization/36066
* config/vxworks.c: Include tree.h.
(vxworks_emutls_var_fields, vxworks_emutls_var_init): New.
(vxworks_override_options): Set TLS scheme.
- * gcc/doc/tm.texi (Emulated TLS): New node.
+ * doc/tm.texi (Emulated TLS): New node.
2008-04-26 Simon Baldwin <simonb@google.com>
2008-04-01 George Helffrich <george@gcc.gnu.org>
- PR fortran/PR35154, fortran/PR23057
- * fortran/trans-common.c (create_common): Add decl to function
- chain to preserve identifier scope in debug output.
-
+ PR fortran/35154, fortran/23057
* dbxout.c: Emit .stabs debug info for Fortran COMMON block
variables as base symbol name + offset using N_BCOMM/N_ECOMM.
(is_fortran, dbxout_common_name, dbxout_common_check): New functions.
(common_check): New function to check whether symbol in Fortran COMMON.
(gen_variable_die): If COMMON, use DW_TAG_common_block.
- * testsuite/gcc.dg/debug/pr35154.c: New test to check that non-Fortran
- use of common is unchanged.
-
- * testsuite/lib/gfortran-dg.exp: New harness to compile Fortran progs
- with all combinations of debug options available on target.
- * testsuite/gfortran.dg/debug/debug.exp: Ditto.
- * testsuite/gfortran.dg/debug/trivial.f: Ditto.
- * testsuite/gfortran.dg/debug/pr35154-stabs.f: New test case for
- .stabs functionality.
- * testsuite/gfortran.dg/debug/pr35154-dwarf2.f: New test case for
- DWARF functionality.
-
2008-04-01 Volker Reichelt <v.reichelt@netcologne.de>
PR c/35436
* config/spu/spu-builtins.def: Fixed wrong parameter type in spu
intrinsics spu_convts, spu_convtu, spu_convtf.
- * testsuite/gcc.target/spu/intrinsics-3.c: New. Test error messages.
2008-02-08 Hans-Peter Nilsson <hp@axis.com>
@findex chain_next
@findex chain_prev
+@findex chain_circular
@item chain_next ("@var{expression}")
@itemx chain_prev ("@var{expression}")
+@itemx chain_circular ("@var{expression}")
It's helpful for the type machinery to know if objects are often
chained together in long lists; this lets it generate code that uses
@code{chain_prev} is an expression for the previous item. For singly
linked lists, use only @code{chain_next}; for doubly linked lists, use
both. The machinery requires that taking the next item of the
-previous item gives the original item.
+previous item gives the original item. @code{chain_circular} is similar
+to @code{chain_next}, but can be used for circular single linked lists.
@findex reorder
@item reorder ("@var{function name}")
The children of each node form a circular list linked by
die_sib. die_child points to the node *before* the "first" child node. */
-typedef struct die_struct GTY(())
+typedef struct die_struct GTY((chain_circular ("%h.die_sib")))
{
enum dwarf_tag die_tag;
char *die_symbol;
2008-04-01 George Helffrich <george@gcc.gnu.org>
+ PR fortran/35154, fortran/23057
* trans-common.c (create_common): Add decl to function
chain to preserve identifier scope in debug output.
;
else if (strcmp (oo->name, "chain_prev") == 0)
;
+ else if (strcmp (oo->name, "chain_circular") == 0)
+ ;
else if (strcmp (oo->name, "reorder") == 0)
;
else
int i;
const char *chain_next = NULL;
const char *chain_prev = NULL;
+ const char *chain_circular = NULL;
const char *mark_hook_name = NULL;
options_p opt;
struct walk_type_data d;
chain_next = opt->info;
else if (strcmp (opt->name, "chain_prev") == 0)
chain_prev = opt->info;
+ else if (strcmp (opt->name, "chain_circular") == 0)
+ chain_circular = opt->info;
else if (strcmp (opt->name, "mark_hook") == 0)
mark_hook_name = opt->info;
if (chain_prev != NULL && chain_next == NULL)
error_at_line (&s->u.s.line, "chain_prev without chain_next");
+ if (chain_circular != NULL && chain_next != NULL)
+ error_at_line (&s->u.s.line, "chain_circular with chain_next");
+ if (chain_circular != NULL)
+ chain_next = chain_circular;
d.process_field = write_types_process_field;
d.cookie = wtd;
}
else
{
- oprintf (d.of, " while (%s (xlimit", wtd->marker_routine);
+ if (chain_circular != NULL)
+ oprintf (d.of, " if (!%s (xlimit", wtd->marker_routine);
+ else
+ oprintf (d.of, " while (%s (xlimit", wtd->marker_routine);
if (wtd->param_prefix)
{
oprintf (d.of, ", xlimit, gt_%s_", wtd->param_prefix);
output_type_enum (d.of, orig_s);
}
oprintf (d.of, "))\n");
+ if (chain_circular != NULL)
+ oprintf (d.of, " return;\n do\n");
if (mark_hook_name && !wtd->skip_hooks)
{
oprintf (d.of, " {\n");
oprintf (d.of, ");\n");
oprintf (d.of, " }\n");
}
- oprintf (d.of, " while (x != xlimit)\n");
+ if (chain_circular != NULL)
+ {
+ oprintf (d.of, " while (%s (xlimit", wtd->marker_routine);
+ if (wtd->param_prefix)
+ {
+ oprintf (d.of, ", xlimit, gt_%s_", wtd->param_prefix);
+ output_mangled_typename (d.of, orig_s);
+ output_type_enum (d.of, orig_s);
+ }
+ oprintf (d.of, "));\n");
+ if (mark_hook_name && !wtd->skip_hooks)
+ oprintf (d.of, " %s (xlimit);\n", mark_hook_name);
+ oprintf (d.of, " do\n");
+ }
+ else
+ oprintf (d.of, " while (x != xlimit)\n");
}
oprintf (d.of, " {\n");
if (mark_hook_name && chain_next == NULL && !wtd->skip_hooks)
}
oprintf (d.of, " }\n");
+ if (chain_circular != NULL)
+ oprintf (d.of, " while (x != xlimit);\n");
oprintf (d.of, "}\n");
}
2008-04-01 George Helffrich <george@gcc.gnu.org>
- PRs fortran/PR35154, fortran/PR23057
+ PRs fortran/35154, fortran/23057
* gcc.dg/debug/pr35154.c: New test to check that non-Fortran
use of common is unchanged.
PR objc++/34193
* obj-c++.dg/gnu-runtime-2.mm: Fix signature of function main().
+2008-02-08 Sa Liu <saliu@de.ibm.com>
+
+ * gcc.target/spu/intrinsics-3.c: New. Test error messages.
+
2008-02-06 Alexandre Oliva <aoliva@redhat.com>
PR c++/35056