// RUN: %clang_cc1 -std=c++14 -verify %s

// pr33561
class ArrayBuffer;
template <typename T> class Trans_NS_WTF_RefPtr {
public:
  ArrayBuffer *operator->() { return nullptr; }
};
Trans_NS_WTF_RefPtr<ArrayBuffer> get();
template <typename _Visitor>
constexpr void visit(_Visitor __visitor) {
  __visitor(get()); // expected-note {{in instantiation}}
}
class ArrayBuffer {
  char data() {
    visit([](auto buffer) -> char { // expected-note {{in instantiation}}
      buffer->data();
    }); // expected-warning {{control reaches end of non-void lambda}}
  } // expected-warning {{control reaches end of non-void function}}
};

// pr34185
template <typename Promise> struct coroutine_handle {
  Promise &promise() const { return
    *static_cast<Promise *>(nullptr); // expected-warning {{binding dereferenced null}}
  }
};

template <typename Promise> auto GetCurrenPromise() {
  struct Awaiter { // expected-note {{in instantiation}}
    void await_suspend(coroutine_handle<Promise> h) {
      h.promise(); // expected-note {{in instantiation}}
    }
  };
  return Awaiter{};
}

void foo() {
  auto &&p = GetCurrenPromise<int>(); // expected-note {{in instantiation}}
}
