summaryrefslogtreecommitdiff
path: root/test/CodeGenCXX/lambda-to-function-pointer-conversion.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/CodeGenCXX/lambda-to-function-pointer-conversion.cpp')
-rw-r--r--test/CodeGenCXX/lambda-to-function-pointer-conversion.cpp18
1 files changed, 18 insertions, 0 deletions
diff --git a/test/CodeGenCXX/lambda-to-function-pointer-conversion.cpp b/test/CodeGenCXX/lambda-to-function-pointer-conversion.cpp
new file mode 100644
index 0000000000000..87d21a3461d22
--- /dev/null
+++ b/test/CodeGenCXX/lambda-to-function-pointer-conversion.cpp
@@ -0,0 +1,18 @@
+// RUN: %clang_cc1 -triple x86_64-pc-windows-msvc19.0.0 -std=c++11 -emit-llvm -o - %s | FileCheck %s
+
+// This code used to cause an assertion failure in EmitDelegateCallArg.
+
+// CHECK: define internal void @"?__invoke@<lambda_0>@?0??test@@YAXXZ@CA@UTrivial@@@Z"(
+// CHECK: call void @"??R<lambda_0>@?0??test@@YAXXZ@QEBA@UTrivial@@@Z"(
+
+// CHECK: define internal void @"??R<lambda_0>@?0??test@@YAXXZ@QEBA@UTrivial@@@Z"(
+
+struct Trivial {
+ int x;
+};
+
+void (*fnptr)(Trivial);
+
+void test() {
+ fnptr = [](Trivial a){ (void)a; };
+}