From: David Majnemer Date: Tue, 16 Dec 2014 06:31:17 +0000 (+0000) Subject: Sema: Don't crash converting to bool from _Atomic X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=fa0d361201b53b2a395223e370c6377704c79b0c;p=clang Sema: Don't crash converting to bool from _Atomic Turning our _Atomic L-value into an R-value removes its _Atomic-ness. However, we didn't update our 'FromType' which made ScalarTypeToBooleanCastKind think we were trying to pass it a non-scalar. This fixes PR21836. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@224322 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaExprCXX.cpp b/lib/Sema/SemaExprCXX.cpp index 1f9c1ea73c..2227721f70 100644 --- a/lib/Sema/SemaExprCXX.cpp +++ b/lib/Sema/SemaExprCXX.cpp @@ -2754,10 +2754,10 @@ Sema::PerformImplicitConversion(Expr *From, QualType ToType, case ICK_Lvalue_To_Rvalue: { assert(From->getObjectKind() != OK_ObjCProperty); - FromType = FromType.getUnqualifiedType(); ExprResult FromRes = DefaultLvalueConversion(From); assert(!FromRes.isInvalid() && "Can't perform deduced conversion?!"); From = FromRes.get(); + FromType = From->getType(); break; } diff --git a/test/SemaCXX/atomic-type.cpp b/test/SemaCXX/atomic-type.cpp index ae18eab5b4..779b0671ca 100644 --- a/test/SemaCXX/atomic-type.cpp +++ b/test/SemaCXX/atomic-type.cpp @@ -83,3 +83,7 @@ namespace copy_init { // allows extraneous braces around initializers. Y y3 = { { X(0) }, { 4 } }; // expected-error 2{{illegal initializer type}} } + +bool PR21836(_Atomic(int) *x) { + return *x; +}