Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Make convert_java_nondet more general #2505

Conversation

owen-mc-diffblue
Copy link
Contributor

Currently, convert_nondet only converts nondets that are on the
right hand side of assignments. This is fine if the remove_returns
pass has been run. However, if the remove_returns pass has not
been run then there are also nondets in return statements.

This PR makes convert_nondet consider all operands of all
statements. It has unit tests.

@thk123
Copy link
Contributor

thk123 commented Jul 2, 2018

Not reviewed or anything, but a cursory glance suggests this needs a pointer bump before merging, but you probably knew that already :)

@owen-mc-diffblue
Copy link
Contributor Author

const typet &type = side_effect.type();
// If the lhs type doesn't have a subtype then I guess it's primitive and
// we want to bail out now
if(!(type.id() == ID_pointer && type.has_subtype()))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This check is redundant: a pointer_typet is a type_with_subtypet

{
return next_instr;
}
// Although, if the type is a ptr-to-void then we also want to bail
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might as well update this comment to note that function pointers are also left alone


// Insert the new instructions into the instruction list before target
goto_program.destructive_insert(target, new_instructions);
goto_program.update();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The update() procedure is quite expensive, so best done en masse after all replacements. The one caveat: instructions won't necessarily have a reasonable location_number before update() is run, but this pass does not appear to use location_number.

void validate_nondets_converted(
std::list<goto_programt::instructiont> instructions)
{
bool nondetExists = false, allocateExists = false;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

camelCase


std::stringstream out;
goto_function.body.output(namespacet(symbol_table), "", out);
std::string res = out.str();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this debugging code accidentally left in?

std::string output = "";
for(auto instruction : model_function.get_goto_function().body.instructions)
{
output += instruction.code.pretty(0, 0) + "\n\n\n";
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similarly debug code here

@owen-mc-diffblue owen-mc-diffblue force-pushed the owen-jones-diffblue/fix/convert-nondet branch 2 times, most recently from f567784 to 283c4f8 Compare July 4, 2018 10:33
Copy link
Contributor

@allredj allredj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Passed Diffblue compatibility checks (cbmc commit: 283c4f8).
Build URL: https://travis-ci.com/diffblue/test-gen/builds/78082033

@owen-mc-diffblue
Copy link
Contributor Author

CI is now passing, and the TG bump is passing too.

@smowton I've addressed your review comments.

Copy link
Contributor

@smowton smowton left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good, one recommended further optimisation

@@ -134,6 +163,8 @@ void convert_nondet(
object_factory_parameters,
mode);
}

goto_program.update();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Only do this if any change was made

@owen-mc-diffblue owen-mc-diffblue force-pushed the owen-jones-diffblue/fix/convert-nondet branch 2 times, most recently from 94e15b6 to d05d8f9 Compare July 5, 2018 09:13
Copy link
Contributor

@allredj allredj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Passed Diffblue compatibility checks (cbmc commit: d05d8f9).
Build URL: https://travis-ci.com/diffblue/test-gen/builds/78159655

Copy link
Contributor

@thk123 thk123 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Think the body of the main loop is a bit complex TBH. I'm also a little confused about the unit tests

{
return next_instr;
}
if(op.id() != ID_side_effect)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You might consider first std::copy_if and then looping over the remainder to split out the statements you don't care about from what you are doing with them.

continue;
}

// Check whether the nondet object may be null
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment doesn't really add anything, might be more useful to say why you set max_nonnull_tree_depth to 1 if it is nullable (the question I really have is, are we setting it to 1 when previously zero, or 1 when previously >1? And if the later, why not leave it as greater than 1?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't know why - I'm just copying code that was there before. I guess this is now the expected behaviour.

// Get the symbol to nondet-init
const auto source_loc = target->source_location;

// Create aux symbol for nondet object
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Don't think this comment really adds anything - perhaps "for storing the nondet object" might be useful?

aux_block, symbol_table, aux_instructions, message_handler, mode);
CHECK_RETURN(aux_instructions.instructions.size() == 2);

// Generate nondet init code
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Again - don't think this adds anything on top of the call to gen_nondet_init

