aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcc/gimple-range-trace.cc20
-rw-r--r--gcc/gimple-range-trace.h14
2 files changed, 34 insertions, 0 deletions
diff --git a/gcc/gimple-range-trace.cc b/gcc/gimple-range-trace.cc
index 449ed83..5175d14 100644
--- a/gcc/gimple-range-trace.cc
+++ b/gcc/gimple-range-trace.cc
@@ -155,11 +155,31 @@ debug_seed_ranger (gimple_ranger &ranger)
}
}
+// Change the current dump_file and dump_flags to F and FLAGS while
+// saving them for later restoring.
+
+push_dump_file::push_dump_file (FILE *f, dump_flags_t flags)
+{
+ old_dump_file = dump_file;
+ old_dump_flags = dump_flags;
+ dump_file = f;
+ dump_flags = flags;
+}
+
+// Restore saved dump_file and dump_flags.
+
+push_dump_file::~push_dump_file ()
+{
+ dump_file = old_dump_file;
+ dump_flags = old_dump_flags;
+}
+
// Dump all that ranger knows for the current function.
DEBUG_FUNCTION void
dump_ranger (FILE *out)
{
+ push_dump_file save (out, dump_flags);
gimple_ranger ranger;
fprintf (out, ";; Function ");
diff --git a/gcc/gimple-range-trace.h b/gcc/gimple-range-trace.h
index d2d1a8b..b9546a2 100644
--- a/gcc/gimple-range-trace.h
+++ b/gcc/gimple-range-trace.h
@@ -58,4 +58,18 @@ range_tracer::header (const char *str)
return do_header (str);
return 0;
}
+
+// RAII class to change current dump_file and dump_flags, and restore
+// when the object goes out of scope.
+
+class push_dump_file
+{
+public:
+ push_dump_file (FILE *, dump_flags_t);
+ ~push_dump_file ();
+private:
+ FILE *old_dump_file;
+ dump_flags_t old_dump_flags;
+};
+
#endif // GCC_GIMPLE_RANGE_TRACE_H