Hi Bernd, > On 07 Aug 2018, at 19:10, Bernd Edlinger <bernd.edlin...@hotmail.de> wrote: > >>> procedure Array9 is
>>> I see that "1234" is put in the merge section, >>> but V1 is not. Maybe because of the alignment requirement? >>> >>> But it sould not be much different from the C test case, >>> which is now able to merge the non-zero terminated strings. >> >> I'm happy to have a look. An effect of alignments and inlining I think. I see expected behavior with calls to an external program instead of the local one. I tried the testcases we have here plus a couple of variations, e.g. with strings explicitly terminated by multiple ascii.nul, and they all seem to be working fine :-) Regarding Ada testcases for the dejagnu suite, I'm not quite sure how to go about them. For starters at least, we could for example contemplate something like: -- { dg-do compile } -- { dg-options "-O1 -fmerge-all-constants" } procedure String_Merge1 is procedure Process (X : String); pragma Import (Ada, Process); begin Process ("1234"); Process ("ABCD" & Ascii.NUL); end; -- We expect something like: -- .section .rodata.str1.1,"aMS",@progbits,1 -- .LC2: -- .string "1234" -- .LC3: -- .string "ABCD" -- Not clear how to match that generally enough. -- { dg-final { scan-assembler ".rodata.str1.1,\"aMS\"\[^\n\r\]*\n\.LC.:\n\[^\n\ \r\]*\.string \"1234\"\n\.LC.:\n\[^\n\r\]*\.string \"ABCD\"\n" } } As the comment suggests, I'm not clear if that's robust/general enough. I suppose we probably can't always expect .string, for instance. I suppose we could also have other bits between the .section and the literals. Would be fine as long as it's not something like ".section .rodata". Olivier