init_code,
symbol_table,
source_loc,
true,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A nice way of simulating named parameters here would be to assign this variable to a value immediately before the call:

const bool skip_classid = true

which of course begs the question, why is this true?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure - I'm copying code that was here already.

{
replace_java_nondet(model_function);

remove_returns(model_function, [](const irep_idt &) { return false; });
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The THEN says when remove_returns hasn't been called, but you're calling it?

Copy link
Contributor Author

@owen-mc-diffblue owen-mc-diffblue Jul 5, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have changed the text to make it clear it's about "before" or "after" remove_returns is run.


convert_nondet(model_function, null_message_handler, params, ID_java);

remove_returns(model_function, [](const irep_idt &) { return false; });
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Shouldn't this happen first? (before replace and convert)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You're right - this seems to be a copy-paste error :(


remove_returns(model_function, [](const irep_idt &) { return false; });

std::stringstream out;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Left over debug code?

{
replace_java_nondet(model_function);

convert_nondet(model_function, null_message_handler, params, ID_java);

remove_returns(model_function, [](const irep_idt &) { return false; });
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Still called despite text in THEN

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I have changed the text to make it clear it's about "before" or "after" remove_returns is run.

}

REQUIRE(!nondet_exists);
REQUIRE(allocate_exists);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Might be good to validate the type of the allocation as well

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good suggestion - I will consider it in future, but I'd rather it didn't hold up this PR

Copy link
Contributor

@allredj allredj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Passed Diffblue compatibility checks (cbmc commit: ad06cf5).
Build URL: https://travis-ci.com/diffblue/test-gen/builds/78202562

Copy link
Contributor

@allredj allredj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Passed Diffblue compatibility checks (cbmc commit: ad06cf5).
Build URL: https://travis-ci.com/diffblue/test-gen/builds/78204235

@owen-mc-diffblue
Copy link
Contributor Author

@thk123 Please re-review

Copy link
Contributor

@allredj allredj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Passed Diffblue compatibility checks (cbmc commit: bda76be).
Build URL: https://travis-ci.com/diffblue/test-gen/builds/78306527

@owen-mc-diffblue
Copy link
Contributor Author

The TG bump is failing

@owen-mc-diffblue owen-mc-diffblue force-pushed the owen-jones-diffblue/fix/convert-nondet branch 2 times, most recently from 8522f9a to 1b7cfe9 Compare July 7, 2018 07:43
Copy link
Contributor

@allredj allredj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR failed Diffblue compatibility checks (cbmc commit: 8522f9a).
Build URL: https://travis-ci.com/diffblue/test-gen/builds/78357054
Status will be re-evaluated on next push.
Please contact @peterschrammel, @thk123, or @allredj for support.

Common spurious failures:

  • the cbmc commit has disappeared in the mean time (e.g. in a force-push)
  • the author is not in the list of contributors (e.g. first-time contributors).

Copy link
Contributor

@allredj allredj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Passed Diffblue compatibility checks (cbmc commit: 1b7cfe9).
Build URL: https://travis-ci.com/diffblue/test-gen/builds/78357206

@owen-mc-diffblue
Copy link
Contributor Author

I've rebased and the TG bump is passing.

// Return if the rhs of the assignment isn't a side effect expression
const auto &assign=to_code_assign(target->code);
if(assign.rhs().id()!=ID_side_effect)
// We only expect to find nondets in the rhs of an assignments or in return
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This comment misleads me into believing you're doing something specific to these instructions types.

{
return next_instr;
}
const auto &nondet_expr = to_side_effect_expr_nondet(op);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use the generic try_cast thing above instead of can_cast/to_expr?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's a little more complicated because side_effect_expr_nondet is distinguished by its id and its tag. At the least I'd have to create a new specialisation.

{
return next_instr;
}
// If the lhs type doesn't have a subtype then I guess it's primitive and
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lhs -> expression

instruction_iterator!=end;)
bool changed = false;
auto instruction_iterator = goto_program.instructions.begin();
auto end = goto_program.instructions.end();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These hand-optimisations can actually make things worse. Leave end in the comparison below. There are Stack Overflow articles about this.

source_loc,
ID_java,
symbol_table);
aux_symbol.is_static_lifetime = false;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this not the default? (just asking the question - I don't know)

const goto_programt::targett target2 = std::next(target);

code_blockt gen_nondet_init_code;
const bool skip_classid = true;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why this change?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Previously we were just passing true as an argument. I made the change to make it clearer what the argument represents.

Copy link
Contributor

@NathanJPhillips NathanJPhillips Jul 13, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yuk! I'd strongly advise against adopting this style unless your caller needs a reference (which is what I assumed at first). Use a comment after the argument instead.

: inst.is_return() ? to_code_return(inst.code).return_value()
: inst.code);

