108212631e15a17157368af03180018601b31fb4dBill Wendling// RUN: %clang_cc1 -emit-llvm -o - -triple x86_64-apple-darwin %s | FileCheck %s
208212631e15a17157368af03180018601b31fb4dBill Wendling// <rdar://problem/11043589>
308212631e15a17157368af03180018601b31fb4dBill Wendling
408212631e15a17157368af03180018601b31fb4dBill Wendlingstruct Length {
508212631e15a17157368af03180018601b31fb4dBill Wendling  Length(double v) {
608212631e15a17157368af03180018601b31fb4dBill Wendling    m_floatValue = static_cast<float>(v);
708212631e15a17157368af03180018601b31fb4dBill Wendling  }
808212631e15a17157368af03180018601b31fb4dBill Wendling
908212631e15a17157368af03180018601b31fb4dBill Wendling  bool operator==(const Length& o) const {
1008212631e15a17157368af03180018601b31fb4dBill Wendling    return getFloatValue() == o.getFloatValue();
1108212631e15a17157368af03180018601b31fb4dBill Wendling  }
1208212631e15a17157368af03180018601b31fb4dBill Wendling  bool operator!=(const Length& o) const { return !(*this == o); }
1308212631e15a17157368af03180018601b31fb4dBill Wendlingprivate:
1408212631e15a17157368af03180018601b31fb4dBill Wendling  float getFloatValue() const {
1508212631e15a17157368af03180018601b31fb4dBill Wendling    return m_floatValue;
1608212631e15a17157368af03180018601b31fb4dBill Wendling  }
1708212631e15a17157368af03180018601b31fb4dBill Wendling  float m_floatValue;
1808212631e15a17157368af03180018601b31fb4dBill Wendling};
1908212631e15a17157368af03180018601b31fb4dBill Wendling
2008212631e15a17157368af03180018601b31fb4dBill Wendling
2108212631e15a17157368af03180018601b31fb4dBill Wendlingstruct Foo {
2208212631e15a17157368af03180018601b31fb4dBill Wendling  static Length inchLength(double inch);
2308212631e15a17157368af03180018601b31fb4dBill Wendling  static bool getPageSizeFromName(const Length &A) {
2408212631e15a17157368af03180018601b31fb4dBill Wendling    static const Length legalWidth = inchLength(8.5);
2508212631e15a17157368af03180018601b31fb4dBill Wendling    if (A != legalWidth) return true;
2608212631e15a17157368af03180018601b31fb4dBill Wendling    return false;
2708212631e15a17157368af03180018601b31fb4dBill Wendling  }
2808212631e15a17157368af03180018601b31fb4dBill Wendling};
2908212631e15a17157368af03180018601b31fb4dBill Wendling
3008212631e15a17157368af03180018601b31fb4dBill Wendling// CHECK: @_ZZN3Foo19getPageSizeFromNameERK6LengthE10legalWidth = linkonce_odr global %struct.Length zeroinitializer, align 4
312eb272931070b4294eb623611ed892ba3d828284Bill Wendling// CHECK: store float %{{.*}}, float* getelementptr inbounds (%struct.Length* @_ZZN3Foo19getPageSizeFromNameERK6LengthE10legalWidth, i32 0, i32 0), align 1
3208212631e15a17157368af03180018601b31fb4dBill Wendling
3308212631e15a17157368af03180018601b31fb4dBill Wendlingbool bar(Length &b) {
3408212631e15a17157368af03180018601b31fb4dBill Wendling  Foo f;
3508212631e15a17157368af03180018601b31fb4dBill Wendling  return f.getPageSizeFromName(b);
3608212631e15a17157368af03180018601b31fb4dBill Wendling}
37