14e2698caSAkira Hatanaka // RUN: %clang_cc1 -std=c++1y -S -o - -emit-llvm -verify %s
24e2698caSAkira Hatanaka 
34e2698caSAkira Hatanaka namespace default_arg_temporary {
44e2698caSAkira Hatanaka 
equals(const float & arg=1.0f)54e2698caSAkira Hatanaka constexpr bool equals(const float& arg = 1.0f) {
64e2698caSAkira Hatanaka   return arg == 1.0f;
74e2698caSAkira Hatanaka }
84e2698caSAkira Hatanaka 
x(const int & p=0)94e2698caSAkira Hatanaka constexpr const int &x(const int &p = 0) {
104e2698caSAkira Hatanaka   return p;
114e2698caSAkira Hatanaka }
124e2698caSAkira Hatanaka 
134e2698caSAkira Hatanaka struct S {
Sdefault_arg_temporary::S144e2698caSAkira Hatanaka   constexpr S(const int &a = 0) {}
154e2698caSAkira Hatanaka };
164e2698caSAkira Hatanaka 
test_default_arg2()174e2698caSAkira Hatanaka void test_default_arg2() {
184e2698caSAkira Hatanaka   // This piece of code used to cause an assertion failure in
194e2698caSAkira Hatanaka   // CallStackFrame::createTemporary because the same MTE is used to initilize
204e2698caSAkira Hatanaka   // both elements of the array (see PR33140).
214e2698caSAkira Hatanaka   constexpr S s[2] = {};
224e2698caSAkira Hatanaka 
234e2698caSAkira Hatanaka   // This piece of code used to cause an assertion failure in
244e2698caSAkira Hatanaka   // CallStackFrame::createTemporary because multiple CXXDefaultArgExpr share
254e2698caSAkira Hatanaka   // the same MTE (see PR33140).
264e2698caSAkira Hatanaka   static_assert(equals() && equals(), "");
274e2698caSAkira Hatanaka 
284e2698caSAkira Hatanaka   // Test that constant expression evaluation produces distinct lvalues for
294e2698caSAkira Hatanaka   // each call.
304e2698caSAkira Hatanaka   static_assert(&x() != &x(), "");
314e2698caSAkira Hatanaka }
324e2698caSAkira Hatanaka 
334e2698caSAkira Hatanaka // Check that multiple CXXDefaultInitExprs don't cause an assertion failure.
34*afe48f9dSRichard Smith struct A { int &&r = 0; }; // expected-note 2{{default member initializer}}
354e2698caSAkira Hatanaka struct B { A x, y; };
36*afe48f9dSRichard Smith B b = {}; // expected-warning 2{{not supported}}
374e2698caSAkira Hatanaka 
384e2698caSAkira Hatanaka }
39