diff --git a/src/builder/dataflow.rs b/src/builder/dataflow.rs index 7de7a112d..8b41f0608 100644 --- a/src/builder/dataflow.rs +++ b/src/builder/dataflow.rs @@ -61,7 +61,7 @@ impl + AsRef> DFGBuilder { parent, match input_resources.map(|inp| inp.union(&signature.resource_reqs)) { // TODO: Make this NodeType::open_resources - None => NodeType::pure(output), + None => NodeType::new(output, signature.resource_reqs), Some(rs) => NodeType::new(output, rs), }, )?; diff --git a/src/hugr/validate.rs b/src/hugr/validate.rs index d94a0a5c8..904d79aac 100644 --- a/src/hugr/validate.rs +++ b/src/hugr/validate.rs @@ -743,8 +743,10 @@ mod test { use cool_asserts::assert_matches; use super::*; - use crate::builder::{BuildError, ModuleBuilder}; - use crate::builder::{Container, Dataflow, DataflowSubContainer, HugrBuilder}; + use crate::builder::{ + BuildError, Container, DFGBuilder, Dataflow, DataflowHugr, DataflowSubContainer, + HugrBuilder, ModuleBuilder, + }; use crate::hugr::{HugrError, HugrMut, NodeType}; use crate::ops::dataflow::IOTrait; use crate::ops::{self, LeafOp, OpType}; @@ -1280,4 +1282,22 @@ mod test { assert_matches!(handle, Err(ValidationError::TgtExceedsSrcResources { .. })); Ok(()) } + + #[test] + fn parent_signature_mismatch() -> Result<(), BuildError> { + let main_signature = AbstractSignature::new_df(type_row![NAT], type_row![NAT]) + .with_resource_delta(&ResourceSet::singleton(&"R".into())); + + let builder = DFGBuilder::new(main_signature)?; + let [w] = builder.input_wires_arr(); + let hugr = builder.finish_hugr_with_outputs([w]); + + assert_matches!( + hugr, + Err(BuildError::InvalidHUGR( + ValidationError::TgtExceedsSrcResources { .. } + )) + ); + Ok(()) + } }