[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH] Avoid clang prior initialization error when listing MTRR flags



>>> On 13.09.14 at 18:57, <saper@xxxxxxxxxx> wrote:
> Clang 3.4 complains when compiling range of designated range
> initializers:
> 
> gmake[6]: Entering directory `/home/saper/sw/xen/xen/arch/x86/cpu/mtrr'
> clang -O1 -fno-omit-frame-pointer -m64 -g -fno-strict-aliasing -std=gnu99 
> -Wall 
> -Wstrict-prototypes -Wdeclaration-after-statement   
> -I/home/saper/sw/xen/xen/include  
> -I/home/saper/sw/xen/xen/include/asm-x86/mach-generic 
> -I/home/saper/sw/xen/xen/include/asm-x86/mach-default -msoft-float 
> -fno-stack-protector -fno-exceptions -Wnested-externs -DHAVE_GAS_VMX 
> -DHAVE_GAS_EPT -DHAVE_GAS_FSGSBASE -mno-red-zone -mno-sse -fpic 
> -fno-asynchronous-unwind-tables -DGCC_HAS_VISIBILITY_ATTRIBUTE -fno-builtin 
> -fno-common -Werror -Wredundant-decls -Wno-pointer-arith -pipe -g -D__XEN__ 
> -include 
> /home/saper/sw/xen/xen/include/xen/config.h -nostdinc -Wno-parentheses 
> -Wno-format 
> -Wno-unused-value -Wno-unused-function -Wno-ignored-attributes -DVERBOSE 
> -DHAS_ACPI 
> -DHAS_GDBSX -DHAS_PASSTHROUGH -DHAS_PCI -DHAS_IOPORTS -fno-omit-frame-pointer 
> -DCONFIG_FRAME_POINTER -MMD -MF .generic.o.d -c generic.c -o generic.o
> generic.c:95:32: error: initializer overrides prior initialization of this 
> subobject [-Werror,-Winitializer-overrides]
>                 [MTRR_TYPE_UNCACHABLE]     = "uncachable",
>                                              ^~~~~~~~~~~~
> generic.c:94:32: note: previous initialization is here
>                 [0 ... MTRR_NUM_TYPES - 1] = "?",
>                                              ^~~
> generic.c:96:32: error: initializer overrides prior initialization of this 
> subobject [-Werror,-Winitializer-overrides]
>                 [MTRR_TYPE_WRCOMB]         = "write-combining",
>                                              ^~~~~~~~~~~~~~~~~
> generic.c:94:32: note: previous initialization is here
>                 [0 ... MTRR_NUM_TYPES - 1] = "?",
>                                              ^~~
> generic.c:97:32: error: initializer overrides prior initialization of this 
> subobject [-Werror,-Winitializer-overrides]
>                 [MTRR_TYPE_WRTHROUGH]      = "write-through",
>                                              ^~~~~~~~~~~~~~~
> generic.c:94:32: note: previous initialization is here
>                 [0 ... MTRR_NUM_TYPES - 1] = "?",
>                                              ^~~
> generic.c:98:32: error: initializer overrides prior initialization of this 
> subobject [-Werror,-Winitializer-overrides]
>                 [MTRR_TYPE_WRPROT]         = "write-protect",
>                                              ^~~~~~~~~~~~~~~
> generic.c:94:32: note: previous initialization is here
>                 [0 ... MTRR_NUM_TYPES - 1] = "?",
>                                              ^~~
> generic.c:99:32: error: initializer overrides prior initialization of this 
> subobject [-Werror,-Winitializer-overrides]
>                 [MTRR_TYPE_WRBACK]         = "write-back",
>                                              ^~~~~~~~~~~~
> generic.c:94:32: note: previous initialization is here
>                 [0 ... MTRR_NUM_TYPES - 1] = "?",
>                                              ^~~
> and
> 
> gmake[5]: Entering directory `/home/saper/sw/xen/xen/arch/x86/mm'
> clang -O1 -fno-omit-frame-pointer -m64 -g -fno-strict-aliasing -std=gnu99 
> -Wall 
> -Wstrict-prototypes -Wdeclaration-after-statement   
> -I/home/saper/sw/xen/xen/include  
> -I/home/saper/sw/xen/xen/include/asm-x86/mach-generic 
> -I/home/saper/sw/xen/xen/include/asm-x86/mach-default -msoft-float 
> -fno-stack-protector -fno-exceptions -Wnested-externs -DHAVE_GAS_VMX 
> -DHAVE_GAS_EPT -DHAVE_GAS_FSGSBASE -mno-red-zone -mno-sse -fpic 
> -fno-asynchronous-unwind-tables -DGCC_HAS_VISIBILITY_ATTRIBUTE -fno-builtin 
> -fno-common -Werror -Wredundant-decls -Wno-pointer-arith -pipe -g -D__XEN__ 
> -include 
> /home/saper/sw/xen/xen/include/xen/config.h -nostdinc -Wno-parentheses 
> -Wno-format 
> -Wno-unused-value -Wno-unused-function -Wno-ignored-attributes -DVERBOSE 
> -DHAS_ACPI 
> -DHAS_GDBSX -DHAS_PASSTHROUGH -DHAS_PCI -DHAS_IOPORTS -fno-omit-frame-pointer 
> -DCONFIG_FRAME_POINTER -MMD -MF .p2m-ept.o.d -c p2m-ept.c -o p2m-ept.o
> p2m-ept.c:1100:38: error: initializer overrides prior initialization of this 
> subobject [-Werror,-Winitializer-overrides]
>         [MTRR_TYPE_UNCACHABLE]     = "UC",
>                                      ^~~~
> p2m-ept.c:1099:21: note: previous initialization is here
>         [0 ... 7] = "?",
>                     ^~~
> p2m-ept.c:1101:38: error: initializer overrides prior initialization of this 
> subobject [-Werror,-Winitializer-overrides]
>         [MTRR_TYPE_WRCOMB]         = "WC",
>                                      ^~~~
> p2m-ept.c:1099:21: note: previous initialization is here
>         [0 ... 7] = "?",
>                     ^~~
> p2m-ept.c:1102:38: error: initializer overrides prior initialization of this 
> subobject [-Werror,-Winitializer-overrides]
>         [MTRR_TYPE_WRTHROUGH]      = "WT",
>                                      ^~~~
> p2m-ept.c:1099:21: note: previous initialization is here
>         [0 ... 7] = "?",
>                     ^~~
> p2m-ept.c:1103:38: error: initializer overrides prior initialization of this 
> subobject [-Werror,-Winitializer-overrides]
>         [MTRR_TYPE_WRPROT]         = "WP",
>                                      ^~~~
> p2m-ept.c:1099:21: note: previous initialization is here
>         [0 ... 7] = "?",
>                     ^~~
> p2m-ept.c:1104:38: error: initializer overrides prior initialization of this 
> subobject [-Werror,-Winitializer-overrides]
>         [MTRR_TYPE_WRBACK]         = "WB",
>                                      ^~~~
> p2m-ept.c:1099:21: note: previous initialization is here
>         [0 ... 7] = "?",
>                     ^~~
> p2m-ept.c:1105:38: error: initializer overrides prior initialization of this 
> subobject [-Werror,-Winitializer-overrides]
>         [MTRR_NUM_TYPES]           = "??"
>                                      ^~~~
> p2m-ept.c:1099:21: note: previous initialization is here
>         [0 ... 7] = "?",
>                     ^~~
> 6 errors generated.
> 
> Signed-off-by: Marcin Cieslak <saper@xxxxxxxxxx>

