[Mesa-dev] [PATCH] nir/builder: fix C90 build errors

Connor Abbott cwabbott0 at gmail.com
Sat Dec 19 17:58:31 PST 2015


We haven't allowed NIR in core gallium before, since core gallium has
to be built with some old version of MSVC that doesn't support many
C99 features that we really wanted to use. The only reason that
-Werror exists is for compatibility with old MSVC, and if you want to
use NIR with something that needs to build with old MSVC, there are
going to be much bigger changes needed, and we'd rather avoid that. If
you just want to add some NIR-specific stuff that e.g. softpipe
doesn't need to compile against, then you should fix the build system
not to add the warning.

On Sat, Dec 19, 2015 at 5:39 PM, Rob Clark <robdclark at gmail.com> wrote:
> From: Rob Clark <robclark at freedesktop.org>
>
> We are going to start using nir_builder.h from some gallium code, which
> is currently only C90.  Which results in:
>
>    In file included from nir/nir_emulate.c:26:0:
>    ../../../src/glsl/nir/nir_builder.h: In function ‘nir_build_alu’:
>    ../../../src/glsl/nir/nir_builder.h:132:4: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
>        unsigned num_components = op_info->output_size;
>        ^
>    In file included from nir/nir_emulate.c:26:0:
>    ../../../src/glsl/nir/nir_builder.h: In function ‘nir_ssa_for_src’:
>    ../../../src/glsl/nir/nir_builder.h:271:4: error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]
>        nir_alu_src alu = { NIR_SRC_INIT };
>        ^
>    cc1: some warnings being treated as errors
>
> Signed-off-by: Rob Clark <robclark at freedesktop.org>
> ---
> Not sure if I should just go ahead and push this sort of thing.  Or
> if we can start requiring C99 for gallium?
>
>  src/glsl/nir/nir_builder.h | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
>
> diff --git a/src/glsl/nir/nir_builder.h b/src/glsl/nir/nir_builder.h
> index 332bb02..6f30306 100644
> --- a/src/glsl/nir/nir_builder.h
> +++ b/src/glsl/nir/nir_builder.h
> @@ -115,6 +115,8 @@ nir_build_alu(nir_builder *build, nir_op op, nir_ssa_def *src0,
>  {
>     const nir_op_info *op_info = &nir_op_infos[op];
>     nir_alu_instr *instr = nir_alu_instr_create(build->shader, op);
> +   unsigned num_components;
> +
>     if (!instr)
>        return NULL;
>
> @@ -129,7 +131,7 @@ nir_build_alu(nir_builder *build, nir_op op, nir_ssa_def *src0,
>     /* Guess the number of components the destination temporary should have
>      * based on our input sizes, if it's not fixed for the op.
>      */
> -   unsigned num_components = op_info->output_size;
> +   num_components = op_info->output_size;
>     if (num_components == 0) {
>        for (unsigned i = 0; i < op_info->num_inputs; i++) {
>           if (op_info->input_sizes[i] == 0)
> @@ -265,10 +267,11 @@ nir_channel(nir_builder *b, nir_ssa_def *def, unsigned c)
>  static inline nir_ssa_def *
>  nir_ssa_for_src(nir_builder *build, nir_src src, int num_components)
>  {
> +   nir_alu_src alu = { NIR_SRC_INIT };
> +
>     if (src.is_ssa && src.ssa->num_components == num_components)
>        return src.ssa;
>
> -   nir_alu_src alu = { NIR_SRC_INIT };
>     alu.src = src;
>     for (int j = 0; j < 4; j++)
>        alu.swizzle[j] = j;
> --
> 2.5.0
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev


More information about the mesa-dev mailing list