On Thu, Jun 6, 2024 at 6:02 AM Bert Wesarg <bert.wes...@googlemail.com> wrote: > > Dear David, > > On Tue, May 28, 2024 at 10:07 PM David Malcolm <dmalc...@redhat.com> wrote: > > > > No functional change intended. > > > > Successfully bootstrapped & regrtested on x86_64-pc-linux-gnu. > > Pushed to trunk as r15-874-g9bda2c4c81b668. > > > > libcpp/ChangeLog: > > * Makefile.in (TAGS_SOURCES): Add include/label-text.h. > > * include/label-text.h: New file. > > * include/rich-location.h: Include "label-text.h". > > (class label_text): Move to label-text.h. > > > > Signed-off-by: David Malcolm <dmalc...@redhat.com> > > --- > > libcpp/Makefile.in | 2 +- > > libcpp/include/label-text.h | 102 +++++++++++++++++++++++++++++++++ > > libcpp/include/rich-location.h | 79 +------------------------ > > 3 files changed, 105 insertions(+), 78 deletions(-) > > create mode 100644 libcpp/include/label-text.h > > > > diff --git a/libcpp/Makefile.in b/libcpp/Makefile.in > > index ebbca37777fb..7e47153264c0 100644 > > --- a/libcpp/Makefile.in > > +++ b/libcpp/Makefile.in > > @@ -271,7 +271,7 @@ ETAGS = @ETAGS@ > > > > TAGS_SOURCES = $(libcpp_a_SOURCES) internal.h system.h ucnid.h \ > > include/cpplib.h include/line-map.h include/mkdeps.h include/symtab.h \ > > - include/rich-location.h > > + include/rich-location.h include/label-text.h > > this does not seem to be enough that the new header will be installed. > I get compile errors when compiling an plug-in with this patch: > > In file included from > /home/bitten/opt/gcc-15-20240602/lib/gcc/x86_64-pc-linux-gnu/15.0.0/plugin/include/diagnostic.h:24, > from > /home/bitten/builds/oCyPvWN6/1/perftools/cicd/scorep/src/build-gcc-plugin/../src/adapters/compiler/gcc-plugin/scorep_plugin_inst_descriptor.cpp:43: > /home/bitten/opt/gcc-15-20240602/lib/gcc/x86_64-pc-linux-gnu/15.0.0/plugin/include/rich-location.h:25:10: > fatal error: label-text.h: No such file or directory > 25 | #include "label-text.h" > | ^~~~~~~~~~~~~~ > compilation terminated.
I have a fix which I am testing. > > Best, > Bert > > > > > > > TAGS: $(TAGS_SOURCES) > > diff --git a/libcpp/include/label-text.h b/libcpp/include/label-text.h > > new file mode 100644 > > index 000000000000..13562cda41f9 > > --- /dev/null > > +++ b/libcpp/include/label-text.h > > @@ -0,0 +1,102 @@ > > +/* A very simple string class. > > + Copyright (C) 2015-2024 Free Software Foundation, Inc. > > + > > +This program is free software; you can redistribute it and/or modify it > > +under the terms of the GNU General Public License as published by the > > +Free Software Foundation; either version 3, or (at your option) any > > +later version. > > + > > +This program is distributed in the hope that it will be useful, > > +but WITHOUT ANY WARRANTY; without even the implied warranty of > > +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > > +GNU General Public License for more details. > > + > > +You should have received a copy of the GNU General Public License > > +along with this program; see the file COPYING3. If not see > > +<http://www.gnu.org/licenses/>. > > + > > + In other words, you are welcome to use, share and improve this program. > > + You are forbidden to forbid anyone else to use, share and improve > > + what you give them. Help stamp out software-hoarding! */ > > + > > +#ifndef LIBCPP_LABEL_TEXT_H > > +#define LIBCPP_LABEL_TEXT_H > > + > > +/* A struct for the result of range_label::get_text: a NUL-terminated > > buffer > > + of localized text, and a flag to determine if the caller should "free" > > the > > + buffer. */ > > + > > +class label_text > > +{ > > +public: > > + label_text () > > + : m_buffer (NULL), m_owned (false) > > + {} > > + > > + ~label_text () > > + { > > + if (m_owned) > > + free (m_buffer); > > + } > > + > > + /* Move ctor. */ > > + label_text (label_text &&other) > > + : m_buffer (other.m_buffer), m_owned (other.m_owned) > > + { > > + other.release (); > > + } > > + > > + /* Move assignment. */ > > + label_text & operator= (label_text &&other) > > + { > > + if (m_owned) > > + free (m_buffer); > > + m_buffer = other.m_buffer; > > + m_owned = other.m_owned; > > + other.release (); > > + return *this; > > + } > > + > > + /* Delete the copy ctor and copy-assignment operator. */ > > + label_text (const label_text &) = delete; > > + label_text & operator= (const label_text &) = delete; > > + > > + /* Create a label_text instance that borrows BUFFER from a > > + longer-lived owner. */ > > + static label_text borrow (const char *buffer) > > + { > > + return label_text (const_cast <char *> (buffer), false); > > + } > > + > > + /* Create a label_text instance that takes ownership of BUFFER. */ > > + static label_text take (char *buffer) > > + { > > + return label_text (buffer, true); > > + } > > + > > + void release () > > + { > > + m_buffer = NULL; > > + m_owned = false; > > + } > > + > > + const char *get () const > > + { > > + return m_buffer; > > + } > > + > > + bool is_owner () const > > + { > > + return m_owned; > > + } > > + > > +private: > > + char *m_buffer; > > + bool m_owned; > > + > > + label_text (char *buffer, bool owned) > > + : m_buffer (buffer), m_owned (owned) > > + {} > > +}; > > + > > +#endif /* !LIBCPP_LABEL_TEXT_H */ > > diff --git a/libcpp/include/rich-location.h b/libcpp/include/rich-location.h > > index a2ece8b033c0..be424cb4b65f 100644 > > --- a/libcpp/include/rich-location.h > > +++ b/libcpp/include/rich-location.h > > @@ -22,6 +22,8 @@ along with this program; see the file COPYING3. If not > > see > > #ifndef LIBCPP_RICH_LOCATION_H > > #define LIBCPP_RICH_LOCATION_H > > > > +#include "label-text.h" > > + > > class range_label; > > class label_effects; > > > > @@ -541,83 +543,6 @@ protected: > > const diagnostic_path *m_path; > > }; > > > > -/* A struct for the result of range_label::get_text: a NUL-terminated > > buffer > > - of localized text, and a flag to determine if the caller should "free" > > the > > - buffer. */ > > - > > -class label_text > > -{ > > -public: > > - label_text () > > - : m_buffer (NULL), m_owned (false) > > - {} > > - > > - ~label_text () > > - { > > - if (m_owned) > > - free (m_buffer); > > - } > > - > > - /* Move ctor. */ > > - label_text (label_text &&other) > > - : m_buffer (other.m_buffer), m_owned (other.m_owned) > > - { > > - other.release (); > > - } > > - > > - /* Move assignment. */ > > - label_text & operator= (label_text &&other) > > - { > > - if (m_owned) > > - free (m_buffer); > > - m_buffer = other.m_buffer; > > - m_owned = other.m_owned; > > - other.release (); > > - return *this; > > - } > > - > > - /* Delete the copy ctor and copy-assignment operator. */ > > - label_text (const label_text &) = delete; > > - label_text & operator= (const label_text &) = delete; > > - > > - /* Create a label_text instance that borrows BUFFER from a > > - longer-lived owner. */ > > - static label_text borrow (const char *buffer) > > - { > > - return label_text (const_cast <char *> (buffer), false); > > - } > > - > > - /* Create a label_text instance that takes ownership of BUFFER. */ > > - static label_text take (char *buffer) > > - { > > - return label_text (buffer, true); > > - } > > - > > - void release () > > - { > > - m_buffer = NULL; > > - m_owned = false; > > - } > > - > > - const char *get () const > > - { > > - return m_buffer; > > - } > > - > > - bool is_owner () const > > - { > > - return m_owned; > > - } > > - > > -private: > > - char *m_buffer; > > - bool m_owned; > > - > > - label_text (char *buffer, bool owned) > > - : m_buffer (buffer), m_owned (owned) > > - {} > > -}; > > - > > /* Abstract base class for labelling a range within a rich_location > > (e.g. for labelling expressions with their type). > > > > -- > > 2.26.3 > >