Re: [PATCH] Add rvalue::get_name method (and its C equivalent)
On Mon, 2024-04-22 at 19:56 +0200, Guillaume Gomez wrote: > `param` is also inheriting from `lvalue`. I don't think adding this > check is a good idea > because it will not evolve nicely if more changes are done in > libgccjit. Sorry for not responding earlier. I think I agree with Guillaume here. Looking at the checklist at: https://gcc.gnu.org/onlinedocs/jit/internals/index.html#submitting-patches the patch is missing: - a feature macro in libgccjit.h such as #define LIBGCCJIT_HAVE_gcc_jit_lvalue_get_name - documentation for the new C entrypoint - documentation for the new ABI tag (see topics/compatibility.rst). Other than that, the patch looks reasonable to me. Dave > > Le lun. 22 avr. 2024 à 17:19, Antoni Boucher a > écrit : > > > > For your new API endpoint, please add a check like: > > > > RETURN_IF_FAIL (lvalue->is_global () || lvalue->is_local (), > > NULL, > > NULL, > > "lvalue should be a variable"); > > > > > > Le 2024-04-22 à 09 h 16, Guillaume Gomez a écrit : > > > Good point! > > > > > > New patch attached. > > > > > > Le lun. 22 avr. 2024 à 15:13, Antoni Boucher a > > > écrit : > > > > > > > > Please move the function to be on lvalue since there are no > > > > rvalue types > > > > that are not lvalues that have a name. > > > > > > > > Le 2024-04-22 à 09 h 04, Guillaume Gomez a écrit : > > > > > Hey Arthur :) > > > > > > > > > > > Is there any reason for that getter to return a mutable > > > > > > pointer to the > > > > > > name? Would something like this work instead if you're just > > > > > > looking at > > > > > > getting the name? > > > > > > > > > > > > + virtual string * get_name () const { return NULL; } > > > > > > > > > > > > With of course adequate modifications to the inheriting > > > > > > classes. > > > > > > > > > > Good catch, thanks! > > > > > > > > > > Updated the patch and attached the new version to this email. > > > > > > > > > > Cordially. > > > > > > > > > > Le lun. 22 avr. 2024 à 11:51, Arthur Cohen > > > > > a écrit : > > > > > > > > > > > > Hey Guillaume :) > > > > > > > > > > > > On 4/20/24 01:05, Guillaume Gomez wrote: > > > > > > > Hi, > > > > > > > > > > > > > > I just encountered the need to retrieve the name of an > > > > > > > `rvalue` (if > > > > > > > there is one) while working on the Rust GCC backend. > > > > > > > > > > > > > > This patch adds a getter to retrieve the information. > > > > > > > > > > > > > > Cordially. > > > > > > > > > > > > > virtual bool get_wide_int (wide_int *) const { > > > > > > > return false; } > > > > > > > > > > > > > > + virtual string * get_name () { return NULL; } > > > > > > > + > > > > > > > private: > > > > > > > virtual enum precedence get_precedence () const = 0; > > > > > > > > > > > > Is there any reason for that getter to return a mutable > > > > > > pointer to the > > > > > > name? Would something like this work instead if you're just > > > > > > looking at > > > > > > getting the name? > > > > > > > > > > > > + virtual string * get_name () const { return NULL; } > > > > > > > > > > > > With of course adequate modifications to the inheriting > > > > > > classes. > > > > > > > > > > > > Best, > > > > > > > > > > > > Arthur >
Re: [PATCH] Add rvalue::get_name method (and its C equivalent)
`param` is also inheriting from `lvalue`. I don't think adding this check is a good idea because it will not evolve nicely if more changes are done in libgccjit. Le lun. 22 avr. 2024 à 17:19, Antoni Boucher a écrit : > > For your new API endpoint, please add a check like: > >RETURN_IF_FAIL (lvalue->is_global () || lvalue->is_local (), > NULL, > NULL, > "lvalue should be a variable"); > > > Le 2024-04-22 à 09 h 16, Guillaume Gomez a écrit : > > Good point! > > > > New patch attached. > > > > Le lun. 22 avr. 2024 à 15:13, Antoni Boucher a écrit : > >> > >> Please move the function to be on lvalue since there are no rvalue types > >> that are not lvalues that have a name. > >> > >> Le 2024-04-22 à 09 h 04, Guillaume Gomez a écrit : > >>> Hey Arthur :) > >>> > Is there any reason for that getter to return a mutable pointer to the > name? Would something like this work instead if you're just looking at > getting the name? > > + virtual string * get_name () const { return NULL; } > > With of course adequate modifications to the inheriting classes. > >>> > >>> Good catch, thanks! > >>> > >>> Updated the patch and attached the new version to this email. > >>> > >>> Cordially. > >>> > >>> Le lun. 22 avr. 2024 à 11:51, Arthur Cohen a > >>> écrit : > > Hey Guillaume :) > > On 4/20/24 01:05, Guillaume Gomez wrote: > > Hi, > > > > I just encountered the need to retrieve the name of an `rvalue` (if > > there is one) while working on the Rust GCC backend. > > > > This patch adds a getter to retrieve the information. > > > > Cordially. > > > virtual bool get_wide_int (wide_int *) const { return false; } > > > > + virtual string * get_name () { return NULL; } > > + > >private: > > virtual enum precedence get_precedence () const = 0; > > Is there any reason for that getter to return a mutable pointer to the > name? Would something like this work instead if you're just looking at > getting the name? > > + virtual string * get_name () const { return NULL; } > > With of course adequate modifications to the inheriting classes. > > Best, > > Arthur
Re: [PATCH] Add rvalue::get_name method (and its C equivalent)
Good point! New patch attached. Le lun. 22 avr. 2024 à 15:13, Antoni Boucher a écrit : > > Please move the function to be on lvalue since there are no rvalue types > that are not lvalues that have a name. > > Le 2024-04-22 à 09 h 04, Guillaume Gomez a écrit : > > Hey Arthur :) > > > >> Is there any reason for that getter to return a mutable pointer to the > >> name? Would something like this work instead if you're just looking at > >> getting the name? > >> > >> + virtual string * get_name () const { return NULL; } > >> > >> With of course adequate modifications to the inheriting classes. > > > > Good catch, thanks! > > > > Updated the patch and attached the new version to this email. > > > > Cordially. > > > > Le lun. 22 avr. 2024 à 11:51, Arthur Cohen a > > écrit : > >> > >> Hey Guillaume :) > >> > >> On 4/20/24 01:05, Guillaume Gomez wrote: > >>> Hi, > >>> > >>> I just encountered the need to retrieve the name of an `rvalue` (if > >>> there is one) while working on the Rust GCC backend. > >>> > >>> This patch adds a getter to retrieve the information. > >>> > >>> Cordially. > >> > >>> virtual bool get_wide_int (wide_int *) const { return false; } > >>> > >>> + virtual string * get_name () { return NULL; } > >>> + > >>> private: > >>> virtual enum precedence get_precedence () const = 0; > >> > >> Is there any reason for that getter to return a mutable pointer to the > >> name? Would something like this work instead if you're just looking at > >> getting the name? > >> > >> + virtual string * get_name () const { return NULL; } > >> > >> With of course adequate modifications to the inheriting classes. > >> > >> Best, > >> > >> Arthur From 79a5af70787509f0f23dc131a39ed32a88d8f8fc Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sat, 20 Apr 2024 01:02:20 +0200 Subject: [PATCH] [PATCH] Add rvalue::get_name method gcc/jit/ChangeLog: * jit-recording.h: Add rvalue::get_name method * libgccjit.cc (gcc_jit_rvalue_get_name): Likewise * libgccjit.h (gcc_jit_rvalue_get_name): Likewise * libgccjit.map: Likewise gcc/testsuite/ChangeLog: * jit.dg/test-tls.c: Add test for gcc_jit_rvalue_get_name --- gcc/jit/jit-recording.h | 7 +++ gcc/jit/libgccjit.cc| 16 gcc/jit/libgccjit.h | 4 gcc/jit/libgccjit.map | 5 + gcc/testsuite/jit.dg/test-tls.c | 2 ++ 5 files changed, 34 insertions(+) diff --git a/gcc/jit/jit-recording.h b/gcc/jit/jit-recording.h index d8d16f4fe29..a80327b26ba 100644 --- a/gcc/jit/jit-recording.h +++ b/gcc/jit/jit-recording.h @@ -1267,6 +1267,7 @@ public: void set_register_name (const char *reg_name); void set_alignment (unsigned bytes); unsigned get_alignment () const { return m_alignment; } + virtual string * get_name () const { return NULL; } protected: string *m_link_section; @@ -1305,6 +1306,8 @@ public: const char *access_as_rvalue (reproducer &r) final override; const char *access_as_lvalue (reproducer &r) final override; + string * get_name () const final override { return m_name; } + private: string * make_debug_string () final override { return m_name; } void write_reproducer (reproducer &r) final override; @@ -1558,6 +1561,8 @@ public: void set_rvalue_init (rvalue *val) { m_rvalue_init = val; } + string * get_name () const final override { return m_name; } + private: string * make_debug_string () final override { return m_name; } template @@ -2148,6 +2153,8 @@ public: void write_to_dump (dump &d) final override; + string * get_name () const final override { return m_name; } + private: string * make_debug_string () final override { return m_name; } void write_reproducer (reproducer &r) final override; diff --git a/gcc/jit/libgccjit.cc b/gcc/jit/libgccjit.cc index 445c0d0e0e3..ea03afcd2c5 100644 --- a/gcc/jit/libgccjit.cc +++ b/gcc/jit/libgccjit.cc @@ -4377,3 +4377,19 @@ gcc_jit_context_add_top_level_asm (gcc_jit_context *ctxt, RETURN_IF_FAIL (asm_stmts, ctxt, NULL, "NULL asm_stmts"); ctxt->add_top_level_asm (loc, asm_stmts); } + +/* Public entrypoint. See description in libgccjit.h. + + After error-checking, this calls the trivial + gcc::jit::recording::lvalue::get_name method, in jit-recording.h. */ + +extern const char * +gcc_jit_lvalue_get_name (gcc_jit_lvalue *lvalue) +{ + RETURN_NULL_IF_FAIL (lvalue, NULL, NULL, "NULL lvalue"); + auto name = lvalue->get_name (); + + if (!name) +return NULL; + return name->c_str (); +} diff --git a/gcc/jit/libgccjit.h b/gcc/jit/libgccjit.h index 74e847b2dec..2ea85f5a4c3 100644 --- a/gcc/jit/libgccjit.h +++ b/gcc/jit/libgccjit.h @@ -2066,6 +2066,10 @@ gcc_jit_lvalue_add_string_attribute (gcc_jit_lvalue *variable, enum gcc_jit_variable_attribute attribute, const char* value); +/* Returns the name of the `lvalue`, if any. Returns NULL otherwise. */ +extern const char * +gcc_jit_lvalue_get_name (gcc_jit_lvalue *lvalue); + #ifdef __cplusplus } #end
Re: [PATCH] Add rvalue::get_name method (and its C equivalent)
... I most definitely forgot. Thanks! ^^' Le lun. 22 avr. 2024 à 15:19, Antoni Boucher a écrit : > I believe you forgot to regenerate the ChangeLog. > > Le 2024-04-22 à 09 h 16, Guillaume Gomez a écrit : > > Good point! > > > > New patch attached. > > > > Le lun. 22 avr. 2024 à 15:13, Antoni Boucher a écrit > : > >> > >> Please move the function to be on lvalue since there are no rvalue types > >> that are not lvalues that have a name. > >> > >> Le 2024-04-22 à 09 h 04, Guillaume Gomez a écrit : > >>> Hey Arthur :) > >>> > Is there any reason for that getter to return a mutable pointer to the > name? Would something like this work instead if you're just looking at > getting the name? > > + virtual string * get_name () const { return NULL; } > > With of course adequate modifications to the inheriting classes. > >>> > >>> Good catch, thanks! > >>> > >>> Updated the patch and attached the new version to this email. > >>> > >>> Cordially. > >>> > >>> Le lun. 22 avr. 2024 à 11:51, Arthur Cohen > a écrit : > > Hey Guillaume :) > > On 4/20/24 01:05, Guillaume Gomez wrote: > > Hi, > > > > I just encountered the need to retrieve the name of an `rvalue` (if > > there is one) while working on the Rust GCC backend. > > > > This patch adds a getter to retrieve the information. > > > > Cordially. > > > virtual bool get_wide_int (wide_int *) const { return false; } > > > > + virtual string * get_name () { return NULL; } > > + > >private: > > virtual enum precedence get_precedence () const = 0; > > Is there any reason for that getter to return a mutable pointer to the > name? Would something like this work instead if you're just looking at > getting the name? > > + virtual string * get_name () const { return NULL; } > > With of course adequate modifications to the inheriting classes. > > Best, > > Arthur > From 79a5af70787509f0f23dc131a39ed32a88d8f8fc Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sat, 20 Apr 2024 01:02:20 +0200 Subject: [PATCH] [PATCH] Add lvalue::get_name method gcc/jit/ChangeLog: * jit-recording.h: Add lvalue::get_name method * libgccjit.cc (gcc_jit_lvalue_get_name): Likewise * libgccjit.h (gcc_jit_lvalue_get_name): Likewise * libgccjit.map: Likewise gcc/testsuite/ChangeLog: * jit.dg/test-tls.c: Add test for gcc_jit_lvalue_get_name --- gcc/jit/jit-recording.h | 7 +++ gcc/jit/libgccjit.cc| 16 gcc/jit/libgccjit.h | 4 gcc/jit/libgccjit.map | 5 + gcc/testsuite/jit.dg/test-tls.c | 2 ++ 5 files changed, 34 insertions(+) diff --git a/gcc/jit/jit-recording.h b/gcc/jit/jit-recording.h index d8d16f4fe29..a80327b26ba 100644 --- a/gcc/jit/jit-recording.h +++ b/gcc/jit/jit-recording.h @@ -1267,6 +1267,7 @@ public: void set_register_name (const char *reg_name); void set_alignment (unsigned bytes); unsigned get_alignment () const { return m_alignment; } + virtual string * get_name () const { return NULL; } protected: string *m_link_section; @@ -1305,6 +1306,8 @@ public: const char *access_as_rvalue (reproducer &r) final override; const char *access_as_lvalue (reproducer &r) final override; + string * get_name () const final override { return m_name; } + private: string * make_debug_string () final override { return m_name; } void write_reproducer (reproducer &r) final override; @@ -1558,6 +1561,8 @@ public: void set_rvalue_init (rvalue *val) { m_rvalue_init = val; } + string * get_name () const final override { return m_name; } + private: string * make_debug_string () final override { return m_name; } template @@ -2148,6 +2153,8 @@ public: void write_to_dump (dump &d) final override; + string * get_name () const final override { return m_name; } + private: string * make_debug_string () final override { return m_name; } void write_reproducer (reproducer &r) final override; diff --git a/gcc/jit/libgccjit.cc b/gcc/jit/libgccjit.cc index 445c0d0e0e3..ea03afcd2c5 100644 --- a/gcc/jit/libgccjit.cc +++ b/gcc/jit/libgccjit.cc @@ -4377,3 +4377,19 @@ gcc_jit_context_add_top_level_asm (gcc_jit_context *ctxt, RETURN_IF_FAIL (asm_stmts, ctxt, NULL, "NULL asm_stmts"); ctxt->add_top_level_asm (loc, asm_stmts); } + +/* Public entrypoint. See description in libgccjit.h. + + After error-checking, this calls the trivial + gcc::jit::recording::lvalue::get_name method, in jit-recording.h. */ + +extern const char * +gcc_jit_lvalue_get_name (gcc_jit_lvalue *lvalue) +{ + RETURN_NULL_IF_FAIL (lvalue, NULL, NULL, "NULL lvalue"); + auto name = lvalue->get_name (); + + if (!name) +return NULL; + return name->c_str (); +} diff --git a/gcc/jit/libgccjit.h b/gcc/jit/libgccjit.h index 74e847b2dec..2ea85f5a4c3 100644 --- a/gcc/jit/libgccjit.h +++ b/gcc/jit/libgccjit.h @@ -206
Re: [PATCH] Add rvalue::get_name method (and its C equivalent)
For your new API endpoint, please add a check like: RETURN_IF_FAIL (lvalue->is_global () || lvalue->is_local (), NULL, NULL, "lvalue should be a variable"); Le 2024-04-22 à 09 h 16, Guillaume Gomez a écrit : Good point! New patch attached. Le lun. 22 avr. 2024 à 15:13, Antoni Boucher a écrit : Please move the function to be on lvalue since there are no rvalue types that are not lvalues that have a name. Le 2024-04-22 à 09 h 04, Guillaume Gomez a écrit : Hey Arthur :) Is there any reason for that getter to return a mutable pointer to the name? Would something like this work instead if you're just looking at getting the name? + virtual string * get_name () const { return NULL; } With of course adequate modifications to the inheriting classes. Good catch, thanks! Updated the patch and attached the new version to this email. Cordially. Le lun. 22 avr. 2024 à 11:51, Arthur Cohen a écrit : Hey Guillaume :) On 4/20/24 01:05, Guillaume Gomez wrote: Hi, I just encountered the need to retrieve the name of an `rvalue` (if there is one) while working on the Rust GCC backend. This patch adds a getter to retrieve the information. Cordially. virtual bool get_wide_int (wide_int *) const { return false; } + virtual string * get_name () { return NULL; } + private: virtual enum precedence get_precedence () const = 0; Is there any reason for that getter to return a mutable pointer to the name? Would something like this work instead if you're just looking at getting the name? + virtual string * get_name () const { return NULL; } With of course adequate modifications to the inheriting classes. Best, Arthur
Re: [PATCH] Add rvalue::get_name method (and its C equivalent)
I believe you forgot to regenerate the ChangeLog. Le 2024-04-22 à 09 h 16, Guillaume Gomez a écrit : Good point! New patch attached. Le lun. 22 avr. 2024 à 15:13, Antoni Boucher a écrit : Please move the function to be on lvalue since there are no rvalue types that are not lvalues that have a name. Le 2024-04-22 à 09 h 04, Guillaume Gomez a écrit : Hey Arthur :) Is there any reason for that getter to return a mutable pointer to the name? Would something like this work instead if you're just looking at getting the name? + virtual string * get_name () const { return NULL; } With of course adequate modifications to the inheriting classes. Good catch, thanks! Updated the patch and attached the new version to this email. Cordially. Le lun. 22 avr. 2024 à 11:51, Arthur Cohen a écrit : Hey Guillaume :) On 4/20/24 01:05, Guillaume Gomez wrote: Hi, I just encountered the need to retrieve the name of an `rvalue` (if there is one) while working on the Rust GCC backend. This patch adds a getter to retrieve the information. Cordially. virtual bool get_wide_int (wide_int *) const { return false; } + virtual string * get_name () { return NULL; } + private: virtual enum precedence get_precedence () const = 0; Is there any reason for that getter to return a mutable pointer to the name? Would something like this work instead if you're just looking at getting the name? + virtual string * get_name () const { return NULL; } With of course adequate modifications to the inheriting classes. Best, Arthur
Re: [PATCH] Add rvalue::get_name method (and its C equivalent)
Please move the function to be on lvalue since there are no rvalue types that are not lvalues that have a name. Le 2024-04-22 à 09 h 04, Guillaume Gomez a écrit : Hey Arthur :) Is there any reason for that getter to return a mutable pointer to the name? Would something like this work instead if you're just looking at getting the name? + virtual string * get_name () const { return NULL; } With of course adequate modifications to the inheriting classes. Good catch, thanks! Updated the patch and attached the new version to this email. Cordially. Le lun. 22 avr. 2024 à 11:51, Arthur Cohen a écrit : Hey Guillaume :) On 4/20/24 01:05, Guillaume Gomez wrote: Hi, I just encountered the need to retrieve the name of an `rvalue` (if there is one) while working on the Rust GCC backend. This patch adds a getter to retrieve the information. Cordially. virtual bool get_wide_int (wide_int *) const { return false; } + virtual string * get_name () { return NULL; } + private: virtual enum precedence get_precedence () const = 0; Is there any reason for that getter to return a mutable pointer to the name? Would something like this work instead if you're just looking at getting the name? + virtual string * get_name () const { return NULL; } With of course adequate modifications to the inheriting classes. Best, Arthur
Re: [PATCH] Add rvalue::get_name method (and its C equivalent)
Hey Arthur :) > Is there any reason for that getter to return a mutable pointer to the > name? Would something like this work instead if you're just looking at > getting the name? > > + virtual string * get_name () const { return NULL; } > > With of course adequate modifications to the inheriting classes. Good catch, thanks! Updated the patch and attached the new version to this email. Cordially. Le lun. 22 avr. 2024 à 11:51, Arthur Cohen a écrit : > > Hey Guillaume :) > > On 4/20/24 01:05, Guillaume Gomez wrote: > > Hi, > > > > I just encountered the need to retrieve the name of an `rvalue` (if > > there is one) while working on the Rust GCC backend. > > > > This patch adds a getter to retrieve the information. > > > > Cordially. > > >virtual bool get_wide_int (wide_int *) const { return false; } > > > > + virtual string * get_name () { return NULL; } > > + > > private: > >virtual enum precedence get_precedence () const = 0; > > Is there any reason for that getter to return a mutable pointer to the > name? Would something like this work instead if you're just looking at > getting the name? > > + virtual string * get_name () const { return NULL; } > > With of course adequate modifications to the inheriting classes. > > Best, > > Arthur From a8ae68e337bec3e55a60997c5325e2270fd75962 Mon Sep 17 00:00:00 2001 From: Guillaume Gomez Date: Sat, 20 Apr 2024 01:02:20 +0200 Subject: [PATCH] [PATCH] Add rvalue::get_name method gcc/jit/ChangeLog: * jit-recording.h: Add rvalue::get_name method * libgccjit.cc (gcc_jit_rvalue_get_name): Likewise * libgccjit.h (gcc_jit_rvalue_get_name): Likewise * libgccjit.map: Likewise gcc/testsuite/ChangeLog: * jit.dg/test-tls.c: Add test for gcc_jit_rvalue_get_name --- gcc/jit/jit-recording.h | 8 gcc/jit/libgccjit.cc| 16 gcc/jit/libgccjit.h | 4 gcc/jit/libgccjit.map | 5 + gcc/testsuite/jit.dg/test-tls.c | 3 +++ 5 files changed, 36 insertions(+) diff --git a/gcc/jit/jit-recording.h b/gcc/jit/jit-recording.h index d8d16f4fe29..2190b68 100644 --- a/gcc/jit/jit-recording.h +++ b/gcc/jit/jit-recording.h @@ -1213,6 +1213,8 @@ public: virtual bool is_constant () const { return false; } virtual bool get_wide_int (wide_int *) const { return false; } + virtual string * get_name () const { return NULL; } + private: virtual enum precedence get_precedence () const = 0; @@ -1305,6 +1307,8 @@ public: const char *access_as_rvalue (reproducer &r) final override; const char *access_as_lvalue (reproducer &r) final override; + string * get_name () const final override { return m_name; } + private: string * make_debug_string () final override { return m_name; } void write_reproducer (reproducer &r) final override; @@ -1558,6 +1562,8 @@ public: void set_rvalue_init (rvalue *val) { m_rvalue_init = val; } + string * get_name () const final override { return m_name; } + private: string * make_debug_string () final override { return m_name; } template @@ -2148,6 +2154,8 @@ public: void write_to_dump (dump &d) final override; + string * get_name () const final override { return m_name; } + private: string * make_debug_string () final override { return m_name; } void write_reproducer (reproducer &r) final override; diff --git a/gcc/jit/libgccjit.cc b/gcc/jit/libgccjit.cc index 445c0d0e0e3..2b8706dc7fd 100644 --- a/gcc/jit/libgccjit.cc +++ b/gcc/jit/libgccjit.cc @@ -4377,3 +4377,19 @@ gcc_jit_context_add_top_level_asm (gcc_jit_context *ctxt, RETURN_IF_FAIL (asm_stmts, ctxt, NULL, "NULL asm_stmts"); ctxt->add_top_level_asm (loc, asm_stmts); } + +/* Public entrypoint. See description in libgccjit.h. + + After error-checking, this calls the trivial + gcc::jit::recording::rvalue::get_name method, in jit-recording.h. */ + +extern const char * +gcc_jit_rvalue_get_name (gcc_jit_rvalue *rvalue) +{ + RETURN_NULL_IF_FAIL (rvalue, NULL, NULL, "NULL rvalue"); + auto name = rvalue->get_name (); + + if (!name) +return NULL; + return name->c_str (); +} diff --git a/gcc/jit/libgccjit.h b/gcc/jit/libgccjit.h index 74e847b2dec..d4094610a16 100644 --- a/gcc/jit/libgccjit.h +++ b/gcc/jit/libgccjit.h @@ -2066,6 +2066,10 @@ gcc_jit_lvalue_add_string_attribute (gcc_jit_lvalue *variable, enum gcc_jit_variable_attribute attribute, const char* value); +/* Returns the name of the `rvalue`, if any. Returns NULL otherwise. */ +extern const char * +gcc_jit_rvalue_get_name (gcc_jit_rvalue *rvalue); + #ifdef __cplusplus } #endif /* __cplusplus */ diff --git a/gcc/jit/libgccjit.map b/gcc/jit/libgccjit.map index 99aa5970be1..bbed8024263 100644 --- a/gcc/jit/libgccjit.map +++ b/gcc/jit/libgccjit.map @@ -289,3 +289,8 @@ LIBGCCJIT_ABI_27 { global: gcc_jit_context_new_sizeof; } LIBGCCJIT_ABI_26; + +LIBGCCJIT_ABI_28 { + global: +gcc_jit_rvalue_get_name; +} LIBGCCJIT_ABI_27; diff --git a/gcc/testsuite/jit.dg/test-
Re: [PATCH] Add rvalue::get_name method (and its C equivalent)
Hey Guillaume :) On 4/20/24 01:05, Guillaume Gomez wrote: Hi, I just encountered the need to retrieve the name of an `rvalue` (if there is one) while working on the Rust GCC backend. This patch adds a getter to retrieve the information. Cordially. virtual bool get_wide_int (wide_int *) const { return false; } + virtual string * get_name () { return NULL; } + private: virtual enum precedence get_precedence () const = 0; Is there any reason for that getter to return a mutable pointer to the name? Would something like this work instead if you're just looking at getting the name? + virtual string * get_name () const { return NULL; } With of course adequate modifications to the inheriting classes. Best, Arthur OpenPGP_0x1B3465B044AD9C65.asc Description: OpenPGP public key OpenPGP_signature.asc Description: OpenPGP digital signature