7. A system comprising: a memory comprising instructions executable by one or more processors; and the one or more processors coupled to the memory and operable to execute the instructions, the one or more processors being operable when executing the instructions to: compile a C++ program having one or more input variables to obtain bytecode of the C++ program; modify a standard C++ library associated with the C++ program to create an optimized C++ library, the optimized C++ library used for symbolic execution and the standard C++ library used for concrete execution, wherein modifying the standard C++ library comprises rewriting one or more classes defined in the standard C++ library to result in fewer execution paths; compile the optimized C++ library to obtain bytecode of the optimized C++ library; symbolically executing the bytecode of the C++ program and the bytecode of the optimized C++ library, comprising: assign a symbolic input to each input variable of the C++ program; determine one or more execution paths in the C++ program; and for each execution path, construct a symbolic expression that if satisfied, causes the C++ program to proceed down the execution path; generate one or more test cases for the C++ program by solving each of the symbolic expressions, the one or more test cases indicating values that satisfy a feasible execution path of the C++ program with respect to the symbolic input; and test the C++ program by compiling the C++ program to obtain machine code and applying the test cases as input to the machine code.
7. A system comprising: a memory comprising instructions executable by one or more processors; and the one or more processors coupled to the memory and operable to execute the instructions, the one or more processors being operable when executing the instructions to: compile a C++ program having one or more input variables to obtain bytecode of the C++ program; modify a standard C++ library associated with the C++ program to create an optimized C++ library, the optimized C++ library used for symbolic execution and the standard C++ library used for concrete execution, wherein modifying the standard C++ library comprises rewriting one or more classes defined in the standard C++ library to result in fewer execution paths; compile the optimized C++ library to obtain bytecode of the optimized C++ library; symbolically executing the bytecode of the C++ program and the bytecode of the optimized C++ library, comprising: assign a symbolic input to each input variable of the C++ program; determine one or more execution paths in the C++ program; and for each execution path, construct a symbolic expression that if satisfied, causes the C++ program to proceed down the execution path; generate one or more test cases for the C++ program by solving each of the symbolic expressions, the one or more test cases indicating values that satisfy a feasible execution path of the C++ program with respect to the symbolic input; and test the C++ program by compiling the C++ program to obtain machine code and applying the test cases as input to the machine code. 10. The system of claim 7 , wherein the one or more processors are further operable when executing the instructions to serialize a plurality of C++ memory operations to guarantee a specific ordering of the C++ memory operations.