mirror of
https://github.com/gcc-mirror/gcc.git
synced 2026-05-06 14:59:39 +02:00
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:
@@ -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:
|
||||
|
||||
12
gcc/testsuite/gdc.dg/pr121477.d
Normal file
12
gcc/testsuite/gdc.dg/pr121477.d
Normal 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" }
|
||||
}
|
||||
Reference in New Issue
Block a user