1a9766411aaaa1446a5da96dc5042de8da05d89bdDouglas Gregor// RUN: %clang_cc1 %s -emit-llvm -o - -triple=i686-apple-darwin9 | FileCheck %s
2a9766411aaaa1446a5da96dc5042de8da05d89bdDouglas Gregor
3a9766411aaaa1446a5da96dc5042de8da05d89bdDouglas Gregornamespace PR11411 {
4a9766411aaaa1446a5da96dc5042de8da05d89bdDouglas Gregor  template<typename _Tp> struct Ptr {
5a9766411aaaa1446a5da96dc5042de8da05d89bdDouglas Gregor    void f();
6a9766411aaaa1446a5da96dc5042de8da05d89bdDouglas Gregor  };
7a9766411aaaa1446a5da96dc5042de8da05d89bdDouglas Gregor
893ab6bf534fb6c26563c00f28a8fc5581bb71dfdStephen Lin  // CHECK-LABEL: define linkonce_odr void @_ZN7PR114113PtrIiE1fEv
9a9766411aaaa1446a5da96dc5042de8da05d89bdDouglas Gregor  // CHECK-NOT: ret
10a9766411aaaa1446a5da96dc5042de8da05d89bdDouglas Gregor  template<typename _Tp> inline void Ptr<_Tp>::f() {
11a9766411aaaa1446a5da96dc5042de8da05d89bdDouglas Gregor    int* _refcount;
12a9766411aaaa1446a5da96dc5042de8da05d89bdDouglas Gregor    // CHECK: atomicrmw add i32*
13a9766411aaaa1446a5da96dc5042de8da05d89bdDouglas Gregor    __sync_fetch_and_add(_refcount, 1);
14a9766411aaaa1446a5da96dc5042de8da05d89bdDouglas Gregor    // CHECK-NEXT: ret void
15a9766411aaaa1446a5da96dc5042de8da05d89bdDouglas Gregor  }
16a9766411aaaa1446a5da96dc5042de8da05d89bdDouglas Gregor  void f(Ptr<int> *a) { a->f(); }
17a9766411aaaa1446a5da96dc5042de8da05d89bdDouglas Gregor}
18