summaryrefslogtreecommitdiffstats
path: root/test/SemaCXX/address-of-temporary.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/SemaCXX/address-of-temporary.cpp')
-rw-r--r--test/SemaCXX/address-of-temporary.cpp40
1 files changed, 38 insertions, 2 deletions
diff --git a/test/SemaCXX/address-of-temporary.cpp b/test/SemaCXX/address-of-temporary.cpp
index eb5dee5..bb6cba3 100644
--- a/test/SemaCXX/address-of-temporary.cpp
+++ b/test/SemaCXX/address-of-temporary.cpp
@@ -1,5 +1,5 @@
-// RUN: %clang_cc1 -fsyntax-only -Wno-error=address-of-temporary -verify %s
-struct X {
+// RUN: %clang_cc1 -fsyntax-only -Wno-error=address-of-temporary -verify -std=gnu++11 %s
+struct X {
X();
X(int);
X(int, int);
@@ -10,3 +10,39 @@ void f1() { (void)&X(1); } // expected-warning{{taking the address of a temporar
void f2() { (void)&X(1, 2); } // expected-warning{{taking the address of a temporary object}}
void f3() { (void)&(X)1; } // expected-warning{{taking the address of a temporary object}}
+
+namespace PointerToArrayDecay {
+ struct Y {
+ int a[4];
+ };
+
+ typedef int A[4];
+
+ template<typename T> void consume(T);
+ struct S { int *p; };
+
+ void g0() { int *p = Y().a; } // expected-warning{{pointer is initialized by a temporary array}}
+ void g1() { int *p = Y{}.a; } // expected-warning{{pointer is initialized by a temporary array}}
+ void g2() { int *p = A{}; } // expected-warning{{pointer is initialized by a temporary array}}
+ void g3() { int *p = (A){}; } // expected-warning{{pointer is initialized by a temporary array}}
+
+ void h0() { consume(Y().a); }
+ void h1() { consume(Y{}.a); }
+ void h2() { consume(A{}); }
+ void h3() { consume((A){}); }
+
+ void i0() { S s = { Y().a }; } // expected-warning{{pointer is initialized by a temporary array}}
+ void i1() { S s = { Y{}.a }; } // expected-warning{{pointer is initialized by a temporary array}}
+ void i2() { S s = { A{} }; } // expected-warning{{pointer is initialized by a temporary array}}
+ void i3() { S s = { (A){} }; } // expected-warning{{pointer is initialized by a temporary array}}
+
+ void j0() { (void)S { Y().a }; }
+ void j1() { (void)S { Y{}.a }; }
+ void j2() { (void)S { A{} }; }
+ void j3() { (void)S { (A){} }; }
+
+ void k0() { consume(S { Y().a }); }
+ void k1() { consume(S { Y{}.a }); }
+ void k2() { consume(S { A{} }); }
+ void k3() { consume(S { (A){} }); }
+}
OpenPOWER on IntegriCloud