Subject: Re: [PATCH v2 1/1] fs: proc: Fix build with GCC 15 due to -Werror=unterminated-string-initialization

From: Andrew Morton <[email-masked]>
Date: Fri, 4 Oct 2024 14:58:04 -0700

On Sat, 5 Oct 2024 02:42:12 +0530 Brahmajit <[email-masked]> wrote:

> With Andrew's suggestion I came up with something like this, would love
> some feedback.
> 
> --- a/fs/proc/task_mmu.c
> +++ b/fs/proc/task_mmu.c
> @@ -909,8 +909,15 @@ static void show_smap_vma_flags(struct seq_file *m, struct vm_area_struct *vma)
>  {
>  	/*
>  	 * Don't forget to update Documentation/ on changes.
> +	 *
> +	 * The length of the second argument of mnemonics[]
> +	 * needs to be 3 instead of previously set 2
> +	 * (i.e. from [BITS_PER_LONG][2] to [BITS_PER_LONG][3])
> +	 * to avoid spurious
> +	 * -Werror=unterminated-string-initialization warning
> +	 *  with GCC 15
>  	 */
> -	static const char mnemonics[BITS_PER_LONG][2] = {
> +	static const char mnemonics[BITS_PER_LONG][3] = {
>  		/*
>  		 * In case if we meet a flag we don't know about.
>  		 */
> @@ -985,13 +992,10 @@ static void show_smap_vma_flags(struct seq_file *m, struct vm_area_struct *vma)
>  
>  	seq_puts(m, "VmFlags: ");
>  	for (i = 0; i < BITS_PER_LONG; i++) {
> -		if (!mnemonics[i][0])
> +		if (strcmp(mnemonics[i], "") == 0)
>  			continue;

lgtm, except this change isn't needed - testing the 0th char for NULL
is a common idiom.

> -		if (vma->vm_flags & (1UL << i)) {
> -			seq_putc(m, mnemonics[i][0]);
> -			seq_putc(m, mnemonics[i][1]);
> -			seq_putc(m, ' ');
> -		}
> +		if (vma->vm_flags & (1UL << i))
> +			seq_printf(m, "%s ", mnemonics[i]);
>  	}
>  	seq_putc(m, '\n');
>  }