-
Notifications
You must be signed in to change notification settings - Fork 273
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
JBMC Java Core models library #1735
Conversation
What is a "core model"? The commit message of the second commit has a lot of text, but I'm failing to understand it right at the beginning. |
Core models are java class models that are included in the cbmc executable (ie in the core of the analysis). Currently all of our models exist in the model library. The idea is to make a subset of these available with open source jbmc, packaged directly in the executable |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't claim I need to understand each and every thing, but it really scares me when a commit message sounds innocent (though unclear), but then some core bits of the code are changed as well.
^SIGNAL=0$ | ||
^Symbol\s*\.*\: java\:\:org\.cprover\.CProver\.\<clinit\>\:\(\)V$ | ||
-- | ||
tests that the core models are being loaded by checking if the static initializer for the CProver class was |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is missing a second --
, unless you really want the test to check that that text does not appear in the output.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
src/java_bytecode/Makefile
Outdated
JAR := jar | ||
JARFLAGS := -cf | ||
|
||
.NOTPARALLEL: core-models.jar |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Java classes compile together, meaning two javac calls in this make may trigger the same .java compile for an auxiliary class. This avoids the race condition
@@ -206,6 +207,24 @@ bool java_bytecode_languaget::typecheck( | |||
if(string_refinement_enabled) | |||
string_preprocess.initialize_conversion_table(); | |||
|
|||
// Must load java.lang.Object first to avoid stubbing | |||
// FIXME: its unclear if this ordering has to be done | |||
// here or hard coded inside the classloader. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
File an issue to track this?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@dcattaruzza Unless @tautschnig or @peterschrammel think it's better to move this code to the class loader, I propose to leave this code here and update the comment above to say that "This ordering could alternatively be enforced by moving the code below to the class loader."
@@ -74,38 +83,76 @@ void java_class_loadert::set_java_cp_include_files( | |||
java_cp_include_files=_java_cp_include_files; | |||
} | |||
|
|||
java_bytecode_parse_treet &java_class_loadert::get_parse_tree( | |||
/// Retrieves a class file from a jar and loads it into the tree | |||
bool java_class_loadert::get_class_file( |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why does the class loader need to be rewritten when the commit message says this is about putting stuff in a library file?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
the class loader needs to load from the internal file buffer
src/java_bytecode/jar_file.cpp
Outdated
/// to a jar file. | ||
jar_filet::jar_filet( | ||
java_class_loader_limitt &limit, | ||
const void *pMem, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
no camel case
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, it would be nice to use a parameter name that is actually descriptive.
src/java_bytecode/mz_zip_archive.h
Outdated
/// \param pMem pointer to the memory buffer | ||
/// \param size size of the buffer | ||
/// \throw Throws std::runtime_error if file cannot be opened | ||
explicit mz_zip_archivet(const void *pMem, size_t size); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
remove explicit
src/java_bytecode/mz_zip_archive.cpp
Outdated
@@ -25,6 +25,14 @@ class mz_zip_archive_statet final:public mz_zip_archive | |||
if(MZ_TRUE!=mz_zip_reader_init_file(this, filename.data(), 0)) | |||
throw std::runtime_error("MZT: Could not load a file: "+filename); | |||
} | |||
|
|||
explicit mz_zip_archive_statet(const void *pMem, size_t size): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
remove explicit
src/java_bytecode/mz_zip_archive.cpp
Outdated
mz_zip_archive({ }) | ||
{ | ||
if(MZ_TRUE!=mz_zip_reader_init_mem(this, pMem, size, 0)) | ||
throw std::runtime_error("MZT: Could not load data from memory"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Does the user know what MZT
is?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
MZT is as existing messages in this file.
Do you want these changed?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@dcattaruzza I think it's a good idea to change that message to something more readable, yes. Have a look to the other messages as well.
src/java_bytecode/Makefile
Outdated
java_class_loader.o: java_core_models.inc java_class_loader.cpp | ||
$(CXX) -c $(CP_CXXFLAGS) -o $@ java_class_loader.cpp | ||
|
||
java_core_models.inc: converter core-models.jar |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This doesn't work on Windows.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@dcattaruzza Appveyor is faling, is it due to this? I think it's not. The idea of compiling multiple files into an .inc
file works for the C library, so it should work for the Java class library.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As far as I can tell, Appveyor fails because of shell find -name *.java does not find the java files.
I'm investigating.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Still you should be using $(EXEEXT)
here.
The commits are a bit mixed up, which makes it hard to review. I suggest the following split:
|
@peterschrammel do you mean split the commits or the PR? because I started by doing a smaller PR in the lines of what you're saying and had to include the rest to provide a regression test (the test on the jar buffer is the core models loading) @tautschnig request. |
Yes, split the commits. I suggest to add the end-to-end regression tests as part of 4 or in a separate commit 5. |
6944d43
to
5f18ddd
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Remarks and proposal for new commit message
src/java_bytecode/mz_zip_archive.cpp
Outdated
mz_zip_archive({ }) | ||
{ | ||
if(MZ_TRUE!=mz_zip_reader_init_mem(this, pMem, size, 0)) | ||
throw std::runtime_error("MZT: Could not load data from memory"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@dcattaruzza I think it's a good idea to change that message to something more readable, yes. Have a look to the other messages as well.
src/java_bytecode/mz_zip_archive.cpp
Outdated
@@ -41,6 +49,9 @@ static_assert(sizeof(mz_uint)<=sizeof(size_t), | |||
mz_zip_archivet::mz_zip_archivet(const std::string &filename): | |||
m_state(new mz_zip_archive_statet(filename)) { } | |||
|
|||
mz_zip_archivet::mz_zip_archivet(const void *pMem, size_t size): |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Lower case
@@ -45,6 +45,7 @@ src/ansi-c/gcc_builtin_headers_tm.inc | |||
src/ansi-c/gcc_builtin_headers_mips.inc | |||
src/ansi-c/gcc_builtin_headers_power.inc | |||
src/ansi-c/gcc_builtin_headers_ubsan.inc | |||
src/java_bytecode/java_core_models.inc |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please rephrase the commit message as follows:
Internalize core models of the Java Class Library
The 'core models' is a set of .class files that model core classes from the Java
Class Library, such as java.lang.Object or java.lang.Thread. A minimum is
necessary for CBMC to understand, e.g., when a new thread is created. These core
classes live in `src/java_bytecode/library`.
This commit adds support to compile and pack the core classes into a single jar
file, core-models.jar, and a converter program that transforms that .jar file
into a C-language array of data that can then be linked into CBMC, thus making
the .jar file be present in the data segment of the CBMC ELF.
Other modifications:
- New option --no-core-models, allowing to disable the loading of the internal
core models
- make and cmake now compile the core models into a single core-models.jar
- Add regression one regression tests ensuring the the core-models.jar is loaded
by default
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
src/java_bytecode/CMakeLists.txt
Outdated
|
||
add_library(java_bytecode ${c_sources} ${sources} ${headers} ) | ||
add_dependencies(java_bytecode core_models_files) | ||
target_sources(java_bytecode PUBLIC ${sources} ${headers}) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@dcattaruzza I remember running twice cmake
and it rebuilding for a second time the .jar file, which it should be constructed only once. Has this been fixed?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Yes
src/java_bytecode/Makefile
Outdated
java_class_loader.o: java_core_models.inc java_class_loader.cpp | ||
$(CXX) -c $(CP_CXXFLAGS) -o $@ java_class_loader.cpp | ||
|
||
java_core_models.inc: converter core-models.jar |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@dcattaruzza Appveyor is faling, is it due to this? I think it's not. The idea of compiling multiple files into an .inc
file works for the C library, so it should work for the Java class library.
@@ -206,6 +207,24 @@ bool java_bytecode_languaget::typecheck( | |||
if(string_refinement_enabled) | |||
string_preprocess.initialize_conversion_table(); | |||
|
|||
// Must load java.lang.Object first to avoid stubbing | |||
// FIXME: its unclear if this ordering has to be done | |||
// here or hard coded inside the classloader. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@dcattaruzza Unless @tautschnig or @peterschrammel think it's better to move this code to the class loader, I propose to leave this code here and update the comment above to say that "This ordering could alternatively be enforced by moving the code below to the class loader."
" --lazy-methods-extra-entry-point METHODNAME\n" \ | ||
" treat METHODNAME as a possible program entry point for\n" \ | ||
" the purpose of lazy method loading\n" \ | ||
" --no-core-models don't load the internally provided core models\n" /* NOLINT(*) */ \ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Better: "don't load internally provided models for core classes in the Java Class Library"
a0c84c3
to
30a9591
Compare
00bd2db
to
8c8a1eb
Compare
604f9f5
to
5fa9967
Compare
@peterschrammel done |
5fa9967
to
a96e5c6
Compare
" --lazy-methods-extra-entry-point METHODNAME\n" \ | ||
" treat METHODNAME as a possible program entry point for\n" \ | ||
" the purpose of lazy method loading\n" \ | ||
" --no-core-models don't load internally provided models for core classes in\n"/* NOLINT(*) */ \ |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
use // clang-format off
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@peterschrammel just to clarify: I should replace the /* NOLINT(*) */ with // clang-format off ? should this be done for all options or just the one added?
LGTM modulo making clang-format happy |
@Degiorgio please check that the corresponding TG pointer bump (1406) is correctly pointing to the tip of this PR |
src/java_bytecode/Makefile
Outdated
@@ -38,8 +38,18 @@ include ../common | |||
|
|||
CLEANFILES = java_bytecode$(LIBEXT) | |||
|
|||
clean : clean_library |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Is there a whitespace after clean
? I'm not sure what make's semantics of this are, but I'd rather avoid it. The same seems the be true of the clean_library
goal.
src/java_bytecode/Makefile
Outdated
|
||
.PHONY: clean_library | ||
clean_library : | ||
$(MAKE) clean -C library |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please move all of the above changes below the declaration of the all
goal so that all
remains the default goal.
/// or may not exist since the actual data bis retrieved from memory. | ||
jar_filet &jar_pool(java_class_loader_limitt &limit, | ||
const std::string &buffer_name, | ||
const void *pMem, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No camelcase, please.
src/java_bytecode/library/Makefile
Outdated
$(JAVAC) $(JFLAGS) $(all_javas) | ||
.SUFFIXES: .java .class | ||
|
||
$(BINARY_DIR)/%.class : $(SOURCE_DIR)/%.java $(BINARY_DIR) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No space before :
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
src/java_bytecode/library/Makefile
Outdated
clean_ : | ||
$(RM) -Rf $(BINARY_DIR) | ||
|
||
all: java_core_models.inc |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please make the all
goal the first one in this file to make it the default.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
src/java_bytecode/library/Makefile
Outdated
all: java_core_models.inc | ||
|
||
converter$(EXEEXT): converter.cpp | ||
$(CXX) $(CP_CXXFLAGS) -o $@ $< |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please use $(LINKNATIVE)
instead of $(CXX) ....
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
src/java_bytecode/library/Makefile
Outdated
|
||
java_core_models.inc: converter$(EXEEXT) core-models.jar | ||
./converter$(EXEEXT) JAVA_CORE_MODELS core-models.jar > $@ | ||
############################################################################### |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I don't think this line is of much value. In other Makefiles, it provides some separation of somewhat "common" rules from very local ones, but using it as the very last line seems pointless.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
|
||
if(argc<2 || strlen(argv[1])==0) | ||
{ | ||
std::cout << "Usage: converter VARNAME\n"; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It seems there can also be optional additional arguments? Please document them.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
} | ||
varname=argv[1]; | ||
|
||
printf("// File automatically generated by " __FILE__ "\n\n"); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Use std::cout
consistently, no need for printf
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
going to use printf consistently instead as it is a simpler change. For compatibility reasons (printing size_t using printf is problematic in c++98) the last one uses std::cout.
|
||
printf("// File automatically generated by " __FILE__ "\n\n"); | ||
|
||
size=0; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
As this is C++ code, please move the declaration to the point of definition, and please make this a std::size_t
to avoid overflow.
std::cout << "\n"; | ||
return 1; | ||
} | ||
varname=argv[1]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
C++: declare at the point of definition (and you might consider using std::string
).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
done
std::ifstream src((argc>2) ? argv[2] : "core-models.jar", | ||
std::ios_base::binary); | ||
std::istream &stream=(argc>2) ? src : std::cin; | ||
if(!stream.eof()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
You might want to check .good
2097e09
to
99804de
Compare
@tautschnig addressed issues you raised, can you take another look please? |
a24cedd
to
beea2e9
Compare
@tautschnig All the issues you raised seem to have been addressed, please have a look, we want to merge in a couple of hours, it's blocking work on another PR |
This allows the jar_file class to load from a buffer (c array) as opposed to a file
The 'core models' is a set of .class files that model core classes from the Java Class Library, such as java.lang.Object or java.lang.Thread. A minimum is necessary for CBMC to understand, e.g., when a new thread is created. These core classes live in `src/java_bytecode/library`. This commit adds support to compile and pack the core classes into a single jar file, core-models.jar, and a converter program that transforms that .jar file into a C-language array of data that can then be linked into CBMC, thus making the .jar file be present in the data segment of the CBMC ELF. Other modifications: - New option --no-core-models, allowing to disable the loading of the internal core models - make and cmake now compile the core models into a single core-models.jar - Add regression one regression tests ensuring the the core-models.jar is loaded by default
Including .Cpp file in a regression-test was causing linker issues with CMake, specifically ODR (One Definition Rule) violations. Commit addresses this by modifying the test to include the header file instead.
beea2e9
to
a8e659c
Compare
The TG pointer update is passing (1405) |
@tautschnig After verbally discussing with Peter we decide to dismiss your review from 10 days ago, subsumed by a more recent one also by you 3 days ago, as all of the changes have been implemented and there are already 2 approvals. |
All changes implemented; see public comment
My apologies for having huge latency on my part, thanks a lot for taking the appropriate action! |
@tautschnig Many thanks to you for the suggestions for improvement that you offered! |
f7602af Merge commit 'bb88574aaa4043f0ebf0ad6881ccaaeb1f0413ff' into merge-develop-20180327 906aeb3 Merge pull request diffblue#349 from diffblue/owen-jones-diffblue/fix-compilation-for-release 3d8423c Merge pull request diffblue#350 from diffblue/owen-jones-diffblue/skip-duplicate-callsites-in-lazy-methods 73fb488 bugfix from upstream repo for generic crash fd76555 Speed up resolution of virtual callsites in lazy loading 3fd28f3 Replace assert(X) by UNREACHABLE/INVARIANT(X) 557158e Merge pull request diffblue#334 from diffblue/pull-support-20180216 1e48132 Merge from master, 20180216 ad7b28e Updates requsted in the PR: mostly rename 'size -> length'. e3fcb9b Introducing MAX_FILE_NAME_SIZE constant. bb88574 Merge pull request diffblue#1806 from thk123/refactor/address-review-comments-from-1796 db9c214 Merge pull request diffblue#1850 from tautschnig/include-cleanup 78fbf08 Merge pull request diffblue#1844 from smowton/smowton/feature/prepare-symex-for-lazy-loading 4098ed5 Merge pull request diffblue#1849 from smowton/smowton/cleanup/java-main-function-types 06f3e83 Use C++ headers instead of their C variants e918a91 Goto-symex: add support for general function accessor 9e31303 Symex: switch to incrementally populating address-taken locals ac5af68 Address-taken locals analysis: support incremental analysis fe775f3 Merge pull request diffblue#1843 from peterschrammel/instructions-function a6fd729 Cleanup tests with anomalous main functions 5df3fca Clean up get_function_id hacks 552b100 Set function member of each goto instruction in goto program passes 38e6e4a Merge pull request diffblue#1813 from smowton/smowton/fix/cleanup-unused-clinits 278e4e6 Merge pull request diffblue#1826 from smowton/smowton/fix/java-inherited-static-fields a2ebb33 Merge pull request diffblue#1713 from karkhaz/kk-debug-timestamps 7b5dd17 Merge pull request diffblue#1834 from diffblue/library-preconditions 1da5be1 Add tests for inherited static fields 19d622b Add tests to verify that synthetic method removal is performed adc9fd4 Java frontend: clean up unused clinit symbols f15c312 Exclude j.l.O from possible static field hosts. afa443c US spelling of initialize d4d4a9a Tolerate stub static fields defined on non-stub types 873e1f6 Guess public access for stub globals d6783d8 Java method converter: look for inherited static fields 32cc538 Insert stub static globals onto any incomplete ancestor class b2d3d61 Search static fields inherited from interfaces 045ac05 Create stub globals on the first parent incomplete class 5b3cde5 Use a common instance of class_hierarchyt in get_inherited_component e73e756 Create stub globals: check for inherited globals bea6371 Annotate static fields with accessibility 168c2a8 Generalise get_inherited_method f3160e1 resolve_concrete_function_callt -> resolve_inherited_componentt 82549de Emit timestamps on each line of output 3f6965b Replace util/timer* with std::chrono ef08ae2 Merge pull request diffblue#1820 from smowton/smowton/fix/remove-string-solver-iteration-limit 0f20482 Merge pull request diffblue#1836 from karkhaz/kk-remove-unused-lambda-capture e8105bd Merge pull request diffblue#1833 from diffblue/symex_class_cleanup f6f45fc turn some assertions in the stdlib.h models into preconditions 9ea0cc6 pre-conditions for strings fbd54df Remove unused lambda capture 9620802 Merge pull request diffblue#1815 from smowton/smowton/feature/replace-clinit-unwinder 9b59631 Merge pull request diffblue#1828 from smowton/smowton/cleanup/remove-recreate-initialize 1ac9abe Remove string refinement iteration limit c94548c preconditions for delete and delete[] 9ba7fe2 cleanup of some noise (mostly obvious declarators) in the goto_symext class bb64ea6 clean up symex_assign vs. symex_assign_rec 932a38f Merge pull request diffblue#1827 from karkhaz/kk-symex-operator-tidy 968d97e Remove __CPROVER_initialize recreation 06a220a Reimplement remove-static-init-loops to avoid need to inspect GOTO program 2bb98d9 Merge pull request diffblue#1819 from romainbrenguier/refactor/coverage-instrumentation 6492b3a Rearrange cover_basic_blocks header a9549e7 Define constants as const fa35ccd Pull continuation_of_block function out 560d712 Declare constants as const 35422f3 Make update_covered_lines a static function b4cadf8 [path explore 1/8] Tidy up symext top-level funs 0f3ae1a Make representative_inst an optional dc696a4 Make format_number_range function instead of class 678218a Merge pull request diffblue#1825 from thk123/refactor/corrected-path-of-language-file ba76a8f Merge pull request diffblue#1751 from tautschnig/fix-1748 b665269 Correcting path to a file d0889a8 Merge pull request diffblue#1822 from diffblue/legacy-language 441f706 Merge pull request diffblue#1823 from diffblue/cleanup 11714b2 use constant_exprt version of to_integer 733f3b8 remove old-style constructor for member_exprt 63f09ac remove unused function make_next_state 77c8b9c remove translation for certain boolean program constructs 1bac484 cleanout decision_proceduret::in_core d8967f5 moving language.h and language_file.h to langapi folder f9b9599 Merge pull request diffblue#1761 from diffblue/function_typet dd040e5 Added function_typet. bcd88a0 Merge pull request diffblue#1821 from smowton/smowton/feature/test-pl-tags 45f0939 test.pl: add support for tagging test-cases 40b8c03 Updates requested in PR - mainly rename of functions. 7f868e2 Reused private code in 'remove_virtual_functions.cpp' by making it public. ae6775a Merge pull request diffblue#1790 from martin-cs/fix/correct-domain-interface d7bb937 Catch the case when a GOTO instruction is effectively a SKIP. b2fba97 Correct domain transformers so that they meet the preconditions. d447c26 Document the invariants on iterators arguments to transform and merge. e3db794 Whitespace changes to keep clang-format happy. 1990994 Revert "Add edge type parameter to ai transform method" 3ca91bc Revert "Fix iterator comparison bug in reaching_definitions.cpp" ac036fd Revert "Fix iterator equality check bug in dependence_graph.cpp" 86cadcd Revert "Fix iterator equality check bug in custom_bitvector_analysis.cpp" db925de Revert "Fix iterator equality check bug in constant_propagator.cpp" 2c69364 Merge pull request diffblue#1811 from cesaro/iterator-fix 807268e Fixes the symbol_base_tablet iterator 0df054c Merge pull request diffblue#1781 from smowton/smowton/feature/java-create-stub-globals-earlier e163ab6 Java frontend: create synthetic static initialisers for stub globals fbcb423 Merge pull request diffblue#1802 from NathanJPhillips/feature/symbol_iterator e106cf8 Merge pull request diffblue#1793 from smowton/smowton/cleanup/remove-java-new-lowering-pass 52dfc36 Merge pull request diffblue#1731 from diffblue/bugfix/all_resolved_calls f123ae9 Adding comment referencing where the invariant comes from f7c89e1 Add iterator for symbol_table_baset 150f826 Merge pull request diffblue#1801 from hannes-steffenhagen-diffblue/add-idea-gitignore 745afbc Merge pull request diffblue#1796 from thk123/refactor/bytecode-parsing-tidy 6362295 Add .idea (CLion) directory to .gitignore 31da890 Revert "Do lowering of java_new as a function-level pass" 6f6fda7 Merge pull request diffblue#1794 from smowton/smowton/fix/goto-diff-test-escapes 4a538d2 Adding comments on the non-standard patternt 9bfe177 Adding an early guard for correctly parsed exception table 6fe1808 Improved error reporting on invalid constant pool index 93dab4c Escape curly braces in regexes 814cfcc Adapt failing unit test for value set analysis 3ff90bc Add unit test e67a96e Add regression test 3df5348 Adapt regression tests for virtual functions. 09efc90 Re-Resolve function calls if only java.lang.Object was found. a619e48 Merge pull request diffblue#1763 from jeannielynnmoulton/base_class_info_tg1287 0b8dd57 Merge pull request diffblue#1785 from smowton/smowton/fix/core-models-cmake-script 50dcec8 Adding unit tests for extracting generic bases' info 54df3a1 Correcting generic parameters in bases for implicitly generic classes 6d691d7 Parsing generic bases' information into the class symbol 7d041f0 Defining a new type for generic bases f10eb71 Fix Java core-models build script 8d66028 Merge pull request diffblue#1774 from smowton/smowton/feature/java-create-clinit-state-earlier 679d9b8 Java frontend: create static initialiser globals ahead of time 4a93a29 Merge pull request diffblue#1788 from smowton/smowton/fix/java_tcmp_nan 6ad8ffd Fix Java ternary-compare against NaN 1e0ac30 Turn get_may, set_may, etc into irep_ids b0cb1ee Merge pull request diffblue#1766 from smowton/smowton/feature/java-frontend-create-literal-globals-early a2e3af5 Merge pull request diffblue#1744 from smowton/smowton/feature/instrument_cover_per_function 22ae7aa Merge pull request diffblue#1637 from tautschnig/bswap a1a972f Merge pull request diffblue#1776 from smowton/smowton/feature/class-hierarchy-grapht ef3c598 Merge pull request diffblue#1775 from diffblue/refactor/set_classpath 45dd840 Merge pull request diffblue#1728 from romainbrenguier/refactor/split-axiom-vectors 8a27950 Java frontend: create String an Class literals earlier d95cb12 Move string literal initialisation into separate file 515ebdd CI lazy methods: scan global initialisers for global references cab7b52 C front-end: fix promotion order for types ranking lower than int c450328 Support for --16 on Visual Studio, no _WIN64 in 32-bit mode b2c4188 Do not use non-trivial system headers with --32 80b972b Use split_string in set_classpath fdb2ebc Merge pull request diffblue#1773 from smowton/smowton/feature/string-solver-ensure-class-graph-consistency a6eed7c Add class-hierarchy variant based on grapht 311af6d Coverage: fully support instrumenting one function at a time ceafd85 Java string solver: ensure base types are loaded 1e17db6 Merge pull request diffblue#1735 from cesaro/core-models 6844760 Merge pull request diffblue#1769 from smowton/smowton/fix/nondet-initialize-after-initialize a8e659c Fixed CMake linker ODR violations caused by a regression-test f66288b Internalize core models of the Java Class Library 34216f5 Refactor jar loading ed008f9 Add constructors for having memory-loaded jar files This allows the jar_file class to load from a buffer (c array) as opposed to a file 86a34c9 Merge pull request diffblue#1765 from smowton/smowton/fix/ci-lazy-methods-array-element-types 1e11f6d Add test for multiple array types in single method 5009cbb CI lazy methods: re-explore array types with different element types 857fcf9 Cleanup unused fields in string refinement 51d86f5 Adapt unit tests for splitted axiom vectors 1843e44 Split string generator axioms into separate vectors 5669d9b Java: run nondet-initialize method *after* initialization 0b5a5c3 Rename test case 3440018 Provide function name in goto_model_functiont f17e2c8 Merge pull request diffblue#1741 from smowton/smowton/feature/add_failed_symbols_per_function f65f0fd Merge pull request diffblue#1764 from smowton/smowton/feature/java-infer-opaque-type-fields-earlier dbc00a7 Add doxygen to add-failed-symbols 3788467 JBMC: add failed symbols on a per-function basis e934867 Provide a journalling symbol table to process-goto-function e86e2a0 Java: infer opaque type fields before method conversion f0f50e3 Journalling symbol table: enable nesting 58d5980 Merge pull request diffblue#1740 from smowton/smowton/feature/adjust_float_expressions_per_function c91ff69 JBMC: adjust float expressions per function eed983a JBMC: add property checks on a per-function basis db3bc99 JBMC: run convert-nondet on a per-function basis 99ea8fe JBMC: run replace-Java-nondet on function-by-function basis bfd4f50 Merge pull request diffblue#1730 from smowton/smowton/feature/remove_returns_per_function 96569c3 JBMC: remove return values on a per-function basis a7595c1 Remove returns: support running per-function fd6e195 Merge pull request diffblue#1718 from cesaro/concurrency-team-small-fixes e6fe617 Merge pull request diffblue#1705 from jgwilson42/goto-diff-tests 22afc5c Fixes wrong invocation order for static initializers 5c3997d Refectors how CBMC interprets a codet thread-block 001c1a2 ireps of type "ID_atomic_begin" and "ID_atomic_end" will now be properly displayed when the "show-symbol-table" flag is specified. d978ef9 Folder build/ ignored. bc145fd Merge pull request diffblue#1756 from romainbrenguier/tests/index-of-corrections#TG-2246 47b4ee9 Merge pull request diffblue#1725 from cesaro/exception-handlig-fixes d397d6a Merge pull request diffblue#1726 from diffblue/multi_ary_expr2c bd95317 Merge pull request diffblue#1753 from diffblue/xor_exprt 1d4af6d Merge pull request diffblue#1747 from NathanJPhillips/feature/upstream-cleanup 9c7debb Merge pull request diffblue#1750 from pkesseli/feature/sat-interrupt f11c995 Merge pull request diffblue#1749 from pkesseli/ci/remove-unapproved 981c8e0 Merge pull request diffblue#1743 from tautschnig/dump-c-fix bcb076b Correct tests for String.indexOf ef5c6f0 Merge pull request diffblue#1742 from owen-jones-diffblue/owen-jones-diffblue/small-shared-ptr 6c9f05e Fixes to exception handling behaviour 80dd48a added multi-ary xor_exprt 703e4a3 Remove unapproved C++11 header warning. bf7ed1a Merge pull request diffblue#313 from diffblue/owen-jones-diffblue/add-structured-lhs-to-value-set cc9398d Expose MiniSAT's `interrupt()` 8360233 Merge pull request diffblue#1646 from peterschrammel/list-goto-functions e4a2763 Tests for scope changes for variables and functions 8ee1956 goto-diff tests for package name changes ce3a5e9 Basic tests for java goto-diff 3bf9987 Compare access qualifiers in goto-diff f71cc7f Attach class name to method symbol 1f06d35 Merge pull request diffblue#312 from diffblue/pull-support-20180112 fda9daa Cleanup of create-and-swap to emplace e42e97a Merge commit '23666e3af35673c734c9816ffc131b6b9a379e86' into pull-support-20180112 53f1a41 Populate structured_lhs in all `entryt`s d7121f2 dump-c: fix support of use-system-headers eb5ec24 Merge pull request diffblue#1736 from hannes-steffenhagen-diffblue/develop_fix-bitfield-pretty-printing 7a0de46 Add comment suggested by @owen-jones-diffblue b741d4b Use small intrusive pointer in irep 434cc99 Merge pull request diffblue#1732 from peterschrammel/catch-sat-memout 8ae53bb Merge pull request diffblue#1733 from peterschrammel/mem-limit 574101c Add `structured_lhs` field to entryt 4f1a67a Uses alternatives to get_string in type2name when possible b46149d Merge pull request diffblue#1719 from smowton/smowton/cleanup/remove_exceptions_single_global 82a7ec6 Adds regression test for bitfield naming bug 651d8d1 Fixes use of wrong identifier when pretty printing bitfield types 638937a Merge pull request diffblue#1709 from romainbrenguier/doc/string-solver-intro 1d1be4c Move non-string-specific part of doc to solvers 549eb57 Delete trailing whitespaces db3e044 Add introduction to string solver documentation 74be7fb Merge pull request diffblue#1729 from romainbrenguier/refactor/unused-nonempty-option d101b22 Set memory limit utility ef45a1d Replace assertions by invariants 84e04a7 Catch Glucose::OutOfMemoryException 89fc48d Replace assertions by invariants 5e85701 Catch Minisat::OutOfMemoryException b8cee29 Enable list-goto-functions in clobber d902ec8 Replace cout by message stream in show-goto-functions d970673 Move show-loops in the right place in goto-diff e1227ef Enable list-goto-functions in goto diff 7e1110c Enable list-goto-functions in goto-instrument 0fb4868 Enable list-goto-functions in goto-analyzer e67abfa Remove exceptions: switch to single inflight exception global 2fabbd4 Enable list-goto-functions in JBMC 9e1705f Enable list-goto-functions in CBMC ebd8248 Add list-goto-functions command line option 2fe43a9 Add parameter to list goto functions without printing bodies 3d492fe Add documentation of return values 5a8eea5 Remove the string-non-empty option 9810f92 Drop string_non_empty field for string refinement fec16d7 expr2c now distinguishes binary and multi-ary expressions d16a918 C library: network byteorder functions 05bc9ed Implement bswap in SAT back-end 4f37035 Introduce bswap_exprt git-subtree-dir: cbmc git-subtree-split: f7602af
We aim at internalizing a portion of the model-library by turning the jar into an include file.
This will enable us to load the corresponding buffer (or any we need henceforth) from an include file in a similar fashion as we load from a jar file.
Currently this only applies to org.cprover.CProver, and later we'll add other java sources.