diff --git a/clang/lib/Sema/SemaExprCXX.cpp b/clang/lib/Sema/SemaExprCXX.cpp index 46844d7662d0..48b49f550cf3 100644 --- a/clang/lib/Sema/SemaExprCXX.cpp +++ b/clang/lib/Sema/SemaExprCXX.cpp @@ -3938,16 +3938,10 @@ ExprResult Sema::BuildBinaryTypeTrait(BinaryTypeTrait BTT, if (!LhsT->isDependentType() && !RhsT->isDependentType()) Value = EvaluateBinaryTypeTrait(*this, BTT, LhsT, RhsT, KWLoc); - // Select trait result type. - QualType ResultType; - switch (BTT) { - case BTT_IsBaseOf: ResultType = Context.BoolTy; break; - case BTT_IsConvertible: ResultType = Context.BoolTy; break; - case BTT_IsSame: ResultType = Context.BoolTy; break; - case BTT_TypeCompatible: ResultType = Context.IntTy; break; - case BTT_IsConvertibleTo: ResultType = Context.BoolTy; break; - case BTT_IsTriviallyAssignable: ResultType = Context.BoolTy; - } + QualType ResultType = Context.BoolTy; + // __builtin_types_compatible_p is a GNU C extension, not a C++ type trait. + if (BTT == BTT_TypeCompatible) + ResultType = Context.IntTy; return Owned(new (Context) BinaryTypeTraitExpr(KWLoc, BTT, LhsTSInfo, RhsTSInfo, Value, RParen,