https://gcc.gnu.org/g:64b4b5211aa664e224e3cd722ab5aa11f278aa68

commit 64b4b5211aa664e224e3cd722ab5aa11f278aa68
Author: Christoph Müllner <christoph.muell...@vrull.eu>
Date:   Fri Jul 5 04:48:15 2024 +0200

    RISC-V: Attribute parser: Use alloca() instead of new + std::unique_ptr
    
    Allocating an object on the heap with new, wrapping it in a
    std::unique_ptr and finally getting the buffer via buf.get()
    is a correct way to allocate a buffer that is automatically
    freed on return.  However, a simple invocation of alloca()
    does the same with less overhead.
    
    gcc/ChangeLog:
    
            * config/riscv/riscv-target-attr.cc 
(riscv_target_attr_parser::parse_arch):
            Replace new + std::unique_ptr by alloca().
            (riscv_process_one_target_attr): Likewise.
            (riscv_process_target_attr): Likewise.
    
    Signed-off-by: Christoph Müllner <christoph.muell...@vrull.eu>
    (cherry picked from commit 5040c273484d7123a40a99cdeb434cecbd17a2e9)

Diff:
---
 gcc/config/riscv/riscv-target-attr.cc | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/gcc/config/riscv/riscv-target-attr.cc 
b/gcc/config/riscv/riscv-target-attr.cc
index 0bbe7df25d19..3d7753f64574 100644
--- a/gcc/config/riscv/riscv-target-attr.cc
+++ b/gcc/config/riscv/riscv-target-attr.cc
@@ -109,8 +109,7 @@ riscv_target_attr_parser::parse_arch (const char *str)
     {
       /* Parsing the extension list like "+<ext>[,+<ext>]*".  */
       size_t len = strlen (str);
-      std::unique_ptr<char[]> buf (new char[len+1]);
-      char *str_to_check = buf.get ();
+      char *str_to_check = (char *) alloca (len + 1);
       strcpy (str_to_check, str);
       const char *token = strtok_r (str_to_check, ",", &str_to_check);
       m_subset_list = riscv_cmdline_subset_list ()->clone ();
@@ -247,8 +246,7 @@ riscv_process_one_target_attr (char *arg_str,
       return false;
     }
 
-  std::unique_ptr<char[]> buf (new char[len+1]);
-  char *str_to_check = buf.get();
+  char *str_to_check = (char *) alloca (len + 1);
   strcpy (str_to_check, arg_str);
 
   char *arg = strchr (str_to_check, '=');
@@ -334,8 +332,7 @@ riscv_process_target_attr (tree fndecl, tree args, 
location_t loc,
       return false;
     }
 
-  std::unique_ptr<char[]> buf (new char[len+1]);
-  char *str_to_check = buf.get ();
+  char *str_to_check = (char *) alloca (len + 1);
   strcpy (str_to_check, TREE_STRING_POINTER (args));
 
   /* Used to catch empty spaces between semi-colons i.e.

Reply via email to