Apart from the description above being excessive (quoting just one
of the error messages would completely suffice), I'm NAKing this
because it was intentionally coded the way it is. What I would
suggest instead is to enforce -Wno-initializer-overrides.

> --- a/xen/arch/x86/cpu/mtrr/generic.c
> +++ b/xen/arch/x86/cpu/mtrr/generic.c
> @@ -91,9 +91,10 @@ static const char *__init mtrr_attrib_to_str(mtrr_type x)
>  {
>       static const char __initconst strings[MTRR_NUM_TYPES][16] =
>       {
> -             [0 ... MTRR_NUM_TYPES - 1] = "?",
>               [MTRR_TYPE_UNCACHABLE]     = "uncachable",
>               [MTRR_TYPE_WRCOMB]         = "write-combining",
> +             [2]                        = "?",
> +             [3]                        = "?",
>               [MTRR_TYPE_WRTHROUGH]      = "write-through",
>               [MTRR_TYPE_WRPROT]         = "write-protect",
>               [MTRR_TYPE_WRBACK]         = "write-back",
> diff --git a/xen/arch/x86/mm/p2m-ept.c b/xen/arch/x86/mm/p2m-ept.c
> index 15c6e83..50d1529 100644
> --- a/xen/arch/x86/mm/p2m-ept.c
> +++ b/xen/arch/x86/mm/p2m-ept.c
> @@ -1096,9 +1096,10 @@ static void ept_dump_p2m_table(unsigned char key)
>      struct p2m_domain *p2m;
>      struct ept_data *ept;
>      static const char memory_types[8][2] = {
> -        [0 ... 7] = "?",
>          [MTRR_TYPE_UNCACHABLE]     = "UC",
>          [MTRR_TYPE_WRCOMB]         = "WC",
> +        [2]                        = "??",
> +        [3]                        = "??",

And as a side note - this change is more than just elimination of
the compiler warning.

Jan

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.