// RUN: %clang_cc1 -fsyntax-only -verify %s
// Ensure we undo the rewrite from `a++` to a binary `a ++ 0` before profiling.
namespace PostIncDec {
// Increment / decrement as UnaryOperator.
template<typename T> auto inc(T &a) -> decltype(a++) {} // expected-note {{previous}}
template<typename T> auto dec(T &a) -> decltype(a--) {} // expected-note {{previous}}
struct X {};
void operator++(X&, int);
void operator--(X&, int);
// Increment / decrement as CXXOverloadedCallExpr. These are redefinitions.
template<typename T> auto inc(T &a) -> decltype(a++) {} // expected-error {{redefinition}} expected-note {{candidate}}
template<typename T> auto dec(T &a) -> decltype(a--) {} // expected-error {{redefinition}} expected-note {{candidate}}
// These are not ambiguous calls.
void f(X x) {
// FIXME: Don't produce these follow-on errors.
inc(x); // expected-error {{no match}}
dec(x); // expected-error {{no match}}
}
}