Bug 195681

Summary: [WHLSL] Make the C++ compiler pass all tests in JS reference compiler
Product: WebKit Reporter: Myles C. Maxfield <mmaxfield>
Component: WebGPUAssignee: Saam Barati <saam>
Status: RESOLVED WONTFIX    
Severity: Normal CC: jonlee, justin_fan, saam, webkit-bug-importer
Priority: P1 Keywords: InRadar
Version: Other   
Hardware: Unspecified   
OS: Unspecified   
Bug Depends on: 198414, 199028, 199088, 199093, 199595, 199602, 199603, 199630, 199634, 199766, 199978    
Bug Blocks:    

Description Myles C. Maxfield 2019-03-13 10:13:56 PDT
Import test suite
Comment 1 Radar WebKit Bug Importer 2019-05-13 17:07:57 PDT
<rdar://problem/50746300>
Comment 2 Saam Barati 2019-06-26 15:57:12 PDT
All tests:

add1
andReturnedArrayRef
anderDoesntReturnPointer
anderDoesntTakeReference
anderWithArrayRef
anderWithBadIndex
anderWithNothingWrong
anderWithWrongNumberOfArguments
arrayIndex
arrayLoad
arrayRefToArrayRef
assignLength
assignLengthHelper
assignUintToInt
atomics
atomicsNull
badAdd
badIntLiteralForFloat
badIntLiteralForInt
badIntLiteralForUint
bitAndWrongArgumentLength
bitNotWrongArgumentLength
bitOrWrongArgumentLength
bitXorWrongArgumentLength
boolBitAnd
boolBitNot
boolBitOr
boolBitXor
booleanMath
booleanShortcircuiting
break
buildArrayThenSumIt
buildArrayThenSumItUsingArrayReference
builtinMatrices
builtinVectorGetters
builtinVectorIndexSetters
builtinVectorSetters
builtinVectors
callArgumentsAreCopiedImmediatelyAfterEvaluation
cannotCallAnotherEntryPoint
casts
commentParsing
constantAddressSpace
continue
convertLocalVariableToArrayRef
convertPtrToArrayRef
copyArray
copyConstructors
decWrongArgumentLength
decWrongTypes
defaultEnumConstructor
defaultInitializedNull
defaultInitializedNullArrayRef
defaultInitializedNullArrayRefIntLiteral
dereferenceDefaultNull
dereferenceDefaultNullArrayRef
dereferenceStore
deviceArrayRefLoad
deviceArrayRefStore
deviceArrayRefStoreIntLiteral
devicePointerLoad
devicePointerStore
divideEquals
divideEqualsResult
divideWrongArgumentLength
doWhile
dotOperatorSetterWrongArgumentLength
dotOperatorWrongArgumentLength
doubleNot
duplicateFunctions
duplicateTypes
emptyStruct
enumArrayRefBase
enumDuplicates
enumFloatBase
enumNoMembers
enumPtrBase
enumStructBase
enumSwitchBreakExhaustive
enumSwitchBreakNotQuiteExhaustive
enumSwitchBreakNotQuiteExhaustiveWithDefault
enumWithExplicitIntBase
enumWithManualValues
enumWithSomeManualValues
enumWithUintBase
enumWithoutZero
equality
equalityTypeFailure
equalsWrongArgumentLength
equalsWrongReturnType
evaluationOrderForArguments
exhaustiveUcharSwitch
floatMath
forLoop
generalNegation
getterType
greaterEqualWrongArgumentLength
greaterEqualWrongReturnType
greaterThanWrongReturnType
greaterWrongArgumentLength
halfSimpleMath
identityBool
ifElseIfElseStatement
ifElseIfStatement
ifElseStatement
ifStatement
incWrongArgumentLength
incWrongTypes
incrementAndDecrement
indexAnderDoesntReturnPointer
indexAnderDoesntTakeReference
indexAnderWithArrayRef
indexAnderWithNothingWrong
indexAnderWithWrongNumberOfArguments
indexOperatorSetterWrongArgumentLength
indexOperatorWrongArgumentLength
indexSetterWithMismatchedType
indexSetterWithNoGetterOverload
indexSetterWithNoGetterOverloadFixed
inliningDoesNotAffectNestedCalls
inliningDoesntProduceAliasingIssues
intBitAnd
intBitNot
intBitOr
intBitXor
intLShift
intOverloadResolution
intOverloadResolutionReverseOrder
intRShift
intSimpleMath
lShiftWrongArgumentLength
lValues
lessEqualWrongArgumentLength
lessEqualWrongReturnType
lessThanWrongArgumentLength
lessThanWrongReturnType
lexerKeyword
linkedList
literalBool
loadNull
loadNullArrayRef
logicalNegation
loneIndexSetter
loneIndexSetterPointer
loneSetter
loneSetterPointer
lotsOfLocalVariables
makeArrayRefFromArrayRef
makeArrayRefFromLocal
makeArrayRefFromPointer
matrixMultiplication
minusEquals
minusEqualsResult
minusWrongArgumentLength
moduloWrongArgumentLength
mutuallyRecursiveStruct
mutuallyRecursiveStructWithPointers
mutuallyRecursiveStructWithPointersBroken
nameResolutionFailure
nestedSubscript
nestedSubscriptLValueEmulationSimple
nestedSubscriptWithArraysInStructs
nonArrayRefArrayLengthFail
nonArrayRefArrayLengthSucceed
notEquality
notEqualsOverload
notLoneIndexSetter
notQuiteExhaustiveUcharSwitch
notQuiteExhaustiveUcharSwitchWithDefault
numThreads
operatorBool
operatorWithoutUninferrableTypeVariable
overrideSubscriptStruct
overrideSubscriptStructAndDoStores
overrideSubscriptStructAndUsePointers
overrideSubscriptStructAndUsePointersIncorrectly
passNullToPtrMonomorphic
passNullToPtrMonomorphicArrayRef
passingArrayToFunction
plusEquals
plusEqualsResult
plusWrongArgumentLength
pointerGetter
pointerIndexGetter
pointerToMember
pointerToPointer
postfixMinusMinus
postfixMinusMinusResult
postfixPlusPlus
postfixPlusPlusResult
prefixMinusMinus
prefixMinusMinusResult
prefixPlusPlus
prefixPlusPlusResult
rShiftWrongArgumentLength
recursiveSetters
referenceEquality
referenceTakenToLocalVariableInEntryPointShouldntMoveAnything
returnAnArrayFromAFunction
returnIf
returnIntLiteralFloat
returnIntLiteralUint
returnNull
returnNullArrayRef
returnReferenceToLocalVariable
returnReferenceToLocalVariableWithNesting
returnReferenceToParameter
returnReferenceToParameterWithDifferentFunctions
returnReferenceToSameParameter
selfCasts
setterType
setterWithMatchedType
setterWithMismatchedType
setterWithNoGetterOverload
setterWithNoGetterOverloadFixed
settingAnArrayInsideAStruct
shaderStages
shaderTypes
simpleAssignment
simpleDefault
simpleDereference
simpleEnum
simpleGetter
simpleLength
simpleMakePtr
simpleNoReturn
simpleRecursion
simpleRecursiveStruct
simpleSetter
simpleStruct
simpleSwitch
simpleUnreachableCode
simpleVariable
simpleWhile
standardLibraryDevicePointers
storeNull
storeNullArrayRef
structFieldEnumElemClash
switchBreak
switchFallThrough
ternaryExpression
textureDimensions
textureDimensionsNull
textureGather
textureLoad
textureSample
textureStore
threadArrayRefLoad
threadArrayRefLoadIntLiteral
threadArrayRefStore
threadPointerLoad
threadPointerStore
timesEquals
timesEqualsResult
timesWrongArgumentLength
trap
trapBecauseOfIndexAcesss
trapTransitively
twoIntLiterals
typeMismatchAssignment
typeMismatchReturn
typeMismatchReturnParam
typeMismatchVariableDecl
typedefArray
ucharBitAnd
ucharBitNot
ucharBitOr
ucharBitXor
ucharLShift
ucharRShift
ucharSimpleMath
uintBitAnd
uintBitNot
uintBitOr
uintBitXor
uintLShift
uintRShift
uintSimpleMath
variableShadowing
vectorTypeSyntax
Comment 3 Saam Barati 2019-07-08 18:52:49 PDT
Status after https://bugs.webkit.org/show_bug.cgi?id=199604 lands

