* generate a random CV qualifier vector that is looser or stricter than this one */
| 213 | * generate a random CV qualifier vector that is looser or stricter than this one |
| 214 | */ |
| 215 | CVQualifiers |
| 216 | CVQualifiers::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 |
no test coverage detected