if(target_expression.id() == ID_side_effect)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Candidate for try_cast thing again?

THEN(
"Code should work when remove returns is called before "
"replace_java_nondet.")
"Replace and convert nondet should work after remove returns has been "
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Bit concerned that we never test that validate_nondets_converted fails if we don't call convert_nondet at all. That would require restructuring it to return nondet_exists though.

Copy link
Contributor

@thk123 thk123 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yup looks much better - would still prefer the "filter" part of the loop to be pulled out. I also think breaking up the code gen and splicing (which though 1000x simpler is still a little fiddly). By which I mean bundle up the gen_nondet_init and goto_convert calls to return a goto_programt so that all you do in your loop body looks like:

if(!is_nondet_pointer)
  continue;

goto_programt replacement_code = gen_replacement...?
goto_program.insert_before_swap(target, declaration)
goto_program.destructive_insert(target, replacement_code);
goto_program.insert_after(target, dead)

I don't think I've got that quite right but that's the structure I'd like. Not really blocking at this stage, but still personally find the code a little fiddly to wrap my head round.

{
return next_instr;
}
if(!can_cast_expr<side_effect_expr_nondett>(op))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thought we'd agreed to try to reduce length of loop by pulling out a simple function is_nondet_pointer?

dead_aux_symbol->code = code_deadt(aux_symbol_expr);
dead_aux_symbol->source_location = source_loc;

// Insert an instruction declaring `aux_symbol` before `target`, being
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: add the decl before adding the dead, (don't think it makes any different since target remains unmoved after each op?)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nope. After goto_program.insert_before_swap(target, decl_aux_symbol);, target points to the decl_aux_symbol and std::next(target) points to what target used to point to. This is because what we actually do is put decl_aux_symbol in a new instruction after target and then swap the contents of target and std::next(target).

However, I think I can make it a bit simpler.

goto_program.insert_before_swap(target, decl_aux_symbol);

// Keep track of the new location of the original instruction.
const goto_programt::targett target2 = std::next(target);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can we come up with a better name original_instruction?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

instruction containing op?

REQUIRE_FALSE(nondet_exists);
REQUIRE(allocate_exists);
}
#include<iostream>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Debug includes? In any case should be at the top of the file (but probably deleted)

goto_programt::instructiont decl_aux_symbol(DECL);
decl_aux_symbol.code = code_declt(aux_symbol_expr);
decl_aux_symbol.source_location = source_loc;
goto_program.insert_before_swap(target, decl_aux_symbol);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My reading of the docs for this method is it destroys the original instruction, which I think is what you want, but on the next line you say std::next(target) is the location of the original instruction, but I think this is not right?

Copy link
Contributor Author

@owen-mc-diffblue owen-mc-diffblue Jul 12, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The docs aren't very clear - they mean that it destroys the second argument passed to it, which is fine as we never use decl_aux_symbol again.


// Insert an instruction declaring `aux_symbol` before `target`, being
// careful to preserve jumps to `target`
goto_programt::instructiont decl_aux_symbol(DECL);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Use make_decl(code_declt{aux_symbol_expr}) - not idea as you still need to set the source location manually, but I really dislike the pattern of create then mutate