done:
boolBitAnd
boolBitNot
boolBitOr
boolBitXor
simpleAssignment
simpleDefault
simpleVariable
simpleDereference
simpleStruct
simpleMakePtr
simpleLength
simpleUnreachableCode
simpleNoReturn
simpleRecursiveStruct
simpleRecursion
twoIntLiterals
typeMismatchAssignment
typeMismatchReturn
typeMismatchReturnParam
typeMismatchVariableDecl
uintBitAnd
uintBitNot
uintBitOr
uintBitXor
uintLShift
uintRShift
uintSimpleMath

not done:
add1
andReturnedArrayRef
anderDoesntReturnPointer
anderDoesntTakeReference
anderWithArrayRef
anderWithBadIndex
anderWithNothingWrong
anderWithWrongNumberOfArguments
arrayIndex
arrayLoad
arrayRefToArrayRef
assignLength
assignLengthHelper
assignUintToInt
atomics
atomicsNull
badAdd
badIntLiteralForFloat
badIntLiteralForInt
badIntLiteralForUint
bitAndWrongArgumentLength
bitNotWrongArgumentLength
bitOrWrongArgumentLength
bitXorWrongArgumentLength
booleanMath
booleanShortcircuiting
break
buildArrayThenSumIt
buildArrayThenSumItUsingArrayReference
builtinMatrices
builtinVectorGetters
builtinVectorIndexSetters
builtinVectorSetters
builtinVectors
callArgumentsAreCopiedImmediatelyAfterEvaluation
cannotCallAnotherEntryPoint
casts
commentParsing
constantAddressSpace
continue
convertLocalVariableToArrayRef
convertPtrToArrayRef
copyArray
copyConstructors
decWrongArgumentLength
decWrongTypes
defaultEnumConstructor
defaultInitializedNull
defaultInitializedNullArrayRef
defaultInitializedNullArrayRefIntLiteral
dereferenceDefaultNull
dereferenceDefaultNullArrayRef
dereferenceStore
deviceArrayRefLoad
deviceArrayRefStore
deviceArrayRefStoreIntLiteral
devicePointerLoad
devicePointerStore
divideEquals
divideEqualsResult
divideWrongArgumentLength
doWhile
dotOperatorSetterWrongArgumentLength
dotOperatorWrongArgumentLength
doubleNot
duplicateFunctions
duplicateTypes
emptyStruct
enumArrayRefBase
enumDuplicates
enumFloatBase
enumNoMembers
enumPtrBase
enumStructBase
enumSwitchBreakExhaustive
enumSwitchBreakNotQuiteExhaustive
enumSwitchBreakNotQuiteExhaustiveWithDefault
enumWithExplicitIntBase
enumWithManualValues
enumWithSomeManualValues
enumWithUintBase
enumWithoutZero
equality
equalityTypeFailure
equalsWrongArgumentLength
equalsWrongReturnType
evaluationOrderForArguments
exhaustiveUcharSwitch
floatMath
forLoop
generalNegation
getterType
greaterEqualWrongArgumentLength
greaterEqualWrongReturnType
greaterThanWrongReturnType
greaterWrongArgumentLength
halfSimpleMath
identityBool
ifElseIfElseStatement
ifElseIfStatement
ifElseStatement
ifStatement
incWrongArgumentLength
incWrongTypes
incrementAndDecrement
indexAnderDoesntReturnPointer
indexAnderDoesntTakeReference
indexAnderWithArrayRef
indexAnderWithNothingWrong
indexAnderWithWrongNumberOfArguments
indexOperatorSetterWrongArgumentLength
indexOperatorWrongArgumentLength
indexSetterWithMismatchedType
indexSetterWithNoGetterOverload
indexSetterWithNoGetterOverloadFixed
inliningDoesNotAffectNestedCalls
inliningDoesntProduceAliasingIssues
intBitAnd
intBitNot
intBitOr
intBitXor
intLShift
intOverloadResolution
intOverloadResolutionReverseOrder
intRShift
intSimpleMath
lShiftWrongArgumentLength
lValues
lessEqualWrongArgumentLength
lessEqualWrongReturnType
lessThanWrongArgumentLength
lessThanWrongReturnType
lexerKeyword
linkedList
literalBool
loadNull
loadNullArrayRef
logicalNegation
loneIndexSetter
loneIndexSetterPointer
loneSetter
loneSetterPointer
lotsOfLocalVariables
makeArrayRefFromArrayRef
makeArrayRefFromLocal
makeArrayRefFromPointer
matrixMultiplication
minusEquals
minusEqualsResult
minusWrongArgumentLength
moduloWrongArgumentLength
mutuallyRecursiveStruct
mutuallyRecursiveStructWithPointers
mutuallyRecursiveStructWithPointersBroken
nameResolutionFailure
nestedSubscript
nestedSubscriptLValueEmulationSimple
nestedSubscriptWithArraysInStructs
nonArrayRefArrayLengthFail
nonArrayRefArrayLengthSucceed
notEquality
notEqualsOverload
notLoneIndexSetter
notQuiteExhaustiveUcharSwitch
notQuiteExhaustiveUcharSwitchWithDefault
numThreads
operatorBool
operatorWithoutUninferrableTypeVariable
overrideSubscriptStruct
overrideSubscriptStructAndDoStores
overrideSubscriptStructAndUsePointers
overrideSubscriptStructAndUsePointersIncorrectly
passNullToPtrMonomorphic
passNullToPtrMonomorphicArrayRef
passingArrayToFunction
plusEquals
plusEqualsResult
plusWrongArgumentLength
pointerGetter
pointerIndexGetter
pointerToMember
pointerToPointer
postfixMinusMinus
postfixMinusMinusResult
postfixPlusPlus
postfixPlusPlusResult
prefixMinusMinus
prefixMinusMinusResult
prefixPlusPlus
prefixPlusPlusResult
rShiftWrongArgumentLength
recursiveSetters
referenceEquality
referenceTakenToLocalVariableInEntryPointShouldntMoveAnything
returnAnArrayFromAFunction
returnIf
returnIntLiteralFloat
returnIntLiteralUint
returnNull
returnNullArrayRef
returnReferenceToLocalVariable
returnReferenceToLocalVariableWithNesting
returnReferenceToParameter
returnReferenceToParameterWithDifferentFunctions
returnReferenceToSameParameter
selfCasts
setterType
setterWithMatchedType
setterWithMismatchedType
setterWithNoGetterOverload
setterWithNoGetterOverloadFixed
settingAnArrayInsideAStruct
shaderStages
shaderTypes
simpleEnum
simpleGetter
simpleSetter
simpleSwitch
simpleWhile
standardLibraryDevicePointers
storeNull
storeNullArrayRef
structFieldEnumElemClash
switchBreak
switchFallThrough
ternaryExpression
textureDimensions
textureDimensionsNull
textureGather
textureLoad
textureSample
textureStore
threadArrayRefLoad
threadArrayRefLoadIntLiteral
threadArrayRefStore
threadPointerLoad
threadPointerStore
timesEquals
timesEqualsResult
timesWrongArgumentLength
trap
trapBecauseOfIndexAcesss
trapTransitively
typedefArray // crashes
ucharBitAnd
ucharBitNot
ucharBitOr
ucharBitXor
ucharLShift
ucharRShift
ucharSimpleMath
variableShadowing
vectorTypeSyntax
Comment 4 Saam Barati 2019-07-09 15:28:32 PDT
New status:

