summaryrefslogtreecommitdiff
path: root/test/Analysis/inlining/inline-defensive-checks.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/Analysis/inlining/inline-defensive-checks.cpp')
-rw-r--r--test/Analysis/inlining/inline-defensive-checks.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/test/Analysis/inlining/inline-defensive-checks.cpp b/test/Analysis/inlining/inline-defensive-checks.cpp
index eaae8d2ae28f2..6fb0e1cd70b05 100644
--- a/test/Analysis/inlining/inline-defensive-checks.cpp
+++ b/test/Analysis/inlining/inline-defensive-checks.cpp
@@ -84,3 +84,20 @@ void testRefToField(Bar *b) {
int &x = b->x; // no-warning
x = 5;
}
+
+namespace get_deref_expr_with_cleanups {
+struct S {
+~S();
+};
+S *conjure();
+// The argument won't be used, but it'll cause cleanups
+// to appear around the call site.
+S *get_conjured(S _) {
+ S *s = conjure();
+ if (s) {}
+ return s;
+}
+void test_conjured() {
+ S &s = *get_conjured(S()); // no-warning
+}
+} // namespace get_deref_expr_with_cleanups