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 Hatanakaconstexpr bool equals(const float& arg = 1.0f) { 64e2698caSAkira Hatanaka return arg == 1.0f; 74e2698caSAkira Hatanaka } 84e2698caSAkira Hatanaka x(const int & p=0)94e2698caSAkira Hatanakaconstexpr 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 Hatanakavoid 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