done:
arrayRefToArrayRef
assignLength
assignLengthHelper
buildArrayThenSumIt
buildArrayThenSumItUsingArrayReference
boolBitAnd
boolBitNot
boolBitOr
boolBitXor
builtinMatrices
defaultEnumConstructor
equality
equalityTypeFailure
notEquality
equalsWrongArgumentLength
equalsWrongReturnType
lessThanWrongArgumentLength
lessThanWrongReturnType
lessEqualWrongArgumentLength
lessEqualWrongReturnType
enumDuplicates
enumArrayRefBase
enumFloatBase
enumPtrBase
enumNoMembers
enumStructBase
matrixMultiplication
returnAnArrayFromAFunction
returnIf
returnReferenceToSameParameter
returnReferenceToParameterWithDifferentFunctions
returnReferenceToParameter
returnReferenceToLocalVariableWithNesting
returnReferenceToLocalVariable
returnNullArrayRef
returnNull
referenceTakenToLocalVariableInEntryPointShouldntMoveAnything
simpleAssignment
simpleDefault
simpleVariable
simpleDereference
simpleStruct
simpleMakePtr
simpleLength
simpleUnreachableCode
simpleNoReturn
simpleRecursiveStruct
simpleRecursion
simpleGetter
simpleSetter
simpleWhile
twoIntLiterals
typeMismatchAssignment
typeMismatchReturn
typeMismatchReturnParam
typeMismatchVariableDecl
uintBitAnd
uintBitNot
uintBitOr
uintBitXor
uintLShift
uintRShift
uintSimpleMath

skipping:
ucharBitAnd
ucharBitNot
ucharBitOr
ucharBitXor
ucharLShift
ucharRShift
ucharSimpleMath

not done:
add1
andReturnedArrayRef
anderDoesntReturnPointer
anderDoesntTakeReference
anderWithArrayRef // we fail
anderWithBadIndex
anderWithNothingWrong
anderWithWrongNumberOfArguments
arrayIndex // doesn't work with dynamic indices. Also, some of the indices may be backwards w.r.t selecting column/row.
arrayLoad // Make test harness support arrays as input types.
assignUintToInt
atomics
atomicsNull
badAdd
badIntLiteralForFloat
badIntLiteralForInt
badIntLiteralForUint
bitAndWrongArgumentLength
bitNotWrongArgumentLength
bitOrWrongArgumentLength
bitXorWrongArgumentLength
booleanMath
booleanShortcircuiting
break
builtinVectorGetters
builtinVectorIndexSetters
builtinVectorSetters
builtinVectors
callArgumentsAreCopiedImmediatelyAfterEvaluation
cannotCallAnotherEntryPoint
casts
commentParsing
constantAddressSpace
continue
convertLocalVariableToArrayRef
convertPtrToArrayRef
copyArray
copyConstructors
decWrongArgumentLength
decWrongTypes
defaultInitializedNull
defaultInitializedNullArrayRef
defaultInitializedNullArrayRefIntLiteral
dereferenceDefaultNull
dereferenceDefaultNullArrayRef
dereferenceStore
deviceArrayRefLoad
deviceArrayRefStore
deviceArrayRefStoreIntLiteral
devicePointerLoad
devicePointerStore
divideEquals
divideEqualsResult
divideWrongArgumentLength
doWhile
dotOperatorSetterWrongArgumentLength
dotOperatorWrongArgumentLength
doubleNot
duplicateFunctions
duplicateTypes
emptyStruct
enumSwitchBreakExhaustive
enumSwitchBreakNotQuiteExhaustive
enumSwitchBreakNotQuiteExhaustiveWithDefault
enumWithExplicitIntBase // Need enums working
enumWithManualValues // need enums working
enumWithSomeManualValues // need enum values
enumWithUintBase // need enums working
enumWithoutZero
evaluationOrderForArguments
exhaustiveUcharSwitch
floatMath
forLoop
generalNegation
getterType
greaterEqualWrongArgumentLength
greaterEqualWrongReturnType
greaterThanWrongReturnType
greaterWrongArgumentLength
halfSimpleMath
identityBool
ifElseIfElseStatement
ifElseIfStatement
ifElseStatement
ifStatement
incWrongArgumentLength
incWrongTypes
incrementAndDecrement
indexAnderDoesntReturnPointer
indexAnderDoesntTakeReference
indexAnderWithArrayRef
indexAnderWithNothingWrong
indexAnderWithWrongNumberOfArguments
indexOperatorSetterWrongArgumentLength
indexOperatorWrongArgumentLength
indexSetterWithMismatchedType
indexSetterWithNoGetterOverload
indexSetterWithNoGetterOverloadFixed
inliningDoesNotAffectNestedCalls
inliningDoesntProduceAliasingIssues
intBitAnd
intBitNot
intBitOr
intBitXor
intLShift
intOverloadResolution
intOverloadResolutionReverseOrder
intRShift
intSimpleMath
lShiftWrongArgumentLength
lValues
lexerKeyword
linkedList
literalBool
loadNull
loadNullArrayRef
logicalNegation
loneIndexSetter
loneIndexSetterPointer
loneSetter
loneSetterPointer
lotsOfLocalVariables
makeArrayRefFromArrayRef
makeArrayRefFromLocal
makeArrayRefFromPointer
minusEquals
minusEqualsResult
minusWrongArgumentLength
moduloWrongArgumentLength
mutuallyRecursiveStruct
mutuallyRecursiveStructWithPointers
mutuallyRecursiveStructWithPointersBroken
nameResolutionFailure
nestedSubscript
nestedSubscriptLValueEmulationSimple
nestedSubscriptWithArraysInStructs
nonArrayRefArrayLengthFail
nonArrayRefArrayLengthSucceed
notEqualsOverload
notLoneIndexSetter
notQuiteExhaustiveUcharSwitch
notQuiteExhaustiveUcharSwitchWithDefault
numThreads
operatorBool
operatorWithoutUninferrableTypeVariable
overrideSubscriptStruct
overrideSubscriptStructAndDoStores
overrideSubscriptStructAndUsePointers
overrideSubscriptStructAndUsePointersIncorrectly
passNullToPtrMonomorphic
passNullToPtrMonomorphicArrayRef
passingArrayToFunction
plusEquals
plusEqualsResult
plusWrongArgumentLength
pointerGetter
pointerIndexGetter
pointerToMember
pointerToPointer
postfixMinusMinus
postfixMinusMinusResult
postfixPlusPlus
postfixPlusPlusResult
prefixMinusMinus
prefixMinusMinusResult
prefixPlusPlus
prefixPlusPlusResult
rShiftWrongArgumentLength
recursiveSetters
referenceEquality // Causes a metal compile error.
returnIntLiteralFloat
returnIntLiteralUint
selfCasts
setterType
setterWithMatchedType
setterWithMismatchedType
setterWithNoGetterOverload
setterWithNoGetterOverloadFixed
settingAnArrayInsideAStruct
shaderStages
shaderTypes
simpleEnum // fails in type name resolution
simpleSwitch
standardLibraryDevicePointers
storeNull
storeNullArrayRef
structFieldEnumElemClash
switchBreak
switchFallThrough
ternaryExpression
textureDimensions
textureDimensionsNull
textureGather
textureLoad
textureSample
textureStore
threadArrayRefLoad
threadArrayRefLoadIntLiteral
threadArrayRefStore
threadPointerLoad
threadPointerStore
timesEquals
timesEqualsResult
timesWrongArgumentLength
trap
trapBecauseOfIndexAcesss
trapTransitively
typedefArray // crashes
variableShadowing
vectorTypeSyntax
Comment 5 Saam Barati 2019-07-09 15:29:06 PDT
Sorry, prior post was slightly wrong. Here is the updated status:

done:
arrayRefToArrayRef
assignLength
assignLengthHelper
buildArrayThenSumIt
buildArrayThenSumItUsingArrayReference
boolBitAnd
boolBitNot
boolBitOr
boolBitXor
builtinMatrices
defaultEnumConstructor
equality
equalityTypeFailure
notEquality
equalsWrongArgumentLength
equalsWrongReturnType
lessThanWrongArgumentLength
lessThanWrongReturnType
lessEqualWrongArgumentLength
lessEqualWrongReturnType
enumDuplicates
enumArrayRefBase
enumFloatBase
enumPtrBase
enumNoMembers
enumStructBase
matrixMultiplication
returnAnArrayFromAFunction
returnIf
returnReferenceToSameParameter
returnReferenceToParameterWithDifferentFunctions
returnReferenceToParameter
returnReferenceToLocalVariableWithNesting
returnReferenceToLocalVariable
returnNullArrayRef
returnNull
returnIntLiteralFloat
returnIntLiteralUint
referenceTakenToLocalVariableInEntryPointShouldntMoveAnything
simpleAssignment
simpleDefault
simpleVariable
simpleDereference
simpleStruct
simpleMakePtr
simpleLength
simpleUnreachableCode
simpleNoReturn
simpleRecursiveStruct
simpleRecursion
simpleGetter
simpleSetter
simpleWhile
twoIntLiterals
typeMismatchAssignment
typeMismatchReturn
typeMismatchReturnParam
typeMismatchVariableDecl
uintBitAnd
uintBitNot
uintBitOr
uintBitXor
uintLShift
uintRShift
uintSimpleMath

