Repository: QuTech-Delft/libqasm (language: python)

Issue:
Release 0.6.9
### Added
- `SWAP` unitary instruction.
- `init`, `barrier`, and `wait` non-unitary instructions.

### Changed

### Removed
- `reset` without qubit operands form.


Discussion / hints:

Fix patch:
diff --git a/.github/workflows/doc.yaml b/.github/workflows/doc.yaml
index 5f4d0aa6..1723b901 100644
--- a/.github/workflows/doc.yaml
+++ b/.github/workflows/doc.yaml
@@ -46,5 +46,5 @@ jobs:
       - name: Upload and tag as git tag with every release creation on master branch
         if: github.event_name == 'release' && github.event.action == 'created'
         run: |
-          mike deploy --push ${{ github.ref }}
+          mike deploy --push ${{ github.ref_name }}
           mike set-default --push latest
diff --git a/.github/workflows/linters.yaml b/.github/workflows/linters.yaml
index cd3bc7cd..b7dc446d 100644
--- a/.github/workflows/linters.yaml
+++ b/.github/workflows/linters.yaml
@@ -22,8 +22,6 @@ jobs:
           GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
         with:
           extensions: 'cpp,hpp'
-          files-changed-only: 'true'
-          format-review: 'true'
           style: 'file'  # use .clang-format config file
           tidy-checks: '-*'  # disable clang-tidy checks
           version: 18
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 530261be..c3956b82 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -4,6 +4,18 @@ All notable changes to this project will be documented in this file.
 This project adheres to [Semantic Versioning](http://semver.org/).
 
 
+## [ 0.6.9 ] - [ 2024-11-13 ]
+
+### Added
+- `SWAP` unitary instruction.
+- `init`, `barrier`, and `wait` non-unitary instructions.
+
+### Changed
+
+### Removed
+- `reset` without qubit operands form.
+
+
 ## [ 0.6.8 ] - [ 2024-10-16 ]
 
 ### Added
@@ -33,6 +45,7 @@ This project adheres to [Semantic Versioning](http://semver.org/).
 ### Removed
 - Python 3.8 packages generation.
 
+
 ## [ 0.6.6 ] - [ 2024-05-14 ]
 
 ### Added
diff --git a/docs/dev-guide/cpp.md b/docs/dev-guide/cpp.md
index 0a811efd..59702040 100644
--- a/docs/dev-guide/cpp.md
+++ b/docs/dev-guide/cpp.md
@@ -6,7 +6,7 @@ The following line will also build and cache the `libqasm` Conan package.
 
 ```shell
 conan profile detect
-conan create --version 0.6.8 . -pr:a=tests-debug -b missing
+conan create --version 0.6.9 . -pr:a=tests-debug -b missing
 ```
 
 You can test the C++ binaries:
diff --git a/docs/user-guide/cpp.md b/docs/user-guide/cpp.md
index f1ef5c39..66a97a00 100644
--- a/docs/user-guide/cpp.md
+++ b/docs/user-guide/cpp.md
@@ -2,9 +2,9 @@ libQASM can be requested as a Conan package from a `conanfile.py`.
 
 ```
 def build_requirements(self):
-    self.tool_requires("libqasm/0.6.8")
+    self.tool_requires("libqasm/0.6.9")
 def requirements(self):
-    self.requires("libqasm/0.6.8")
+    self.requires("libqasm/0.6.9")
 ```
 
 And then linked against from a `CMakeLists.txt`:
diff --git a/include/libqasm/v3x/instruction.hpp b/include/libqasm/v3x/instruction.hpp
index cf5c2473..fac8cf54 100644
--- a/include/libqasm/v3x/instruction.hpp
+++ b/include/libqasm/v3x/instruction.hpp
@@ -1,6 +1,6 @@
 /** \file
  * This file contains the \ref cqasm::v3x::instruction::Instruction "Instruction" class and support types,
- * each instance representing an instruction (also known as gate) supported by the user.
+ * each instance representing an instruction (unitary or non-unitary) supported by the user.
  */
 
 #pragma once
@@ -15,9 +15,9 @@ namespace cqasm::v3x::instruction {
 
 /**
  * Representation of an available instruction in the instruction set.
- * An instruction can be: a gate instruction or a non-gate instruction.
+ * An instruction can be: a gate instruction (unitary) or a non-gate instruction (non-unitary).
  * A gate instruction can be a gate or a composition of gate modifiers acting on a unitary gate.
- * A non-gate instruction can be a measure instruction, or a reset instruction.
+ * A non-gate instruction can be a measure instruction, a reset instruction, or an init instruction.
  *
  * A number of these can be registered into libqasm by the program or library using it through
  * \ref cqasm::analyzer::Analyzer::register_instruction(const instruction::Instruction&) "register_instruction",
diff --git a/include/libqasm/v3x/instruction_set.hpp b/include/libqasm/v3x/instruction_set.hpp
index e3592336..85ac25c8 100644
--- a/include/libqasm/v3x/instruction_set.hpp
+++ b/include/libqasm/v3x/instruction_set.hpp
@@ -24,6 +24,7 @@ class InstructionSet {
 
     InstructionListT single_qubit_named_gate_list;
     InstructionListT two_qubit_named_gate_list;
+    InstructionListT non_gate_list;
 
     InstructionSet();
 
@@ -35,6 +36,9 @@ class InstructionSet {
 
     std::string measure_name = "measure";
     std::string reset_name = "reset";
+    std::string init_name = "init";
+    std::string barrier_name = "barrier";
+    std::string wait_name = "wait";
 
     std::string inv_gate_modifier_name = "inv";
     std::string pow_gate_modifier_name = "pow";
@@ -48,6 +52,7 @@ class InstructionSet {
     [[nodiscard]] const GateModifierMapT& get_gate_modifier_map() const;
     [[nodiscard]] const InstructionListT& get_single_qubit_named_gate_list() const;
     [[nodiscard]] const InstructionListT& get_two_qubit_named_gate_list() const;
+    [[nodiscard]] const InstructionListT& get_non_gate_list() const;
 
     [[nodiscard]] bool is_single_qubit_named_gate(const std::string& name) const;
     [[nodiscard]] bool is_two_qubit_named_gate(const std::string& name) const;
@@ -63,6 +68,9 @@ class InstructionSet {
 
     [[nodiscard]] bool is_measure(const std::string& name) const;
     [[nodiscard]] bool is_reset(const std::string& name) const;
+    [[nodiscard]] bool is_init(const std::string& name) const;
+    [[nodiscard]] bool is_barrier(const std::string& name) const;
+    [[nodiscard]] bool is_wait(const std::string& name) const;
     [[nodiscard]] bool is_non_gate(const std::string& name) const;
 
     [[nodiscard]] bool is_inv_gate_modifier(const std::string& name) const;
@@ -73,6 +81,7 @@ class InstructionSet {
     [[nodiscard]] bool is_gate_modifier(const std::string& name) const;
 
     [[nodiscard]] std::optional<char> get_named_gate_param_type(const std::string& name) const;
+    [[nodiscard]] std::optional<char> get_non_gate_param_type(const std::string& name) const;
     [[nodiscard]] std::optional<char> get_gate_modifier_param_type(const std::string& name) const;
     [[nodiscard]] std::optional<char> get_instruction_param_type(const std::string& name) const;
 };
diff --git a/include/libqasm/v3x/syntactic_analyzer.hpp b/include/libqasm/v3x/syntactic_analyzer.hpp
index 08657da7..e582f926 100644
--- a/include/libqasm/v3x/syntactic_analyzer.hpp
+++ b/include/libqasm/v3x/syntactic_analyzer.hpp
@@ -66,6 +66,9 @@ class SyntacticAnalyzer : public BaseSyntacticAnalyzer {
     std::any visitInstruction(CqasmParser::InstructionContext* context) override;
     std::any visitMeasureInstruction(CqasmParser::MeasureInstructionContext* context) override;
     std::any visitResetInstruction(CqasmParser::ResetInstructionContext* context) override;
+    std::any visitInitInstruction(CqasmParser::InitInstructionContext* context) override;
+    std::any visitBarrierInstruction(CqasmParser::BarrierInstructionContext* context) override;
+    std::any visitWaitInstruction(CqasmParser::WaitInstructionContext* context) override;
     std::any visitGateInstruction(CqasmParser::GateInstructionContext* context) override;
     std::any visitInvGate(CqasmParser::InvGateContext* context) override;
     std::any visitPowGate(CqasmParser::PowGateContext* context) override;
diff --git a/include/libqasm/versioning.hpp b/include/libqasm/versioning.hpp
index 57b84f0a..8b2c037e 100644
--- a/include/libqasm/versioning.hpp
+++ b/include/libqasm/versioning.hpp
@@ -2,7 +2,7 @@
 
 namespace cqasm {
 
-static const char* version{ "0.6.8" };
+static const char* version{ "0.6.9" };
 static const char* release_year{ "2024" };
 
 [[nodiscard]] [[maybe_unused]] static const char* get_version() {
diff --git a/src/v3x/CqasmLexer.g4 b/src/v3x/CqasmLexer.g4
index 3c5f3078..c509cd0d 100644
--- a/src/v3x/CqasmLexer.g4
+++ b/src/v3x/CqasmLexer.g4
@@ -47,13 +47,16 @@ LOGICAL_OR_OP: '||';
 TERNARY_CONDITIONAL_OP: '?';
 
 // Keywords
-VERSION: 'version' -> pushMode(VERSION_STATEMENT);
-MEASURE: 'measure';
+VERSION: 'version' -> pushMode(VERSION_STATEMENT);  // version
+MEASURE: 'measure';  // non-unitary instructions
 RESET: 'reset';
-INV: 'inv';
+INIT: 'init';
+BARRIER: 'barrier';
+WAIT: 'wait';
+INV: 'inv';  // gate modifiers
 POW: 'pow';
 CTRL: 'ctrl';
-QUBIT_TYPE: 'qubit';
+QUBIT_TYPE: 'qubit';  // types
 BIT_TYPE: 'bit';
 
 // Numeric literals
diff --git a/src/v3x/CqasmParser.g4 b/src/v3x/CqasmParser.g4
index dc028149..db4474ae 100644
--- a/src/v3x/CqasmParser.g4
+++ b/src/v3x/CqasmParser.g4
@@ -44,9 +44,14 @@ gate:
     | IDENTIFIER (OPEN_PARENS expression CLOSE_PARENS)?  # namedGate
     ;
 
+// Current implementation of the semantic parser will expect a constant integer
+// for the first expression in the WAIT instruction
 nonGateInstruction:
     expression EQUALS MEASURE expression  # measureInstruction
-    | RESET expression?  # resetInstruction
+    | RESET expression  # resetInstruction
+    | INIT expression  # initInstruction
+    | BARRIER expression  # barrierInstruction
+    | WAIT OPEN_PARENS expression CLOSE_PARENS expression  # waitInstruction
     ;
 
 type: quantumType;
diff --git a/src/v3x/ast.tree b/src/v3x/ast.tree
index 94811e64..419c2721 100644
--- a/src/v3x/ast.tree
+++ b/src/v3x/ast.tree
@@ -187,6 +187,7 @@ annotated {
                 non_gate_instruction {
                     name: One<keyword>;
                     operands: One<expression_list>;
+                    parameter: Maybe<expression>;
                 }
             }
         }
diff --git a/src/v3x/instruction_set.cpp b/src/v3x/instruction_set.cpp
index 20d20df1..79cb057f 100644
--- a/src/v3x/instruction_set.cpp
+++ b/src/v3x/instruction_set.cpp
@@ -42,6 +42,10 @@ InstructionSet::InstructionSet()
     { "S", { std::nullopt, "V" } },
     { "Sdag", { std::nullopt, "Q" } },
     { "Sdag", { std::nullopt, "V" } },
+    { "SWAP", { std::nullopt, "QQ" } },
+    { "SWAP", { std::nullopt, "QV" } },
+    { "SWAP", { std::nullopt, "VQ" } },
+    { "SWAP", { std::nullopt, "VV" } },
     { "T", { std::nullopt, "Q" } },
     { "T", { std::nullopt, "V" } },
     { "Tdag", { std::nullopt, "Q" } },
@@ -62,9 +66,15 @@ InstructionSet::InstructionSet()
     { "measure", { std::nullopt, "WV" } },
     { "measure", { std::nullopt, "BV" } },
     { "measure", { std::nullopt, "WQ" } },
-    { "reset", { std::nullopt, std::nullopt } },
     { "reset", { std::nullopt, "Q" } },
-    { "reset", { std::nullopt, "V" } } }
+    { "reset", { std::nullopt, "V" } },
+    { "init", { std::nullopt, "Q" } },
+    { "init", { std::nullopt, "V" } },
+    { "barrier", { std::nullopt, "Q" } },
+    { "barrier", { std::nullopt, "V" } },
+    { "wait", { 'i', "Q" } },
+    { "wait", { 'i', "V" } },
+}
 , gate_modifier_map{
     { "inv", std::nullopt },
     { "pow", 'f' },
@@ -74,7 +84,10 @@ InstructionSet::InstructionSet()
     "H", "I", "mX90", "mY90", "Rx", "Ry", "Rz", "S", "Sdag", "T", "Tdag", "X", "X90", "Y", "Y90", "Z"
 }
 , two_qubit_named_gate_list{
-    "CNOT", "CR", "CRk", "CZ"
+    "CNOT", "CR", "CRk", "CZ", "SWAP"
+}
+, non_gate_list{
+    "measure", "reset", "init", "barrier", "wait"
 }
 {}
 
@@ -103,6 +116,10 @@ InstructionSet::InstructionSet()
     return two_qubit_named_gate_list;
 }
 
+[[nodiscard]] const InstructionListT& InstructionSet::get_non_gate_list() const {
+    return non_gate_list;
+}
+
 [[nodiscard]] bool InstructionSet::is_single_qubit_named_gate(const std::string& name) const {
     return single_qubit_named_gate_list.contains(name);
 }
@@ -147,8 +164,20 @@ InstructionSet::InstructionSet()
     return name == reset_name;
 }
 
+[[nodiscard]] bool InstructionSet::is_init(const std::string& name) const {
+    return name == init_name;
+}
+
+[[nodiscard]] bool InstructionSet::is_barrier(const std::string& name) const {
+    return name == barrier_name;
+}
+
+[[nodiscard]] bool InstructionSet::is_wait(const std::string& name) const {
+    return name == wait_name;
+}
+
 [[nodiscard]] bool InstructionSet::is_non_gate(const std::string& name) const {
-    return is_measure(name) || is_reset(name);
+    return non_gate_list.contains(name);
 }
 
 [[nodiscard]] bool InstructionSet::is_inv_gate_modifier(const std::string& name) const {
@@ -183,6 +212,14 @@ InstructionSet::InstructionSet()
     throw error::AnalysisError{ fmt::format("couldn't find gate '{}'", name) };
 }
 
+[[nodiscard]] std::optional<char> InstructionSet::get_non_gate_param_type(const std::string& name) const {
+    if (const auto& it = non_gate_map.find(name); it != non_gate_map.end()) {
+        const auto& pair_param_types_operand_types = it->second;
+        return pair_param_types_operand_types.first;
+    }
+    throw error::AnalysisError{ fmt::format("couldn't find non-unitary instruction '{}'", name) };
+}
+
 [[nodiscard]] std::optional<char> InstructionSet::get_gate_modifier_param_type(const std::string& name) const {
     if (const auto& it = gate_modifier_map.find(name); it != gate_modifier_map.end()) {
         return it->second;
@@ -194,7 +231,7 @@ InstructionSet::InstructionSet()
     if (is_named_gate(name)) {
         return get_named_gate_param_type(name);
     } else if (is_non_gate(name)) {
-        return std::nullopt;
+        return get_non_gate_param_type(name);
     } else if (is_gate_modifier(name)) {
         return get_gate_modifier_param_type(name);
     }
diff --git a/src/v3x/semantic.tree b/src/v3x/semantic.tree
index 5e2b856c..5baa64a0 100644
--- a/src/v3x/semantic.tree
+++ b/src/v3x/semantic.tree
@@ -71,6 +71,7 @@ annotated {
                 instruction_ref: cqasm::v3x::instruction::InstructionRef;
                 name: cqasm::v3x::primitives::Str;
                 operands: external Any<cqasm::v3x::values::ValueBase>;
+                parameter: external Maybe<cqasm::v3x::values::ValueBase>;
             }
         }
     }
diff --git a/src/v3x/semantic_analyzer.cpp b/src/v3x/semantic_analyzer.cpp
index d7c151a5..7e59ad3a 100644
--- a/src/v3x/semantic_analyzer.cpp
+++ b/src/v3x/semantic_analyzer.cpp
@@ -158,7 +158,7 @@ std::any SemanticAnalyzer::visit_gate_instruction(ast::GateInstruction& node) {
 
         // Resolve the instruction
         const auto& resolution_name = get_gate_resolution_name(gate);
-        ret.set(analyzer_.resolve_instruction(resolution_name, gate, operands));
+        ret = analyzer_.resolve_instruction(resolution_name, gate, operands);
 
         // Copy annotation data
         ret->annotations = std::any_cast<tree::Any<semantic::AnnotationData>>(visit_annotated(*node.as_annotated()));
@@ -179,22 +179,20 @@ bool is_two_qubit_gate(const tree::One<semantic::Gate>& gate) {
     return InstructionSet::get_instance().is_two_qubit_gate(resolution_name);
 }
 
-void check_gate(const tree::One<semantic::Gate>& gate) {
-    if (!gate->gate.empty() && is_two_qubit_gate(gate->gate)) {
-        throw error::AnalysisError{ "trying to apply a gate modifier to a multi-qubit gate" };
+values::Value resolve_parameter(const std::string& instruction_name, const values::Value& parameter) {
+    const auto& instruction_set = InstructionSet::get_instance();
+    const auto& param_type = instruction_set.get_instruction_param_type(instruction_name);
+    if (!param_type.has_value() ||
+        !values::check_promote(values::type_of(parameter), types::from_spec(param_type.value()))) {
+        throw error::AnalysisError{ fmt::format(
+            "failed to resolve '{}' with parameter type ({})", instruction_name, values::type_of(parameter)) };
     }
+    return promote(parameter, types::from_spec(param_type.value()));
 }
 
-void resolve_gate(const tree::One<semantic::Gate>& gate) {
-    if (!gate->parameter.empty()) {
-        const auto& instruction_set = InstructionSet::get_instance();
-        const auto& param_type = instruction_set.get_instruction_param_type(gate->name);
-        if (!param_type.has_value() ||
-            !values::check_promote(values::type_of(gate->parameter), types::from_spec(param_type.value()))) {
-            throw error::AnalysisError{ fmt::format(
-                "failed to resolve '{}' with argument pack ({})", gate->name, values::type_of(gate->parameter)) };
-        }
-        gate->parameter = promote(gate->parameter, types::from_spec(param_type.value()));
+void check_gate(const tree::One<semantic::Gate>& gate) {
+    if (!gate->gate.empty() && is_two_qubit_gate(gate->gate)) {
+        throw error::AnalysisError{ "trying to apply a gate modifier to a multi-qubit gate" };
     }
 }
 
@@ -209,8 +207,10 @@ std::any SemanticAnalyzer::visit_gate(ast::Gate& node) {
             ret->parameter = std::any_cast<values::Value>(visit_expression(*node.parameter)).get_ptr();
         }
 
-        // Resolve the gate
-        resolve_gate(ret);
+        // Resolve the parameter
+        if (!node.parameter.empty()) {
+            ret->parameter = resolve_parameter(ret->name, ret->parameter);
+        }
 
         // Specific checks
         check_gate(ret);
@@ -267,11 +267,17 @@ void check_non_gate_instruction(const tree::One<semantic::NonGateInstruction>& i
 std::any SemanticAnalyzer::visit_non_gate_instruction(ast::NonGateInstruction& node) {
     auto ret = tree::make<semantic::NonGateInstruction>();
     try {
-        const auto& name = node.name->name;
-        const auto& operands = std::any_cast<values::Values>(visit_expression_list(*node.operands));
+        ret->name = node.name->name;
+        ret->operands = std::any_cast<values::Values>(visit_expression_list(*node.operands));
 
         // Resolve the instruction
-        ret.set(analyzer_.resolve_instruction(name, operands));
+        ret = analyzer_.resolve_instruction(ret->name, ret->operands);
+
+        // Resolve the parameter
+        if (!node.parameter.empty()) {
+            ret->parameter =
+                resolve_parameter(ret->name, std::any_cast<values::Value>(visit_expression(*node.parameter)));
+        }
 
         // Specific checks
         check_non_gate_instruction(ret);
diff --git a/src/v3x/syntactic_analyzer.cpp b/src/v3x/syntactic_analyzer.cpp
index 1b359b55..13087cec 100644
--- a/src/v3x/syntactic_analyzer.cpp
+++ b/src/v3x/syntactic_analyzer.cpp
@@ -226,13 +226,39 @@ std::any SyntacticAnalyzer::visitResetInstruction(CqasmParser::ResetInstructionC
     auto ret = tree::make<NonGateInstruction>();
     ret->name = tree::make<Keyword>(context->RESET()->getText());
     ret->operands = tree::make<ExpressionList>();
-    if (context->expression()) {
-        ret->operands->items.add(std::any_cast<One<Expression>>(context->expression()->accept(this)));
-    }
+    ret->operands->items.add(std::any_cast<One<Expression>>(context->expression()->accept(this)));
     setNodeAnnotation(ret, context->RESET()->getSymbol());
     return One<Statement>{ ret };
 }
 
+std::any SyntacticAnalyzer::visitInitInstruction(CqasmParser::InitInstructionContext* context) {
+    auto ret = tree::make<NonGateInstruction>();
+    ret->name = tree::make<Keyword>(context->INIT()->getText());
+    ret->operands = tree::make<ExpressionList>();
+    ret->operands->items.add(std::any_cast<One<Expression>>(context->expression()->accept(this)));
+    setNodeAnnotation(ret, context->INIT()->getSymbol());
+    return One<Statement>{ ret };
+}
+
+std::any SyntacticAnalyzer::visitBarrierInstruction(CqasmParser::BarrierInstructionContext* context) {
+    auto ret = tree::make<NonGateInstruction>();
+    ret->name = tree::make<Keyword>(context->BARRIER()->getText());
+    ret->operands = tree::make<ExpressionList>();
+    ret->operands->items.add(std::any_cast<One<Expression>>(context->expression()->accept(this)));
+    setNodeAnnotation(ret, context->BARRIER()->getSymbol());
+    return One<Statement>{ ret };
+}
+
+std::any SyntacticAnalyzer::visitWaitInstruction(CqasmParser::WaitInstructionContext* context) {
+    auto ret = tree::make<NonGateInstruction>();
+    ret->name = tree::make<Keyword>(context->WAIT()->getText());
+    ret->parameter = std::any_cast<One<Expression>>(context->expression(0)->accept(this)).get_ptr();
+    ret->operands = tree::make<ExpressionList>();
+    ret->operands->items.add(std::any_cast<One<Expression>>(context->expression(1)->accept(this)));
+    setNodeAnnotation(ret, context->WAIT()->getSymbol());
+    return One<Statement>{ ret };
+}
+
 std::any SyntacticAnalyzer::visitType(CqasmParser::TypeContext* context) {
     return context->quantumType()->accept(this);
 }


Test patch:
diff --git a/emscripten/test_libqasm.ts b/emscripten/test_libqasm.ts
index 2a19b40d..d0539186 100644
--- a/emscripten/test_libqasm.ts
+++ b/emscripten/test_libqasm.ts
@@ -8,7 +8,7 @@ wrapper().then(function(result: any) {
 
     try {
         let output = cqasm.get_version()
-        let expected_output = "0.6.8"
+        let expected_output = "0.6.9"
         console.log("\nThe version of libqasm compiled with emscripten is:", output);
         if (output !== expected_output) {
             console.log("\tExpected output:", expected_output)
@@ -32,7 +32,7 @@ wrapper().then(function(result: any) {
     try {
         let program_2 = "version 3;qubit[5] q;bit[5] b;H q[0:4];b = measure q"
         let output = cqasm.parse_string_to_json(program_2, "<unknown>")
-        let expected_output = String.raw`{"Program":{"version":{"Version":{"items":"3","source_location":"<unknown>:1:9..10"}},"block":{"GlobalBlock":{"statements":[{"Variable":{"name":{"Identifier":{"name":"q"}},"typ":{"Type":{"name":{"Keyword":{"name":"qubit"}},"size":{"IntegerLiteral":{"value":"5"}},"source_location":"<unknown>:1:11..19"}},"annotations":[],"source_location":"<unknown>:1:20..21"}},{"Variable":{"name":{"Identifier":{"name":"b"}},"typ":{"Type":{"name":{"Keyword":{"name":"bit"}},"size":{"IntegerLiteral":{"value":"5"}},"source_location":"<unknown>:1:22..28"}},"annotations":[],"source_location":"<unknown>:1:29..30"}},{"GateInstruction":{"gate":{"Gate":{"name":{"Identifier":{"name":"H"}},"gate":"-","parameter":"-","annotations":[],"source_location":"<unknown>:1:31..32"}},"operands":{"ExpressionList":{"items":[{"Index":{"expr":{"Identifier":{"name":"q"}},"indices":{"IndexList":{"items":[{"IndexRange":{"first":{"IntegerLiteral":{"value":"0","source_location":"<unknown>:1:35..36"}},"last":{"IntegerLiteral":{"value":"4","source_location":"<unknown>:1:37..38"}}}}]}},"source_location":"<unknown>:1:33..34"}}]}},"annotations":[],"source_location":"<unknown>:1:31..32"}},{"NonGateInstruction":{"name":{"Keyword":{"name":"measure"}},"operands":{"ExpressionList":{"items":[{"Identifier":{"name":"b","source_location":"<unknown>:1:40..41"}},{"Identifier":{"name":"q","source_location":"<unknown>:1:52..53"}}]}},"annotations":[],"source_location":"<unknown>:1:44..51"}}]}}}}`
+        let expected_output = String.raw`{"Program":{"version":{"Version":{"items":"3","source_location":"<unknown>:1:9..10"}},"block":{"GlobalBlock":{"statements":[{"Variable":{"name":{"Identifier":{"name":"q"}},"typ":{"Type":{"name":{"Keyword":{"name":"qubit"}},"size":{"IntegerLiteral":{"value":"5"}},"source_location":"<unknown>:1:11..19"}},"annotations":[],"source_location":"<unknown>:1:20..21"}},{"Variable":{"name":{"Identifier":{"name":"b"}},"typ":{"Type":{"name":{"Keyword":{"name":"bit"}},"size":{"IntegerLiteral":{"value":"5"}},"source_location":"<unknown>:1:22..28"}},"annotations":[],"source_location":"<unknown>:1:29..30"}},{"GateInstruction":{"gate":{"Gate":{"name":{"Identifier":{"name":"H"}},"gate":"-","parameter":"-","annotations":[],"source_location":"<unknown>:1:31..32"}},"operands":{"ExpressionList":{"items":[{"Index":{"expr":{"Identifier":{"name":"q"}},"indices":{"IndexList":{"items":[{"IndexRange":{"first":{"IntegerLiteral":{"value":"0","source_location":"<unknown>:1:35..36"}},"last":{"IntegerLiteral":{"value":"4","source_location":"<unknown>:1:37..38"}}}}]}},"source_location":"<unknown>:1:33..34"}}]}},"annotations":[],"source_location":"<unknown>:1:31..32"}},{"NonGateInstruction":{"name":{"Keyword":{"name":"measure"}},"operands":{"ExpressionList":{"items":[{"Identifier":{"name":"b","source_location":"<unknown>:1:40..41"}},{"Identifier":{"name":"q","source_location":"<unknown>:1:52..53"}}]}},"parameter":"-","annotations":[],"source_location":"<unknown>:1:44..51"}}]}}}}`
         console.log("\nExample 2:", program_2, "\n\tCalling parse_string_to_json...", "\n\tOutput:", output)
         if (output !== expected_output) {
             console.log("\tExpected output:", expected_output)
@@ -56,7 +56,7 @@ wrapper().then(function(result: any) {
     try {
         let program_4 = "version 3;qubit[5] q;bit[5] b;H q[0:4];b = measure q"
         let output = cqasm.analyze_string_to_json(program_4, "spin_q.cq")
-        let expected_output = String.raw`{"Program":{"api_version":"3.0","version":{"Version":{"items":"3"}},"block":{"Block":{"statements":[{"GateInstruction":{"instruction_ref":"H(qubit array)","gate":{"Gate":{"name":"H","gate":"-","parameter":"-","annotations":[]}},"operands":[{"IndexRef":{"variable":{"Variable":{"name":"q","typ":{"QubitArray":{"size":"5"}},"annotations":[]}},"indices":[{"ConstInt":{"value":"0"}},{"ConstInt":{"value":"1"}},{"ConstInt":{"value":"2"}},{"ConstInt":{"value":"3"}},{"ConstInt":{"value":"4"}}]}}],"annotations":[]}},{"NonGateInstruction":{"instruction_ref":"measure(bit array, qubit array)","name":"measure","operands":[{"VariableRef":{"variable":{"Variable":{"name":"b","typ":{"BitArray":{"size":"5"}},"annotations":[]}}}},{"VariableRef":{"variable":{"Variable":{"name":"q","typ":{"QubitArray":{"size":"5"}},"annotations":[]}}}}],"annotations":[]}}]}},"variables":[{"Variable":{"name":"q","typ":{"QubitArray":{"size":"5"}},"annotations":[]}},{"Variable":{"name":"b","typ":{"BitArray":{"size":"5"}},"annotations":[]}}]}}`
+        let expected_output = String.raw`{"Program":{"api_version":"3.0","version":{"Version":{"items":"3"}},"block":{"Block":{"statements":[{"GateInstruction":{"instruction_ref":"H(qubit array)","gate":{"Gate":{"name":"H","gate":"-","parameter":"-","annotations":[]}},"operands":[{"IndexRef":{"variable":{"Variable":{"name":"q","typ":{"QubitArray":{"size":"5"}},"annotations":[]}},"indices":[{"ConstInt":{"value":"0"}},{"ConstInt":{"value":"1"}},{"ConstInt":{"value":"2"}},{"ConstInt":{"value":"3"}},{"ConstInt":{"value":"4"}}]}}],"annotations":[]}},{"NonGateInstruction":{"instruction_ref":"measure(bit array, qubit array)","name":"measure","operands":[{"VariableRef":{"variable":{"Variable":{"name":"b","typ":{"BitArray":{"size":"5"}},"annotations":[]}}}},{"VariableRef":{"variable":{"Variable":{"name":"q","typ":{"QubitArray":{"size":"5"}},"annotations":[]}}}}],"parameter":"-","annotations":[]}}]}},"variables":[{"Variable":{"name":"q","typ":{"QubitArray":{"size":"5"}},"annotations":[]}},{"Variable":{"name":"b","typ":{"BitArray":{"size":"5"}},"annotations":[]}}]}}`
         console.log("\nExample 4:", program_4, "\n\tCalling analyze_string_to_json...", "\n\tOutput:", output)
         if (output !== expected_output) {
             console.log("\tExpected output:", expected_output)
diff --git a/python/test_libqasm.py b/python/test_libqasm.py
index 1c26d814..bf7e2b8a 100644
--- a/python/test_libqasm.py
+++ b/python/test_libqasm.py
@@ -22,7 +22,7 @@ def __init__(self, file_name: str, program: str, analyzer_api_name: str, expecte
         "<unknown>",
         "version 3;qubit[5] q;bit[5] b;H q[0:4];b = measure q",
         "parse_string_to_json",
-        '''{"Program":{"version":{"Version":{"items":"3","source_location":"<unknown>:1:9..10"}},"block":{"GlobalBlock":{"statements":[{"Variable":{"name":{"Identifier":{"name":"q"}},"typ":{"Type":{"name":{"Keyword":{"name":"qubit"}},"size":{"IntegerLiteral":{"value":"5"}},"source_location":"<unknown>:1:11..19"}},"annotations":[],"source_location":"<unknown>:1:20..21"}},{"Variable":{"name":{"Identifier":{"name":"b"}},"typ":{"Type":{"name":{"Keyword":{"name":"bit"}},"size":{"IntegerLiteral":{"value":"5"}},"source_location":"<unknown>:1:22..28"}},"annotations":[],"source_location":"<unknown>:1:29..30"}},{"GateInstruction":{"gate":{"Gate":{"name":{"Identifier":{"name":"H"}},"gate":"-","parameter":"-","annotations":[],"source_location":"<unknown>:1:31..32"}},"operands":{"ExpressionList":{"items":[{"Index":{"expr":{"Identifier":{"name":"q"}},"indices":{"IndexList":{"items":[{"IndexRange":{"first":{"IntegerLiteral":{"value":"0","source_location":"<unknown>:1:35..36"}},"last":{"IntegerLiteral":{"value":"4","source_location":"<unknown>:1:37..38"}}}}]}},"source_location":"<unknown>:1:33..34"}}]}},"annotations":[],"source_location":"<unknown>:1:31..32"}},{"NonGateInstruction":{"name":{"Keyword":{"name":"measure"}},"operands":{"ExpressionList":{"items":[{"Identifier":{"name":"b","source_location":"<unknown>:1:40..41"}},{"Identifier":{"name":"q","source_location":"<unknown>:1:52..53"}}]}},"annotations":[],"source_location":"<unknown>:1:44..51"}}]}}}}'''
+        '''{"Program":{"version":{"Version":{"items":"3","source_location":"<unknown>:1:9..10"}},"block":{"GlobalBlock":{"statements":[{"Variable":{"name":{"Identifier":{"name":"q"}},"typ":{"Type":{"name":{"Keyword":{"name":"qubit"}},"size":{"IntegerLiteral":{"value":"5"}},"source_location":"<unknown>:1:11..19"}},"annotations":[],"source_location":"<unknown>:1:20..21"}},{"Variable":{"name":{"Identifier":{"name":"b"}},"typ":{"Type":{"name":{"Keyword":{"name":"bit"}},"size":{"IntegerLiteral":{"value":"5"}},"source_location":"<unknown>:1:22..28"}},"annotations":[],"source_location":"<unknown>:1:29..30"}},{"GateInstruction":{"gate":{"Gate":{"name":{"Identifier":{"name":"H"}},"gate":"-","parameter":"-","annotations":[],"source_location":"<unknown>:1:31..32"}},"operands":{"ExpressionList":{"items":[{"Index":{"expr":{"Identifier":{"name":"q"}},"indices":{"IndexList":{"items":[{"IndexRange":{"first":{"IntegerLiteral":{"value":"0","source_location":"<unknown>:1:35..36"}},"last":{"IntegerLiteral":{"value":"4","source_location":"<unknown>:1:37..38"}}}}]}},"source_location":"<unknown>:1:33..34"}}]}},"annotations":[],"source_location":"<unknown>:1:31..32"}},{"NonGateInstruction":{"name":{"Keyword":{"name":"measure"}},"operands":{"ExpressionList":{"items":[{"Identifier":{"name":"b","source_location":"<unknown>:1:40..41"}},{"Identifier":{"name":"q","source_location":"<unknown>:1:52..53"}}]}},"parameter":"-","annotations":[],"source_location":"<unknown>:1:44..51"}}]}}}}'''
     ),
     TestDataEntry(
         "q_gym.cq",
@@ -34,7 +34,7 @@ def __init__(self, file_name: str, program: str, analyzer_api_name: str, expecte
         "spin_q.cq",
         "version 3;qubit[5] q;bit[5] b;H q[0:4];b = measure q",
         "analyze_string_to_json",
-        '''{"Program":{"api_version":"3.0","version":{"Version":{"items":"3"}},"block":{"Block":{"statements":[{"GateInstruction":{"instruction_ref":"H(qubit array)","gate":{"Gate":{"name":"H","gate":"-","parameter":"-","annotations":[]}},"operands":[{"IndexRef":{"variable":{"Variable":{"name":"q","typ":{"QubitArray":{"size":"5"}},"annotations":[]}},"indices":[{"ConstInt":{"value":"0"}},{"ConstInt":{"value":"1"}},{"ConstInt":{"value":"2"}},{"ConstInt":{"value":"3"}},{"ConstInt":{"value":"4"}}]}}],"annotations":[]}},{"NonGateInstruction":{"instruction_ref":"measure(bit array, qubit array)","name":"measure","operands":[{"VariableRef":{"variable":{"Variable":{"name":"b","typ":{"BitArray":{"size":"5"}},"annotations":[]}}}},{"VariableRef":{"variable":{"Variable":{"name":"q","typ":{"QubitArray":{"size":"5"}},"annotations":[]}}}}],"annotations":[]}}]}},"variables":[{"Variable":{"name":"q","typ":{"QubitArray":{"size":"5"}},"annotations":[]}},{"Variable":{"name":"b","typ":{"BitArray":{"size":"5"}},"annotations":[]}}]}}'''
+        '''{"Program":{"api_version":"3.0","version":{"Version":{"items":"3"}},"block":{"Block":{"statements":[{"GateInstruction":{"instruction_ref":"H(qubit array)","gate":{"Gate":{"name":"H","gate":"-","parameter":"-","annotations":[]}},"operands":[{"IndexRef":{"variable":{"Variable":{"name":"q","typ":{"QubitArray":{"size":"5"}},"annotations":[]}},"indices":[{"ConstInt":{"value":"0"}},{"ConstInt":{"value":"1"}},{"ConstInt":{"value":"2"}},{"ConstInt":{"value":"3"}},{"ConstInt":{"value":"4"}}]}}],"annotations":[]}},{"NonGateInstruction":{"instruction_ref":"measure(bit array, qubit array)","name":"measure","operands":[{"VariableRef":{"variable":{"Variable":{"name":"b","typ":{"BitArray":{"size":"5"}},"annotations":[]}}}},{"VariableRef":{"variable":{"Variable":{"name":"q","typ":{"QubitArray":{"size":"5"}},"annotations":[]}}}}],"parameter":"-","annotations":[]}}]}},"variables":[{"Variable":{"name":"q","typ":{"QubitArray":{"size":"5"}},"annotations":[]}},{"Variable":{"name":"b","typ":{"BitArray":{"size":"5"}},"annotations":[]}}]}}'''
     )
 ]
 
diff --git a/res/v3x/tests/integration/barrier_instruction/5/ast.golden.txt b/res/v3x/tests/integration/barrier_instruction/5/ast.golden.txt
new file mode 100644
index 00000000..d30f112e
--- /dev/null
+++ b/res/v3x/tests/integration/barrier_instruction/5/ast.golden.txt
@@ -0,0 +1,51 @@
+SUCCESS
+Program(
+  version: <
+    Version( # input.cq:1:9..10
+      items: 3
+    )
+  >
+  block: <
+    GlobalBlock(
+      statements: [
+        Variable( # input.cq:3:7..8
+          name: <
+            Identifier(
+              name: q
+            )
+          >
+          typ: <
+            Type( # input.cq:3:1..6
+              name: <
+                Keyword(
+                  name: qubit
+                )
+              >
+              size: -
+            )
+          >
+          annotations: []
+        )
+        NonGateInstruction( # input.cq:5:1..8
+          name: <
+            Keyword(
+              name: barrier
+            )
+          >
+          operands: <
+            ExpressionList(
+              items: [
+                IntegerLiteral( # input.cq:5:9..10
+                  value: 5
+                )
+              ]
+            )
+          >
+          parameter: -
+          annotations: []
+        )
+      ]
+    )
+  >
+)
+
diff --git a/res/v3x/tests/integration/barrier_instruction/5/input.cq b/res/v3x/tests/integration/barrier_instruction/5/input.cq
new file mode 100644
index 00000000..c4ea5fcc
--- /dev/null
+++ b/res/v3x/tests/integration/barrier_instruction/5/input.cq
@@ -0,0 +1,5 @@
+version 3
+
+qubit q
+
+barrier 5
diff --git a/res/v3x/tests/integration/barrier_instruction/5/semantic.3.0.golden.txt b/res/v3x/tests/integration/barrier_instruction/5/semantic.3.0.golden.txt
new file mode 100644
index 00000000..323e0446
--- /dev/null
+++ b/res/v3x/tests/integration/barrier_instruction/5/semantic.3.0.golden.txt
@@ -0,0 +1,2 @@
+ERROR
+Error at input.cq:5:1..8: failed to resolve instruction 'barrier' with argument pack (int)
diff --git a/res/v3x/tests/integration/barrier_instruction/no_operand/ast.golden.txt b/res/v3x/tests/integration/barrier_instruction/no_operand/ast.golden.txt
new file mode 100644
index 00000000..2ec55508
--- /dev/null
+++ b/res/v3x/tests/integration/barrier_instruction/no_operand/ast.golden.txt
@@ -0,0 +1,2 @@
+ERROR
+Error at input.cq:5:8..9: mismatched input '\n' expecting {'(', '+', '-', '~', '!', BOOLEAN_LITERAL, INTEGER_LITERAL, FLOAT_LITERAL, IDENTIFIER}
diff --git a/res/v3x/tests/integration/barrier_instruction/no_operand/input.cq b/res/v3x/tests/integration/barrier_instruction/no_operand/input.cq
new file mode 100644
index 00000000..72a063bd
--- /dev/null
+++ b/res/v3x/tests/integration/barrier_instruction/no_operand/input.cq
@@ -0,0 +1,5 @@
+version 3
+
+qubit q
+
+barrier
diff --git a/res/v3x/tests/integration/barrier_instruction/q/ast.golden.txt b/res/v3x/tests/integration/barrier_instruction/q/ast.golden.txt
new file mode 100644
index 00000000..b71b2238
--- /dev/null
+++ b/res/v3x/tests/integration/barrier_instruction/q/ast.golden.txt
@@ -0,0 +1,51 @@
+SUCCESS
+Program(
+  version: <
+    Version( # input.cq:1:9..10
+      items: 3
+    )
+  >
+  block: <
+    GlobalBlock(
+      statements: [
+        Variable( # input.cq:3:7..8
+          name: <
+            Identifier(
+              name: q
+            )
+          >
+          typ: <
+            Type( # input.cq:3:1..6
+              name: <
+                Keyword(
+                  name: qubit
+                )
+              >
+              size: -
+            )
+          >
+          annotations: []
+        )
+        NonGateInstruction( # input.cq:5:1..8
+          name: <
+            Keyword(
+              name: barrier
+            )
+          >
+          operands: <
+            ExpressionList(
+              items: [
+                Identifier( # input.cq:5:9..10
+                  name: q
+                )
+              ]
+            )
+          >
+          parameter: -
+          annotations: []
+        )
+      ]
+    )
+  >
+)
+
diff --git a/res/v3x/tests/integration/barrier_instruction/q/input.cq b/res/v3x/tests/integration/barrier_instruction/q/input.cq
new file mode 100644
index 00000000..adf893be
--- /dev/null
+++ b/res/v3x/tests/integration/barrier_instruction/q/input.cq
@@ -0,0 +1,5 @@
+version 3
+
+qubit q
+
+barrier q
diff --git a/res/v3x/tests/integration/barrier_instruction/q/semantic.3.0.golden.txt b/res/v3x/tests/integration/barrier_instruction/q/semantic.3.0.golden.txt
new file mode 100644
index 00000000..6f30a752
--- /dev/null
+++ b/res/v3x/tests/integration/barrier_instruction/q/semantic.3.0.golden.txt
@@ -0,0 +1,48 @@
+SUCCESS
+Program(
+  api_version: 3.0
+  version: <
+    Version(
+      items: 3
+    )
+  >
+  block: <
+    Block(
+      statements: [
+        NonGateInstruction(
+          instruction_ref: barrier(qubit)
+          name: barrier
+          operands: [
+            VariableRef(
+              variable --> <
+                Variable(
+                  name: q
+                  typ: <
+                    Qubit(
+                      size: 1
+                    )
+                  >
+                  annotations: []
+                )
+              >
+            )
+          ]
+          parameter: -
+          annotations: []
+        )
+      ]
+    )
+  >
+  variables: [
+    Variable(
+      name: q
+      typ: <
+        Qubit(
+          size: 1
+        )
+      >
+      annotations: []
+    )
+  ]
+)
+
diff --git a/res/v3x/tests/integration/barrier_instruction/q_range_0_4/ast.golden.txt b/res/v3x/tests/integration/barrier_instruction/q_range_0_4/ast.golden.txt
new file mode 100644
index 00000000..6db138cd
--- /dev/null
+++ b/res/v3x/tests/integration/barrier_instruction/q_range_0_4/ast.golden.txt
@@ -0,0 +1,77 @@
+SUCCESS
+Program(
+  version: <
+    Version( # input.cq:1:9..10
+      items: 3
+    )
+  >
+  block: <
+    GlobalBlock(
+      statements: [
+        Variable( # input.cq:3:10..11
+          name: <
+            Identifier(
+              name: q
+            )
+          >
+          typ: <
+            Type( # input.cq:3:1..9
+              name: <
+                Keyword(
+                  name: qubit
+                )
+              >
+              size: <
+                IntegerLiteral(
+                  value: 9
+                )
+              >
+            )
+          >
+          annotations: []
+        )
+        NonGateInstruction( # input.cq:5:1..8
+          name: <
+            Keyword(
+              name: barrier
+            )
+          >
+          operands: <
+            ExpressionList(
+              items: [
+                Index( # input.cq:5:9..10
+                  expr: <
+                    Identifier(
+                      name: q
+                    )
+                  >
+                  indices: <
+                    IndexList(
+                      items: [
+                        IndexRange(
+                          first: <
+                            IntegerLiteral( # input.cq:5:11..12
+                              value: 0
+                            )
+                          >
+                          last: <
+                            IntegerLiteral( # input.cq:5:13..14
+                              value: 4
+                            )
+                          >
+                        )
+                      ]
+                    )
+                  >
+                )
+              ]
+            )
+          >
+          parameter: -
+          annotations: []
+        )
+      ]
+    )
+  >
+)
+
diff --git a/res/v3x/tests/integration/barrier_instruction/q_range_0_4/input.cq b/res/v3x/tests/integration/barrier_instruction/q_range_0_4/input.cq
new file mode 100644
index 00000000..0b350283
--- /dev/null
+++ b/res/v3x/tests/integration/barrier_instruction/q_range_0_4/input.cq
@@ -0,0 +1,5 @@
+version 3
+
+qubit[9] q
+
+barrier q[0:4]
diff --git a/res/v3x/tests/integration/barrier_instruction/q_range_0_4/semantic.3.0.golden.txt b/res/v3x/tests/integration/barrier_instruction/q_range_0_4/semantic.3.0.golden.txt
new file mode 100644
index 00000000..f3914982
--- /dev/null
+++ b/res/v3x/tests/integration/barrier_instruction/q_range_0_4/semantic.3.0.golden.txt
@@ -0,0 +1,65 @@
+SUCCESS
+Program(
+  api_version: 3.0
+  version: <
+    Version(
+      items: 3
+    )
+  >
+  block: <
+    Block(
+      statements: [
+        NonGateInstruction(
+          instruction_ref: barrier(qubit array)
+          name: barrier
+          operands: [
+            IndexRef(
+              variable --> <
+                Variable(
+                  name: q
+                  typ: <
+                    QubitArray(
+                      size: 9
+                    )
+                  >
+                  annotations: []
+                )
+              >
+              indices: [
+                ConstInt(
+                  value: 0
+                )
+                ConstInt(
+                  value: 1
+                )
+                ConstInt(
+                  value: 2
+                )
+                ConstInt(
+                  value: 3
+                )
+                ConstInt(
+                  value: 4
+                )
+              ]
+            )
+          ]
+          parameter: -
+          annotations: []
+        )
+      ]
+    )
+  >
+  variables: [
+    Variable(
+      name: q
+      typ: <
+        QubitArray(
+          size: 9
+        )
+      >
+      annotations: []
+    )
+  ]
+)
+
diff --git a/res/v3x/tests/integration/gate_modifier/pow_b_X_q/semantic.3.0.golden.txt b/res/v3x/tests/integration/gate_modifier/pow_b_X_q/semantic.3.0.golden.txt
index 9c039a14..a128dfa6 100644
--- a/res/v3x/tests/integration/gate_modifier/pow_b_X_q/semantic.3.0.golden.txt
+++ b/res/v3x/tests/integration/gate_modifier/pow_b_X_q/semantic.3.0.golden.txt
@@ -1,2 +1,2 @@
 ERROR
-Error at input.cq:6:1..4: failed to resolve 'pow' with argument pack (bit)
+Error at input.cq:6:1..4: failed to resolve 'pow' with parameter type (bit)
diff --git a/res/v3x/tests/integration/init_instruction/5/ast.golden.txt b/res/v3x/tests/integration/init_instruction/5/ast.golden.txt
new file mode 100644
index 00000000..6dfadbd2
--- /dev/null
+++ b/res/v3x/tests/integration/init_instruction/5/ast.golden.txt
@@ -0,0 +1,51 @@
+SUCCESS
+Program(
+  version: <
+    Version( # input.cq:1:9..10
+      items: 3
+    )
+  >
+  block: <
+    GlobalBlock(
+      statements: [
+        Variable( # input.cq:3:7..8
+          name: <
+            Identifier(
+              name: q
+            )
+          >
+          typ: <
+            Type( # input.cq:3:1..6
+              name: <
+                Keyword(
+                  name: qubit
+                )
+              >
+              size: -
+            )
+          >
+          annotations: []
+        )
+        NonGateInstruction( # input.cq:5:1..5
+          name: <
+            Keyword(
+              name: init
+            )
+          >
+          operands: <
+            ExpressionList(
+              items: [
+                IntegerLiteral( # input.cq:5:6..7
+                  value: 5
+                )
+              ]
+            )
+          >
+          parameter: -
+          annotations: []
+        )
+      ]
+    )
+  >
+)
+
diff --git a/res/v3x/tests/integration/init_instruction/5/input.cq b/res/v3x/tests/integration/init_instruction/5/input.cq
new file mode 100644
index 00000000..b989ddb5
--- /dev/null
+++ b/res/v3x/tests/integration/init_instruction/5/input.cq
@@ -0,0 +1,5 @@
+version 3
+
+qubit q
+
+init 5
diff --git a/res/v3x/tests/integration/init_instruction/5/semantic.3.0.golden.txt b/res/v3x/tests/integration/init_instruction/5/semantic.3.0.golden.txt
new file mode 100644
index 00000000..5249d86d
--- /dev/null
+++ b/res/v3x/tests/integration/init_instruction/5/semantic.3.0.golden.txt
@@ -0,0 +1,2 @@
+ERROR
+Error at input.cq:5:1..5: failed to resolve instruction 'init' with argument pack (int)
diff --git a/res/v3x/tests/integration/init_instruction/no_operand/ast.golden.txt b/res/v3x/tests/integration/init_instruction/no_operand/ast.golden.txt
new file mode 100644
index 00000000..742a1e7a
--- /dev/null
+++ b/res/v3x/tests/integration/init_instruction/no_operand/ast.golden.txt
@@ -0,0 +1,2 @@
+ERROR
+Error at input.cq:5:5..6: mismatched input '\n' expecting {'(', '+', '-', '~', '!', BOOLEAN_LITERAL, INTEGER_LITERAL, FLOAT_LITERAL, IDENTIFIER}
diff --git a/res/v3x/tests/integration/init_instruction/no_operand/input.cq b/res/v3x/tests/integration/init_instruction/no_operand/input.cq
new file mode 100644
index 00000000..3b2119c5
--- /dev/null
+++ b/res/v3x/tests/integration/init_instruction/no_operand/input.cq
@@ -0,0 +1,5 @@
+version 3
+
+qubit q
+
+init
diff --git a/res/v3x/tests/integration/init_instruction/q/ast.golden.txt b/res/v3x/tests/integration/init_instruction/q/ast.golden.txt
new file mode 100644
index 00000000..fb2d4b5d
--- /dev/null
+++ b/res/v3x/tests/integration/init_instruction/q/ast.golden.txt
@@ -0,0 +1,51 @@
+SUCCESS
+Program(
+  version: <
+    Version( # input.cq:1:9..10
+      items: 3
+    )
+  >
+  block: <
+    GlobalBlock(
+      statements: [
+        Variable( # input.cq:3:7..8
+          name: <
+            Identifier(
+              name: q
+            )
+          >
+          typ: <
+            Type( # input.cq:3:1..6
+              name: <
+                Keyword(
+                  name: qubit
+                )
+              >
+              size: -
+            )
+          >
+          annotations: []
+        )
+        NonGateInstruction( # input.cq:5:1..5
+          name: <
+            Keyword(
+              name: init
+            )
+          >
+          operands: <
+            ExpressionList(
+              items: [
+                Identifier( # input.cq:5:6..7
+                  name: q
+                )
+              ]
+            )
+          >
+          parameter: -
+          annotations: []
+        )
+      ]
+    )
+  >
+)
+
diff --git a/res/v3x/tests/integration/init_instruction/q/input.cq b/res/v3x/tests/integration/init_instruction/q/input.cq
new file mode 100644
index 00000000..10091359
--- /dev/null
+++ b/res/v3x/tests/integration/init_instruction/q/input.cq
@@ -0,0 +1,5 @@
+version 3
+
+qubit q
+
+init q
diff --git a/res/v3x/tests/integration/init_instruction/q/semantic.3.0.golden.txt b/res/v3x/tests/integration/init_instruction/q/semantic.3.0.golden.txt
new file mode 100644
index 00000000..6d22de91
--- /dev/null
+++ b/res/v3x/tests/integration/init_instruction/q/semantic.3.0.golden.txt
@@ -0,0 +1,48 @@
+SUCCESS
+Program(
+  api_version: 3.0
+  version: <
+    Version(
+      items: 3
+    )
+  >
+  block: <
+    Block(
+      statements: [
+        NonGateInstruction(
+          instruction_ref: init(qubit)
+          name: init
+          operands: [
+            VariableRef(
+              variable --> <
+                Variable(
+                  name: q
+                  typ: <
+                    Qubit(
+                      size: 1
+                    )
+                  >
+                  annotations: []
+                )
+              >
+            )
+          ]
+          parameter: -
+          annotations: []
+        )
+      ]
+    )
+  >
+  variables: [
+    Variable(
+      name: q
+      typ: <
+        Qubit(
+          size: 1
+        )
+      >
+      annotations: []
+    )
+  ]
+)
+
diff --git a/res/v3x/tests/integration/init_instruction/q_range_0_4/ast.golden.txt b/res/v3x/tests/integration/init_instruction/q_range_0_4/ast.golden.txt
new file mode 100644
index 00000000..0bbecb3c
--- /dev/null
+++ b/res/v3x/tests/integration/init_instruction/q_range_0_4/ast.golden.txt
@@ -0,0 +1,77 @@
+SUCCESS
+Program(
+  version: <
+    Version( # input.cq:1:9..10
+      items: 3
+    )
+  >
+  block: <
+    GlobalBlock(
+      statements: [
+        Variable( # input.cq:3:10..11
+          name: <
+            Identifier(
+              name: q
+            )
+          >
+          typ: <
+            Type( # input.cq:3:1..9
+              name: <
+                Keyword(
+                  name: qubit
+                )
+              >
+              size: <
+                IntegerLiteral(
+                  value: 9
+                )
+              >
+            )
+          >
+          annotations: []
+        )
+        NonGateInstruction( # input.cq:5:1..5
+          name: <
+            Keyword(
+              name: init
+            )
+          >
+          operands: <
+            ExpressionList(
+              items: [
+                Index( # input.cq:5:6..7
+                  expr: <
+                    Identifier(
+                      name: q
+                    )
+                  >
+                  indices: <
+                    IndexList(
+                      items: [
+                        IndexRange(
+                          first: <
+                            IntegerLiteral( # input.cq:5:8..9
+                              value: 0
+                            )
+                          >
+                          last: <
+                            IntegerLiteral( # input.cq:5:10..11
+                              value: 4
+                            )
+                          >
+                        )
+                      ]
+                    )
+                  >
+                )
+              ]
+            )
+          >
+          parameter: -
+          annotations: []
+        )
+      ]
+    )
+  >
+)
+
diff --git a/res/v3x/tests/integration/init_instruction/q_range_0_4/input.cq b/res/v3x/tests/integration/init_instruction/q_range_0_4/input.cq
new file mode 100644
index 00000000..76b0dc46
--- /dev/null
+++ b/res/v3x/tests/integration/init_instruction/q_range_0_4/input.cq
@@ -0,0 +1,5 @@
+version 3
+
+qubit[9] q
+
+init q[0:4]
diff --git a/res/v3x/tests/integration/init_instruction/q_range_0_4/semantic.3.0.golden.txt b/res/v3x/tests/integration/init_instruction/q_range_0_4/semantic.3.0.golden.txt
new file mode 100644
index 00000000..bae813f8
--- /dev/null
+++ b/res/v3x/tests/integration/init_instruction/q_range_0_4/semantic.3.0.golden.txt
@@ -0,0 +1,65 @@
+SUCCESS
+Program(
+  api_version: 3.0
+  version: <
+    Version(
+      items: 3
+    )
+  >
+  block: <
+    Block(
+      statements: [
+        NonGateInstruction(
+          instruction_ref: init(qubit array)
+          name: init
+          operands: [
+            IndexRef(
+              variable --> <
+                Variable(
+                  name: q
+                  typ: <
+                    QubitArray(
+                      size: 9
+                    )
+                  >
+                  annotations: []
+                )
+              >
+              indices: [
+                ConstInt(
+                  value: 0
+                )
+                ConstInt(
+                  value: 1
+                )
+                ConstInt(
+                  value: 2
+                )
+                ConstInt(
+                  value: 3
+                )
+                ConstInt(
+                  value: 4
+                )
+              ]
+            )
+          ]
+          parameter: -
+          annotations: []
+        )
+      ]
+    )
+  >
+  variables: [
+    Variable(
+      name: q
+      typ: <
+        QubitArray(
+          size: 9
+        )
+      >
+      annotations: []
+    )
+  ]
+)
+
diff --git a/res/v3x/tests/integration/measure_instruction/array_of_3_q_to_b/ast.golden.txt b/res/v3x/tests/integration/measure_instruction/array_of_3_q_to_b/ast.golden.txt
index fd9ce115..857d6c7e 100644
--- a/res/v3x/tests/integration/measure_instruction/array_of_3_q_to_b/ast.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/array_of_3_q_to_b/ast.golden.txt
@@ -66,6 +66,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_array_of_5_b/ast.golden.txt b/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_array_of_5_b/ast.golden.txt
index a03a962f..30cdfe27 100644
--- a/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_array_of_5_b/ast.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_array_of_5_b/ast.golden.txt
@@ -70,6 +70,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_array_of_5_b/semantic.3.0.golden.txt b/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_array_of_5_b/semantic.3.0.golden.txt
index 7569fe26..c6781fa4 100644
--- a/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_array_of_5_b/semantic.3.0.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_array_of_5_b/semantic.3.0.golden.txt
@@ -40,6 +40,7 @@ Program(
               >
             )
           ]
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_array_of_9_b/ast.golden.txt b/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_array_of_9_b/ast.golden.txt
index 0226fa9f..798d5880 100644
--- a/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_array_of_9_b/ast.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_array_of_9_b/ast.golden.txt
@@ -70,6 +70,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_b_range_0_4/ast.golden.txt b/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_b_range_0_4/ast.golden.txt
index 84e2d52b..e7a58afc 100644
--- a/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_b_range_0_4/ast.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_b_range_0_4/ast.golden.txt
@@ -92,6 +92,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_b_range_0_4/semantic.3.0.golden.txt b/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_b_range_0_4/semantic.3.0.golden.txt
index 3136ed2f..af82319c 100644
--- a/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_b_range_0_4/semantic.3.0.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_b_range_0_4/semantic.3.0.golden.txt
@@ -57,6 +57,7 @@ Program(
               >
             )
           ]
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_b_range_2_6/ast.golden.txt b/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_b_range_2_6/ast.golden.txt
index 55c48230..c9040ce0 100644
--- a/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_b_range_2_6/ast.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_b_range_2_6/ast.golden.txt
@@ -92,6 +92,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_b_range_2_6/semantic.3.0.golden.txt b/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_b_range_2_6/semantic.3.0.golden.txt
index dc854ac6..ff0d5c49 100644
--- a/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_b_range_2_6/semantic.3.0.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/array_of_5_q_to_b_range_2_6/semantic.3.0.golden.txt
@@ -57,6 +57,7 @@ Program(
               >
             )
           ]
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/array_of_9_q_to_array_of_5_b/ast.golden.txt b/res/v3x/tests/integration/measure_instruction/array_of_9_q_to_array_of_5_b/ast.golden.txt
index 0226fa9f..798d5880 100644
--- a/res/v3x/tests/integration/measure_instruction/array_of_9_q_to_array_of_5_b/ast.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/array_of_9_q_to_array_of_5_b/ast.golden.txt
@@ -70,6 +70,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/b_to_b/ast.golden.txt b/res/v3x/tests/integration/measure_instruction/b_to_b/ast.golden.txt
index 4961be78..7a7beea8 100644
--- a/res/v3x/tests/integration/measure_instruction/b_to_b/ast.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/b_to_b/ast.golden.txt
@@ -44,6 +44,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/b_to_q/ast.golden.txt b/res/v3x/tests/integration/measure_instruction/b_to_q/ast.golden.txt
index 5a99f557..fa2ea35b 100644
--- a/res/v3x/tests/integration/measure_instruction/b_to_q/ast.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/b_to_q/ast.golden.txt
@@ -62,6 +62,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/bit_and_qubit/ast.golden.txt b/res/v3x/tests/integration/measure_instruction/bit_and_qubit/ast.golden.txt
index ff4e3f92..74ae0dff 100644
--- a/res/v3x/tests/integration/measure_instruction/bit_and_qubit/ast.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/bit_and_qubit/ast.golden.txt
@@ -62,6 +62,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/bit_and_qubit/semantic.3.0.golden.txt b/res/v3x/tests/integration/measure_instruction/bit_and_qubit/semantic.3.0.golden.txt
index 3d3eff9b..c20ce787 100644
--- a/res/v3x/tests/integration/measure_instruction/bit_and_qubit/semantic.3.0.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/bit_and_qubit/semantic.3.0.golden.txt
@@ -40,6 +40,7 @@ Program(
               >
             )
           ]
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/q0_to_array_of_3_b/ast.golden.txt b/res/v3x/tests/integration/measure_instruction/q0_to_array_of_3_b/ast.golden.txt
index 1defdd2c..b6ce2064 100644
--- a/res/v3x/tests/integration/measure_instruction/q0_to_array_of_3_b/ast.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/q0_to_array_of_3_b/ast.golden.txt
@@ -66,6 +66,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/q0_to_b_0/ast.golden.txt b/res/v3x/tests/integration/measure_instruction/q0_to_b_0/ast.golden.txt
index 363d304d..cfb4daef 100644
--- a/res/v3x/tests/integration/measure_instruction/q0_to_b_0/ast.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/q0_to_b_0/ast.golden.txt
@@ -83,6 +83,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/q0_to_b_0/semantic.3.0.golden.txt b/res/v3x/tests/integration/measure_instruction/q0_to_b_0/semantic.3.0.golden.txt
index 83e851f3..5b95582b 100644
--- a/res/v3x/tests/integration/measure_instruction/q0_to_b_0/semantic.3.0.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/q0_to_b_0/semantic.3.0.golden.txt
@@ -45,6 +45,7 @@ Program(
               >
             )
           ]
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/q_0_to_b0/ast.golden.txt b/res/v3x/tests/integration/measure_instruction/q_0_to_b0/ast.golden.txt
index f47bcd11..e38e3c59 100644
--- a/res/v3x/tests/integration/measure_instruction/q_0_to_b0/ast.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/q_0_to_b0/ast.golden.txt
@@ -83,6 +83,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/q_0_to_b0/semantic.3.0.golden.txt b/res/v3x/tests/integration/measure_instruction/q_0_to_b0/semantic.3.0.golden.txt
index d9bc69b1..acc436ea 100644
--- a/res/v3x/tests/integration/measure_instruction/q_0_to_b0/semantic.3.0.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/q_0_to_b0/semantic.3.0.golden.txt
@@ -45,6 +45,7 @@ Program(
               ]
             )
           ]
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/q_1_3_4_5_7_to_array_of_5_b/ast.golden.txt b/res/v3x/tests/integration/measure_instruction/q_1_3_4_5_7_to_array_of_5_b/ast.golden.txt
index acdb82dd..32a48844 100644
--- a/res/v3x/tests/integration/measure_instruction/q_1_3_4_5_7_to_array_of_5_b/ast.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/q_1_3_4_5_7_to_array_of_5_b/ast.golden.txt
@@ -115,6 +115,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/q_1_3_4_5_7_to_array_of_5_b/semantic.3.0.golden.txt b/res/v3x/tests/integration/measure_instruction/q_1_3_4_5_7_to_array_of_5_b/semantic.3.0.golden.txt
index 7dc466a1..7a403855 100644
--- a/res/v3x/tests/integration/measure_instruction/q_1_3_4_5_7_to_array_of_5_b/semantic.3.0.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/q_1_3_4_5_7_to_array_of_5_b/semantic.3.0.golden.txt
@@ -57,6 +57,7 @@ Program(
               ]
             )
           ]
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/q_2_4_to_b_1_3/ast.golden.txt b/res/v3x/tests/integration/measure_instruction/q_2_4_to_b_1_3/ast.golden.txt
index fe7f17a6..8ced86d4 100644
--- a/res/v3x/tests/integration/measure_instruction/q_2_4_to_b_1_3/ast.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/q_2_4_to_b_1_3/ast.golden.txt
@@ -118,6 +118,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/q_2_4_to_b_1_3/semantic.3.0.golden.txt b/res/v3x/tests/integration/measure_instruction/q_2_4_to_b_1_3/semantic.3.0.golden.txt
index fd4ef2f9..59646a74 100644
--- a/res/v3x/tests/integration/measure_instruction/q_2_4_to_b_1_3/semantic.3.0.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/q_2_4_to_b_1_3/semantic.3.0.golden.txt
@@ -56,6 +56,7 @@ Program(
               ]
             )
           ]
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/q_2_4_to_b_range_1_2/ast.golden.txt b/res/v3x/tests/integration/measure_instruction/q_2_4_to_b_range_1_2/ast.golden.txt
index 7b72c926..7565647f 100644
--- a/res/v3x/tests/integration/measure_instruction/q_2_4_to_b_range_1_2/ast.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/q_2_4_to_b_range_1_2/ast.golden.txt
@@ -116,6 +116,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/q_2_4_to_b_range_1_2/semantic.3.0.golden.txt b/res/v3x/tests/integration/measure_instruction/q_2_4_to_b_range_1_2/semantic.3.0.golden.txt
index 7f9388b0..4fe99768 100644
--- a/res/v3x/tests/integration/measure_instruction/q_2_4_to_b_range_1_2/semantic.3.0.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/q_2_4_to_b_range_1_2/semantic.3.0.golden.txt
@@ -56,6 +56,7 @@ Program(
               ]
             )
           ]
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/q_range_0_4_to_array_of_5_b/ast.golden.txt b/res/v3x/tests/integration/measure_instruction/q_range_0_4_to_array_of_5_b/ast.golden.txt
index ab083d9f..494b9544 100644
--- a/res/v3x/tests/integration/measure_instruction/q_range_0_4_to_array_of_5_b/ast.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/q_range_0_4_to_array_of_5_b/ast.golden.txt
@@ -92,6 +92,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/q_range_0_4_to_array_of_5_b/semantic.3.0.golden.txt b/res/v3x/tests/integration/measure_instruction/q_range_0_4_to_array_of_5_b/semantic.3.0.golden.txt
index 2434743c..02f154e8 100644
--- a/res/v3x/tests/integration/measure_instruction/q_range_0_4_to_array_of_5_b/semantic.3.0.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/q_range_0_4_to_array_of_5_b/semantic.3.0.golden.txt
@@ -57,6 +57,7 @@ Program(
               ]
             )
           ]
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/q_range_2_6_to_array_of_5_b/ast.golden.txt b/res/v3x/tests/integration/measure_instruction/q_range_2_6_to_array_of_5_b/ast.golden.txt
index b110ee8c..1647aa0a 100644
--- a/res/v3x/tests/integration/measure_instruction/q_range_2_6_to_array_of_5_b/ast.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/q_range_2_6_to_array_of_5_b/ast.golden.txt
@@ -92,6 +92,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/q_range_2_6_to_array_of_5_b/semantic.3.0.golden.txt b/res/v3x/tests/integration/measure_instruction/q_range_2_6_to_array_of_5_b/semantic.3.0.golden.txt
index d9ef8fed..a9686001 100644
--- a/res/v3x/tests/integration/measure_instruction/q_range_2_6_to_array_of_5_b/semantic.3.0.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/q_range_2_6_to_array_of_5_b/semantic.3.0.golden.txt
@@ -57,6 +57,7 @@ Program(
               ]
             )
           ]
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/q_range_3_4_to_b_1_3/ast.golden.txt b/res/v3x/tests/integration/measure_instruction/q_range_3_4_to_b_1_3/ast.golden.txt
index c4e95b8a..abf7448b 100644
--- a/res/v3x/tests/integration/measure_instruction/q_range_3_4_to_b_1_3/ast.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/q_range_3_4_to_b_1_3/ast.golden.txt
@@ -116,6 +116,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/q_range_3_4_to_b_1_3/semantic.3.0.golden.txt b/res/v3x/tests/integration/measure_instruction/q_range_3_4_to_b_1_3/semantic.3.0.golden.txt
index e841dc1a..9d9ce10f 100644
--- a/res/v3x/tests/integration/measure_instruction/q_range_3_4_to_b_1_3/semantic.3.0.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/q_range_3_4_to_b_1_3/semantic.3.0.golden.txt
@@ -56,6 +56,7 @@ Program(
               ]
             )
           ]
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/q_to_5/ast.golden.txt b/res/v3x/tests/integration/measure_instruction/q_to_5/ast.golden.txt
index 5f987819..3727f60b 100644
--- a/res/v3x/tests/integration/measure_instruction/q_to_5/ast.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/q_to_5/ast.golden.txt
@@ -44,6 +44,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/measure_instruction/q_to_q/ast.golden.txt b/res/v3x/tests/integration/measure_instruction/q_to_q/ast.golden.txt
index 59479b14..7f27dea6 100644
--- a/res/v3x/tests/integration/measure_instruction/q_to_q/ast.golden.txt
+++ b/res/v3x/tests/integration/measure_instruction/q_to_q/ast.golden.txt
@@ -44,6 +44,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/reset_instruction/5/ast.golden.txt b/res/v3x/tests/integration/reset_instruction/5/ast.golden.txt
index 53293a8e..20b746cd 100644
--- a/res/v3x/tests/integration/reset_instruction/5/ast.golden.txt
+++ b/res/v3x/tests/integration/reset_instruction/5/ast.golden.txt
@@ -41,6 +41,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/reset_instruction/no_operand/ast.golden.txt b/res/v3x/tests/integration/reset_instruction/no_operand/ast.golden.txt
index ed08c722..2b173681 100644
--- a/res/v3x/tests/integration/reset_instruction/no_operand/ast.golden.txt
+++ b/res/v3x/tests/integration/reset_instruction/no_operand/ast.golden.txt
@@ -1,46 +1,2 @@
-SUCCESS
-Program(
-  version: <
-    Version( # input.cq:1:9..10
-      items: 3
-    )
-  >
-  block: <
-    GlobalBlock(
-      statements: [
-        Variable( # input.cq:3:7..8
-          name: <
-            Identifier(
-              name: q
-            )
-          >
-          typ: <
-            Type( # input.cq:3:1..6
-              name: <
-                Keyword(
-                  name: qubit
-                )
-              >
-              size: -
-            )
-          >
-          annotations: []
-        )
-        NonGateInstruction( # input.cq:5:1..6
-          name: <
-            Keyword(
-              name: reset
-            )
-          >
-          operands: <
-            ExpressionList(
-              items: []
-            )
-          >
-          annotations: []
-        )
-      ]
-    )
-  >
-)
-
+ERROR
+Error at input.cq:5:6..7: mismatched input '\n' expecting {'(', '+', '-', '~', '!', BOOLEAN_LITERAL, INTEGER_LITERAL, FLOAT_LITERAL, IDENTIFIER}
diff --git a/res/v3x/tests/integration/reset_instruction/no_operand/semantic.3.0.golden.txt b/res/v3x/tests/integration/reset_instruction/no_operand/semantic.3.0.golden.txt
deleted file mode 100644
index c453454d..00000000
--- a/res/v3x/tests/integration/reset_instruction/no_operand/semantic.3.0.golden.txt
+++ /dev/null
@@ -1,33 +0,0 @@
-SUCCESS
-Program(
-  api_version: 3.0
-  version: <
-    Version(
-      items: 3
-    )
-  >
-  block: <
-    Block(
-      statements: [
-        NonGateInstruction(
-          instruction_ref: reset()
-          name: reset
-          operands: []
-          annotations: []
-        )
-      ]
-    )
-  >
-  variables: [
-    Variable(
-      name: q
-      typ: <
-        Qubit(
-          size: 1
-        )
-      >
-      annotations: []
-    )
-  ]
-)
-
diff --git a/res/v3x/tests/integration/reset_instruction/q/ast.golden.txt b/res/v3x/tests/integration/reset_instruction/q/ast.golden.txt
index 26a943b3..f45650ba 100644
--- a/res/v3x/tests/integration/reset_instruction/q/ast.golden.txt
+++ b/res/v3x/tests/integration/reset_instruction/q/ast.golden.txt
@@ -41,6 +41,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/reset_instruction/q/semantic.3.0.golden.txt b/res/v3x/tests/integration/reset_instruction/q/semantic.3.0.golden.txt
index 4998e4ff..a6481426 100644
--- a/res/v3x/tests/integration/reset_instruction/q/semantic.3.0.golden.txt
+++ b/res/v3x/tests/integration/reset_instruction/q/semantic.3.0.golden.txt
@@ -27,6 +27,7 @@ Program(
               >
             )
           ]
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/reset_instruction/q_range_0_4/ast.golden.txt b/res/v3x/tests/integration/reset_instruction/q_range_0_4/ast.golden.txt
index e709ff33..fb7204ca 100644
--- a/res/v3x/tests/integration/reset_instruction/q_range_0_4/ast.golden.txt
+++ b/res/v3x/tests/integration/reset_instruction/q_range_0_4/ast.golden.txt
@@ -67,6 +67,7 @@ Program(
               ]
             )
           >
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/reset_instruction/q_range_0_4/semantic.3.0.golden.txt b/res/v3x/tests/integration/reset_instruction/q_range_0_4/semantic.3.0.golden.txt
index 82cee738..19b901cc 100644
--- a/res/v3x/tests/integration/reset_instruction/q_range_0_4/semantic.3.0.golden.txt
+++ b/res/v3x/tests/integration/reset_instruction/q_range_0_4/semantic.3.0.golden.txt
@@ -44,6 +44,7 @@ Program(
               ]
             )
           ]
+          parameter: -
           annotations: []
         )
       ]
diff --git a/res/v3x/tests/integration/wait_instruction/wait/ast.golden.txt b/res/v3x/tests/integration/wait_instruction/wait/ast.golden.txt
new file mode 100644
index 00000000..75e6176d
--- /dev/null
+++ b/res/v3x/tests/integration/wait_instruction/wait/ast.golden.txt
@@ -0,0 +1,2 @@
+ERROR
+Error at input.cq:5:5..6: mismatched input '\n' expecting '('
diff --git a/res/v3x/tests/integration/wait_instruction/wait/input.cq b/res/v3x/tests/integration/wait_instruction/wait/input.cq
new file mode 100644
index 00000000..1f2b7671
--- /dev/null
+++ b/res/v3x/tests/integration/wait_instruction/wait/input.cq
@@ -0,0 +1,5 @@
+version 3
+
+qubit q
+
+wait
diff --git a/res/v3x/tests/integration/wait_instruction/wait_0_q/ast.golden.txt b/res/v3x/tests/integration/wait_instruction/wait_0_q/ast.golden.txt
new file mode 100644
index 00000000..da4a837d
--- /dev/null
+++ b/res/v3x/tests/integration/wait_instruction/wait_0_q/ast.golden.txt
@@ -0,0 +1,55 @@
+SUCCESS
+Program(
+  version: <
+    Version( # input.cq:1:9..10
+      items: 3
+    )
+  >
+  block: <
+    GlobalBlock(
+      statements: [
+        Variable( # input.cq:3:7..8
+          name: <
+            Identifier(
+              name: q
+            )
+          >
+          typ: <
+            Type( # input.cq:3:1..6
+              name: <
+                Keyword(
+                  name: qubit
+                )
+              >
+              size: -
+            )
+          >
+          annotations: []
+        )
+        NonGateInstruction( # input.cq:5:1..5
+          name: <
+            Keyword(
+              name: wait
+            )
+          >
+          operands: <
+            ExpressionList(
+              items: [
+                Identifier( # input.cq:5:9..10
+                  name: q
+                )
+              ]
+            )
+          >
+          parameter: <
+            IntegerLiteral( # input.cq:5:6..7
+              value: 0
+            )
+          >
+          annotations: []
+        )
+      ]
+    )
+  >
+)
+
diff --git a/res/v3x/tests/integration/wait_instruction/wait_0_q/input.cq b/res/v3x/tests/integration/wait_instruction/wait_0_q/input.cq
new file mode 100644
index 00000000..88f92c4a
--- /dev/null
+++ b/res/v3x/tests/integration/wait_instruction/wait_0_q/input.cq
@@ -0,0 +1,5 @@
+version 3
+
+qubit q
+
+wait(0) q
diff --git a/res/v3x/tests/integration/wait_instruction/wait_0_q/semantic.3.0.golden.txt b/res/v3x/tests/integration/wait_instruction/wait_0_q/semantic.3.0.golden.txt
new file mode 100644
index 00000000..69e77f51
--- /dev/null
+++ b/res/v3x/tests/integration/wait_instruction/wait_0_q/semantic.3.0.golden.txt
@@ -0,0 +1,52 @@
+SUCCESS
+Program(
+  api_version: 3.0
+  version: <
+    Version(
+      items: 3
+    )
+  >
+  block: <
+    Block(
+      statements: [
+        NonGateInstruction(
+          instruction_ref: wait(qubit)
+          name: wait
+          operands: [
+            VariableRef(
+              variable --> <
+                Variable(
+                  name: q
+                  typ: <
+                    Qubit(
+                      size: 1
+                    )
+                  >
+                  annotations: []
+                )
+              >
+            )
+          ]
+          parameter: <
+            ConstInt(
+              value: 0
+            )
+          >
+          annotations: []
+        )
+      ]
+    )
+  >
+  variables: [
+    Variable(
+      name: q
+      typ: <
+        Qubit(
+          size: 1
+        )
+      >
+      annotations: []
+    )
+  ]
+)
+
diff --git a/res/v3x/tests/integration/wait_instruction/wait_1.5_q/ast.golden.txt b/res/v3x/tests/integration/wait_instruction/wait_1.5_q/ast.golden.txt
new file mode 100644
index 00000000..285bde24
--- /dev/null
+++ b/res/v3x/tests/integration/wait_instruction/wait_1.5_q/ast.golden.txt
@@ -0,0 +1,55 @@
+SUCCESS
+Program(
+  version: <
+    Version( # input.cq:1:9..10
+      items: 3
+    )
+  >
+  block: <
+    GlobalBlock(
+      statements: [
+        Variable( # input.cq:3:7..8
+          name: <
+            Identifier(
+              name: q
+            )
+          >
+          typ: <
+            Type( # input.cq:3:1..6
+              name: <
+                Keyword(
+                  name: qubit
+                )
+              >
+              size: -
+            )
+          >
+          annotations: []
+        )
+        NonGateInstruction( # input.cq:5:1..5
+          name: <
+            Keyword(
+              name: wait
+            )
+          >
+          operands: <
+            ExpressionList(
+              items: [
+                Identifier( # input.cq:5:11..12
+                  name: q
+                )
+              ]
+            )
+          >
+          parameter: <
+            FloatLiteral( # input.cq:5:6..9
+              value: 1.5
+            )
+          >
+          annotations: []
+        )
+      ]
+    )
+  >
+)
+
diff --git a/res/v3x/tests/integration/wait_instruction/wait_1.5_q/input.cq b/res/v3x/tests/integration/wait_instruction/wait_1.5_q/input.cq
new file mode 100644
index 00000000..410a38a5
--- /dev/null
+++ b/res/v3x/tests/integration/wait_instruction/wait_1.5_q/input.cq
@@ -0,0 +1,5 @@
+version 3
+
+qubit q
+
+wait(1.5) q
diff --git a/res/v3x/tests/integration/wait_instruction/wait_1.5_q/semantic.3.0.golden.txt b/res/v3x/tests/integration/wait_instruction/wait_1.5_q/semantic.3.0.golden.txt
new file mode 100644
index 00000000..8c82389d
--- /dev/null
+++ b/res/v3x/tests/integration/wait_instruction/wait_1.5_q/semantic.3.0.golden.txt
@@ -0,0 +1,2 @@
+ERROR
+Error at input.cq:5:1..5: failed to resolve 'wait' with parameter type (float)
diff --git a/res/v3x/tests/integration/wait_instruction/wait_1/ast.golden.txt b/res/v3x/tests/integration/wait_instruction/wait_1/ast.golden.txt
new file mode 100644
index 00000000..2ec55508
--- /dev/null
+++ b/res/v3x/tests/integration/wait_instruction/wait_1/ast.golden.txt
@@ -0,0 +1,2 @@
+ERROR
+Error at input.cq:5:8..9: mismatched input '\n' expecting {'(', '+', '-', '~', '!', BOOLEAN_LITERAL, INTEGER_LITERAL, FLOAT_LITERAL, IDENTIFIER}
diff --git a/res/v3x/tests/integration/wait_instruction/wait_1/input.cq b/res/v3x/tests/integration/wait_instruction/wait_1/input.cq
new file mode 100644
index 00000000..cbd66d18
--- /dev/null
+++ b/res/v3x/tests/integration/wait_instruction/wait_1/input.cq
@@ -0,0 +1,5 @@
+version 3
+
+qubit q
+
+wait(1)
diff --git a/res/v3x/tests/integration/wait_instruction/wait_2_q/ast.golden.txt b/res/v3x/tests/integration/wait_instruction/wait_2_q/ast.golden.txt
new file mode 100644
index 00000000..0a47fa51
--- /dev/null
+++ b/res/v3x/tests/integration/wait_instruction/wait_2_q/ast.golden.txt
@@ -0,0 +1,55 @@
+SUCCESS
+Program(
+  version: <
+    Version( # input.cq:1:9..10
+      items: 3
+    )
+  >
+  block: <
+    GlobalBlock(
+      statements: [
+        Variable( # input.cq:3:7..8
+          name: <
+            Identifier(
+              name: q
+            )
+          >
+          typ: <
+            Type( # input.cq:3:1..6
+              name: <
+                Keyword(
+                  name: qubit
+                )
+              >
+              size: -
+            )
+          >
+          annotations: []
+        )
+        NonGateInstruction( # input.cq:5:1..5
+          name: <
+            Keyword(
+              name: wait
+            )
+          >
+          operands: <
+            ExpressionList(
+              items: [
+                Identifier( # input.cq:5:9..10
+                  name: q
+                )
+              ]
+            )
+          >
+          parameter: <
+            IntegerLiteral( # input.cq:5:6..7
+              value: 2
+            )
+          >
+          annotations: []
+        )
+      ]
+    )
+  >
+)
+
diff --git a/res/v3x/tests/integration/wait_instruction/wait_2_q/input.cq b/res/v3x/tests/integration/wait_instruction/wait_2_q/input.cq
new file mode 100644
index 00000000..c6ee6a3a
--- /dev/null
+++ b/res/v3x/tests/integration/wait_instruction/wait_2_q/input.cq
@@ -0,0 +1,5 @@
+version 3
+
+qubit q
+
+wait(2) q
diff --git a/res/v3x/tests/integration/wait_instruction/wait_2_q/semantic.3.0.golden.txt b/res/v3x/tests/integration/wait_instruction/wait_2_q/semantic.3.0.golden.txt
new file mode 100644
index 00000000..362d0052
--- /dev/null
+++ b/res/v3x/tests/integration/wait_instruction/wait_2_q/semantic.3.0.golden.txt
@@ -0,0 +1,52 @@
+SUCCESS
+Program(
+  api_version: 3.0
+  version: <
+    Version(
+      items: 3
+    )
+  >
+  block: <
+    Block(
+      statements: [
+        NonGateInstruction(
+          instruction_ref: wait(qubit)
+          name: wait
+          operands: [
+            VariableRef(
+              variable --> <
+                Variable(
+                  name: q
+                  typ: <
+                    Qubit(
+                      size: 1
+                    )
+                  >
+                  annotations: []
+                )
+              >
+            )
+          ]
+          parameter: <
+            ConstInt(
+              value: 2
+            )
+          >
+          annotations: []
+        )
+      ]
+    )
+  >
+  variables: [
+    Variable(
+      name: q
+      typ: <
+        Qubit(
+          size: 1
+        )
+      >
+      annotations: []
+    )
+  ]
+)
+
diff --git a/res/v3x/tests/integration/wait_instruction/wait_2_q_range_0_4/ast.golden.txt b/res/v3x/tests/integration/wait_instruction/wait_2_q_range_0_4/ast.golden.txt
new file mode 100644
index 00000000..d2c5f433
--- /dev/null
+++ b/res/v3x/tests/integration/wait_instruction/wait_2_q_range_0_4/ast.golden.txt
@@ -0,0 +1,81 @@
+SUCCESS
+Program(
+  version: <
+    Version( # input.cq:1:9..10
+      items: 3
+    )
+  >
+  block: <
+    GlobalBlock(
+      statements: [
+        Variable( # input.cq:3:10..11
+          name: <
+            Identifier(
+              name: q
+            )
+          >
+          typ: <
+            Type( # input.cq:3:1..9
+              name: <
+                Keyword(
+                  name: qubit
+                )
+              >
+              size: <
+                IntegerLiteral(
+                  value: 9
+                )
+              >
+            )
+          >
+          annotations: []
+        )
+        NonGateInstruction( # input.cq:5:1..5
+          name: <
+            Keyword(
+              name: wait
+            )
+          >
+          operands: <
+            ExpressionList(
+              items: [
+                Index( # input.cq:5:9..10
+                  expr: <
+                    Identifier(
+                      name: q
+                    )
+                  >
+                  indices: <
+                    IndexList(
+                      items: [
+                        IndexRange(
+                          first: <
+                            IntegerLiteral( # input.cq:5:11..12
+                              value: 0
+                            )
+                          >
+                          last: <
+                            IntegerLiteral( # input.cq:5:13..14
+                              value: 4
+                            )
+                          >
+                        )
+                      ]
+                    )
+                  >
+                )
+              ]
+            )
+          >
+          parameter: <
+            IntegerLiteral( # input.cq:5:6..7
+              value: 2
+            )
+          >
+          annotations: []
+        )
+      ]
+    )
+  >
+)
+
diff --git a/res/v3x/tests/integration/wait_instruction/wait_2_q_range_0_4/input.cq b/res/v3x/tests/integration/wait_instruction/wait_2_q_range_0_4/input.cq
new file mode 100644
index 00000000..2858669d
--- /dev/null
+++ b/res/v3x/tests/integration/wait_instruction/wait_2_q_range_0_4/input.cq
@@ -0,0 +1,5 @@
+version 3
+
+qubit[9] q
+
+wait(2) q[0:4]
diff --git a/res/v3x/tests/integration/wait_instruction/wait_2_q_range_0_4/semantic.3.0.golden.txt b/res/v3x/tests/integration/wait_instruction/wait_2_q_range_0_4/semantic.3.0.golden.txt
new file mode 100644
index 00000000..5925e237
--- /dev/null
+++ b/res/v3x/tests/integration/wait_instruction/wait_2_q_range_0_4/semantic.3.0.golden.txt
@@ -0,0 +1,69 @@
+SUCCESS
+Program(
+  api_version: 3.0
+  version: <
+    Version(
+      items: 3
+    )
+  >
+  block: <
+    Block(
+      statements: [
+        NonGateInstruction(
+          instruction_ref: wait(qubit array)
+          name: wait
+          operands: [
+            IndexRef(
+              variable --> <
+                Variable(
+                  name: q
+                  typ: <
+                    QubitArray(
+                      size: 9
+                    )
+                  >
+                  annotations: []
+                )
+              >
+              indices: [
+                ConstInt(
+                  value: 0
+                )
+                ConstInt(
+                  value: 1
+                )
+                ConstInt(
+                  value: 2
+                )
+                ConstInt(
+                  value: 3
+                )
+                ConstInt(
+                  value: 4
+                )
+              ]
+            )
+          ]
+          parameter: <
+            ConstInt(
+              value: 2
+            )
+          >
+          annotations: []
+        )
+      ]
+    )
+  >
+  variables: [
+    Variable(
+      name: q
+      typ: <
+        QubitArray(
+          size: 9
+        )
+      >
+      annotations: []
+    )
+  ]
+)
+
diff --git a/res/v3x/tests/integration/wait_instruction/wait_m1_q/ast.golden.txt b/res/v3x/tests/integration/wait_instruction/wait_m1_q/ast.golden.txt
new file mode 100644
index 00000000..27d59943
--- /dev/null
+++ b/res/v3x/tests/integration/wait_instruction/wait_m1_q/ast.golden.txt
@@ -0,0 +1,59 @@
+SUCCESS
+Program(
+  version: <
+    Version( # input.cq:1:9..10
+      items: 3
+    )
+  >
+  block: <
+    GlobalBlock(
+      statements: [
+        Variable( # input.cq:3:7..8
+          name: <
+            Identifier(
+              name: q
+            )
+          >
+          typ: <
+            Type( # input.cq:3:1..6
+              name: <
+                Keyword(
+                  name: qubit
+                )
+              >
+              size: -
+            )
+          >
+          annotations: []
+        )
+        NonGateInstruction( # input.cq:5:1..5
+          name: <
+            Keyword(
+              name: wait
+            )
+          >
+          operands: <
+            ExpressionList(
+              items: [
+                Identifier( # input.cq:5:10..11
+                  name: q
+                )
+              ]
+            )
+          >
+          parameter: <
+            UnaryMinusExpression( # input.cq:5:6..7
+              expr: <
+                IntegerLiteral( # input.cq:5:7..8
+                  value: 1
+                )
+              >
+            )
+          >
+          annotations: []
+        )
+      ]
+    )
+  >
+)
+
diff --git a/res/v3x/tests/integration/wait_instruction/wait_m1_q/input.cq b/res/v3x/tests/integration/wait_instruction/wait_m1_q/input.cq
new file mode 100644
index 00000000..9fe29cfc
--- /dev/null
+++ b/res/v3x/tests/integration/wait_instruction/wait_m1_q/input.cq
@@ -0,0 +1,5 @@
+version 3
+
+qubit q
+
+wait(-1) q
diff --git a/res/v3x/tests/integration/wait_instruction/wait_m1_q/semantic.3.0.golden.txt b/res/v3x/tests/integration/wait_instruction/wait_m1_q/semantic.3.0.golden.txt
new file mode 100644
index 00000000..eb27b2f0
--- /dev/null
+++ b/res/v3x/tests/integration/wait_instruction/wait_m1_q/semantic.3.0.golden.txt
@@ -0,0 +1,52 @@
+SUCCESS
+Program(
+  api_version: 3.0
+  version: <
+    Version(
+      items: 3
+    )
+  >
+  block: <
+    Block(
+      statements: [
+        NonGateInstruction(
+          instruction_ref: wait(qubit)
+          name: wait
+          operands: [
+            VariableRef(
+              variable --> <
+                Variable(
+                  name: q
+                  typ: <
+                    Qubit(
+                      size: 1
+                    )
+                  >
+                  annotations: []
+                )
+              >
+            )
+          ]
+          parameter: <
+            ConstInt(
+              value: -1
+            )
+          >
+          annotations: []
+        )
+      ]
+    )
+  >
+  variables: [
+    Variable(
+      name: q
+      typ: <
+        Qubit(
+          size: 1
+        )
+      >
+      annotations: []
+    )
+  ]
+)
+
diff --git a/test/v3x/cpp/test_instruction_set.cpp b/test/v3x/cpp/test_instruction_set.cpp
index 188df845..b454f488 100644
--- a/test/v3x/cpp/test_instruction_set.cpp
+++ b/test/v3x/cpp/test_instruction_set.cpp
@@ -18,11 +18,11 @@ class InstructionSetTest : public ::testing::Test {
     const InstructionListT& single_qubit_named_gate_list = instruction_set.get_single_qubit_named_gate_list();
     const InstructionListT& two_qubit_named_gate_list = instruction_set.get_two_qubit_named_gate_list();
 
-    const size_t number_of_gate_map_entries = 48;
-    const size_t number_of_non_gate_map_entries = 7;
+    const size_t number_of_gate_map_entries = 52;
+    const size_t number_of_non_gate_map_entries = 12;
     const size_t number_of_gate_modifier_map_entries = 3;
     const size_t number_of_single_qubit_named_gates = 16;
-    const size_t number_of_two_qubit_named_gates = 4;
+    const size_t number_of_two_qubit_named_gates = 5;
 };
 
 TEST_F(InstructionSetTest, get_instance) {
@@ -111,6 +111,18 @@ TEST_F(InstructionSetTest, is_reset) {
     EXPECT_TRUE(instruction_set.is_reset("reset"));
     EXPECT_FALSE(instruction_set.is_reset("RESET"));
 }
+TEST_F(InstructionSetTest, is_init) {
+    EXPECT_TRUE(instruction_set.is_init("init"));
+    EXPECT_FALSE(instruction_set.is_init("INIT"));
+}
+TEST_F(InstructionSetTest, is_barrier) {
+    EXPECT_TRUE(instruction_set.is_barrier("barrier"));
+    EXPECT_FALSE(instruction_set.is_barrier("BARRIER"));
+}
+TEST_F(InstructionSetTest, is_wait) {
+    EXPECT_TRUE(instruction_set.is_wait("wait"));
+    EXPECT_FALSE(instruction_set.is_wait("WAIT"));
+}
 TEST_F(InstructionSetTest, is_non_gate) {
     EXPECT_TRUE(instruction_set.is_non_gate("measure"));
     EXPECT_TRUE(instruction_set.is_non_gate("reset"));