On Mon, Dec 18, 2023 at 11:44:21AM +0800, YunQiang Su wrote: > The function `reconcat` cannot append string(s) to NULL, > as the concat process will stop at the first NULL. > > Let's initialize `ret` with `concat (" ", NULL)`, then > it can be used by reconcat. > > gcc/ > > PR target/112759 > * config/mips/driver-native.cc (host_detect_local_cpu): > initialize ret with concat, so that it can be used by > reconcat later. > --- > gcc/config/mips/driver-native.cc | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/gcc/config/mips/driver-native.cc > b/gcc/config/mips/driver-native.cc > index afc276f5278..471d1925eff 100644 > --- a/gcc/config/mips/driver-native.cc > +++ b/gcc/config/mips/driver-native.cc > @@ -44,7 +44,7 @@ const char * > host_detect_local_cpu (int argc, const char **argv) > { > const char *cpu = NULL; > - char *ret = NULL; > + char *ret = concat(" ", NULL); > char buf[128]; > FILE *f; > bool arch; > -- > 2.39.2
The formatting is wrong (no space after concat), but more importantly, I don't think you want to return " " rather than NULL if there isn't anything known and it is unnecessary to prefix everything with a space when gnu-user.h: " %{march=native:%<march=native %:local_cpu_detect(arch)}" \ gnu-user.h: " %{mtune=native:%<mtune=native %:local_cpu_detect(tune)}" space is already present. Given the simple thing the function does, I think much better would be to avoid any reconcat calls and just do one concat, i.e. --- gcc/config/mips/driver-native.cc 2023-01-02 09:32:58.422764590 +0100 +++ gcc/config/mips/driver-native.cc 2023-12-18 09:08:39.547609739 +0100 @@ -44,6 +44,7 @@ const char * host_detect_local_cpu (int argc, const char **argv) { const char *cpu = NULL; + const char *nan2008 = ""; char *ret = NULL; char buf[128]; FILE *f; @@ -90,7 +91,7 @@ host_detect_local_cpu (int argc, const c fallback_cpu: #if defined (__mips_nan2008) - ret = reconcat (ret, " -mnan=2008 ", NULL); + nan2008 = "-mnan=2008 "; #endif #ifdef HAVE_GETAUXVAL @@ -104,7 +105,9 @@ fallback_cpu: #endif if (cpu) - ret = reconcat (ret, ret, "-m", argv[0], "=", cpu, NULL); + ret = concat (nan2008, "-m", argv[0], "=", cpu, NULL); + else if (nan2008) + ret = concat (nan2008, NULL); return ret; } Or, if you really want to use reconcat, drop that space from before -mnan=2008 and use ret = reconcat (ret, ret ? ret : "", "-m", argv[0], "=", cpu, NULL); Jakub