// RUN: %clang_cc1 -std=c++11 -fsyntax-only -verify -std=c++11 %s namespace PR26599 { template struct S; struct I {}; template void *&non_pointer() { void *&r = S()[I{}]; return r; } template void *&pointer() { void *&r = S()[nullptr]; return r; } } namespace LocalTemporary { template class QMap { public: T value(const T &t = T()) const { return t; } }; struct A {}; void test() { QMap 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 local variable '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}} } }