MCPcopy Create free account
hub / github.com/csmith-project/csmith / random_qualifiers

Method random_qualifiers

src/CVQualifiers.cpp:215–246  ·  view source on GitHub ↗

* generate a random CV qualifier vector that is looser or stricter than this one */

Source from the content-addressed store, hash-verified

213 * generate a random CV qualifier vector that is looser or stricter than this one
214 */
215CVQualifiers
216CVQualifiers::random_qualifiers(bool no_volatile, Effect::Access access, const CGContext &cg_context) const
217{
218 std::vector<bool> volatiles;
219 std::vector<bool> consts;
220 if (wildcard) {
221 return CVQualifiers(true, accept_stricter);
222 }
223 // use non-volatile for all levels if requested
224 if (no_volatile) {
225 for (size_t i=0; i<is_volatiles.size(); i++) {
226 volatiles.push_back(false);
227 }
228 }
229 else {
230 volatiles = !accept_stricter ? random_looser_volatiles() : random_stricter_volatiles();
231 ERROR_GUARD(CVQualifiers(consts, volatiles));
232 if (!cg_context.get_effect_context().is_side_effect_free()) {
233 volatiles[volatiles.size() - 1] = false;
234 }
235 }
236
237 ERROR_GUARD(CVQualifiers(consts, volatiles));
238 make_scalar_volatiles(volatiles);
239 consts = !accept_stricter ? random_looser_consts() : random_stricter_consts();
240 make_scalar_consts(consts);
241 ERROR_GUARD(CVQualifiers(consts, volatiles));
242 if (access == Effect::WRITE) {
243 consts[consts.size() - 1] = false;
244 }
245 return CVQualifiers(consts, volatiles);
246}
247
248/*
249 * generate a random CV qualifier vector that is looser than this one

Callers 1

make_random_signatureMethod · 0.80

Calls 5

rnd_flipcoinFunction · 0.85
sizeMethod · 0.80
is_side_effect_freeMethod · 0.80
CVQualifiersClass · 0.70

Tested by

no test coverage detected