struct device;

struct usb_bus {
  struct device *controller;
};

struct usb_hcd {
  struct usb_bus self;
  
  unsigned long hcd_priv[0];
};

struct ehci_hcd;

static inline __attribute__((always_inline)) struct ehci_hcd *hcd_to_ehci (struct usb_hcd *hcd)
{
  return (struct ehci_hcd *) (hcd->hcd_priv);
}

static inline __attribute__((always_inline)) struct usb_hcd *ehci_to_hcd (struct ehci_hcd *ehci)
{
  return ({ const typeof( ((struct usb_hcd *)0)->hcd_priv ) *__mptr = ((void *) ehci); (struct usb_hcd *)( (char *)__mptr - __builtin_offsetof(struct usb_hcd,hcd_priv) );});
}

struct device *x;

static int ehci_pci_setup(struct usb_hcd *hcd)
{
  struct ehci_hcd *ehci = hcd_to_ehci(hcd);
  // [...]
  // store of expression added in order to prevent it from being DCE'ed
  x = ehci_to_hcd(ehci)->self.controller;
  // [...]
}
