[SymbolFilePDB] Fix null array access when parsing the type of a function without...
authorAaron Smith <aaron.smith@microsoft.com>
Fri, 19 Jan 2018 21:55:44 +0000 (21:55 +0000)
committerAaron Smith <aaron.smith@microsoft.com>
Fri, 19 Jan 2018 21:55:44 +0000 (21:55 +0000)
commit563799b3a6cf23fa56c4fcdc91d3d2cf45b015b0
tree456f903cf2eae2772090ce6a48cf81f566ba3a45
parent04b76f40778d6eda730a06f8e494e66c94fceb3b
[SymbolFilePDB] Fix null array access when parsing the type of a function without any arguments, i.e. 'int main()' and add support to test it

Summary:
- Fix a null array access bug. This happens when creating the lldb type for a function that has no argument.
- Implement SymbolFilePDB::ParseTypes method. Using `lldb-test symbols` will show all supported types in the target.
- Create lldb types for variadic function, PDBSymbolTypePointer, PDBSymbolTypeBuiltin
- The underlying builtin type for PDBSymbolTypeEnum is always `Int`, correct it with the very first enumerator's encoding if any. This is more accurate when the underlying type is not signed or another integer type.
- Fix a bug when the compiler type is not created based on PDB_BuiltinType. For example, basic type `long` is of same width as `int` in a 32-bit target, and the compiler type of former one will be represented by the one generated for latter if using the default method. Introduce a static function GetBuiltinTypeForPDBEncodingAndBitSize to correct this issue.
- Basic type `long double` and `double` have the same bit size in MSVC and there is no information in a PDB to distinguish them. The compiler type of the former one is represented by the latter's.
- There is no line informaton about typedef, enum etc in a PDB and the source and line information for them are not shown.
- There is no information about scoped enumeration. The compiler type is represented as an unscoped one.

Reviewers: zturner, lldb-commits, davide, asmith

Reviewed By: zturner, asmith

Subscribers: llvm-commits, davide

Differential Revision: https://reviews.llvm.org/D41427

llvm-svn: 322995
lldb/lit/SymbolFile/PDB/Inputs/SimpleTypesTest.cpp [new file with mode: 0644]
lldb/lit/SymbolFile/PDB/enums-layout.test [new file with mode: 0644]
lldb/lit/SymbolFile/PDB/typedefs.test [new file with mode: 0644]
lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp
lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp
lldb/unittests/SymbolFile/PDB/Inputs/test-pdb-types.cpp
lldb/unittests/SymbolFile/PDB/SymbolFilePDBTests.cpp