| // RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify -std=c++11 %s |
| |
| namespace PR26599 { |
| template <typename> |
| struct S; |
| |
| struct I {}; |
| |
| template <typename T> |
| void *&non_pointer() { |
| void *&r = S<T>()[I{}]; |
| return r; |
| } |
| |
| template <typename T> |
| void *&pointer() { |
| void *&r = S<T>()[nullptr]; |
| return r; |
| } |
| } |
| |
| namespace LocalTemporary { |
| |
| template <class T> |
| class QMap { |
| public: |
| T value(const T &t = T()) const { |
| return t; |
| } |
| }; |
| |
| struct A {}; |
| |
| void test() { |
| QMap<A *> map; |
| map.value(); |
| } |
| |
| typedef int* ptr; |
| ptr int1(const ptr &p = ptr()) { |
| return (p); |
| } |
| |
| ptr int2(const ptr &p = nullptr) { |
| return p; |
| } |
| |
| ptr int3() { |
| const ptr &p = ptr(); |
| return p; |
| } |
| |
| const int *int4(const int &x = 5) { |
| return &x; |
| } |
| |
| const int *int5(const int &x) { |
| return &x; |
| } |
| |
| const int *int6() { |
| const int &x = 11; //expected-note{{binding reference variable 'x' here}} |
| return &x; //expected-warning{{returning address of local temporary object}} |
| } |
| |
| const int *int7(int x) { |
| const int &x2 = x; // expected-note{{binding reference variable 'x2' here}} |
| return &x2; // expected-warning{{address of stack memory associated with parameter 'x' returned}} |
| } |
| |
| const int *int8(const int &x = 5) { |
| const int &x2 = x; |
| return &x2; |
| } |
| |
| const int *int9() { |
| const int &x = 5; // expected-note{{binding reference variable 'x' here}} |
| const int &x2 = x; // expected-note{{binding reference variable 'x2' here}} |
| return &x2; // expected-warning{{returning address of local temporary object}} |
| } |
| } |