// RUN: %Slang %s
// RUN: %rs-filecheck-wrapper %s

#pragma version(1)
#pragma rs java_package_name(ref_count)

struct Wrapper {
  rs_element e;
  rs_type t;
};


// CHECK: call void @_Z13rsClearObjectP10rs_element(%struct.rs_element{{.*}}* nonnull %.rs.tmp{{[0-9]+}})
// CHECK: call void @_Z11rsSetObjectP10rs_elementS_(%struct.rs_element{{.*}}* nonnull %.rs.retval{{[0-9]+}}, {{.*}})

static rs_element bar() {
  rs_element x = {0};
  return x;
}

// CHECK: call void @_Z11rsSetObjectP10rs_elementS_(%struct.rs_element{{.*}}* %{{.*}}, {{.*}})
// CHECK: call void @_Z11rsSetObjectP7rs_typeS_(%struct.rs_type{{.*}}* %{{.*}}, {{.*}})
// CHECK: call void @_Z13rsClearObjectP10rs_element(%struct.rs_element{{.*}}* {{.*}})
// CHECK: call void @_Z13rsClearObjectP7rs_type(%struct.rs_type{{.*}}* {{.*}})

static struct Wrapper baz() {
  struct Wrapper x = { 0, 0 };
  return x;
}

void entrypoint() {
  rs_element e = bar();
  struct Wrapper w = baz();
  if (rsIsObject(e) && rsIsObject(w.e) && rsIsObject(w.t)) {
    rsDebug("good objects", 0);
  }
}