skipping:
ucharBitAnd
ucharBitNot
ucharBitOr
ucharBitXor
ucharLShift
ucharRShift
ucharSimpleMath

not done:
add1
andReturnedArrayRef
anderDoesntReturnPointer
anderDoesntTakeReference
anderWithArrayRef // we fail
anderWithBadIndex
anderWithNothingWrong
anderWithWrongNumberOfArguments
arrayIndex // doesn't work with dynamic indices. Also, some of the indices may be backwards w.r.t selecting column/row.
arrayLoad // Make test harness support arrays as input types.
assignUintToInt
atomics
atomicsNull
badAdd
badIntLiteralForFloat
badIntLiteralForInt
badIntLiteralForUint
bitAndWrongArgumentLength
bitNotWrongArgumentLength
bitOrWrongArgumentLength
bitXorWrongArgumentLength
booleanMath
booleanShortcircuiting
break
builtinVectorGetters
builtinVectorIndexSetters
builtinVectorSetters
builtinVectors
callArgumentsAreCopiedImmediatelyAfterEvaluation
cannotCallAnotherEntryPoint
casts
commentParsing
constantAddressSpace
continue
convertLocalVariableToArrayRef
convertPtrToArrayRef
copyArray
copyConstructors
decWrongArgumentLength
decWrongTypes
defaultInitializedNull
defaultInitializedNullArrayRef
defaultInitializedNullArrayRefIntLiteral
dereferenceDefaultNull
dereferenceDefaultNullArrayRef
dereferenceStore
deviceArrayRefLoad
deviceArrayRefStore
deviceArrayRefStoreIntLiteral
devicePointerLoad
devicePointerStore
divideEquals
divideEqualsResult
divideWrongArgumentLength
doWhile
dotOperatorSetterWrongArgumentLength
dotOperatorWrongArgumentLength
doubleNot
duplicateFunctions
duplicateTypes
emptyStruct
enumSwitchBreakExhaustive
enumSwitchBreakNotQuiteExhaustive
enumSwitchBreakNotQuiteExhaustiveWithDefault
enumWithExplicitIntBase // Need enums working
enumWithManualValues // need enums working
enumWithSomeManualValues // need enum values
enumWithUintBase // need enums working
enumWithoutZero
evaluationOrderForArguments
exhaustiveUcharSwitch
floatMath
forLoop
generalNegation
getterType
greaterEqualWrongArgumentLength
greaterEqualWrongReturnType
greaterThanWrongReturnType
greaterWrongArgumentLength
halfSimpleMath
identityBool
ifElseIfElseStatement
ifElseIfStatement
ifElseStatement
ifStatement
incWrongArgumentLength
incWrongTypes
incrementAndDecrement
indexAnderDoesntReturnPointer
indexAnderDoesntTakeReference
indexAnderWithArrayRef
indexAnderWithNothingWrong
indexAnderWithWrongNumberOfArguments
indexOperatorSetterWrongArgumentLength
indexOperatorWrongArgumentLength
indexSetterWithMismatchedType
indexSetterWithNoGetterOverload
indexSetterWithNoGetterOverloadFixed
inliningDoesNotAffectNestedCalls
inliningDoesntProduceAliasingIssues
intBitAnd
intBitNot
intBitOr
intBitXor
intLShift
intOverloadResolution
intOverloadResolutionReverseOrder
intRShift
intSimpleMath
lShiftWrongArgumentLength
lValues
lexerKeyword
linkedList
literalBool
loadNull
loadNullArrayRef
logicalNegation
loneIndexSetter
loneIndexSetterPointer
loneSetter
loneSetterPointer
lotsOfLocalVariables
makeArrayRefFromArrayRef
makeArrayRefFromLocal
makeArrayRefFromPointer
minusEquals
minusEqualsResult
minusWrongArgumentLength
moduloWrongArgumentLength
mutuallyRecursiveStruct
mutuallyRecursiveStructWithPointers
mutuallyRecursiveStructWithPointersBroken
nameResolutionFailure
nestedSubscript
nestedSubscriptLValueEmulationSimple
nestedSubscriptWithArraysInStructs
nonArrayRefArrayLengthFail
nonArrayRefArrayLengthSucceed
notEqualsOverload
notLoneIndexSetter
notQuiteExhaustiveUcharSwitch
notQuiteExhaustiveUcharSwitchWithDefault
numThreads
operatorBool
operatorWithoutUninferrableTypeVariable
overrideSubscriptStruct
overrideSubscriptStructAndDoStores
overrideSubscriptStructAndUsePointers
overrideSubscriptStructAndUsePointersIncorrectly
passNullToPtrMonomorphic
passNullToPtrMonomorphicArrayRef
passingArrayToFunction
plusEquals
plusEqualsResult
plusWrongArgumentLength
pointerGetter
pointerIndexGetter
pointerToMember
pointerToPointer
postfixMinusMinus
postfixMinusMinusResult
postfixPlusPlus
postfixPlusPlusResult
prefixMinusMinus
prefixMinusMinusResult
prefixPlusPlus
prefixPlusPlusResult
rShiftWrongArgumentLength
recursiveSetters
referenceEquality // Causes a metal compile error.
selfCasts
setterType
setterWithMatchedType
setterWithMismatchedType
setterWithNoGetterOverload
setterWithNoGetterOverloadFixed
settingAnArrayInsideAStruct
shaderStages
shaderTypes
simpleEnum // fails in type name resolution
simpleSwitch
standardLibraryDevicePointers
storeNull
storeNullArrayRef
structFieldEnumElemClash
switchBreak
switchFallThrough
ternaryExpression
textureDimensions
textureDimensionsNull
textureGather
textureLoad
textureSample
textureStore
threadArrayRefLoad
threadArrayRefLoadIntLiteral
threadArrayRefStore
threadPointerLoad
threadPointerStore
timesEquals
timesEqualsResult
timesWrongArgumentLength
trap
trapBecauseOfIndexAcesss
trapTransitively
typedefArray // crashes
variableShadowing
vectorTypeSyntax
Comment 6 Saam Barati 2019-07-09 16:38:28 PDT
Current status:

done:
add1
intSimpleMath
intRShift
intBitAnd
intBitNot
intBitOr
intBitXor
intLShift
indexAnderDoesntReturnPointer
indexAnderDoesntTakeReference 
anderDoesntReturnPointer
anderDoesntTakeReference
anderWithBadIndex
anderWithNothingWrong
anderWithWrongNumberOfArguments
arrayRefToArrayRef
assignLength
assignLengthHelper
badIntLiteralForFloat
badIntLiteralForInt
buildArrayThenSumIt
buildArrayThenSumItUsingArrayReference
boolBitAnd
boolBitNot
boolBitOr
boolBitXor
builtinMatrices
defaultEnumConstructor
equality
equalityTypeFailure
notEquality
equalsWrongArgumentLength
equalsWrongReturnType
floatMath
lessThanWrongArgumentLength
lessThanWrongReturnType
lessEqualWrongArgumentLength
lessEqualWrongReturnType
enumDuplicates
enumArrayRefBase
enumFloatBase
enumPtrBase
enumNoMembers
enumStructBase
matrixMultiplication
makeArrayRefFromArrayRef
makeArrayRefFromLocal
makeArrayRefFromPointer
pointerIndexGetter
pointerGetter
pointerToPointer
pointerToMember
postfixMinusMinus
postfixMinusMinusResult
postfixPlusPlus
postfixPlusPlusResult
prefixMinusMinus
prefixMinusMinusResult
prefixPlusPlus
prefixPlusPlusResult
returnAnArrayFromAFunction
returnIf
returnReferenceToSameParameter
returnReferenceToParameterWithDifferentFunctions
returnReferenceToParameter
returnReferenceToLocalVariableWithNesting
returnReferenceToLocalVariable
returnNullArrayRef
returnNull
returnIntLiteralFloat
returnIntLiteralUint
referenceTakenToLocalVariableInEntryPointShouldntMoveAnything
simpleAssignment
simpleDefault
simpleVariable
simpleDereference
simpleStruct
simpleMakePtr
simpleLength
simpleUnreachableCode
simpleNoReturn
simpleRecursiveStruct
simpleRecursion
simpleGetter
simpleSetter
simpleWhile
threadArrayRefLoad
threadArrayRefLoadIntLiteral
threadArrayRefStore
twoIntLiterals
typeMismatchAssignment
typeMismatchReturn
typeMismatchReturnParam
typeMismatchVariableDecl
threadPointerLoad
threadPointerStore
uintBitAnd
uintBitNot
uintBitOr
uintBitXor
uintLShift
uintRShift
uintSimpleMath

