From: David Chisnall Date: Wed, 11 Apr 2012 16:08:14 +0000 (+0000) Subject: Clean up last commit as per dgregor's comments. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=adf7c854380cecb649e64a6ea1b5dbaf166a4365;p=clang Clean up last commit as per dgregor's comments. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@154501 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaOverload.cpp b/lib/Sema/SemaOverload.cpp index 4ba25c4eeb..40fb01ac30 100644 --- a/lib/Sema/SemaOverload.cpp +++ b/lib/Sema/SemaOverload.cpp @@ -1316,13 +1316,6 @@ static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType, SCS.setFromType(FromType); SCS.CopyConstructor = 0; - // Allow conversion to _Atomic types. These are C11 and are provided as an - // extension in C++ mode. - if (const AtomicType *ToAtomicType = ToType->getAs()) { - if (ToAtomicType->getValueType() == FromType) - return true; - } - // There are no standard conversions for class types in C++, so // abort early. When overloading in C, however, we do permit if (FromType->isRecordType() || ToType->isRecordType()) { @@ -1527,6 +1520,13 @@ static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType, SCS, CStyle)) { SCS.Second = ICK_TransparentUnionConversion; FromType = ToType; + } else if (const AtomicType *ToAtomicType = ToType->getAs()) { + // Allow conversion to _Atomic types. These are C11 and are provided as an + // extension in C++ mode. + if (S.Context.hasSameUnqualifiedType(ToAtomicType->getValueType(), + FromType)) + SCS.Second = ICK_Identity; + FromType = ToType; } else { // No second conversion required. SCS.Second = ICK_Identity;