Respect inferred enum repr in C++ code generator
diff --git a/tests/ffi/lib.rs b/tests/ffi/lib.rs
index 9457229..d4e96fc 100644
--- a/tests/ffi/lib.rs
+++ b/tests/ffi/lib.rs
@@ -44,7 +44,7 @@
fn c_return_ref_rust_vec(c: &C) -> &Vec<u8>;
fn c_return_identity(_: usize) -> usize;
fn c_return_sum(_: usize, _: usize) -> usize;
- fn c_return_enum(n: u32) -> Enum;
+ fn c_return_enum(n: u16) -> Enum;
fn c_take_primitive(n: usize);
fn c_take_shared(shared: Shared);
@@ -89,6 +89,7 @@
type COwnedEnum;
}
+ #[repr(u32)]
enum COwnedEnum {
CVal1,
CVal2,
diff --git a/tests/ffi/tests.cc b/tests/ffi/tests.cc
index 21637d8..af7a4a0 100644
--- a/tests/ffi/tests.cc
+++ b/tests/ffi/tests.cc
@@ -107,10 +107,10 @@
size_t c_return_sum(size_t n1, size_t n2) { return n1 + n2; }
-Enum c_return_enum(uint32_t n) {
- if (n <= static_cast<uint32_t>(Enum::AVal)) {
+Enum c_return_enum(uint16_t n) {
+ if (n <= static_cast<uint16_t>(Enum::AVal)) {
return Enum::AVal;
- } else if (n <= static_cast<uint32_t>(Enum::BVal)) {
+ } else if (n <= static_cast<uint16_t>(Enum::BVal)) {
return Enum::BVal;
} else {
return Enum::CVal;
diff --git a/tests/ffi/tests.h b/tests/ffi/tests.h
index 795b4a9..1173a0a 100644
--- a/tests/ffi/tests.h
+++ b/tests/ffi/tests.h
@@ -7,7 +7,7 @@
struct R;
struct Shared;
-enum class Enum : uint32_t;
+enum class Enum : uint16_t;
class C {
public:
@@ -46,7 +46,7 @@
const rust::Vec<uint8_t> &c_return_ref_rust_vec(const C &c);
size_t c_return_identity(size_t n);
size_t c_return_sum(size_t n1, size_t n2);
-Enum c_return_enum(uint32_t n);
+Enum c_return_enum(uint16_t n);
void c_take_primitive(size_t n);
void c_take_shared(Shared shared);