temporary variable:
* :func:`gcc_jit_function_new_temp`
+
+.. _LIBGCCJIT_ABI_34:
+
+``LIBGCCJIT_ABI_34``
+--------------------
+``LIBGCCJIT_ABI_34`` covers the addition of
+
+ * :func:`gcc_jit_context_set_output_ident`
.. code-block:: c
#ifdef LIBGCCJIT_HAVE_gcc_jit_context_add_driver_option
+
+Output options
+**************
+
+.. function:: void gcc_jit_context_set_output_ident (gcc_jit_context *ctxt,\
+ const char* output_ident)
+
+ Set the identifier to write in the .comment section of the output file to
+ ``output_ident``.
+
+ The parameter ``output_ident`` must be non-NULL.
+
+ This only works on some target, as you can see here:
+ https://gcc.gnu.org/onlinedocs/cpp/Other-Directives.html
+
+ Analogous to:
+
+ .. code-block:: c
+
+ #ident "My comment"
+
+ in C.
+
+ This entrypoint was added in :ref:`LIBGCCJIT_ABI_34`; you can test for
+ its presence using
+
+ .. code-block:: c
+
+ #ifdef LIBGCCJIT_HAVE_gcc_jit_context_set_output_ident
return new type (type_node);
}
+void
+playback::context::
+set_output_ident (const char* ident)
+{
+ targetm.asm_out.output_ident (ident);
+}
+
/* Construct a playback::type instance (wrapping a tree) for the given
array type. */
type *
get_type (enum gcc_jit_types type);
+ void
+ set_output_ident (const char* ident);
+
type *
new_array_type (location *loc,
type *element_type,
return m_str_options[opt];
}
+void
+recording::context::set_output_ident (const char *ident)
+{
+ recording::output_ident *memento = new output_ident (this, ident);
+ record (memento);
+}
+
/* Set the given integer option for this context, or add an error if
it's not recognized.
/* Empty. */
}
+/* The implementation of class gcc::jit::recording::output_ident. */
+
+/* Constructor for gcc::jit::recording::output_ident, allocating a
+ copy of the given text using new char[]. */
+
+recording::output_ident::output_ident (context *ctxt, const char *ident)
+: memento (ctxt)
+{
+ m_ident = ident ? xstrdup (ident) : NULL;
+}
+
+/* Destructor for gcc::jit::recording::output_ident. */
+
+recording::output_ident::~output_ident ()
+{
+ free (m_ident);
+}
+
+/* Implementation of pure virtual hook recording::memento::replay_into
+ for recording::output_ident. */
+
+void
+recording::output_ident::replay_into (replayer *r)
+{
+ r->set_output_ident (m_ident);
+}
+
+/* Implementation of recording::memento::make_debug_string for output_ident. */
+
+recording::string *
+recording::output_ident::make_debug_string ()
+{
+ return m_ctxt->new_string (m_ident);
+}
+
+/* Implementation of recording::memento::write_reproducer for output_ident. */
+
+void
+recording::output_ident::write_reproducer (reproducer &r)
+{
+ r.write (" gcc_jit_context_set_output_ident (%s, \"%s\");",
+ r.get_identifier (get_context ()),
+ m_ident);
+}
+
+
/* The implementation of class gcc::jit::recording::location. */
/* Implementation of recording::memento::replay_into for locations.
const char*
get_str_option (enum gcc_jit_str_option opt);
+ void
+ set_output_ident (const char *output_ident);
+
void
set_int_option (enum gcc_jit_int_option opt,
int value);
bool m_escaped;
};
+class output_ident : public memento
+{
+public:
+ output_ident (context *ctxt, const char *text);
+ ~output_ident ();
+
+ void replay_into (replayer *) final override;
+
+ output_ident (const output_ident&) = delete;
+ output_ident& operator= (const output_ident&) = delete;
+
+private:
+ string * make_debug_string () final override;
+ void write_reproducer (reproducer &r) final override;
+
+private:
+ char *m_ident;
+};
+
class location : public memento
{
public:
ctxt->compile_to_file (output_kind, output_path);
}
+/* Public entrypoint. See description in libgccjit.h.
+
+ After error-checking, the real work is done by the
+ gcc::jit::recording::context::set_str_option method in
+ jit-recording.cc. */
+
+void
+gcc_jit_context_set_output_ident (gcc_jit_context *ctxt,
+ const char* output_ident)
+{
+ RETURN_IF_FAIL (ctxt, NULL, NULL, "NULL context");
+ RETURN_IF_FAIL (output_ident, ctxt, NULL, "NULL output_ident");
+ JIT_LOG_FUNC (ctxt->get_logger ());
+
+ ctxt->set_output_ident (output_ident);
+}
/* Public entrypoint. See description in libgccjit.h.
enum gcc_jit_variable_attribute attribute,
const char* value);
+extern void
+gcc_jit_context_set_output_ident (gcc_jit_context *ctxt,
+ const char* output_ident);
+
+#define LIBGCCJIT_HAVE_gcc_jit_context_set_output_ident
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
global:
gcc_jit_function_new_temp;
} LIBGCCJIT_ABI_32;
+
+LIBGCCJIT_ABI_34 {
+ global:
+ gcc_jit_context_set_output_ident;
+} LIBGCCJIT_ABI_33;
#undef create_code
#undef verify_code
+/* test-output-ident.c: This can't be in the testcases array as it
+ is target-specific. */
+
/* test-quadratic.c */
#define create_code create_code_quadratic
#define verify_code verify_code_quadratic
--- /dev/null
+/* { dg-do compile { target x86_64-*-* } } */
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include "libgccjit.h"
+
+#define TEST_COMPILING_TO_FILE
+#define OUTPUT_KIND GCC_JIT_OUTPUT_KIND_ASSEMBLER
+#define OUTPUT_FILENAME "output-of-test-output-ident.c.s"
+#include "harness.h"
+
+void
+create_code (gcc_jit_context *ctxt, void *user_data)
+{
+ /* Let's try to inject the equivalent of:
+ #ident "My comment"
+ */
+ gcc_jit_context_set_output_ident (ctxt, "My comment");
+}
+
+/* { dg-final { jit-verify-output-file-was-created "" } } */
+/* { dg-final { jit-verify-assembler-output ".ident \"My comment\"" } } */