|
@@ -2164,8 +2164,10 @@ bool TemplateHasDefaultType(ArBasicKind kind)
|
|
|
#endif // ENABLE_SPIRV_CODEGEN
|
|
|
// SPIRV change ends
|
|
|
return true;
|
|
|
+ default:
|
|
|
+ // Objects with default types return true. Everything else is false.
|
|
|
+ return false;
|
|
|
}
|
|
|
- return false;
|
|
|
}
|
|
|
|
|
|
/// <summary>
|
|
@@ -3443,6 +3445,9 @@ public:
|
|
|
case BuiltinType::Min10Float: return AR_BASIC_MIN10FLOAT;
|
|
|
case BuiltinType::LitFloat: return AR_BASIC_LITERAL_FLOAT;
|
|
|
case BuiltinType::LitInt: return AR_BASIC_LITERAL_INT;
|
|
|
+ default:
|
|
|
+ // Only builtin types that have basickind equivalents.
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
if (const EnumType *ET = dyn_cast<EnumType>(type)) {
|
|
@@ -4732,6 +4737,9 @@ static bool CombineObjectTypes(ArBasicKind Target, _In_ ArBasicKind Source,
|
|
|
return true;
|
|
|
}
|
|
|
break;
|
|
|
+ default:
|
|
|
+ // Not a combinable target.
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
AssignOpt(AR_BASIC_UNKNOWN, pCombined);
|
|
@@ -5778,6 +5786,8 @@ bool HLSLExternalSource::IsPromotion(ArBasicKind leftKind, ArBasicKind rightKind
|
|
|
case AR_BASIC_FLOAT32_PARTIAL_PRECISION:
|
|
|
case AR_BASIC_FLOAT64:
|
|
|
return true;
|
|
|
+ default:
|
|
|
+ return false; // No other type is a promotion.
|
|
|
}
|
|
|
break;
|
|
|
case AR_BASIC_FLOAT32_PARTIAL_PRECISION:
|
|
@@ -5785,12 +5795,16 @@ bool HLSLExternalSource::IsPromotion(ArBasicKind leftKind, ArBasicKind rightKind
|
|
|
case AR_BASIC_FLOAT32:
|
|
|
case AR_BASIC_FLOAT64:
|
|
|
return true;
|
|
|
+ default:
|
|
|
+ return false; // No other type is a promotion.
|
|
|
}
|
|
|
break;
|
|
|
case AR_BASIC_FLOAT32:
|
|
|
switch (leftKind) {
|
|
|
case AR_BASIC_FLOAT64:
|
|
|
return true;
|
|
|
+ default:
|
|
|
+ return false; // No other type is a promotion.
|
|
|
}
|
|
|
break;
|
|
|
case AR_BASIC_MIN10FLOAT:
|
|
@@ -5801,6 +5815,8 @@ bool HLSLExternalSource::IsPromotion(ArBasicKind leftKind, ArBasicKind rightKind
|
|
|
case AR_BASIC_FLOAT32_PARTIAL_PRECISION:
|
|
|
case AR_BASIC_FLOAT64:
|
|
|
return true;
|
|
|
+ default:
|
|
|
+ return false; // No other type is a promotion.
|
|
|
}
|
|
|
break;
|
|
|
case AR_BASIC_MIN16FLOAT:
|
|
@@ -5810,6 +5826,8 @@ bool HLSLExternalSource::IsPromotion(ArBasicKind leftKind, ArBasicKind rightKind
|
|
|
case AR_BASIC_FLOAT32_PARTIAL_PRECISION:
|
|
|
case AR_BASIC_FLOAT64:
|
|
|
return true;
|
|
|
+ default:
|
|
|
+ return false; // No other type is a promotion.
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -5824,6 +5842,8 @@ bool HLSLExternalSource::IsPromotion(ArBasicKind leftKind, ArBasicKind rightKind
|
|
|
case AR_BASIC_UINT32:
|
|
|
case AR_BASIC_UINT64:
|
|
|
return true;
|
|
|
+ default:
|
|
|
+ return false; // No other type is a promotion.
|
|
|
}
|
|
|
break;
|
|
|
case AR_BASIC_INT16:
|
|
@@ -5835,6 +5855,8 @@ bool HLSLExternalSource::IsPromotion(ArBasicKind leftKind, ArBasicKind rightKind
|
|
|
case AR_BASIC_UINT32:
|
|
|
case AR_BASIC_UINT64:
|
|
|
return true;
|
|
|
+ default:
|
|
|
+ return false; // No other type is a promotion.
|
|
|
}
|
|
|
break;
|
|
|
case AR_BASIC_INT32:
|
|
@@ -5844,6 +5866,8 @@ bool HLSLExternalSource::IsPromotion(ArBasicKind leftKind, ArBasicKind rightKind
|
|
|
case AR_BASIC_INT64:
|
|
|
case AR_BASIC_UINT64:
|
|
|
return true;
|
|
|
+ default:
|
|
|
+ return false; // No other type is a promotion.
|
|
|
}
|
|
|
break;
|
|
|
case AR_BASIC_MIN12INT:
|
|
@@ -5852,6 +5876,8 @@ bool HLSLExternalSource::IsPromotion(ArBasicKind leftKind, ArBasicKind rightKind
|
|
|
case AR_BASIC_INT32:
|
|
|
case AR_BASIC_INT64:
|
|
|
return true;
|
|
|
+ default:
|
|
|
+ return false; // No other type is a promotion.
|
|
|
}
|
|
|
break;
|
|
|
case AR_BASIC_MIN16INT:
|
|
@@ -5859,6 +5885,8 @@ bool HLSLExternalSource::IsPromotion(ArBasicKind leftKind, ArBasicKind rightKind
|
|
|
case AR_BASIC_INT32:
|
|
|
case AR_BASIC_INT64:
|
|
|
return true;
|
|
|
+ default:
|
|
|
+ return false; // No other type is a promotion.
|
|
|
}
|
|
|
break;
|
|
|
case AR_BASIC_MIN16UINT:
|
|
@@ -5866,6 +5894,8 @@ bool HLSLExternalSource::IsPromotion(ArBasicKind leftKind, ArBasicKind rightKind
|
|
|
case AR_BASIC_UINT32:
|
|
|
case AR_BASIC_UINT64:
|
|
|
return true;
|
|
|
+ default:
|
|
|
+ return false; // No other type is a promotion.
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
@@ -5896,6 +5926,8 @@ bool HLSLExternalSource::IsCast(ArBasicKind leftKind, ArBasicKind rightKind) {
|
|
|
case AR_BASIC_UINT32:
|
|
|
case AR_BASIC_UINT64:
|
|
|
return false;
|
|
|
+ default:
|
|
|
+ break; // No other valid cast types
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -5905,6 +5937,8 @@ bool HLSLExternalSource::IsCast(ArBasicKind leftKind, ArBasicKind rightKind) {
|
|
|
case AR_BASIC_LITERAL_INT:
|
|
|
case AR_BASIC_UINT8:
|
|
|
return false;
|
|
|
+ default:
|
|
|
+ break; // No other valid cast types
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -5914,6 +5948,8 @@ bool HLSLExternalSource::IsCast(ArBasicKind leftKind, ArBasicKind rightKind) {
|
|
|
case AR_BASIC_LITERAL_INT:
|
|
|
case AR_BASIC_UINT16:
|
|
|
return false;
|
|
|
+ default:
|
|
|
+ break; // No other valid cast types
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -5923,6 +5959,8 @@ bool HLSLExternalSource::IsCast(ArBasicKind leftKind, ArBasicKind rightKind) {
|
|
|
case AR_BASIC_LITERAL_INT:
|
|
|
case AR_BASIC_UINT32:
|
|
|
return false;
|
|
|
+ default:
|
|
|
+ break; // No other valid cast types.
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -5932,6 +5970,8 @@ bool HLSLExternalSource::IsCast(ArBasicKind leftKind, ArBasicKind rightKind) {
|
|
|
case AR_BASIC_LITERAL_INT:
|
|
|
case AR_BASIC_UINT64:
|
|
|
return false;
|
|
|
+ default:
|
|
|
+ break; // No other valid cast types.
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -5941,6 +5981,8 @@ bool HLSLExternalSource::IsCast(ArBasicKind leftKind, ArBasicKind rightKind) {
|
|
|
case AR_BASIC_LITERAL_INT:
|
|
|
case AR_BASIC_INT8:
|
|
|
return false;
|
|
|
+ default:
|
|
|
+ break; // No other valid cast types.
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -5950,6 +5992,8 @@ bool HLSLExternalSource::IsCast(ArBasicKind leftKind, ArBasicKind rightKind) {
|
|
|
case AR_BASIC_LITERAL_INT:
|
|
|
case AR_BASIC_INT16:
|
|
|
return false;
|
|
|
+ default:
|
|
|
+ break; // No other valid cast types.
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -5959,6 +6003,8 @@ bool HLSLExternalSource::IsCast(ArBasicKind leftKind, ArBasicKind rightKind) {
|
|
|
case AR_BASIC_LITERAL_INT:
|
|
|
case AR_BASIC_INT32:
|
|
|
return false;
|
|
|
+ default:
|
|
|
+ break; // No other valid cast types.
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -5968,6 +6014,8 @@ bool HLSLExternalSource::IsCast(ArBasicKind leftKind, ArBasicKind rightKind) {
|
|
|
case AR_BASIC_LITERAL_INT:
|
|
|
case AR_BASIC_INT64:
|
|
|
return false;
|
|
|
+ default:
|
|
|
+ break; // No other valid cast types.
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -5979,6 +6027,8 @@ bool HLSLExternalSource::IsCast(ArBasicKind leftKind, ArBasicKind rightKind) {
|
|
|
case AR_BASIC_FLOAT32_PARTIAL_PRECISION:
|
|
|
case AR_BASIC_FLOAT64:
|
|
|
return false;
|
|
|
+ default:
|
|
|
+ break; // No other valid cast types.
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -5986,6 +6036,8 @@ bool HLSLExternalSource::IsCast(ArBasicKind leftKind, ArBasicKind rightKind) {
|
|
|
switch (rightKind) {
|
|
|
case AR_BASIC_LITERAL_FLOAT:
|
|
|
return false;
|
|
|
+ default:
|
|
|
+ break; // No other valid cast types.
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -5993,6 +6045,8 @@ bool HLSLExternalSource::IsCast(ArBasicKind leftKind, ArBasicKind rightKind) {
|
|
|
switch (rightKind) {
|
|
|
case AR_BASIC_LITERAL_FLOAT:
|
|
|
return false;
|
|
|
+ default:
|
|
|
+ break; // No other valid cast types.
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -6000,6 +6054,8 @@ bool HLSLExternalSource::IsCast(ArBasicKind leftKind, ArBasicKind rightKind) {
|
|
|
switch (rightKind) {
|
|
|
case AR_BASIC_LITERAL_FLOAT:
|
|
|
return false;
|
|
|
+ default:
|
|
|
+ break; // No other valid cast types.
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -6007,8 +6063,12 @@ bool HLSLExternalSource::IsCast(ArBasicKind leftKind, ArBasicKind rightKind) {
|
|
|
switch (rightKind) {
|
|
|
case AR_BASIC_LITERAL_FLOAT:
|
|
|
return false;
|
|
|
+ default:
|
|
|
+ break; // No other valid cast types.
|
|
|
}
|
|
|
break;
|
|
|
+ default:
|
|
|
+ break; // No other relevant targets.
|
|
|
}
|
|
|
|
|
|
return true;
|
|
@@ -6037,6 +6097,8 @@ bool HLSLExternalSource::IsIntCast(ArBasicKind leftKind, ArBasicKind rightKind)
|
|
|
case AR_BASIC_UINT32:
|
|
|
case AR_BASIC_UINT64:
|
|
|
return false;
|
|
|
+ default:
|
|
|
+ break; // No other valid conversions
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -6051,6 +6113,8 @@ bool HLSLExternalSource::IsIntCast(ArBasicKind leftKind, ArBasicKind rightKind)
|
|
|
switch (rightKind) {
|
|
|
case AR_BASIC_LITERAL_INT:
|
|
|
return false;
|
|
|
+ default:
|
|
|
+ break; // No other valid conversions
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -6062,6 +6126,8 @@ bool HLSLExternalSource::IsIntCast(ArBasicKind leftKind, ArBasicKind rightKind)
|
|
|
case AR_BASIC_FLOAT32_PARTIAL_PRECISION:
|
|
|
case AR_BASIC_FLOAT64:
|
|
|
return false;
|
|
|
+ default:
|
|
|
+ break; // No other valid conversions
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -6072,8 +6138,13 @@ bool HLSLExternalSource::IsIntCast(ArBasicKind leftKind, ArBasicKind rightKind)
|
|
|
switch (rightKind) {
|
|
|
case AR_BASIC_LITERAL_FLOAT:
|
|
|
return false;
|
|
|
+ default:
|
|
|
+ break; // No other valid conversions
|
|
|
}
|
|
|
break;
|
|
|
+ default:
|
|
|
+ // No other relevant targets
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
return true;
|
|
@@ -6989,6 +7060,9 @@ static clang::CastKind ImplicitConversionKindToCastKind(
|
|
|
else if (IS_BASIC_AINT(FromKind) && IS_BASIC_BOOL(ToKind))
|
|
|
return CK_IntegralToBoolean;
|
|
|
break;
|
|
|
+ default:
|
|
|
+ // Only covers implicit conversions with cast kind equivalents.
|
|
|
+ return CK_Invalid;
|
|
|
}
|
|
|
return CK_Invalid;
|
|
|
}
|
|
@@ -7006,6 +7080,9 @@ static clang::CastKind ConvertToComponentCastKind(clang::CastKind CK) {
|
|
|
return CK_HLSLCC_FloatingToBoolean;
|
|
|
case CK_IntegralToBoolean:
|
|
|
return CK_HLSLCC_IntegralToBoolean;
|
|
|
+ default:
|
|
|
+ // Only HLSLCC castkinds are relevant. Ignore the rest.
|
|
|
+ return CK_Invalid;
|
|
|
}
|
|
|
return CK_Invalid;
|
|
|
}
|
|
@@ -7213,6 +7290,9 @@ void HLSLExternalSource::GetConversionForm(
|
|
|
pTypeInfo->ShapeKind = AR_TOBJ_BASIC;
|
|
|
}
|
|
|
break;
|
|
|
+ default:
|
|
|
+ // Only convertable shapekinds are relevant.
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -7381,21 +7461,8 @@ bool HLSLExternalSource::CanConvert(
|
|
|
goto lSuccess;
|
|
|
}
|
|
|
break;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (const BuiltinType *BT = source->getAs<BuiltinType>()) {
|
|
|
- BuiltinType::Kind kind = BT->getKind();
|
|
|
- switch (kind) {
|
|
|
- case BuiltinType::Kind::UInt:
|
|
|
- case BuiltinType::Kind::Int:
|
|
|
- case BuiltinType::Kind::Float:
|
|
|
- case BuiltinType::Kind::LitFloat:
|
|
|
- case BuiltinType::Kind::LitInt:
|
|
|
- if (explicitConversion) {
|
|
|
- Second = ICK_Flat_Conversion;
|
|
|
- goto lSuccess;
|
|
|
- }
|
|
|
+ default:
|
|
|
+ // Only flat conversion kinds are relevant.
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
@@ -7468,6 +7535,9 @@ bool HLSLExternalSource::CanConvert(
|
|
|
case AR_TOBJ_INTERFACE:
|
|
|
case AR_TOBJ_POINTER:
|
|
|
return false;
|
|
|
+ default:
|
|
|
+ // Only valid conversion source types are handled.
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
bCheckElt = true;
|
|
@@ -7522,6 +7592,9 @@ bool HLSLExternalSource::CanConvert(
|
|
|
case AR_TOBJ_INTERFACE:
|
|
|
case AR_TOBJ_POINTER:
|
|
|
return false;
|
|
|
+ default:
|
|
|
+ // Only valid conversion source types are handled.
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
bCheckElt = true;
|
|
@@ -7577,6 +7650,9 @@ bool HLSLExternalSource::CanConvert(
|
|
|
case AR_TOBJ_INTERFACE:
|
|
|
case AR_TOBJ_POINTER:
|
|
|
return false;
|
|
|
+ default:
|
|
|
+ // Only valid conversion source types are handled.
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
bCheckElt = true;
|
|
@@ -7697,6 +7773,9 @@ lSuccess:
|
|
|
case ICK_HLSLVector_Splat:
|
|
|
standard->First = ICK_Lvalue_To_Rvalue;
|
|
|
break;
|
|
|
+ default:
|
|
|
+ // Only flat and splat conversions handled.
|
|
|
+ break;
|
|
|
}
|
|
|
switch (ComponentConversion)
|
|
|
{
|
|
@@ -7708,6 +7787,9 @@ lSuccess:
|
|
|
case ICK_Boolean_Conversion:
|
|
|
standard->First = ICK_Lvalue_To_Rvalue;
|
|
|
break;
|
|
|
+ default:
|
|
|
+ // Only potential assignments above covered.
|
|
|
+ break;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -7958,6 +8040,9 @@ void HLSLExternalSource::CheckBinOpForHLSL(
|
|
|
// In the HLSL case these cases don't apply or simply aren't surfaced.
|
|
|
ResultTy = RHS.get()->getType();
|
|
|
return;
|
|
|
+ default:
|
|
|
+ // Only assign and comma operations handled.
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
// Leave this diagnostic for last to emulate fxc behavior.
|
|
@@ -8158,6 +8243,9 @@ QualType HLSLExternalSource::CheckUnaryOpForHLSL(
|
|
|
case UO_Deref:
|
|
|
m_sema->Diag(OpLoc, diag::err_hlsl_unsupported_operator);
|
|
|
return QualType();
|
|
|
+ default:
|
|
|
+ // Only * and & covered.
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
Expr* expr = InputExpr.get();
|
|
@@ -8601,6 +8689,9 @@ void HLSLExternalSource::DiagnoseAssignmentResultForHLSL(
|
|
|
case AR_BASIC_MIN10FLOAT:
|
|
|
warnAboutNarrowing = (src == AR_BASIC_INT32 || src == AR_BASIC_UINT32 || src == AR_BASIC_FLOAT32 || src == AR_BASIC_FLOAT64);
|
|
|
break;
|
|
|
+ default:
|
|
|
+ // No other destination types result in narrowing.
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
// fxc errors looked like this:
|
|
@@ -8701,6 +8792,9 @@ void GetFloatLimits(ArBasicKind basicKind, double* minValue, double* maxValue)
|
|
|
case AR_BASIC_FLOAT32_PARTIAL_PRECISION:
|
|
|
case AR_BASIC_FLOAT32: *minValue = -(FLT_MIN); *maxValue = FLT_MAX; return;
|
|
|
case AR_BASIC_FLOAT64: *minValue = -(DBL_MIN); *maxValue = DBL_MAX; return;
|
|
|
+ default:
|
|
|
+ // No other float types.
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
DXASSERT(false, "unreachable");
|
|
@@ -8720,6 +8814,9 @@ void GetUnsignedLimit(ArBasicKind basicKind, uint64_t* maxValue)
|
|
|
case AR_BASIC_UINT16: *maxValue = UINT16_MAX; return;
|
|
|
case AR_BASIC_UINT32: *maxValue = UINT32_MAX; return;
|
|
|
case AR_BASIC_UINT64: *maxValue = UINT64_MAX; return;
|
|
|
+ default:
|
|
|
+ // No other unsigned int types.
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
DXASSERT(false, "unreachable");
|
|
@@ -8740,6 +8837,9 @@ void GetSignedLimits(ArBasicKind basicKind, int64_t* minValue, int64_t* maxValue
|
|
|
case AR_BASIC_INT16: *minValue = INT16_MIN; *maxValue = INT16_MAX; return;
|
|
|
case AR_BASIC_INT32: *minValue = INT32_MIN; *maxValue = INT32_MAX; return;
|
|
|
case AR_BASIC_INT64: *minValue = INT64_MIN; *maxValue = INT64_MAX; return;
|
|
|
+ default:
|
|
|
+ // No other signed int types.
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
DXASSERT(false, "unreachable");
|
|
@@ -9127,6 +9227,8 @@ void hlsl::DiagnoseRegisterType(
|
|
|
case AR_OBJECT_LEGACY_EFFECT: // Used for all unsupported but ignored legacy effect types
|
|
|
isWarning = true;
|
|
|
break; // So we don't care what you tried to bind it to
|
|
|
+ default: // Other types have no associated registers.
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
// fxc is inconsistent as to when it reports an error and when it ignores invalid bind semantics, so emit
|
|
@@ -11107,6 +11209,9 @@ bool Sema::DiagnoseHLSLDecl(Declarator &D, DeclContext *DC,
|
|
|
}
|
|
|
pCentroid = pAttr;
|
|
|
break;
|
|
|
+ default:
|
|
|
+ // Only relevant to the four attribs included in this block.
|
|
|
+ break;
|
|
|
}
|
|
|
break;
|
|
|
|
|
@@ -11741,7 +11846,19 @@ bool hlsl::IsHLSLAttr(clang::attr::Kind AttrKind) {
|
|
|
case clang::attr::HLSLTriangleAdj:
|
|
|
case clang::attr::HLSLGloballyCoherent:
|
|
|
case clang::attr::NoInline:
|
|
|
+ case clang::attr::VKBinding:
|
|
|
+ case clang::attr::VKBuiltIn:
|
|
|
+ case clang::attr::VKConstantId:
|
|
|
+ case clang::attr::VKCounterBinding:
|
|
|
+ case clang::attr::VKIndex:
|
|
|
+ case clang::attr::VKInputAttachmentIndex:
|
|
|
+ case clang::attr::VKLocation:
|
|
|
+ case clang::attr::VKOffset:
|
|
|
+ case clang::attr::VKPushConstant:
|
|
|
return true;
|
|
|
+ default:
|
|
|
+ // Only HLSL/VK Attributes return true. Only used for printPretty(), which doesn't support them.
|
|
|
+ break;
|
|
|
}
|
|
|
|
|
|
return false;
|