glsl: more accurately handle swizzle in 64bit varying split with no left value

as implied in the surrounding code, left_components can be 0 here, in which
case creating a left swizzle is unnecessary (and triggers an assert)

this moves a failing assert farther down the stack to a more useful location
when trying to pack e.g., struct[3] { dvec3; float; }

ref spec@arb_gpu_shader_fp64@execution@inout@vs-out-fs-in-s1-s2@3-dvec2-float

Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7134>
diff --git a/.gitlab-ci/piglit/quick_shader.txt b/.gitlab-ci/piglit/quick_shader.txt
index a4b3a5c..537c917 100644
--- a/.gitlab-ci/piglit/quick_shader.txt
+++ b/.gitlab-ci/piglit/quick_shader.txt
@@ -238,23 +238,15 @@
 spec/arb_gpu_shader_fp64/execution/inout/vs-out-fs-in-s2/3-dvec2-float: crash
 spec/arb_gpu_shader_fp64/execution/inout/vs-out-fs-in-s2/3-dvec3-float: crash
 spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-float-float-i64vec2: crash
-spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-float-float-i64vec3: crash
-spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-float-float-int64_t: crash
+spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-float-float-i64vec3: fail
 spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-float-float-u64vec2: crash
-spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-float-float-u64vec3: crash
-spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-float-float-uint64_t: crash
-spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-i64vec2: crash
+spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-i64vec2: fail
 spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-i64vec3: crash
-spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-int64_t/3/2: crash
-spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-u64vec2: crash
 spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-u64vec3: crash
-spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-uint64_t/3/2: crash
+spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float-uint64_t/3/2: fail
 spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float/3-i64vec2: crash
-spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float/3-i64vec3: crash
-spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float/3-int64_t: crash
+spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float/3-i64vec3: fail
 spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float/3-u64vec2: crash
-spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float/3-u64vec3: crash
-spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-float/3-uint64_t: crash
 spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-s2/2-s3/2-float-int64_t: crash
 spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-s2/2-s3/2-float-uint64_t: crash
 spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-s2/2-s3/2-vec3-int64_t: crash
@@ -270,12 +262,8 @@
 spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-s2/3-u64vec3-float: crash
 spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-s2/3-uint64_t-float: crash
 spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-vec3-i64vec2: crash
-spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-vec3-i64vec3: crash
-spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-vec3-int64_t: crash
 spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-vec3-int64_t/3/2: crash
 spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-vec3-u64vec2: crash
-spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-vec3-u64vec3: crash
-spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-vec3-uint64_t: crash
 spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s1-vec3-uint64_t/3/2: crash
 spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s2/2-s3/2-float-int64_t: crash
 spec/arb_gpu_shader_int64/execution/inout/vs-out-fs-in-s2/2-s3/2-float-uint64_t: crash
@@ -569,9 +557,9 @@
 summary:
        name:  results
        ----  --------
-       pass:    15807
-       fail:       83
-      crash:      170
+       pass:    15819
+       fail:       87
+      crash:      154
        skip:      315
     timeout:        0
        warn:        0
diff --git a/src/compiler/glsl/lower_packed_varyings.cpp b/src/compiler/glsl/lower_packed_varyings.cpp
index 9c418eb..af9f645 100644
--- a/src/compiler/glsl/lower_packed_varyings.cpp
+++ b/src/compiler/glsl/lower_packed_varyings.cpp
@@ -580,20 +580,21 @@
          right_swizzle_values[i] = i + left_components;
          right_swizzle_name[i] = "xyzw"[i + left_components];
       }
-      ir_swizzle *left_swizzle = new(this->mem_ctx)
-         ir_swizzle(rvalue, left_swizzle_values, left_components);
+
       ir_swizzle *right_swizzle = new(this->mem_ctx)
          ir_swizzle(rvalue->clone(this->mem_ctx, NULL), right_swizzle_values,
                     right_components);
-      char *left_name
-         = ralloc_asprintf(this->mem_ctx, "%s.%s", name, left_swizzle_name);
       char *right_name
          = ralloc_asprintf(this->mem_ctx, "%s.%s", name, right_swizzle_name);
-      if (left_components)
+      if (left_components) {
+         char *left_name
+            = ralloc_asprintf(this->mem_ctx, "%s.%s", name, left_swizzle_name);
+         ir_swizzle *left_swizzle = new(this->mem_ctx)
+                                    ir_swizzle(rvalue, left_swizzle_values, left_components);
          fine_location = this->lower_rvalue(left_swizzle, fine_location,
                                             unpacked_var, left_name, false,
                                             vertex_index);
-      else
+      } else
          /* Top up the fine location to the next slot */
          fine_location++;
       return this->lower_rvalue(right_swizzle, fine_location, unpacked_var,