// Test returning a single element aggregate value containing a double.
// RUN: %clang_cc1 -triple i686-linux %s -emit-llvm -o - | FileCheck %s --check-prefix=X86_32
// RUN: %clang_cc1 %s -emit-llvm -o -

struct X {
  double D;
};

struct Y {
  struct X x;
};

struct Y bar();

void foo(struct Y *P) {
  *P = bar();
}

struct Y bar() {
  struct Y a;
  a.x.D = 0;
  return a;
}


// X86_32: define void @foo(%struct.Y* %P)
// X86_32:   call void @bar(%struct.Y* sret %{{[^),]*}})

// X86_32: define void @bar(%struct.Y* noalias sret %{{[^,)]*}})
// X86_32:   ret void
