Skip to content

Commit dac3147

Browse files
committed
Fix desugared deduced nttp
1 parent 3ee8ea5 commit dac3147

8 files changed

Lines changed: 18 additions & 8 deletions

File tree

‎cpp2rust/converter/models/converter_refcount.cpp‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1888,6 +1888,7 @@ bool ConverterRefCount::VisitInitListExpr(clang::InitListExpr *expr) {
18881888
PushConversionKind push(*this, ConversionKind::Unboxed);
18891889
ConverterRefCount::VisitInitListExpr(init);
18901890
} else {
1891+
PushConversionKind push(*this, ConversionKind::Unboxed);
18911892
StrCat(GetDefaultAsString(qual_type));
18921893
}
18931894
computed_expr_type_ = ComputedExprType::FreshValue;

‎cpp2rust/converter/rules/decls.cpp‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,15 @@ DeduceFromType(clang::Sema &sema, clang::TemplateParameterList *params,
9191
trial.failed()) {
9292
return std::nullopt;
9393
}
94+
for (unsigned i = 0; i < deduced.size(); ++i) {
95+
auto nttp =
96+
llvm::dyn_cast<clang::NonTypeTemplateParmDecl>(params->getParam(i));
97+
if (nttp && !nttp->getType()->isDependentType() &&
98+
deduced[i].getKind() == clang::TemplateArgument::Integral) {
99+
deduced[i] = clang::TemplateArgument(
100+
sema.Context, deduced[i].getAsIntegral(), nttp->getType());
101+
}
102+
}
94103
return std::vector<clang::TemplateArgument>(deduced.begin(), deduced.end());
95104
}
96105

‎tests/unit/out/refcount/empty_array_init.rs‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ pub fn main() {
1111
std::process::exit(main_0());
1212
}
1313
fn main_0() -> i32 {
14-
let vec_: Value<Vec<i32>> = Rc::new(RefCell::new(Rc::new(RefCell::new(
15-
std::array::from_fn::<_, 3_u64, _>(|_| <i32>::default()).to_vec(),
16-
))));
14+
let vec_: Value<Vec<i32>> = Rc::new(RefCell::new(
15+
std::array::from_fn::<_, 3_usize, _>(|_| <i32>::default()).to_vec(),
16+
));
1717
return 0;
1818
}
1919
pub fn __cpp2rust_init_globals() {}

‎tests/unit/out/refcount/inline_container_fields.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ impl Default for State {
5555
grid: (0..2)
5656
.map(|_| (0..3).map(|_| 0_i32).collect::<Box<[i32]>>())
5757
.collect::<Box<[Box<[i32]>]>>(),
58-
arr: std::array::from_fn::<_, 3_u64, _>(|_| <i32>::default()).to_vec(),
58+
arr: std::array::from_fn::<_, 3_usize, _>(|_| <i32>::default()).to_vec(),
5959
elems: Default::default(),
6060
rows: Default::default(),
6161
}

‎tests/unit/out/refcount/libc_struct_without_default.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ impl Default for UserDefined {
2020
fn default() -> Self {
2121
{
2222
UserDefined {
23-
a: std::array::from_fn::<_, 1_u64, _>(|_| <i32>::default()).to_vec(),
23+
a: std::array::from_fn::<_, 1_usize, _>(|_| <i32>::default()).to_vec(),
2424
v: Default::default(),
2525
}
2626
}

‎tests/unit/out/unsafe/empty_array_init.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ pub fn main() {
1313
}
1414
}
1515
unsafe fn main_0() -> i32 {
16-
let mut vec_: Vec<i32> = std::array::from_fn::<_, 3_u64, _>(|_| <i32>::default()).to_vec();
16+
let mut vec_: Vec<i32> = std::array::from_fn::<_, 3_usize, _>(|_| <i32>::default()).to_vec();
1717
return 0;
1818
}
1919
pub unsafe fn __cpp2rust_init_globals() {}

‎tests/unit/out/unsafe/inline_container_fields.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ impl Default for State {
2828
State {
2929
count: 0_i32,
3030
grid: [[0_i32; 3]; 2],
31-
arr: std::array::from_fn::<_, 3_u64, _>(|_| <i32>::default()).to_vec(),
31+
arr: std::array::from_fn::<_, 3_usize, _>(|_| <i32>::default()).to_vec(),
3232
elems: Default::default(),
3333
rows: Default::default(),
3434
}

‎tests/unit/out/unsafe/libc_struct_without_default.rs‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ impl Default for UserDefined {
1616
fn default() -> Self {
1717
unsafe {
1818
UserDefined {
19-
a: std::array::from_fn::<_, 1_u64, _>(|_| <i32>::default()).to_vec(),
19+
a: std::array::from_fn::<_, 1_usize, _>(|_| <i32>::default()).to_vec(),
2020
v: Default::default(),
2121
}
2222
}

0 commit comments

Comments
 (0)