@@ -131,8 +131,14 @@ class TranslateToFuzzReader {
131131 allowNaNs = allowNaNs_;
132132 }
133133
134+ void setAllowMemory (bool allowMemory_) {
135+ allowMemory = allowMemory_;
136+ }
137+
134138 void build () {
135- setupMemory ();
139+ if (allowMemory) {
140+ setupMemory ();
141+ }
136142 setupTable ();
137143 setupGlobals ();
138144 addImportLoggingSupport ();
@@ -187,6 +193,9 @@ class TranslateToFuzzReader {
187193 // TODO: de-NaN SIMD values
188194 bool allowNaNs = true ;
189195
196+ // Whether to emit memory operations like loads and stores.
197+ bool allowMemory = true ;
198+
190199 // Features allowed to be emitted
191200 FeatureSet features = FeatureSet::All;
192201
@@ -1137,6 +1146,7 @@ class TranslateToFuzzReader {
11371146 }
11381147
11391148 Expression* makeLoad (Type type) {
1149+ if (!allowMemory) return makeTrivial (type);
11401150 auto * ret = makeNonAtomicLoad (type);
11411151 if (type != i32 && type != i64 ) return ret;
11421152 if (!features.hasAtomics () || oneIn (2 )) return ret;
@@ -1208,6 +1218,7 @@ class TranslateToFuzzReader {
12081218 }
12091219
12101220 Expression* makeStore (Type type) {
1221+ if (!allowMemory) return makeTrivial (type);
12111222 auto * ret = makeNonAtomicStore (type);
12121223 auto * store = ret->dynCast <Store>();
12131224 if (!store) return ret;
@@ -1595,6 +1606,7 @@ class TranslateToFuzzReader {
15951606
15961607 Expression* makeAtomic (Type type) {
15971608 assert (features.hasAtomics ());
1609+ if (!allowMemory) return makeTrivial (type);
15981610 wasm.memory .shared = true ;
15991611 if (type == i32 && oneIn (2 )) {
16001612 if (ATOMIC_WAITS && oneIn (2 )) {
@@ -1732,6 +1744,7 @@ class TranslateToFuzzReader {
17321744 }
17331745
17341746 Expression* makeBulkMemory (Type type) {
1747+ if (!allowMemory) return makeTrivial (type);
17351748 assert (features.hasBulkMemory ());
17361749 assert (type == none);
17371750 switch (upTo (4 )) {
@@ -1744,6 +1757,7 @@ class TranslateToFuzzReader {
17441757 }
17451758
17461759 Expression* makeMemoryInit () {
1760+ if (!allowMemory) return makeTrivial (none);
17471761 auto segment = uint32_t (get32 ());
17481762 Expression* dest = make (i32 );
17491763 Expression* offset = make (i32 );
@@ -1752,17 +1766,20 @@ class TranslateToFuzzReader {
17521766 }
17531767
17541768 Expression* makeDataDrop () {
1769+ if (!allowMemory) return makeTrivial (none);
17551770 return builder.makeDataDrop (get32 ());
17561771 }
17571772
17581773 Expression* makeMemoryCopy () {
1774+ if (!allowMemory) return makeTrivial (none);
17591775 Expression* dest = make (i32 );
17601776 Expression* source = make (i32 );
17611777 Expression* size = make (i32 );
17621778 return builder.makeMemoryCopy (dest, source, size);
17631779 }
17641780
17651781 Expression* makeMemoryFill () {
1782+ if (!allowMemory) return makeTrivial (none);
17661783 Expression* dest = make (i32 );
17671784 Expression* value = make (i32 );
17681785 Expression* size = make (i32 );
0 commit comments