14. One or more computer-readable non-transitory storage media embodying software operable when executed by one or more computer systems 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 execute 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.
14. One or more computer-readable non-transitory storage media embodying software operable when executed by one or more computer systems 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 execute 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. 16. The media of claim 14 , wherein the software is further operable when executed by one or more computer systems to implement one or more instructions to handle one or more bytecode instructions resulted from one or more features unique to C++ programming language.