// It is simplest to insert the final instruction first, before everything
// gets moved around
goto_programt::targett dead_aux_symbol = goto_program.insert_after(target);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not really an improvement in this case, but might make it easier to improve in future, if you first build the instructiont (using make_dead followed by a bunch of mutating statements. and then use goto_program.insert_after urgh you can't construct the instruction then insert_after feel free to ignore as out of scope, but the ability to insert_after(target, instruction) might be a nice way to reduce the size of this

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Well, you could create make_dead and call insert_after(target).swap(make_dead). However, the way I've done it seems to be consistent with the way it's done everywhere else insert_after is used.

Copy link
Contributor

@allredj allredj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR failed Diffblue compatibility checks (cbmc commit: cc46781).
Build URL: https://travis-ci.com/diffblue/test-gen/builds/78809166
Status will be re-evaluated on next push.
Please contact @peterschrammel, @thk123, or @allredj for support.

Common spurious failures:

  • the cbmc commit has disappeared in the mean time (e.g. in a force-push)
  • the author is not in the list of contributors (e.g. first-time contributors).

@owen-mc-diffblue owen-mc-diffblue force-pushed the owen-jones-diffblue/fix/convert-nondet branch 2 times, most recently from 623410e to 3d39655 Compare July 12, 2018 12:28
Copy link
Contributor

@allredj allredj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR failed Diffblue compatibility checks (cbmc commit: 623410e).
Build URL: https://travis-ci.com/diffblue/test-gen/builds/78815298
Status will be re-evaluated on next push.
Please contact @peterschrammel, @thk123, or @allredj for support.

Common spurious failures:

  • the cbmc commit has disappeared in the mean time (e.g. in a force-push)
  • the author is not in the list of contributors (e.g. first-time contributors).

Copy link
Contributor

@allredj allredj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR failed Diffblue compatibility checks (cbmc commit: 3d39655).
Build URL: https://travis-ci.com/diffblue/test-gen/builds/78815148
Status will be re-evaluated on next push.
Please contact @peterschrammel, @thk123, or @allredj for support.

Common spurious failures:

  • the cbmc commit has disappeared in the mean time (e.g. in a force-push)
  • the author is not in the list of contributors (e.g. first-time contributors).

Copy link
Contributor

@thk123 thk123 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for all your improvements on this 💯

@@ -22,90 +22,140 @@ Author: Reuben Thomas, [email protected]

#include "java_object_factory.h" // gen_nondet_init

/// Return whether `expr` is a nondet pointer that we should convert
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Define here what nondet pointers should be converted (and why?).

/// Returns true if `expr` is a nondet pointer that isn't a function pointer or a void* pointer
/// as these can be meaningfully non-det initalized. 


/// Populate `instructions` with goto instructions to nondet init
/// `aux_symbol_expr`
static void get_gen_nondet_init_instructions(
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nit: Prefer returning the instructions rather than passing in by reference

@owen-mc-diffblue owen-mc-diffblue force-pushed the owen-jones-diffblue/fix/convert-nondet branch from 3d39655 to 6d9e805 Compare July 13, 2018 08:38
@owen-mc-diffblue
Copy link
Contributor Author

@thk123 I've updated those things, squashed all my commits and rebased to the current location of the cbmc pointer in TG. I've updated the TG bump.

Copy link
Contributor

@allredj allredj left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This PR failed Diffblue compatibility checks (cbmc commit: 6d9e805).
Build URL: https://travis-ci.com/diffblue/test-gen/builds/78911263
Status will be re-evaluated on next push.
Please contact @peterschrammel, @thk123, or @allredj for support.

Common spurious failures:

  • the cbmc commit has disappeared in the mean time (e.g. in a force-push)
  • the author is not in the list of contributors (e.g. first-time contributors).

instruction_iterator!=end;)
bool changed = false;
auto instruction_iterator = goto_program.instructions.begin();

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Random blank line!

const goto_programt::targett target2 = std::next(target);

code_blockt gen_nondet_init_code;
const bool skip_classid = true;
Copy link
Contributor

@NathanJPhillips NathanJPhillips Jul 13, 2018

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yuk! I'd strongly advise against adopting this style unless your caller needs a reference (which is what I assumed at first). Use a comment after the argument instead.

// and we do not want to convert it. If the type is a ptr-to-void or a
// function pointer then we also do not want to convert it.
const typet &type = expr.type();
const bool non_void_non_function_pointer = type.id() == ID_pointer &&
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you want to break this into a separate test then it would be more conventional to do an if(!cond1) return false; return cond2;

const bool non_void_non_function_pointer = type.id() == ID_pointer &&
type.subtype().id() != ID_empty &&
type.subtype().id() != ID_code;
return can_cast_expr<side_effect_expr_nondett>(expr) &&
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Unless you take the advice above then reversing the order of these would be more efficient as && short-circuits.

gen_nondet_init_code,
symbol_table,
source_loc,
skip_classid,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As suggested in comment above true, // Skip class ID

exprt target_expression =
(inst.is_assign()
? to_code_assign(inst.code).rhs()
: inst.is_return() ? to_code_return(inst.code).return_value()
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sometimes I hate clang format. But well done using it.

@owen-mc-diffblue owen-mc-diffblue merged commit 45eae64 into diffblue:develop Jul 13, 2018
@owen-mc-diffblue owen-mc-diffblue deleted the owen-jones-diffblue/fix/convert-nondet branch July 13, 2018 10:55
owen-mc-diffblue pushed a commit to owen-mc-diffblue/cbmc that referenced this pull request Jul 13, 2018
smowton added a commit that referenced this pull request Jul 13, 2018
…/make-linter-happier

Fix whitespace errors and a typo from #2505
NathanJPhillips pushed a commit to NathanJPhillips/cbmc that referenced this pull request Aug 22, 2018
54f3731 Merge pull request diffblue#2610 from smowton/smowton/fix/ssa-trace-unreachable-values
6397f62 Merge pull request diffblue#2626 from qaphla/local_bitvector_analysis_fix
0c0e288 Merge pull request diffblue#2423 from tautschnig/vs-negation
e90b61b Transform float_utils unit test to use CATCH and enable it
8b2bd7b Convert to signed type to make negation meaningful
7823d9c Merge pull request diffblue#2606 from diffblue/ms_cl_options
0f60b26 Merge pull request diffblue#2627 from diffblue/cleanup-ansi-c-scanner
f33459f Merge pull request diffblue#2529 from tautschnig/debian1
1927fb2 remove bitvector and bitvector_u rules
1e07546 Fixed secondary issues arising from local_bitvector_analysis fix.
131e525 Fixed a bug in local_bitvector_analysis wherein an expression's ID was used in place of the expression's type's ID.
501546a SSA trace: don't concretise steps that will subsequently be dropped
709b45f Merge pull request diffblue#2591 from allredj/log-suffix-in-testpl
f3630f0 Merge pull request diffblue#2612 from svorenova/multidim_arrays_tg3821_util
c010edb Merge pull request diffblue#2623 from diffblue/cbmc-empty-message
d5adef5 Merge pull request diffblue#2624 from diffblue/va_arg_mode
3e3303d symbols for va_args need a mode
398dd39 cbmc: avoid an empty message during result reporting
8bca5cd Merge pull request diffblue#2585 from smowton/smowton/admin/java-clean-deref-tests
a0e339d Disable broken string test
d0cf433 Strengthen local_safe_pointers to handle common Java operations
e7b1a8a Merge pull request diffblue#2616 from smowton/smowton/admin/ai-unit-test
738ecad Merge pull request diffblue#2621 from diffblue/amazon-linux-instructions
4156283 Add test for ait framework
08bd1a8 Merge pull request diffblue#2596 from martin-cs/feature/context-sensitive-ait-merge-1
c572866 Use can_cast_type instead of raw type id check
a1ab7a6 Improve documentation for java array types
745670b instructions for Amazon Linux
299417b Merge pull request diffblue#2614 from chrisr-diffblue/is_zero_bitfield_support
0c8eff6 Merge pull request diffblue#2598 from mmuesly/feature_posix_memalign
fad7735 Merge pull request diffblue#2613 from NathanJPhillips/cleanup/irep_ids-def-not-h
e34fc57 Merge pull request diffblue#2600 from peterschrammel/doxygen-graphviz
54cc818 clang-format fixups
9986ea1 Make exprt::is_zero() support bitfields
dbf4384 Merge pull request diffblue#2605 from NathanJPhillips/feature/cast-for-code_typet
7798aaa Updated comment for the fact that IDs are defined in def files now
b72b968 Remove unused function
e66f76f Add a check functions for (multi-dimensional) array types
f4f4190 Added can_cast_type implementation for code_typet
f6c34f2 Merge pull request diffblue#2603 from smowton/smowton/fix/stub-string-lengths
9c9c375 two further Visual Studio CL options
05bebb7 Merge pull request diffblue#2595 from thk123/doc/use-can-cast
9a75c65 Merge pull request diffblue#2597 from allredj/update-jbmc-gitignore
c98688b Fix stub string lengths
819560f Merge pull request diffblue#2601 from owen-jones-diffblue/owen-jones-diffblue/update-codeowners-3
39323e0 Remove code owners from low-risk files
8f8052a Make directories match from root
1a36a21 Install graphviz for doxygen job on travis
3e0b2a5 Doxygen the comments describing the abstract domain interface.
4f8d445 Upgrade from a warning in the comments to a protected constructor.
2b9c880 Clang format the domain files.
028d8b6 Add a method to convert the domain to a predicate to the basic domain API.
918e947 Expand the comments describing the base domain interface.
f60027b Move the interface of domains to it's own header file.
15aa61f Adding support for posix_memalign from the stdlib in c.
ba01589 Add guidelines for using irepts in the code base
37fc4e6 Update jbmc gitignore
ec79bdd Merge pull request diffblue#2385 from polgreen/aggressive_slicer_v2
78b7119 Merge pull request diffblue#2491 from diffblue/std_code_constructors
a99c4ff Merge pull request diffblue#2497 from diffblue/simplify_byte_extract_fix
8c7dc17 make comment // not /*
ea085d3 move aggressive slicer options into macro
aa4848d Apply clang format to includes in goto_instrument_parse_options
4ac9199 Aggressive slicer
2954205 aggressive slicer regression tests
de7e1af call graph helper functions
357358d remove mistake in grapht
c7457fb Merge pull request diffblue#2543 from tautschnig/vs-unsigned-byte-swap
0e72433 Merge pull request diffblue#2516 from polgreen/cbmc_trace_options
2e90035 Merge pull request diffblue#2590 from peterschrammel/use-proper-irep-ids
a354235 Merge pull request diffblue#2592 from NathanJPhillips/cleanup/fix-typo-in-comment
59b1a9e Fix a small typo in a comment that I happened to come across
282468c Print log suffix when running tests
c98c9df Merge branch 'develop' into cbmc_trace_options
12e970b Use irep ids for #comments
569c854 Merge pull request diffblue#2489 from diffblue/fix-empty-indexset
993735b Merge pull request diffblue#2507 from mgudemann/bugfix/java/keep-typecasts-on-stack
a63212e Add regression test for stack variables with typecasts
6f63050 Simplify stack element replacement loop
731c69e Keep expressions unchanged when adding temporary variables
d10e44d Merge pull request diffblue#2586 from hannes-steffenhagen-diffblue/fix-json_unit_test
8d6bfdd Merge pull request diffblue#2575 from nmanthey/upstream-ls_parse
2d14b22 Merge pull request diffblue#2545 from tautschnig/vs-unnecessary
ff0414e Merge pull request diffblue#2546 from tautschnig/vs-wmm-int
ed48122 Make json parser unit tests independent of working directory
14dc11e Merge pull request diffblue#2495 from diffblue/aws-codebuild-windows-jbmc-tests
cefdc21 Merge pull request diffblue#2579 from peterschrammel/clean-up-java-options
64a63a0 Merge pull request diffblue#2584 from diffblue/fp-constant-folding
44cfeb9 Clean up redundant specification of CBMC option
38fe61e Trim JBMC help text width to 80 chars
080fc91 Break overlong lines in help text
ebae090 Deactivate smt1 option in JBMC
04fcc5b Check that string options are used with strings turned on
0520732 Use default options in JBMC
e4cfb04 Remove built-in-assertions option from JBMC
0d924ce Remove error-label option from JBMC
35f69f0 Remove GOTO_CHECK options from JBMC
86d4fec Remove --refine-strings from tests
7ef8a0e Remove obsolete string-max-length option
e5e5e9e remove unneeded NOLINT
9449ac7 Encapsulate constraints for equals
d74672b Use const references in string_constraintt
fdf14f5 Add invariants on the sign of string_constraintt bounds
16052f8 Move string_constraintt constructor to cpp
f01c03c Fix string_constraintt bound values
8edc5ee C front-end: constant folding for floating-point
f795ef9 Remove trailing newlines that trip up regex on Windows
53d24e5 the jbmc tests now work on Windows
f9c5faf adjust_float_expressions can now take a rounding mode argument
6ccce5b Merge pull request diffblue#2521 from svorenova/array_element_type_util
201ba8c Merge pull request diffblue#2581 from romainbrenguier/refactor/to_code
e4b8c44 Clean-up in gen_nondet_instruction_info
bb7ea78 Merge pull request diffblue#2528 from tautschnig/dev-null
f10badb Add functions to retrieve a reference to the java array element type
7f8b2be Merge pull request diffblue#2582 from jeannielynnmoulton/jeannie/parse-bridge-flag-for-thk123
1f62596 Clean-up get_return_lhs
8966f09 Merge pull request diffblue#2560 from tautschnig/force-inline
cb587a9 Adding unit test for checking bridge methods attribute is parsed correctly
efadba2 Read the bride flag for methods
26781a6 Remove unnecessary cast to_code
a18b32d Merge pull request diffblue#2571 from jeannielynnmoulton/jeannie/InnerClassAccessibility
c959c3f Tests get_outer_class with deeply nested classes.
8201c19 Parse and capture outer class for inner classes.
87c2a68 Merge pull request diffblue#2577 from owen-jones-diffblue/owen-jones-diffblue/make-linter-happier
a1b9e07 Fix whitespace errors and a typo from diffblue#2505
45eae64 Merge pull request diffblue#2505 from owen-jones-diffblue/owen-jones-diffblue/fix/convert-nondet
6d9e805 Make convert_java_nondet more general
70887e2 Merge pull request diffblue#2564 from tautschnig/vs-java-parse-tree
6c5ecec Merge pull request diffblue#2570 from johnnonweiler/doc-git-submodule-update
d5ea306 ls_parse: improve debugging by printing a trace
17bc726 ls_parse: Allow handling unknown blocks
aad1692 Add minisat download to jbmc/README.md
f7ddb02 Remove --recursive from git submodule update
206f7fb Include submodule update in jbmc/README.md
d5f3c32 Fix a typo JMBC->JBMC
b5075d7 Document git submodule update in COMPILING.md
9b9aecf Remove unused macro BUFSIZE
0146874 Make all unicode operations use native endianness
8d93087 Move unicode unit test to CATCH and enable it
680227e Explicit unsigned -> uint16_t casts to avoid conversion warnings
ea9dc15 goto-gcc: run original compiler even when output is /dev/null
0a990ef Do not (unnecessarily) require preprocessing for fixed 32/64 bit regression tests
0c15fed Cleanup java_bytecode_parse_treet: all members are public, no virtual tables required
36d13f7 Support Visual Studio's __forceinline
5953f6a goto-instrument/wmm: explicit conversion of bool to 0/1
6dc6ea9 Avoid unncessary signed/unsigned conversion
081f743 use proper constructor for code_assertt
8e44191 use proper constructor for code_expressiont
47f5405 use proper constructor for side_effect_expr_function_callt
bf02ec7 use proper constructor for code_declt
9fa0733 use proper constructor for codet
dbbd568 mark various 'partial constructors' as deprecated, and introduce complete ones
180e066 add option to show code in CBMC trace
4fbc10d Add option to show function calls  and returns in CBMC trace
f532b4b allow unsigned long instead of unsigned in regression test for hex_trace
94cacc6 represent numerical values in CBMC trace in hex
fc4aab3 avoid non-termination of simplify_exprt::simplify_byte_extract when given array_of

git-subtree-dir: cbmc
git-subtree-split: 54f3731
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

5 participants