diff options
author | Andi Kleen <ak@linux.intel.com> | 2024-05-05 22:40:20 -0700 |
---|---|---|
committer | Andi Kleen <ak@linux.intel.com> | 2024-06-11 09:50:45 -0700 |
commit | 6ef8c905e0064c4dfb7ca302355fc20cb96b147b (patch) | |
tree | fe229d3b964628f70086c9cba0ae326ce8bb6cef /gcc/cp/cp-tree.h | |
parent | 2f0c09c00b8ccf41c27d4b7ba0cafdeb99242a29 (diff) | |
download | gcc-6ef8c905e0064c4dfb7ca302355fc20cb96b147b.zip gcc-6ef8c905e0064c4dfb7ca302355fc20cb96b147b.tar.gz gcc-6ef8c905e0064c4dfb7ca302355fc20cb96b147b.tar.bz2 |
Factor out static_assert constexpr string extraction for reuse
The only semantics changes are slightly more vague error messages
to generalize.
gcc/cp/ChangeLog:
* cp-tree.h (class cexpr_str): Add.
* semantics.cc (finish_static_assert): Convert to use cexpr_str.
(cexpr_str::type_check): Extract constexpr string code to here.
(cexpr_str::extract): ... and here.
gcc/testsuite/ChangeLog:
* g++.dg/cpp26/static_assert1.C: Update to new error message.
* g++.dg/cpp0x/udlit-error1.C: Dito.
Diffstat (limited to 'gcc/cp/cp-tree.h')
-rw-r--r-- | gcc/cp/cp-tree.h | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/gcc/cp/cp-tree.h b/gcc/cp/cp-tree.h index 1ac31d0..62718ff 100644 --- a/gcc/cp/cp-tree.h +++ b/gcc/cp/cp-tree.h @@ -9015,6 +9015,24 @@ struct push_access_scope_guard } }; +/* Extracting strings from constexpr. */ + +class cexpr_str +{ +public: + cexpr_str (tree message) : message (message) {} + cexpr_str (const cexpr_str &) = delete; + ~cexpr_str () { XDELETEVEC (buf); } + + bool type_check (location_t location); + bool extract (location_t location, const char * & msg, int &len); + tree message; +private: + tree message_data = NULL_TREE; + tree message_sz = NULL_TREE; + char *buf = nullptr; +}; + /* True if TYPE is an extended floating-point type. */ inline bool |