[jit] Fix various issues relating to gcc_jit_location.

David Malcolm dmalcolm@redhat.com
Thu Oct 24 21:19:00 GMT 2013


I've committed the following fixes to the dmalcolm/jit branch:

(Found via fuzz testing)

gcc/jit/
	* internal-api.c (gcc::jit::function::add_eval): Handle non-NULL
	locations.
	(gcc::jit::context::handle_locations): Fix test for the various
	kinds of declarations, replacing use of DECL_MINIMAL_CHECK,
	which aborts on failure (such as if we saw a type).
	* libgccjit.h (GCC_JIT_BOOL_OPTION_DEBUGINFO): Fix out-of-date
	comment.
---
 gcc/jit/ChangeLog.jit  | 10 ++++++++++
 gcc/jit/internal-api.c |  6 ++++--
 gcc/jit/libgccjit.h    |  4 ++--
 3 files changed, 16 insertions(+), 4 deletions(-)

diff --git a/gcc/jit/ChangeLog.jit b/gcc/jit/ChangeLog.jit
index 6308c6d..30664be 100644
--- a/gcc/jit/ChangeLog.jit
+++ b/gcc/jit/ChangeLog.jit
@@ -1,3 +1,13 @@
+2013-10-24  David Malcolm  <dmalcolm@redhat.com>
+
+	* internal-api.c (gcc::jit::function::add_eval): Handle non-NULL
+	locations.
+	(gcc::jit::context::handle_locations): Fix test for the various
+	kinds of declarations, replacing use of DECL_MINIMAL_CHECK,
+	which aborts on failure (such as if we saw a type).
+	* libgccjit.h (GCC_JIT_BOOL_OPTION_DEBUGINFO): Fix out-of-date
+	comment.
+
 2013-10-23  David Malcolm  <dmalcolm@redhat.com>
 
 	* internal-api.c: Update for rename of tree-flow.h to tree-cfg.h
diff --git a/gcc/jit/internal-api.c b/gcc/jit/internal-api.c
index 574aef0..b21aaa6 100644
--- a/gcc/jit/internal-api.c
+++ b/gcc/jit/internal-api.c
@@ -883,10 +883,12 @@ gcc::jit::function::
 add_eval (location *loc,
 	  rvalue *rvalue)
 {
-  gcc_assert (NULL == loc);
   gcc_assert (rvalue);
   gcc_assert (m_kind != GCC_JIT_FUNCTION_IMPORTED);
 
+  if (loc)
+    set_tree_location (rvalue->as_tree (), loc);
+
   tsi_link_after (&m_stmt_iter, rvalue->as_tree (), TSI_CONTINUE_LINKING);
 }
 
@@ -1444,7 +1446,7 @@ handle_locations ()
       /* This covers expressions: */
       if (CAN_HAVE_LOCATION_P (t))
 	SET_EXPR_LOCATION (t, srcloc);
-      else if (DECL_MINIMAL_CHECK (t))
+      else if (CODE_CONTAINS_STRUCT(TREE_CODE(t), TS_DECL_MINIMAL))
 	DECL_SOURCE_LOCATION (t) = srcloc;
       else
 	{
diff --git a/gcc/jit/libgccjit.h b/gcc/jit/libgccjit.h
index f058162..0712533 100644
--- a/gcc/jit/libgccjit.h
+++ b/gcc/jit/libgccjit.h
@@ -144,8 +144,8 @@ enum gcc_jit_bool_option
      be able to inspect variables and step through your code.
 
      Note that you can't step through code unless you set up source
-     location information for the code, and that isn't yet supported
-     in the API.  */
+     location information for the code (by creating and passing in
+     gcc_jit_location instances).  */
   GCC_JIT_BOOL_OPTION_DEBUGINFO,
 
   /* If true, gcc_jit_context_compile will dump its initial "tree"
-- 
1.7.11.7



More information about the Gcc-patches mailing list