Weird optimization for tuples?
David Guillen Fandos
david@davidgf.net
Sun Feb 12 00:55:00 GMT 2017
Hello!
I have the following function
std::tuple<uint32_t, uint8_t> getRawIdx(uint16_t tidx) {
return std::make_tuple(localidx.entries[tidx].indx_ptr,
localidx.entries[tidx].indx_size);
}
Where s is a struct like
typedef struct __attribute__((packed)) {
uint32_t indx_ptr;
uint8_t indx_size;
} _i_idx_entry ;
The error I get is:
cannot bind packed field
â((DBIndex*)this)->DBIndex::localidx.DBIndex::_i_idx::entries[((int)tidx)].DBIndex::_i_idx_entry::indx_ptrâ
to âunsigned int&â
If extend the tuple to include a 3rd field and I return some other thing
it just works:
return std::make_tuple(localidx.entries[tidx].indx_ptr,
localidx.entries[tidx].indx_size,
tidx, prefb);
I think gcc is trying to do some smart optimization or something and
packed does not work because of tuple alignments not being packed.
Any ideas?
Thanks!
David
More information about the Gcc
mailing list