Skip to content

Commit 1785bc3

Browse files
authored
Prioritize RefEq fuzzing (#7865)
Many instructions operate on the contents of e.g. an i32 (binary ops, unary ops, ifs and branches, etc.), but ref.eq (and maybe descriptor ops) are the only things that test reference identity, so we may have been underfuzzing that.
1 parent 60cd24d commit 1785bc3

File tree

2 files changed

+40
-44
lines changed

2 files changed

+40
-44
lines changed

src/tools/fuzzing/fuzzing.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2164,7 +2164,9 @@ Expression* TranslateToFuzzReader::_makeConcrete(Type type) {
21642164
}
21652165
options.add(FeatureSet::ReferenceTypes, &Self::makeRefIsNull);
21662166
options.add(FeatureSet::ReferenceTypes | FeatureSet::GC,
2167-
&Self::makeRefEq,
2167+
// Prioritize ref.eq heavily as it is the one instruction that
2168+
// tests reference identity.
2169+
{&Self::makeRefEq, VeryImportant},
21682170
&Self::makeRefTest,
21692171
&Self::makeI31Get);
21702172
options.add(FeatureSet::ReferenceTypes | FeatureSet::GC |
Lines changed: 37 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -1,57 +1,51 @@
11
Metrics
22
total
3-
[exports] : 10
4-
[funcs] : 14
3+
[exports] : 18
4+
[funcs] : 24
55
[globals] : 26
66
[imports] : 12
77
[memories] : 1
88
[memory-data] : 16
9-
[table-data] : 3
9+
[table-data] : 15
1010
[tables] : 2
1111
[tags] : 2
12-
[total] : 642
13-
[vars] : 48
14-
ArrayNewFixed : 6
12+
[total] : 882
13+
[vars] : 54
14+
ArrayNewFixed : 7
1515
AtomicCmpxchg : 1
16-
AtomicFence : 2
17-
Binary : 40
18-
Block : 106
19-
Break : 8
20-
Call : 26
21-
CallRef : 1
22-
Const : 109
23-
DataDrop : 2
24-
Drop : 14
25-
GlobalGet : 57
26-
GlobalSet : 44
27-
If : 32
28-
Load : 6
29-
LocalGet : 20
30-
LocalSet : 16
31-
Loop : 8
32-
MemoryCopy : 1
33-
Nop : 11
34-
Pop : 1
35-
RefAs : 2
36-
RefCast : 2
16+
Binary : 38
17+
Block : 172
18+
Break : 9
19+
Call : 37
20+
Const : 180
21+
Drop : 72
22+
GlobalGet : 72
23+
GlobalSet : 60
24+
If : 33
25+
Load : 5
26+
LocalGet : 8
27+
LocalSet : 9
28+
Loop : 6
29+
Nop : 7
30+
Pop : 2
31+
RefAs : 1
3732
RefEq : 4
38-
RefFunc : 5
33+
RefFunc : 15
3934
RefI31 : 8
40-
RefNull : 8
41-
RefTest : 1
42-
Return : 6
43-
SIMDExtract : 1
35+
RefIsNull : 1
36+
RefNull : 10
37+
Return : 5
38+
SIMDExtract : 4
4439
Select : 1
45-
Store : 1
46-
StringConst : 8
47-
StringEncode : 1
40+
StringConst : 6
41+
StringEq : 1
4842
StringMeasure : 1
49-
StructNew : 9
50-
Switch : 1
43+
StringWTF16Get : 1
44+
StructNew : 13
5145
Throw : 1
52-
Try : 1
53-
TryTable : 4
54-
TupleExtract : 2
55-
TupleMake : 6
56-
Unary : 36
57-
Unreachable : 22
46+
Try : 2
47+
TryTable : 2
48+
TupleExtract : 1
49+
TupleMake : 13
50+
Unary : 43
51+
Unreachable : 31

0 commit comments

Comments
 (0)