skipping:
ucharBitAnd
ucharBitNot
ucharBitOr
ucharBitXor
ucharLShift
ucharRShift
ucharSimpleMath

not done:
andReturnedArrayRef // doesn't work
anderWithArrayRef // we fail
arrayIndex // doesn't work with dynamic indices. Also, some of the indices may be backwards w.r.t selecting column/row.
arrayLoad // Make test harness support arrays as input types.
assignUintToInt
atomics
atomicsNull
badAdd
badIntLiteralForUint // doesn't work
bitAndWrongArgumentLength
bitNotWrongArgumentLength
bitOrWrongArgumentLength
bitXorWrongArgumentLength
booleanMath
booleanShortcircuiting
break
builtinVectorGetters
builtinVectorIndexSetters
builtinVectorSetters
builtinVectors
callArgumentsAreCopiedImmediatelyAfterEvaluation
cannotCallAnotherEntryPoint
casts
commentParsing
constantAddressSpace
continue
convertLocalVariableToArrayRef
convertPtrToArrayRef
copyArray
copyConstructors
decWrongArgumentLength
decWrongTypes
defaultInitializedNull
defaultInitializedNullArrayRef
defaultInitializedNullArrayRefIntLiteral
dereferenceDefaultNull
dereferenceDefaultNullArrayRef
dereferenceStore
deviceArrayRefLoad
deviceArrayRefStore
deviceArrayRefStoreIntLiteral
devicePointerLoad
devicePointerStore
divideEquals
divideEqualsResult
divideWrongArgumentLength
doWhile
dotOperatorSetterWrongArgumentLength
dotOperatorWrongArgumentLength
doubleNot
duplicateFunctions
duplicateTypes
emptyStruct
enumSwitchBreakExhaustive
enumSwitchBreakNotQuiteExhaustive
enumSwitchBreakNotQuiteExhaustiveWithDefault
enumWithExplicitIntBase // Need enums working
enumWithManualValues // need enums working
enumWithSomeManualValues // need enum values
enumWithUintBase // need enums working
enumWithoutZero
evaluationOrderForArguments
exhaustiveUcharSwitch
forLoop
generalNegation
getterType
greaterEqualWrongArgumentLength
greaterEqualWrongReturnType
greaterThanWrongReturnType
greaterWrongArgumentLength
halfSimpleMath
identityBool
ifElseIfElseStatement
ifElseIfStatement
ifElseStatement
ifStatement
incWrongArgumentLength
incWrongTypes
incrementAndDecrement
indexAnderWithArrayRef // doesn't work
indexAnderWithNothingWrong
indexAnderWithWrongNumberOfArguments
indexOperatorSetterWrongArgumentLength
indexOperatorWrongArgumentLength
indexSetterWithMismatchedType
indexSetterWithNoGetterOverload
indexSetterWithNoGetterOverloadFixed
inliningDoesNotAffectNestedCalls
inliningDoesntProduceAliasingIssues
intOverloadResolution
intOverloadResolutionReverseOrder
lShiftWrongArgumentLength
lValues
lexerKeyword
linkedList
literalBool
loadNull
loadNullArrayRef
logicalNegation
loneIndexSetter
loneIndexSetterPointer
loneSetter
loneSetterPointer
lotsOfLocalVariables
minusEquals
minusEqualsResult
minusWrongArgumentLength
moduloWrongArgumentLength
mutuallyRecursiveStruct
mutuallyRecursiveStructWithPointers
mutuallyRecursiveStructWithPointersBroken
nameResolutionFailure
nestedSubscript
nestedSubscriptLValueEmulationSimple
nestedSubscriptWithArraysInStructs
nonArrayRefArrayLengthFail
nonArrayRefArrayLengthSucceed
notEqualsOverload
notLoneIndexSetter
notQuiteExhaustiveUcharSwitch
notQuiteExhaustiveUcharSwitchWithDefault
numThreads
operatorBool
operatorWithoutUninferrableTypeVariable
overrideSubscriptStruct
overrideSubscriptStructAndDoStores
overrideSubscriptStructAndUsePointers
overrideSubscriptStructAndUsePointersIncorrectly
passNullToPtrMonomorphic
passNullToPtrMonomorphicArrayRef
passingArrayToFunction
plusEquals
plusEqualsResult
plusWrongArgumentLength
rShiftWrongArgumentLength
recursiveSetters
referenceEquality // Causes a metal compile error.
selfCasts
setterType
setterWithMatchedType
setterWithMismatchedType
setterWithNoGetterOverload
setterWithNoGetterOverloadFixed
settingAnArrayInsideAStruct
shaderStages
shaderTypes
simpleEnum // fails in type name resolution
simpleSwitch
standardLibraryDevicePointers
storeNull
storeNullArrayRef
structFieldEnumElemClash
switchBreak
switchFallThrough
ternaryExpression
textureDimensions
textureDimensionsNull
textureGather
textureLoad
textureSample
textureStore
timesEquals
timesEqualsResult
timesWrongArgumentLength
trap
trapBecauseOfIndexAcesss
trapTransitively
typedefArray // crashes
variableShadowing
vectorTypeSyntax
Comment 7 Saam Barati 2019-07-09 19:33:10 PDT
current status:

