PR17052 / DR1560 (+DR1550): In a conditional expression between a glvalue and a
throw-expression, the result is also a glvalue and isn't unnecessarily coerced
to a prvalue.

llvm-svn: 200189
diff --git a/clang/test/CodeGenCXX/throw-expressions.cpp b/clang/test/CodeGenCXX/throw-expressions.cpp
index d9bf8fd..7e81141 100644
--- a/clang/test/CodeGenCXX/throw-expressions.cpp
+++ b/clang/test/CodeGenCXX/throw-expressions.cpp
@@ -67,3 +67,16 @@
 //
 // end:
 // CHECK: ret i32
+
+namespace DR1560 {
+  struct A {
+    ~A();
+  };
+  extern bool b;
+  A get();
+  // CHECK-LABEL: @_ZN6DR15601bE
+  const A &r = b ? get() : throw 0;
+  // CHECK-NOT: call {{.*}}@_ZN6DR15601AD1Ev
+  // CHECK: call {{.*}} @__cxa_atexit({{.*}} @_ZN6DR15601AD1Ev {{.*}} @_ZGRN6DR15601rE
+  // CHECK-NOT: call {{.*}}@_ZN6DR15601AD1Ev
+}