With current trunk (rev. 140784) I get following internal error (g++ only). The error message is similar to bug 37418. Maybe it's the same problem, but maybe it's not.
$ /holger/gcc/gnu/trunk/install/bin/g++ -c t.c t.c: In function unsigned int bar(unsigned int, const void*, RefId): t.c:9: error: non-trivial conversion at assignment unsigned int const <unnamed-unsigned:24> iftmp.0 = refId.refSector; t.c:9: error: non-trivial conversion at assignment unsigned int <unnamed-unsigned:24> iftmp.0 = refPtr->refSector; t.c:9: internal compiler error: verify_gimple failed Please submit a full bug report, with preprocessed source if appropriate. See <http://gcc.gnu.org/bugs.html> for instructions. Exit 1 Source: typedef struct { unsigned refKind : 8; unsigned refSector : 24; } RefId; unsigned foo (const unsigned x); unsigned bar (const int cond, const RefId * const refPtr, const RefId refId) { return foo ( cond ? ((refId).refSector) : ((*refPtr).refSector) ); } -- Summary: g++ internal error: verify_gimple failed Product: gcc Version: 4.4.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c++ AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: holger dot hopp at sap dot com GCC build triplet: x86_64-unknown-linux-gnu GCC host triplet: x86_64-unknown-linux-gnu GCC target triplet: x86_64-unknown-linux-gnu http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37682