rust-lang / rust-lang/rust-bindgen
Differently aligned fields may make inheritance not work properly.
Open
Nobody has claimed this yet.
bug
- Dominant language
- Rust
- Stars
- 5.3k
- Forks
- 829
- Avg merge
- 1d 1h
- Merged PRs (30d)
- 15
Description
This input:
namespace
{
template < typename _CharT, typename = _CharT > class basic_ostream;
template < typename, typename > class basic_ios
{
};
template < typename _CharT, typename _Traits > class basic_ostream:virtual basic_ios < _CharT,
_Traits
>
{
};
class strstreambuf
{
};
class ostrstream:basic_ostream < char >
{
strstreambuf _M_buf;
};
class LogMessage
{
class LogStream:ostrstream
{
int ctr_;
};
};
}
Command:
bindgen --output logging.rs --no-unstable-rust --whitelist-type '.*::LogMessage' --whitelist-type '.*::LogSeverity' --whitelist-type '.*::int64' --blacklist-type std::allocator --blacklist-type std::allocator_traits --blacklist-type std::__alloc_traits --opaque-type std::string --opaque-type std::basic_fbstring --opaque-type std::vector --opaque-type std::basic_ios --opaque-type std::basic_ostream --opaque-type std::basic_streambuf --generate functions,methods,types test.i -- -std=gnu++14 -x c++
Generates rust code which fails a unit test when built with --test:
thread 'bindgen_test_layout__bindgen_mod_id_1_LogMessage_LogStream' panicked at 'assertion failed: `(left == right)` (left: `24`, right: `16`)', test.rs:66
This is the generated output is here: https://gist.github.com/jsgf/ddcc0db8b239b781d0590199cbe2ec80
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the report with test.i and the shown bindgen command, then inspect the generated logging.rs/test.rs layout assertion and the linked gist output. Trace why LogStream is reported as 16 bytes instead of 24, and verify the generated unit test passes with the corrected layout.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp, rust
- Domain
- devtools
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100