done:
ifElseIfElseStatement
ifElseIfStatement
ifElseStatement
ifStatement
plusEquals
plusEqualsResult
overrideSubscriptStructAndUsePointers
overrideSubscriptStructAndUsePointersIncorrectly
overrideSubscriptStructAndDoStores
overrideSubscriptStruct
builtinVectorGetters
builtinVectorIndexSetters
builtinVectorSetters
builtinVectors
mutuallyRecursiveStruct
mutuallyRecursiveStructWithPointersBroken
setterType
getterType
loadNull
defaultInitializedNullArrayRefIntLiteral
dereferenceDefaultNullArrayRef
passNullToPtrMonomorphicArrayRef
simpleWhile
doWhile
decWrongTypes
incWrongTypes
setterWithMismatchedType
indexSetterWithMismatchedType
greaterThanWrongReturnType
greaterEqualWrongReturnType
bitAndWrongArgumentLength
bitNotWrongArgumentLength
bitOrWrongArgumentLength
bitXorWrongArgumentLength
decWrongArgumentLength
divideWrongArgumentLength
dotOperatorSetterWrongArgumentLength
dotOperatorWrongArgumentLength
greaterEqualWrongArgumentLength
greaterWrongArgumentLength
incWrongArgumentLength
indexOperatorSetterWrongArgumentLength
indexOperatorWrongArgumentLength
lShiftWrongArgumentLength
minusWrongArgumentLength
timesWrongArgumentLength
rShiftWrongArgumentLength
plusWrongArgumentLength
moduloWrongArgumentLength
add1
intSimpleMath
intRShift
intBitAnd
intBitNot
intBitOr
intBitXor
intLShift
indexAnderDoesntReturnPointer
indexAnderDoesntTakeReference 
anderDoesntReturnPointer
anderDoesntTakeReference
anderWithBadIndex
anderWithNothingWrong
anderWithWrongNumberOfArguments
arrayRefToArrayRef
assignLength
assignLengthHelper
badIntLiteralForFloat
badIntLiteralForInt
buildArrayThenSumIt
buildArrayThenSumItUsingArrayReference
boolBitAnd
boolBitNot
boolBitOr
boolBitXor
builtinMatrices
defaultEnumConstructor
equality
equalityTypeFailure
notEquality
equalsWrongArgumentLength
equalsWrongReturnType
floatMath
lessThanWrongArgumentLength
lessThanWrongReturnType
lessEqualWrongArgumentLength
lessEqualWrongReturnType
enumDuplicates
enumArrayRefBase
enumFloatBase
enumPtrBase
enumNoMembers
enumStructBase
matrixMultiplication
makeArrayRefFromArrayRef
makeArrayRefFromLocal
makeArrayRefFromPointer
pointerIndexGetter
pointerGetter
pointerToPointer
pointerToMember
postfixMinusMinus
postfixMinusMinusResult
postfixPlusPlus
postfixPlusPlusResult
prefixMinusMinus
prefixMinusMinusResult
prefixPlusPlus
prefixPlusPlusResult
returnAnArrayFromAFunction
returnIf
returnReferenceToSameParameter
returnReferenceToParameterWithDifferentFunctions
returnReferenceToParameter
returnReferenceToLocalVariableWithNesting
returnReferenceToLocalVariable
returnNullArrayRef
returnNull
returnIntLiteralFloat
returnIntLiteralUint
referenceTakenToLocalVariableInEntryPointShouldntMoveAnything
simpleAssignment
simpleDefault
simpleVariable
simpleDereference
simpleStruct
simpleMakePtr
simpleLength
simpleUnreachableCode
simpleNoReturn
simpleRecursiveStruct
simpleRecursion
simpleGetter
simpleSetter
threadArrayRefLoad
threadArrayRefLoadIntLiteral
threadArrayRefStore
twoIntLiterals
typeMismatchAssignment
typeMismatchReturn
typeMismatchReturnParam
typeMismatchVariableDecl
threadPointerLoad
threadPointerStore
uintBitAnd
uintBitNot
uintBitOr
uintBitXor
uintLShift
uintRShift
uintSimpleMath
ternaryExpression
generalNegation

skipping:
ucharBitAnd
ucharBitNot
ucharBitOr
ucharBitXor
ucharLShift
ucharRShift
ucharSimpleMath
exhaustiveUcharSwitch
notQuiteExhaustiveUcharSwitch
notQuiteExhaustiveUcharSwitchWithDefault

not done:
andReturnedArrayRef // doesn't work
anderWithArrayRef // we fail
arrayIndex // doesn't work with dynamic indices. Also, some of the indices may be backwards w.r.t selecting column/row.
arrayLoad // Make test harness support arrays as input types.
assignUintToInt
atomics
atomicsNull
badAdd
badIntLiteralForUint // doesn't work
booleanMath
booleanShortcircuiting
break
callArgumentsAreCopiedImmediatelyAfterEvaluation
cannotCallAnotherEntryPoint
casts
commentParsing
constantAddressSpace
continue
convertLocalVariableToArrayRef
convertPtrToArrayRef
copyArray
copyConstructors
defaultInitializedNull
defaultInitializedNullArrayRef
dereferenceDefaultNull
dereferenceStore
deviceArrayRefLoad // needs harness changes
deviceArrayRefStore // needs harness changes
deviceArrayRefStoreIntLiteral // needs harness changes
devicePointerLoad // needs harness changes
devicePointerStore // needs harness changes
divideEquals // divide doesn't work
divideEqualsResult // divit doesn't work
doubleNot
duplicateFunctions
duplicateTypes
emptyStruct
enumSwitchBreakExhaustive // Need enums working
enumSwitchBreakNotQuiteExhaustive // Need enums working
enumSwitchBreakNotQuiteExhaustiveWithDefault // Need enums  working
enumWithExplicitIntBase // Need enums working
enumWithManualValues // need enums working
enumWithSomeManualValues // need enum values
enumWithUintBase // need enums working
enumWithoutZero // Need enums working
evaluationOrderForArguments
forLoop // crashes compiler
halfSimpleMath
identityBool
incrementAndDecrement
indexAnderWithArrayRef // doesn't work
indexAnderWithNothingWrong
indexAnderWithWrongNumberOfArguments
indexSetterWithNoGetterOverload
indexSetterWithNoGetterOverloadFixed
inliningDoesNotAffectNestedCalls
inliningDoesntProduceAliasingIssues
intOverloadResolution
intOverloadResolutionReverseOrder
lValues
lexerKeyword
linkedList
literalBool
loadNullArrayRef // crashes checker
logicalNegation
loneIndexSetter
loneIndexSetterPointer
loneSetter
loneSetterPointer
lotsOfLocalVariables
minusEquals
minusEqualsResult
nameResolutionFailure
nestedSubscript
nestedSubscriptLValueEmulationSimple
nestedSubscriptWithArraysInStructs
nonArrayRefArrayLengthFail
nonArrayRefArrayLengthSucceed
notEqualsOverload
notLoneIndexSetter
numThreads
operatorBool
operatorWithoutUninferrableTypeVariable
passNullToPtrMonomorphic
passingArrayToFunction
recursiveSetters
referenceEquality // Causes a metal compile error.
selfCasts
setterWithMatchedType
setterWithNoGetterOverload
setterWithNoGetterOverloadFixed
settingAnArrayInsideAStruct
shaderStages
shaderTypes
simpleEnum // fails in type name resolution
simpleSwitch
standardLibraryDevicePointers
storeNull
storeNullArrayRef
structFieldEnumElemClash
switchBreak
switchFallThrough
textureDimensions
textureDimensionsNull
textureGather
textureLoad
textureSample
textureStore
timesEquals
timesEqualsResult
trap
trapBecauseOfIndexAcesss
trapTransitively
typedefArray // crashes
variableShadowing
vectorTypeSyntax
mutuallyRecursiveStructWithPointers // doesn't work
Comment 8 Saam Barati 2019-07-10 17:41:47 PDT
latest status:

