/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */

extern void abort (void);
struct rtx_def;
typedef struct rtx_def *rtx;
struct rtvec_def;
typedef struct rtvec_def *rtvec;
union tree_node;
typedef union tree_node *tree;
struct tree_common
{
  int code;
};
union tree_node
{
  struct tree_common common;
};
extern tree current_function_decl;
struct cgraph_rtl_info
{
  _Bool pure_function;
};
struct cgraph_rtl_info *cgraph_rtl_info (tree);
void
mark_constant_function (void)
{
  rtx insn;
  int nonlocal_memory_referenced;

  if (current_function_decl->common.code != 42)
    abort ();

  cgraph_rtl_info (current_function_decl)->pure_function = 1;
}

/* current_function_decl should be loaded once into a temporary
   and the temporary used as the argument to cgraph_rtl_info.
   This if we find current_function_decl used as an argument, then
   we have failed.  */
/* { dg-final { scan-tree-dump-times "\\(current_function_decl\\)" 0 "dom3"} } */
