diff --git a/verif/generator/tosa_arg_gen.py b/verif/generator/tosa_arg_gen.py
index 0db9717..7825445 100644
--- a/verif/generator/tosa_arg_gen.py
+++ b/verif/generator/tosa_arg_gen.py
@@ -1059,6 +1059,19 @@
         )
 
     @staticmethod
+    def tvgSlice(testGen, op, dtypeList, shapeList, argsDict, error_name=None):
+        dtypeList[1] = DType.SHAPE
+        shapeList[1] = [len(argsDict["start"])]
+        dtypeList[2] = DType.SHAPE
+        shapeList[2] = [len(argsDict["size"])]
+        # Create a new list for the pre-generated data in argsDict["fixed_data"]
+        argsDict["fixed_data"] = [None, argsDict["start"], argsDict["size"]]
+
+        return TosaTensorValuesGen.tvgLazyGenDefault(
+            testGen, op, dtypeList, shapeList, argsDict, error_name
+        )
+
+    @staticmethod
     def tvgTile(testGen, op, dtypeList, shapeList, argsDict, error_name=None):
         dtypeList[1] = DType.SHAPE
         shapeList[1] = [len(argsDict["multiples"])]
diff --git a/verif/generator/tosa_error_if.py b/verif/generator/tosa_error_if.py
index a5a834f..90c3428 100644
--- a/verif/generator/tosa_error_if.py
+++ b/verif/generator/tosa_error_if.py
@@ -305,6 +305,11 @@
             return newStart, newSize
         elif error_name == ErrorIf.InputSizeStartLengthMismatch:
             remove = testGen.rng.choice([True, False])
+
+            # Get an empty tensor when diminishing dimension on 1-d tensor.
+            if len(start) == 1 or len(size) == 1:
+                remove = False
+
             if remove:
                 newStart = start[1:]
                 newSize = size[1:]
diff --git a/verif/generator/tosa_test_gen.py b/verif/generator/tosa_test_gen.py
index 081aff6..9cb0ce2 100644
--- a/verif/generator/tosa_test_gen.py
+++ b/verif/generator/tosa_test_gen.py
@@ -1705,17 +1705,17 @@
     def build_slice(
         self, op, inputs, args_dict, validator_fcns=None, error_name=None, qinfo=None
     ):
-        assert len(inputs) == 1
-        a = inputs[0]
-        start = args_dict["start"]
-        size = args_dict["size"]
+        assert len(inputs) == 3
+        a, start_var, size_var = inputs
+        start_const = args_dict["start"]
+        size_const = args_dict["size"]
 
         result_tensor = OutputShaper.sliceOp(
-            self.ser, self.rng, a, start, size, error_name
+            self.ser, self.rng, a, start_const, size_const, error_name
         )
 
         # Invalidate Input/Output list for error if checks.
-        input_list = [a.name]
+        input_list = [a.name, start_var.name, size_var.name]
         output_list = [result_tensor.name]
         pCount, cCount = op["operands"]
         num_operands = pCount + cCount
@@ -1732,8 +1732,8 @@
             output_shape=result_tensor.shape,
             input_dtype=a.dtype,
             output_dtype=result_tensor.dtype,
-            start=start,
-            size=size,
+            start=start_const,
+            size=size_const,
             result_tensors=[result_tensor],
             input_list=input_list,
             output_list=output_list,
@@ -1742,8 +1742,9 @@
         ):
             return None
 
+        # TODO remove the slice attribute once shape dynamism support is mature.
         attr = ts.TosaSerializerAttribute()
-        attr.SliceAttribute(start, size)
+        attr.SliceAttribute(start_const, size_const)
 
         self.ser.addOperator(op["op"], input_list, output_list, attr)
 
@@ -4358,18 +4359,22 @@
         },
         "slice": {
             "op": Op.SLICE,
-            "operands": (1, 0),
+            "operands": (3, 0),
             "rank": (1, 6),
             "build_fcn": (
                 build_slice,
                 TosaTensorGen.tgBasic,
-                TosaTensorValuesGen.tvgLazyGenDefault,
+                TosaTensorValuesGen.tvgSlice,
                 TosaArgGen.agSlice,
             ),
             "types": TYPE_FIB,
             "error_if_validators": (
-                TosaErrorValidator.evStartSmallerZero,
-                TosaErrorValidator.evSizeSmallerEqualZero,
+                # TODO Turn off these error categories for now as the reference
+                # model cannot allocate memory space for empty tensor. We probably
+                # can report an accurate error messege at the right place during
+                # exeuction.
+                # TosaErrorValidator.evStartSmallerZero,
+                # TosaErrorValidator.evSizeSmallerEqualZero,
                 TosaErrorValidator.evStartSizeOutsideBounds,
                 TosaErrorValidator.evSizeOutputShapeMismatch,
                 TosaErrorValidator.evInputSizeStartLengthMismatch,