done:
operatorWithoutUninferrableTypeVariable
lotsOfLocalVariables
logicalNegation
intOverloadResolution
intOverloadResolutionReverseOrder
notEqualsOverload
trapBecauseOfIndexAcesss
incrementAndDecrement
evaluationOrderForArguments
doubleNot
copyArray
callArgumentsAreCopiedImmediatelyAfterEvaluation
lValues
casts
selfCasts
badAdd
break
continue
booleanMath
identityBool
literalBool
operatorBool
duplicateFunctions
variableShadowing
nameResolutionFailure
switchBreak
timesEquals
timesEqualsResult
minusEquals
minusEqualsResult
passingArrayToFunction
passNullToPtrMonomorphic
storeNull
commentParsing
setterWithMatchedType
setterWithNoGetterOverload
setterWithNoGetterOverloadFixed
recursiveSetters
loneSetter
loneSetterPointer
nonArrayRefArrayLengthFail
nonArrayRefArrayLengthSucceed
indexSetterWithNoGetterOverload
indexSetterWithNoGetterOverloadFixed
notLoneIndexSetter
loneIndexSetter
loneIndexSetterPointer
indexAnderWithNothingWrong
indexAnderWithWrongNumberOfArguments
vectorTypeSyntax
settingAnArrayInsideAStruct
emptyStruct
defaultInitializedNull
defaultInitializedNullArrayRef
dereferenceDefaultNull
dereferenceStore
ifElseIfElseStatement
ifElseIfStatement
ifElseStatement
ifStatement
plusEquals
plusEqualsResult
overrideSubscriptStructAndUsePointers
overrideSubscriptStructAndUsePointersIncorrectly
overrideSubscriptStructAndDoStores
overrideSubscriptStruct
builtinVectorGetters
builtinVectorIndexSetters
builtinVectorSetters
builtinVectors
mutuallyRecursiveStruct
mutuallyRecursiveStructWithPointersBroken
setterType
getterType
loadNull
defaultInitializedNullArrayRefIntLiteral
dereferenceDefaultNullArrayRef
passNullToPtrMonomorphicArrayRef
simpleWhile
doWhile
decWrongTypes
incWrongTypes
setterWithMismatchedType
indexSetterWithMismatchedType
greaterThanWrongReturnType
greaterEqualWrongReturnType
bitAndWrongArgumentLength
bitNotWrongArgumentLength
bitOrWrongArgumentLength
bitXorWrongArgumentLength
decWrongArgumentLength
divideWrongArgumentLength
dotOperatorSetterWrongArgumentLength
dotOperatorWrongArgumentLength
greaterEqualWrongArgumentLength
greaterWrongArgumentLength
incWrongArgumentLength
indexOperatorSetterWrongArgumentLength
indexOperatorWrongArgumentLength
lShiftWrongArgumentLength
minusWrongArgumentLength
timesWrongArgumentLength
rShiftWrongArgumentLength
plusWrongArgumentLength
moduloWrongArgumentLength
add1
intSimpleMath
intRShift
intBitAnd
intBitNot
intBitOr
intBitXor
intLShift
indexAnderDoesntReturnPointer
indexAnderDoesntTakeReference 
anderDoesntReturnPointer
anderDoesntTakeReference
anderWithBadIndex
anderWithNothingWrong
anderWithWrongNumberOfArguments
arrayRefToArrayRef
assignLength
assignLengthHelper
badIntLiteralForFloat
badIntLiteralForInt
buildArrayThenSumIt
buildArrayThenSumItUsingArrayReference
boolBitAnd
boolBitNot
boolBitOr
boolBitXor
builtinMatrices
defaultEnumConstructor
equality
equalityTypeFailure
notEquality
equalsWrongArgumentLength
equalsWrongReturnType
floatMath
lessThanWrongArgumentLength
lessThanWrongReturnType
lessEqualWrongArgumentLength
lessEqualWrongReturnType
enumDuplicates
enumArrayRefBase
enumFloatBase
enumPtrBase
enumNoMembers
enumStructBase
matrixMultiplication
makeArrayRefFromArrayRef
makeArrayRefFromLocal
makeArrayRefFromPointer
pointerIndexGetter
pointerGetter
pointerToPointer
pointerToMember
postfixMinusMinus
postfixMinusMinusResult
postfixPlusPlus
postfixPlusPlusResult
prefixMinusMinus
prefixMinusMinusResult
prefixPlusPlus
prefixPlusPlusResult
returnAnArrayFromAFunction
returnIf
returnReferenceToSameParameter
returnReferenceToParameterWithDifferentFunctions
returnReferenceToParameter
returnReferenceToLocalVariableWithNesting
returnReferenceToLocalVariable
returnNullArrayRef
returnNull
returnIntLiteralFloat
returnIntLiteralUint
referenceTakenToLocalVariableInEntryPointShouldntMoveAnything
simpleAssignment
simpleDefault
simpleVariable
simpleDereference
simpleStruct
simpleMakePtr
simpleLength
simpleUnreachableCode
simpleNoReturn
simpleRecursiveStruct
simpleRecursion
simpleGetter
simpleSetter
threadArrayRefLoad
threadArrayRefLoadIntLiteral
threadArrayRefStore
twoIntLiterals
typeMismatchAssignment
typeMismatchReturn
typeMismatchReturnParam
typeMismatchVariableDecl
threadPointerLoad
threadPointerStore
uintBitAnd
uintBitNot
uintBitOr
uintBitXor
uintLShift
uintRShift
uintSimpleMath
ternaryExpression
generalNegation

skipping:
ucharBitAnd
ucharBitNot
ucharBitOr
ucharBitXor
ucharLShift
ucharRShift
ucharSimpleMath
exhaustiveUcharSwitch
notQuiteExhaustiveUcharSwitch
notQuiteExhaustiveUcharSwitchWithDefault
halfSimpleMath

not done:

fail:
shaderStages // Need a way for harness to do this.
lexerKeyword // we don't have any such facility in our harness at the moment.
cannotCallAnotherEntryPoint // Need to expand our harness to not insert entrypoints. We may already have tests for exactly this, though?
shaderTypes // Need to expand our harness to not insert entrypoints. We may already have tests for exactly this, though?
deviceArrayRefLoad // needs harness changes
deviceArrayRefStore // needs harness changes
deviceArrayRefStoreIntLiteral // needs harness changes
devicePointerLoad // needs harness changes
devicePointerStore // needs harness changes
arrayLoad // Make test harness support arrays as input types.
constantAddressSpace // We need to support this in test harness (and maybe compiler?)
textureDimensions // Need support for this in harness
textureDimensionsNull // Need support for this in harness
textureGather // Need support for this in harness
textureLoad // Need support for this in harness
textureSample // Need support for this in harness
textureStore // Need support for this in harness
standardLibraryDevicePointers // need support for this in harness
numThreads // We need to have a checkFail that doens't assume we already have one compute function. Harness support.

structFieldEnumElemClash // enums need to work
enumSwitchBreakExhaustive // Need enums working
enumSwitchBreakNotQuiteExhaustive // Need enums working
enumSwitchBreakNotQuiteExhaustiveWithDefault // Need enums  working
enumWithExplicitIntBase // Need enums working
enumWithManualValues // need enums working
enumWithSomeManualValues // need enum values
enumWithUintBase // need enums working
enumWithoutZero // Need enums working
simpleEnum // fails in type name resolution
copyConstructors // enums

divideEquals // divide doesn't work
divideEqualsResult // divide doesn't work

forLoop // crashes compiler
typedefArray // crashes
storeNullArrayRef // crashes in checker.
loadNullArrayRef // crashes checker

nestedSubscriptWithArraysInStructs // fails in checker
indexAnderWithArrayRef // Fails in checker.
atomics // fails in checker
atomicsNull // fails in checker
nestedSubscriptLValueEmulationSimple // Fails in checker
nestedSubscript // fails in checker
switchFallThrough // fails in statement checker 
simpleSwitch // fails in statement checker
convertLocalVariableToArrayRef // We support "thread int[] foo = @x; return foo;", but not "return @x;". Checer
andReturnedArrayRef // Doesn't work. Checker?
anderWithArrayRef // We fail. Checker?
mutuallyRecursiveStructWithPointers // doesn't work. Checker?
convertPtrToArrayRef // We support "thread int[] foo = @x; return foo;", but not "return @x;". Checker.

referenceEquality // Causes a metal compile error.
duplicateTypes // We don't fail even though we should with duplicate struct declarations.
arrayIndex // doesn't work with dynamic indices. Also, some of the indices may be backwards w.r.t selecting column/row.
assignUintToInt // we don't parse '42u' last I checked. Parser.
booleanShortcircuiting // We don't short circuit
trap //  we're thinking of removing "trap;"
trapTransitively //  we're thinking of removing "trap;"
badIntLiteralForUint // doesn't work
inliningDoesNotAffectNestedCalls // Seems specific to JS implementation and inlining
inliningDoesntProduceAliasingIssues // Seems specific to JS implementation and inlining
linkedList // fails in resolveNamesInTypes

// We don't support this, but according to JS spec tests should:
    int foo5()
    {
        while (true) {
            return 7;
        }
    }
Comment 9 Saam Barati 2019-07-22 13:09:57 PDT
Current status:

// works
divideEquals
divideEqualsResult

