gdb: use compiled_regex instead of std::regex
authorAndrew Burgess <andrew.burgess@embecosm.com>
Thu, 15 Apr 2021 17:30:57 +0000 (18:30 +0100)
committerAndrew Burgess <andrew.burgess@embecosm.com>
Mon, 19 Apr 2021 17:28:57 +0000 (18:28 +0100)
In GDB we should be using compiled_regex instead of std::regex.
Replace one use in producer.c.

There should be no user visible changes after this commit.

gdb/ChangeLog:

* producer.c: Replace 'regex' include with 'gdb_regex.h'.
(producer_is_icc): Replace use of std::regex with gdb's
compiled_regex.

gdb/ChangeLog
gdb/producer.c

index 678ad2772f386811eacb76b90cbaef303cb1cb14..a7f079e70e387207857bda3e57c53785a8d08f77 100644 (file)
@@ -1,3 +1,9 @@
+2021-04-19  Andrew Burgess  <andrew.burgess@embecosm.com>
+
+       * producer.c: Replace 'regex' include with 'gdb_regex.h'.
+       (producer_is_icc): Replace use of std::regex with gdb's
+       compiled_regex.
+
 2021-04-17  Tom Tromey  <tom@tromey.com>
 
        PR gdb/23743:
index 591509fa85c18e62c6b8360b0eac42e15480817a..cdfd80d904c09394febd18749bb90359b2d128cc 100644 (file)
@@ -20,7 +20,7 @@
 #include "defs.h"
 #include "producer.h"
 #include "gdbsupport/selftest.h"
-#include <regex>
+#include "gdb_regex.h"
 
 /* See producer.h.  */
 
@@ -91,9 +91,8 @@ producer_is_icc_ge_19 (const char *producer)
 bool
 producer_is_icc (const char *producer, int *major, int *minor)
 {
-  std::regex i_re ("Intel\\(R\\)");
-  std::cmatch i_m;
-  if ((producer == nullptr) || !std::regex_search (producer, i_m, i_re))
+  compiled_regex i_re ("Intel(R)", 0, "producer_is_icc");
+  if (producer == nullptr || i_re.exec (producer, 0, nullptr, 0) != 0)
     return false;
 
   /* Prepare the used fields.  */
@@ -106,12 +105,13 @@ producer_is_icc (const char *producer, int *major, int *minor)
   *minor = 0;
   *major = 0;
 
-  std::regex re ("[0-9]+\\.[0-9]+");
-  std::cmatch version;
-
-  if (std::regex_search (producer, version, re))
+  compiled_regex re ("[0-9]+\\.[0-9]+", REG_EXTENDED, "producer_is_icc");
+  regmatch_t version[1];
+  if (re.exec (producer, ARRAY_SIZE (version), version, 0) == 0
+      && version[0].rm_so != -1)
     {
-      sscanf (version.str ().c_str (), "%d.%d", major, minor);
+      const char *version_str = producer + version[0].rm_so;
+      sscanf (version_str, "%d.%d", major, minor);
       return true;
     }