mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-12 01:18:53 +00:00
4e2698ca9e
an APValue and retrieve it from map Temporaries. The version number is needed when a single AST node is visited multiple times and is used to create APValues that are required to be distinct from each other (for example, MaterializeTemporaryExprs in default arguments and VarDecls in loops). rdar://problem/36505742 Differential Revision: https://reviews.llvm.org/D42776 llvm-svn: 329671
39 lines
1.1 KiB
C++
39 lines
1.1 KiB
C++
// RUN: %clang_cc1 -std=c++1y -S -o - -emit-llvm -verify %s
|
|
|
|
namespace default_arg_temporary {
|
|
|
|
constexpr bool equals(const float& arg = 1.0f) {
|
|
return arg == 1.0f;
|
|
}
|
|
|
|
constexpr const int &x(const int &p = 0) {
|
|
return p;
|
|
}
|
|
|
|
struct S {
|
|
constexpr S(const int &a = 0) {}
|
|
};
|
|
|
|
void test_default_arg2() {
|
|
// This piece of code used to cause an assertion failure in
|
|
// CallStackFrame::createTemporary because the same MTE is used to initilize
|
|
// both elements of the array (see PR33140).
|
|
constexpr S s[2] = {};
|
|
|
|
// This piece of code used to cause an assertion failure in
|
|
// CallStackFrame::createTemporary because multiple CXXDefaultArgExpr share
|
|
// the same MTE (see PR33140).
|
|
static_assert(equals() && equals(), "");
|
|
|
|
// Test that constant expression evaluation produces distinct lvalues for
|
|
// each call.
|
|
static_assert(&x() != &x(), "");
|
|
}
|
|
|
|
// Check that multiple CXXDefaultInitExprs don't cause an assertion failure.
|
|
struct A { int &&r = 0; }; // expected-warning {{binding reference member}} // expected-note {{reference member declared here}}
|
|
struct B { A x, y; };
|
|
B b = {};
|
|
|
|
}
|