(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.c-torture/
compile/
pta-1.c
       1  /* { dg-require-effective-target indirect_calls } */
       2  
       3  typedef struct JSObject JSObject;
       4  typedef struct JSObjectMap *(*JSNewObjectMapOp) (JSObject *obj);
       5  typedef JSObject *(*JSGetMethodOp) (JSObject *obj);
       6  struct JSObjectOps {
       7      JSNewObjectMapOp newObjectMap;
       8  };
       9  struct JSXMLObjectOps {
      10      struct JSObjectOps base;
      11      JSGetMethodOp getMethod;
      12  };
      13  struct JSObjectMap {
      14      struct JSObjectOps *ops;
      15  };
      16  struct JSObject {
      17      struct JSObjectMap *map;
      18  };
      19  
      20  struct JSXMLObjectOps js_XMLObjectOps;
      21  
      22  
      23  /* We need to create SFT's for the entire structure when this address is taken, 
      24     not just the part in the component reference itself.  */
      25  JSObject *JS_GetMethod(JSObject *obj)
      26  {
      27      if (obj->map->ops == &js_XMLObjectOps.base) {
      28          struct JSXMLObjectOps *ops;
      29          ops = (struct JSXMLObjectOps *) obj->map->ops;
      30          obj = ops->getMethod(obj);
      31      }
      32      return obj;
      33  }