aboutsummaryrefslogtreecommitdiff
path: root/gcc/cp/cp-tree.h
diff options
context:
space:
mode:
authorAndi Kleen <ak@linux.intel.com>2024-05-05 22:40:20 -0700
committerAndi Kleen <ak@linux.intel.com>2024-06-11 09:50:45 -0700
commit6ef8c905e0064c4dfb7ca302355fc20cb96b147b (patch)
treefe229d3b964628f70086c9cba0ae326ce8bb6cef /gcc/cp/cp-tree.h
parent2f0c09c00b8ccf41c27d4b7ba0cafdeb99242a29 (diff)
downloadgcc-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.h18
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