done:
storeNullArrayRef
loadNullArrayRef
enumWithUintBase
simpleEnum
enumWithoutZero
enumWithSomeManualValues
enumWithExplicitIntBase
enumSwitchBreakExhaustive
enumSwitchBreakNotQuiteExhaustiveWithDefault
enumWithManualValues
enumSwitchBreakNotQuiteExhaustive
copyConstructors
operatorWithoutUninferrableTypeVariable
lotsOfLocalVariables
logicalNegation
intOverloadResolution
intOverloadResolutionReverseOrder
notEqualsOverload
trapBecauseOfIndexAcesss
incrementAndDecrement
evaluationOrderForArguments
doubleNot
copyArray
callArgumentsAreCopiedImmediatelyAfterEvaluation
lValues
casts
selfCasts
badAdd
break
continue
booleanMath
identityBool
literalBool
operatorBool
duplicateFunctions
variableShadowing
nameResolutionFailure
switchBreak
timesEquals
timesEqualsResult
minusEquals
minusEqualsResult
passingArrayToFunction
passNullToPtrMonomorphic
storeNull
commentParsing
setterWithMatchedType
setterWithNoGetterOverload
setterWithNoGetterOverloadFixed
recursiveSetters
loneSetter
loneSetterPointer
nonArrayRefArrayLengthFail
nonArrayRefArrayLengthSucceed
indexSetterWithNoGetterOverload
indexSetterWithNoGetterOverloadFixed
notLoneIndexSetter
loneIndexSetter
loneIndexSetterPointer
indexAnderWithNothingWrong
indexAnderWithWrongNumberOfArguments
vectorTypeSyntax
settingAnArrayInsideAStruct
emptyStruct
defaultInitializedNull
defaultInitializedNullArrayRef
dereferenceDefaultNull
dereferenceStore
ifElseIfElseStatement
ifElseIfStatement
ifElseStatement
ifStatement
plusEquals
plusEqualsResult
overrideSubscriptStructAndUsePointers
overrideSubscriptStructAndUsePointersIncorrectly
overrideSubscriptStructAndDoStores
overrideSubscriptStruct
builtinVectorGetters
builtinVectorIndexSetters
builtinVectorSetters
builtinVectors
mutuallyRecursiveStruct
mutuallyRecursiveStructWithPointersBroken
setterType
getterType
loadNull
defaultInitializedNullArrayRefIntLiteral
dereferenceDefaultNullArrayRef
passNullToPtrMonomorphicArrayRef
simpleWhile
doWhile
decWrongTypes
incWrongTypes
setterWithMismatchedType
indexSetterWithMismatchedType
greaterThanWrongReturnType
greaterEqualWrongReturnType
bitAndWrongArgumentLength
bitNotWrongArgumentLength
bitOrWrongArgumentLength
bitXorWrongArgumentLength
decWrongArgumentLength
divideWrongArgumentLength
dotOperatorSetterWrongArgumentLength
dotOperatorWrongArgumentLength
greaterEqualWrongArgumentLength
greaterWrongArgumentLength
incWrongArgumentLength
indexOperatorSetterWrongArgumentLength
indexOperatorWrongArgumentLength
lShiftWrongArgumentLength
minusWrongArgumentLength
timesWrongArgumentLength
rShiftWrongArgumentLength
plusWrongArgumentLength
moduloWrongArgumentLength
add1
intSimpleMath
intRShift
intBitAnd
intBitNot
intBitOr
intBitXor
intLShift
indexAnderDoesntReturnPointer
indexAnderDoesntTakeReference 
anderDoesntReturnPointer
anderDoesntTakeReference
anderWithBadIndex
anderWithNothingWrong
anderWithWrongNumberOfArguments
arrayRefToArrayRef
assignLength
assignLengthHelper
badIntLiteralForFloat
badIntLiteralForInt
buildArrayThenSumIt
buildArrayThenSumItUsingArrayReference
boolBitAnd
boolBitNot
boolBitOr
boolBitXor
builtinMatrices
defaultEnumConstructor
equality
equalityTypeFailure
notEquality
equalsWrongArgumentLength
equalsWrongReturnType
floatMath
lessThanWrongArgumentLength
lessThanWrongReturnType
lessEqualWrongArgumentLength
lessEqualWrongReturnType
enumDuplicates
enumArrayRefBase
enumFloatBase
enumPtrBase
enumNoMembers
enumStructBase
matrixMultiplication
makeArrayRefFromArrayRef
makeArrayRefFromLocal
makeArrayRefFromPointer
pointerIndexGetter
pointerGetter
pointerToPointer
pointerToMember
postfixMinusMinus
postfixMinusMinusResult
postfixPlusPlus
postfixPlusPlusResult
prefixMinusMinus
prefixMinusMinusResult
prefixPlusPlus
prefixPlusPlusResult
returnAnArrayFromAFunction
returnIf
returnReferenceToSameParameter
returnReferenceToParameterWithDifferentFunctions
returnReferenceToParameter
returnReferenceToLocalVariableWithNesting
returnReferenceToLocalVariable
returnNullArrayRef
returnNull
returnIntLiteralFloat
returnIntLiteralUint
referenceTakenToLocalVariableInEntryPointShouldntMoveAnything
simpleAssignment
simpleDefault
simpleVariable
simpleDereference
simpleStruct
simpleMakePtr
simpleLength
simpleUnreachableCode
simpleNoReturn
simpleRecursiveStruct
simpleRecursion
simpleGetter
simpleSetter
threadArrayRefLoad
threadArrayRefLoadIntLiteral
threadArrayRefStore
twoIntLiterals
typeMismatchAssignment
typeMismatchReturn
typeMismatchReturnParam
typeMismatchVariableDecl
threadPointerLoad
threadPointerStore
uintBitAnd
uintBitNot
uintBitOr
uintBitXor
uintLShift
uintRShift
uintSimpleMath
ternaryExpression
generalNegation

skipping:
ucharBitAnd
ucharBitNot
ucharBitOr
ucharBitXor
ucharLShift
ucharRShift
ucharSimpleMath
exhaustiveUcharSwitch
notQuiteExhaustiveUcharSwitch
notQuiteExhaustiveUcharSwitchWithDefault
halfSimpleMath

not done:

fail:
shaderStages // Need a way for harness to do this.
lexerKeyword // we don't have any such facility in our harness at the moment.
cannotCallAnotherEntryPoint // Need to expand our harness to not insert entrypoints. We may already have tests for exactly this, though?
shaderTypes // Need to expand our harness to not insert entrypoints. We may already have tests for exactly this, though?
deviceArrayRefLoad // needs harness changes
deviceArrayRefStore // needs harness changes
deviceArrayRefStoreIntLiteral // needs harness changes
devicePointerLoad // needs harness changes
devicePointerStore // needs harness changes
arrayLoad // Make test harness support arrays as input types.
constantAddressSpace // We need to support this in test harness (and maybe compiler?)
textureDimensions // Need support for this in harness
textureDimensionsNull // Need support for this in harness
textureGather // Need support for this in harness
textureLoad // Need support for this in harness
textureSample // Need support for this in harness
textureStore // Need support for this in harness
standardLibraryDevicePointers // need support for this in harness
numThreads // We need to have a checkFail that doens't assume we already have one compute function. Harness support.

structFieldEnumElemClash // enums need to work

forLoop // crashes compiler
typedefArray // crashes

nestedSubscriptWithArraysInStructs // fails in checker
indexAnderWithArrayRef // Fails in checker.
atomics // fails in checker
atomicsNull // fails in checker
nestedSubscriptLValueEmulationSimple // Fails in checker
nestedSubscript // fails in checker
switchFallThrough // fails in statement checker 
simpleSwitch // fails in statement checker
convertLocalVariableToArrayRef // We support "thread int[] foo = @x; return foo;", but not "return @x;". Checer
andReturnedArrayRef // Doesn't work. Checker?
anderWithArrayRef // We fail. Checker?
mutuallyRecursiveStructWithPointers // doesn't work. Checker?
convertPtrToArrayRef // We support "thread int[] foo = @x; return foo;", but not "return @x;". Checker.

referenceEquality // Causes a metal compile error.
duplicateTypes // We don't fail even though we should with duplicate struct declarations.
arrayIndex // doesn't work with dynamic indices. Also, some of the indices may be backwards w.r.t selecting column/row.
assignUintToInt // we don't parse '42u' last I checked. Parser.
booleanShortcircuiting // We don't short circuit
trap //  we're thinking of removing "trap;"
trapTransitively //  we're thinking of removing "trap;"
badIntLiteralForUint // doesn't work
inliningDoesNotAffectNestedCalls // Seems specific to JS implementation and inlining
inliningDoesntProduceAliasingIssues // Seems specific to JS implementation and inlining
linkedList // fails in resolveNamesInTypes
Comment 10 Myles C. Maxfield 2020-05-05 00:42:31 PDT
WHLSL is no longer relevant.