1*4e2698caSAkira Hatanaka // RUN: %clang_cc1 -std=c++1y -S -o - -emit-llvm -verify %s 2*4e2698caSAkira Hatanaka 3*4e2698caSAkira Hatanaka namespace default_arg_temporary { 4*4e2698caSAkira Hatanaka 5*4e2698caSAkira Hatanaka constexpr bool equals(const float& arg = 1.0f) { 6*4e2698caSAkira Hatanaka return arg == 1.0f; 7*4e2698caSAkira Hatanaka } 8*4e2698caSAkira Hatanaka 9*4e2698caSAkira Hatanaka constexpr const int &x(const int &p = 0) { 10*4e2698caSAkira Hatanaka return p; 11*4e2698caSAkira Hatanaka } 12*4e2698caSAkira Hatanaka 13*4e2698caSAkira Hatanaka struct S { 14*4e2698caSAkira Hatanaka constexpr S(const int &a = 0) {} 15*4e2698caSAkira Hatanaka }; 16*4e2698caSAkira Hatanaka 17*4e2698caSAkira Hatanaka void test_default_arg2() { 18*4e2698caSAkira Hatanaka // This piece of code used to cause an assertion failure in 19*4e2698caSAkira Hatanaka // CallStackFrame::createTemporary because the same MTE is used to initilize 20*4e2698caSAkira Hatanaka // both elements of the array (see PR33140). 21*4e2698caSAkira Hatanaka constexpr S s[2] = {}; 22*4e2698caSAkira Hatanaka 23*4e2698caSAkira Hatanaka // This piece of code used to cause an assertion failure in 24*4e2698caSAkira Hatanaka // CallStackFrame::createTemporary because multiple CXXDefaultArgExpr share 25*4e2698caSAkira Hatanaka // the same MTE (see PR33140). 26*4e2698caSAkira Hatanaka static_assert(equals() && equals(), ""); 27*4e2698caSAkira Hatanaka 28*4e2698caSAkira Hatanaka // Test that constant expression evaluation produces distinct lvalues for 29*4e2698caSAkira Hatanaka // each call. 30*4e2698caSAkira Hatanaka static_assert(&x() != &x(), ""); 31*4e2698caSAkira Hatanaka } 32*4e2698caSAkira Hatanaka 33*4e2698caSAkira Hatanaka // Check that multiple CXXDefaultInitExprs don't cause an assertion failure. 34*4e2698caSAkira Hatanaka struct A { int &&r = 0; }; // expected-warning {{binding reference member}} // expected-note {{reference member declared here}} 35*4e2698caSAkira Hatanaka struct B { A x, y; }; 36*4e2698caSAkira Hatanaka B b = {}; 37*4e2698caSAkira Hatanaka 38*4e2698caSAkira Hatanaka } 39