[PATCH] D73545: Fix a crash when casting _Complex and ignoring the results
Aaron Ballman via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Tue Jan 28 05:36:49 PST 2020
aaron.ballman created this revision.
aaron.ballman added reviewers: rjmccall, jyknight, lebedev.ri.
Performing a cast where the result is ignored causes Clang to crash when performing codegen for the conversion:
_Complex int a;
void fn1() { (_Complex double) a; }
This patch addresses the crash by not trying to emit the scalar conversions, causing it to be a noop. Fixes PR44624.
https://reviews.llvm.org/D73545
Files:
clang/lib/CodeGen/CGExprComplex.cpp
clang/test/CodeGen/complex-convert.c
Index: clang/test/CodeGen/complex-convert.c
===================================================================
--- clang/test/CodeGen/complex-convert.c
+++ clang/test/CodeGen/complex-convert.c
@@ -722,3 +722,8 @@
// CHECK-NEXT: store i[[LLSIZE]] %[[VAR441]], i[[LLSIZE]]* %[[VAR443]]
}
+// This code used to cause a crash; test that it no longer does so.
+_Complex int a;
+void pr44624(void) {
+ (_Complex double) a;
+}
Index: clang/lib/CodeGen/CGExprComplex.cpp
===================================================================
--- clang/lib/CodeGen/CGExprComplex.cpp
+++ clang/lib/CodeGen/CGExprComplex.cpp
@@ -431,8 +431,10 @@
// C99 6.3.1.6: When a value of complex type is converted to another
// complex type, both the real and imaginary parts follow the conversion
// rules for the corresponding real types.
- Val.first = CGF.EmitScalarConversion(Val.first, SrcType, DestType, Loc);
- Val.second = CGF.EmitScalarConversion(Val.second, SrcType, DestType, Loc);
+ if (Val.first)
+ Val.first = CGF.EmitScalarConversion(Val.first, SrcType, DestType, Loc);
+ if (Val.second)
+ Val.second = CGF.EmitScalarConversion(Val.second, SrcType, DestType, Loc);
return Val;
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D73545.240846.patch
Type: text/x-patch
Size: 1203 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20200128/7ed88cb8/attachment.bin>
More information about the cfe-commits
mailing list