diff options
author | Chandler Carruth <chandlerc@gmail.com> | 2010-05-16 09:32:51 +0000 |
---|---|---|
committer | Chandler Carruth <chandlerc@gmail.com> | 2010-05-16 09:32:51 +0000 |
commit | 761c94e3bffef0fcb8b4bbf202fd5ee73db134f3 (patch) | |
tree | 5d9702e6f4b49d4dcb3e39843776380fe643edcc /test/CodeGenCXX/references.cpp | |
parent | 4bb3bf98704c98d2953381b484a9127f0909678f (diff) |
When constant folding reference variables with an initializer to the
initializer, don't fold paramters. Their initializers are just default
arguments which can be overridden. This fixes some spectacular regressions due
to more things making it into the constant folding.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@103904 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/CodeGenCXX/references.cpp')
-rw-r--r-- | test/CodeGenCXX/references.cpp | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/test/CodeGenCXX/references.cpp b/test/CodeGenCXX/references.cpp index 5a5947dd81..3ae1e474f8 100644 --- a/test/CodeGenCXX/references.cpp +++ b/test/CodeGenCXX/references.cpp @@ -155,3 +155,16 @@ void f0(s1 a) { s1 b = a; } // CHECK: load // CHECK: ret const int &f2() { return 0; } + +// Don't constant fold const reference parameters with default arguments to +// their default arguments. +namespace N1 { + const int foo = 1; + // CHECK: @_ZN2N14test + int test(const int& arg = foo) { + // Ensure this array is on the stack where we can set values instead of + // being a global constant. + // CHECK: %args_array = alloca + const int* const args_array[] = { &arg }; + } +} |