d: Fix ICE: in expand_asm_stmt, at cfgexpand.cc:3445 [PR121477]

The d_mark_addressable routine that sets TREE_ADDRESSABLE in the D
front-end did not handle DECL_BIT_FIELD.

	PR d/121477

gcc/d/ChangeLog:

	* d-codegen.cc (d_mark_addressable): Give an error if taking the
	address of a DECL_BIT_FIELD.

gcc/testsuite/ChangeLog:

	* gdc.dg/pr121477.d: New test.
This commit is contained in:
Iain Buclaw
2026-01-28 18:34:21 +01:00
parent da65c9d0ae
commit baaa412ae7
2 changed files with 17 additions and 1 deletions

View File

@@ -745,8 +745,12 @@ d_mark_addressable (tree exp, bool complain)
{
switch (TREE_CODE (exp))
{
case ADDR_EXPR:
case COMPONENT_REF:
if (complain && DECL_BIT_FIELD (TREE_OPERAND (exp, 1)))
error ("cannot take address of bit-field %qD", TREE_OPERAND (exp, 1));
/* Fall through. */
case ADDR_EXPR:
case ARRAY_REF:
case REALPART_EXPR:
case IMAGPART_EXPR:

View File

@@ -0,0 +1,12 @@
// { dg-do compile }
// { dg-additional-options "-fpreview=bitfields" }
struct S121477
{
int x : 4;
}
void f121477(S121477 s)
{
asm {"%0" :: "m" (s.x); } // { dg-error "cannot take address of bit-field" }
asm {"%0" : "=m" (s.x); } // { dg-error "cannot take address of bit-field" }
}