Legal claims defining the scope of protection, as filed with the USPTO.
1. A computer-implemented method for automatically determining configuration properties of a compiler executable invoked by a build system, the method comprising: receiving an indication of a request by a build system to execute an executable in a first newly created process; determining that the executable of the newly created process is a compiler called by the build system to compile source code of a source code file; in response to the determining, determining a plurality of configuration properties of the compiler called by the build system, the configuration properties including first properties of a plurality of built-in functions of the compiler, second properties of a plurality of built-in types of the compiler, or both; configuring a compiler emulator to emulate the behavior of the compiler called by the build system using the determined configuration properties; and providing access to the source code to the compiler emulator configured using the determined configuration properties, wherein the compiler emulator emulates the behavior of the compiler according to the determined configuration properties of the compiler called by the build system to generate a representation of the source code.
2. The method of claim 1 , wherein determining that the executable of the newly created process is a compiler comprises: obtaining a name of the executable for the first newly created process; and determining that the name of the executable matches one or more predetermined compiler names.
3. The method of claim 1 , wherein determining that the executable of the newly created process is a compiler comprises: performing a test classification process by providing a predetermined input to the executable to obtain an output generated by the executable; and determining that a predetermined predicted output occurs in the output generated by the executable.
4. The method of claim 3 , further comprising bypassing the test classification process for executables having names that do not match one or more predetermined compiler names.
5. The method of claim 3 , wherein determining that the executable of the newly created process is a compiler comprises: invoking the executable in a second newly created process and passing to the second newly created process, a segment of source code that encodes a predetermined sequence of bytes; obtaining output generated by the second newly created process; and determining that the output generated by the executable in the second newly process includes the predetermined sequence of bytes.
6. The method of claim 5 , wherein the output is encoded as raw bytes rather than text.
7. The method of claim 1 , further comprising automatically determining configuration properties for the plurality of built-in functions of the compiler, comprising: obtaining a plurality of candidate built-in function names for the compiler; generating source code that references one or more of the plurality of candidate built-in function names for the compiler; invoking the executable in a second newly created process and passing, as a parameter to the second newly created process, the generated source code; and parsing errors generated by the executable in the second newly created process to obtain a plurality of configuration properties of the built-in functions for the compiler.
8. The method of claim 7 , wherein obtaining a plurality of candidate built-in function names comprises invoking the executable in the second newly-created process to generate a precompiled header file and obtaining the plurality of candidate built-in function names from the precompiled header file.
9. The method of claim 7 , wherein generating the source code comprises generating source code that references a candidate built-in function using a custom defined type as an argument to the candidate built-in function.
10. The method of claim 7 , wherein generating the source code comprises generating source code that references a candidate built-in function with at least a threshold number of arguments that is likely to be incorrect.
11. The method of claim 10 , further comprising: determining that a call with at least the threshold number of arguments to a candidate built-in function did not fail; and in response, classifying the candidate built-in function as a variadic function that accepts a variable number of arguments.
12. The method of claim 7 , wherein generating the source code comprises generating source code that passes each of the candidate built-in function names as an argument to a respective instance of a function call that expects a custom, explicitly defined type.
13. The method of claim 1 , wherein automatically generating configuration properties of the plurality of built-in types for the compiler comprises: invoking the executable in a second newly created process and passing, to the second newly created process, source code that encodes a predetermined sequence of values and, at respective positions relative to the predetermined sequence of values, one or more source code elements that evaluate to properties of respective built-in types; obtaining output generated by the second newly created process; and determining respective properties of the one or more built-in types from values occurring at the respective positions relative to the predetermined sequence of values.
14. The method of claim 13 , further comprising generating the source code to include the source code elements occurring adjacent to the predetermined sequence of values in the source code.
15. The method of claim 13 , wherein determining the respective properties of the one or more built-in types comprises: determining a regular interval at which each value of the sequence of values occurs in the output; and obtaining the respective properties from one or more values occurring in the output according to the regular interval.
16. A system comprising: one or more computers and one or more storage devices storing instructions that are operable, when executed by the one or more computers, to cause the one or more computers to perform operations comprising: receiving an indication of a request by a build system to execute an executable in a first newly created process; determining that the executable of the newly created process is a compiler called by the build system to compile source code of a source code file; in response to the determining, determining a plurality of configuration properties of the compiler called by the build system, the configuration properties including first properties of a plurality of built-in functions of the compiler, second properties of a plurality of built-in types of the compiler, or both; configuring a compiler emulator to emulate the behavior of the compiler called by the build system using the determined configuration properties; and providing access to the source code to the compiler emulator configured using the determined configuration properties, wherein the compiler emulator emulates the behavior of the compiler according to the determined configuration properties of the compiler called by the build system to generate a representation of the source code.
17. The system of claim 16 , wherein determining that the executable of the newly created process is a compiler comprises: obtaining a name of the executable for the first newly created process; and determining that the name of the executable matches one or more predetermined compiler names.
18. The system of claim 16 , wherein determining that the executable of the newly created process is a compiler comprises: performing a test classification process by providing a predetermined input to the executable to obtain an output generated by the executable; and determining that a predetermined predicted output occurs in the output generated by the executable.
19. The system of claim 18 , wherein the operations further comprise bypassing the test classification process for executables having names that do not match one or more predetermined compiler names.
20. The system of claim 18 , wherein determining that the executable of the newly created process is a compiler comprises: invoking the executable in a second newly created process and passing to the second newly created process, a segment of source code that encodes a predetermined sequence of bytes; obtaining output generated by the second newly created process; and determining that the output generated by the executable in the second newly process includes the predetermined sequence of bytes.
21. The system of claim 20 , wherein the output is encoded as raw bytes rather than text.
22. The system of claim 16 , wherein the operations further comprise automatically determining configuration properties for the plurality of built-in functions of the compiler, comprising: obtaining a plurality of candidate built-in function names for the compiler; generating source code that references one or more of the plurality of candidate built-in function names for the compiler; invoking the executable in a second newly created process and passing, as a parameter to the second newly created process, the generated source code; and parsing errors generated by the executable in the second newly created process to obtain a plurality of configuration properties of the built-in functions for the compiler.
23. The system of claim 22 , wherein obtaining a plurality of candidate built-in function names comprises invoking the executable in the second newly-created process to generate a precompiled header file and obtaining the plurality of candidate built-in function names from the precompiled header file.
24. The system of claim 22 , wherein generating the source code comprises generating source code that references a candidate built-in function using a custom defined type as an argument to the candidate built-in function.
25. The system of claim 22 , wherein generating the source code comprises generating source code that references a candidate built-in function with at least a threshold number of arguments that is likely to be incorrect.
26. The system of claim 25 , wherein the operations further comprise: determining that a call with at least the threshold number of arguments to a candidate built-in function did not fail; and in response, classifying the candidate built-in function as a variadic function that accepts a variable number of arguments.
27. The system of claim 22 , wherein generating the source code comprises generating source code that passes each of the candidate built-in function names as an argument to a respective instance of a function call that expects a custom, explicitly defined type.
28. The system of claim 16 , wherein automatically generating configuration properties of the plurality of built-in types for the compiler comprises: invoking the executable in a second newly created process and passing, to the second newly created process, source code that encodes a predetermined sequence of values and, at respective positions relative to the predetermined sequence of values, one or more source code elements that evaluate to properties of respective built-in types; obtaining output generated by the second newly created process; and determining respective properties of the one or more built-in types from values occurring at the respective positions relative to the predetermined sequence of values.
29. The system of claim 28 , wherein the operations further comprise generating the source code to include the source code elements occurring adjacent to the predetermined sequence of values in the source code.
30. The system of claim 28 , wherein determining the respective properties of the one or more built-in types comprises: determining a regular interval at which each value of the sequence of values occurs in the output; and obtaining the respective properties from one or more values occurring in the output according to the regular interval.
31. A computer program product, encoded on one or more non-transitory computer storage media, comprising instructions that when executed by one or more computers cause the one or more computers to perform operations comprising: receiving an indication of a request by a build system to execute an executable in a first newly created process; determining that the executable of the newly created process is a compiler called by the build system to compile source code of a source code file; in response to the determining, determining a plurality of configuration properties of the compiler called by the build system, the configuration properties including first properties of a plurality of built-in functions of the compiler, second properties of a plurality of built-in types of the compiler, or both; configuring a compiler emulator to emulate the behavior of the compiler called by the build system using the determined configuration properties; and providing access to the source code to the compiler emulator configured using the determined configuration properties, wherein the compiler emulator emulates the behavior of the compiler according to the determined configuration properties of the compiler called by the build system to generate a representation of the source code.
Unknown
June 20, 2017
Browse 5M+ US patents with plain-English claim translations and AI-generated analysis.