https://gcc.gnu.org/bugzilla/show_bug.cgi?id=124209

--- Comment #2 from Uroš Bizjak <ubizjak at gmail dot com> ---
The following patch:

--cut here--
diff --git a/gcc/cfgexpand.cc b/gcc/cfgexpand.cc
index 245ba357b5e..2d1f27d3e32 100644
--- a/gcc/cfgexpand.cc
+++ b/gcc/cfgexpand.cc
@@ -3672,8 +3672,10 @@ expand_asm_stmt (gasm *stmt)
       generating_concat_p = 0;

       gcc_assert (TREE_CODE (val) != INDIRECT_REF);
-      if (((TREE_CODE (val) == MEM_REF
-           && TREE_CODE (TREE_OPERAND (val, 0)) != ADDR_EXPR)
+      if ((((TREE_CODE (val) == MEM_REF
+            && TREE_CODE (TREE_OPERAND (val, 0)) != ADDR_EXPR)
+           || (TREE_CODE (val) == COMPONENT_REF
+               && ! DECL_BIT_FIELD (TREE_OPERAND (val, 1))))
           && allows_mem)
          || (DECL_P (val)
              && (allows_mem || REG_P (DECL_RTL (val)))
--cut here--

results in:

foo:
        movw %fs,m+2(%rip)
        ret

Reply via email to