aboutsummaryrefslogtreecommitdiff
path: root/lldb/test/Shell/SymbolFile/NativePDB
AgeCommit message (Collapse)AuthorFilesLines
7 days[lldb][NativePDB] Fix crash in debugger when PDB has bad type index value ↵Vladimir Gorsunov2-0/+301
(#166455) Fix crash when an inline site record in the PDB file contains type index which is out of bounds
2025-12-14[LLDB][NativePDB] Create typedefs in structs (#169248)nerix2-19/+48
Typedef/using declarations in structs and classes were not created with the native PDB plugin. The following would only create `Foo` and `Foo::Bar`: ```cpp struct Foo { struct Bar {}; using Baz = Bar; using Int = int; }; ``` With this PR, they're created. One complication is that typedefs and nested types show up identical. The example from above gives: ``` 0x1006 | LF_FIELDLIST [size = 40, hash = 0x2E844] - LF_NESTTYPE [name = `Bar`, parent = 0x1002] - LF_NESTTYPE [name = `Baz`, parent = 0x1002] - LF_NESTTYPE [name = `Int`, parent = 0x0074 (int)] ``` To distinguish nested types and typedefs, we check if the parent of a type is equal to the current one (`parent(0x1002) == 0x1006`) and if the basename matches the nested type name.
2025-12-12[LLDB][NativePDB] Use original struct name when searching for constants ↵nerix2-3/+20
(#166845) We used to search for constants using the name we parsed. For C++, this would mean using the demangled struct name (from the unique name). This name is not always equal to the one used for the struct's name by the compiler. For example: ``` 0x105E | LF_STRUCTURE [size = 120, hash = 0xF38F] ``anonymous namespace'::Anonymous<A::B::C<void> >::D` unique name: `.?AUD@?$Anonymous@U?$C@X@B@A@@@?A0x8C295248@@` ``` We would use the unique name and get to `(anonymous namespace)::Anonymous<struct A::B::C<void>>::D`. Then, when finding the constant in the field list, we'd search for `(anonymous namespace)::Anonymous<struct A::B::C<void>>::D::StaticMember`. This wouldn't yield any results, because the constant will use the demangled name as given by the compiler. With this PR, we use the struct's name as given in the PDB and append the member name.
2025-12-01[LLDB][NativePDB] Look for PDBs in `target.debug-file-search-paths` (#169719)nerix1-0/+76
Similar to DWARF's DWO, we should look for PDBs in `target.debug-file-search-paths` if the PDB isn't at the original location or next to the executable. With this PR, the search order is as follows: 1. PDB path specified in the PE/COFF file 2. Next to the executable 3. In `target.debug-file-search-paths` This roughly matches [the order Visual Studio uses](https://learn.microsoft.com/en-us/visualstudio/debugger/specify-symbol-dot-pdb-and-source-files-in-the-visual-studio-debugger?view=vs-2022#where-the-debugger-looks-for-symbols), except that we don't have a project folder and don't support symbol servers. Closes #125355 (though I think this is already fixed in the native plugin).
2025-11-05[LLDB][NativePDB] Add non-overlapping fields in root struct (#166243)nerix1-4/+4
When anonymous unions are used in a struct or vice versa, their fields are merged into the parent record when using PDB. LLDB tries to recreate the original definition of the record _with_ the anonymous unions/structs. For tagged unions (like `std::optional`) where the tag followed the anonymous union, the result was suboptimal: ```cpp // input: struct Foo { union { Bar b; char c; }; bool tag; }; // reconstructed: struct Foo { union { Bar b; struct { char c; bool tag; }; }; }; ``` Once the algorithm is in some nested union, it can't get out. In the above case, we can get to the correct reconstructed record if we always add fields that don't overlap others in the root struct. So when we see `tag`, we'll see that it comes after all other fields, so it's possible to add it in the root `Foo`.
2025-10-31[LLDB][NativePDB] Estimate symbol sizes (#165727)nerix1-15/+15
In #165604, a test was skipped on Windows, because the native PDB plugin didn't set sizes on symbols. While the test isn't compiled with debug info, it's linked with `-gdwarf`, causing a PDB to be created on Windows. This PDB will only contain the public symbols (written by the linker) and section information. The symbols themselves don't have a size, however the DIA SDK sets a size for them. It seems like, for these data symbols, the size given from DIA is the distance to the next symbol (or the section end). This PR implements the naive approach for the native plugin. The main difference is in function/code symbols. There, DIA searches for a corresponding `S_GPROC32` which have a "code size" that is sometimes slightly smaller than the difference to the next symbol.
2025-10-29[LLDB] Use native PDB reader by default (#165363)nerix1-3/+3
All PDB tests now pass when compiled without DIA on Windows, so they pass with the native reader. With this PR, the default reader changes to the native reader. The plan is to eventually remove the DIA reader (see https://discourse.llvm.org/t/rfc-removing-the-dia-pdb-plugin-from-lldb/87827 and #114906). For now, DIA can be used by setting `plugin.symbol-file.pdb.reader` to `dia` or by setting `LLDB_USE_NATIVE_PDB_READER=0` (mostly undocumented, but used in tests).
2025-10-27[LLDB][NativePDB] Create simple types from function arguments and return ↵nerix1-7/+5
types (#163621) When creating all types in a compilation unit, simple types (~> primitive and pointer types) that were only used in function arguments or return types weren't created as LLDB `Type`s. With this PR, they're created when creating the function/method types. This makes it possible to run the `SymbolFile/PDB/typedefs.test` with both plugins.
2025-10-21[LLDB][NativePDB] Require `target-windows` for `func-symbols.test` (#164406)nerix1-1/+1
The test builds files for Windows, so the target has to be required. I didn't add this in #163733. Fixes the failure from https://github.com/llvm/llvm-project/pull/163733#issuecomment-3426275296.
2025-10-21[LLDB][PDB] Split `func-symbols.test` between DIA and native (#163733)nerix1-0/+133
The test checks that functions have the correct type assigned. Because of the differences between the two PDB plugins, I split the test. DIA creates one named `Type` per function and uses identical UIDs for `Type` and `Function`, whereas native creates one unnamed type per signature and has different UIDs. The native test has the same input and checks the same functions. I also removed the `target-windows` requirement from the test, since it only uses `lldb-test`.
2025-10-15[LLDB][NativePDB] Consolidate simple types (#163209)nerix2-9/+24
This aligns the simple types created by the native plugin with the ones from DIA as well as LLVM and the original cvdump. - A few type names weren't handled when creating the LLDB `Type` name (e.g. `short`) - 64-bit integers were created as `(u)int64_t` and are now created as `(unsigned) long long` (matches DIA) - 128-bit integers (only supported by clang-cl) weren't created as types (they have `SimpleTypeKind::(U)Int128Oct`) - All complex types had the same name - now they have `_Complex <float-type>` Some types like `SimpleTypeKind::Float48` can't be tested because they can't be created in C++.
2025-10-13[LLDB][NativePDB] Use typedef compiler type for typedef types (#156250)nerix1-0/+127
Before this PR, the native PDB plugin would create the following LLDB `Type` for `using SomeTypedef = long`: ``` Type{0x00002e03} , name = "SomeTypedef", size = 4, compiler_type = 0x000002becd8d8620 long ``` with this PR, the following is created: ``` Type{0x00002e03} , name = "SomeTypedef", size = 4, compiler_type = 0x0000024d6a7e3c90 typedef SomeTypedef ``` This matches the behavior of the DIA PDB plugin and works towards making [`Shell/SymbolFile/PDB/typedefs.test`](https://github.com/llvm/llvm-project/blob/main/lldb/test/Shell/SymbolFile/PDB/typedefs.test) pass with the native plugin. I added a similar test to the `NativePDB` shell tests to capture the current state, which doesn't quite match that of DIA yet. I'll add some comments on what's missing on this PR, because I'm not fully sure what the correct output would be.
2025-10-07[LLDB] Require target-x86/x86_64 for MSVC C mangling test (#162335)nerix1-1/+1
Fixes the test failure from https://github.com/llvm/llvm-project/pull/161678#issuecomment-3377949862.
2025-10-07Reland "[LLDB][NativePDB] Create functions with mangled name" (#161678)nerix7-19/+71
Relands #149701 which was reverted in https://github.com/llvm/llvm-project/commit/185ae5cdc695248b58ae017508cc764c19bee5b7 because it broke demangling of Itanium symbols on i386. The last commit in this PR adds the fix for this (discussed in #160930). On x86 environments, the prefix of `__cdecl` functions will now be removed to match DWARF. I opened #161676 to discuss this for the other calling conventions.
2025-10-02[lldb] Add lld requirement to NativePDB test (#161731)Alex Langford1-1/+1
The cpp file fails to build without `lld-link`.
2025-09-25Revert "[LLDB][NativePDB] Create functions with mangled name (#149701)"Martin Storsjö6-20/+19
This reverts commit e98f34eb08b2bf7aed787e7f8a7cea9111f044c8. This broke demangling of Itanium symbols on i386.
2025-09-24[LLDB][NativePDB] Create functions with mangled name (#149701)nerix6-19/+20
Before, functions created using the NativePDB plugin would not know about their mangled name. This showed when printing a stacktrace. There, only the function name was shown. For https://github.com/llvm/llvm-project/issues/143149, the mangled function name is required to separate different parts. This PR adds that name if available. The Clang AST nodes also take in a mangled name, which was previously unset. I don't think this unblocks anything further, because Clang can mangle the function anyway.
2025-09-24[LLDB][PDB] Fix plugin warning message style (#160398)nerix1-3/+3
Makes the warning message conform to the [LLVM error and warning style](https://llvm.org/docs/CodingStandards.html#error-and-warning-messages) as mentioned in https://github.com/llvm/llvm-project/pull/160067#discussion_r2373391186.
2025-09-23[LLDB][PDB] Warn if DIA plugin is requested but not available (#160067)nerix1-0/+71
If LLDB was built without the DIA SDK and the DIA reader is explicitly requested (through `LLDB_USE_NATIVE_PDB_READER=0` or `settings set plugin.symbol-file.pdb.reader dia`), LLDB should print a warning, because it will use the native reader in any case (https://github.com/llvm/llvm-project/pull/159769#discussion_r2367316980). This PR adds the warning and a test when LLDB is not built with the SDK on Windows. I don't think any builder runs this configuration, as there are still five failing tests. I tested this locally with and without the SDK.
2025-09-23[LLDB][PDB] Run UDT layout test with native PDB too (#159769)nerix1-0/+129
This test was failing with the native plugin due to two reasons: 1. The static `C::abc` was printed as `(int) ::C::abc = 123` 2. The order of the base classes of [`C` (`List::Value`)](https://github.com/llvm/llvm-project/blob/b7e4edca3d56ec87f719c202f5397b245595f7cc/lldb/test/Shell/SymbolFile/PDB/Inputs/UdtLayoutTest.cpp#L30) is different between DIA and the native plugin. I don't know how the order in the DIA plugin is determined - it prints `B<0>`, `B<1>`, `B<2>`, `B<3>`, `A`. The native plugin follows the order of the bases in memory and prints `B<2>`, `B<3>`, `A`, `B<0>`, `B<1>` (last three are the virtual bases). <details><summary>Class layout of C</summary> ``` class C size(88): +--- 0 | +--- (base class B<2>) 0 | | {vbptr} 8 | | _a 9. | | _b (bitstart=3,nbits=6) 11 | | _c | +--- 15 | +--- (base class B<3>) 15 | | {vbptr} 23 | | _a 24. | | _b (bitstart=3,nbits=6) 26 | | _c | +--- | <alignment member> (size=2) 32 | _x 36 | _y 38 | _z | <alignment member> (size=1) | <alignment member> (size=2) +--- +--- (virtual base A) 40 | {vfptr} 48 | U _u | <alignment member> (size=4) +--- +--- (virtual base B<0>) 56 | {vbptr} 64 | _a 65. | _b (bitstart=3,nbits=6) 67 | _c +--- +--- (virtual base B<1>) 71 | {vbptr} 79 | _a 80. | _b (bitstart=3,nbits=6) 82 | _c +--- ``` </details> I split the tests for the plugins for better readability.
2025-09-18[LLDB][NativePDB] Add modifiers to modified type name (#159296)nerix1-14/+14
When creating LLDB types from `LF_MODIFIER` records, the type name of the modified type was used. This didn't include the modifiers (`const`/`volatile`/`__unaligned`). With this PR, they're included. The DIA plugin had a test for this. That test also assumed that function types had a name. I removed that check here, because function/procedure types themselves in PDB don't have a name: ``` 0x1015 | LF_ARGLIST [size = 20, hash = 0xBCB6] 0x0074 (int): `int` 0x1013: `int* __restrict` 0x1014: `int& __restrict` 0x1016 | LF_PROCEDURE [size = 16, hash = 0x3F611] return type = 0x0003 (void), # args = 3, param list = 0x1015 calling conv = cdecl, options = None ``` I assume DIA gets the name from the function symbol itself. In the native plugin, that name isn't included and multiple functions with the same signature will reuse one type, whereas DIA would create a new type for each function. The [Shell/SymbolFile/PDB/func-symbols.test](https://github.com/llvm/llvm-project/blob/b29c7ded31d81ca47aed0157c543c8b6a0f5866c/lldb/test/Shell/SymbolFile/PDB/func-symbols.test) also relies on this.
2025-09-11[LLDB][NativePDB] Implement `AddSymbols` (#154121)nerix5-3/+98
This PR implements `SymbolFileNativePDB::AddSymbols` which adds public symbols to the symbol table. These symbols are found in the publics stream. It contains mangled names coupled with addresses. Addresses are a pair of (segment, offset). If I understood correctly, then the segment is the section ID from the COFF header. Sections are already [constructed](https://github.com/llvm/llvm-project/blob/c48ec7fb60b5e0b4100731d75f82ea63c0ec7b45/lldb/source/Plugins/ObjectFile/PECOFF/ObjectFilePECOFF.cpp#L1048) using this 1-based index ([MS docs](https://learn.microsoft.com/en-us/windows/win32/debug/pe-format#section-table-section-headers)). This allows us to use `section_list->FindSectionByID`.
2025-09-02[LLDB][NativePDB] Complete array member types in AST builder (#156370)nerix3-45/+114
2025-08-13[LLDB][NativePDB] Resolve declaration for tag types (#152579)nerix1-0/+56
Tag types like stucts or enums didn't have a declaration attached to them. The source locations are present in the IPI stream in `LF_UDT_MOD_SRC_LINE` records: ``` 0x101F | LF_UDT_MOD_SRC_LINE [size = 18, hash = 0x1C63] udt = 0x1058, mod = 3, file = 1, line = 0 0x2789 | LF_UDT_MOD_SRC_LINE [size = 18, hash = 0x1E5A] udt = 0x1253, mod = 35, file = 93, line = 17069 ``` The file is an ID in the string table `/names`: ``` ID | String 1 | '\<unknown>' 12 | 'D:\a\_work\1\s\src\ExternalAPIs\WindowsSDKInc\c\Include\10.0.22621.0\um\wingdi.h' 93 | 'D:\a\_work\1\s\src\ExternalAPIs\WindowsSDKInc\c\Include\10.0.22621.0\um\winnt.h' ``` Here, we're not interested in `mod`. This would indicate which module contributed the UDT. I was looking at Rustc's PDB and found that it uses `<unknown>` for some types, so I added a check for that. This makes two DIA PDB shell tests to work with the native PDB plugin. --------- Co-authored-by: Michael Buch <michaelbuch12@gmail.com>
2025-08-12Reland "[LLDB][NativePDB] Find functions by basename" ( #152295) (#153160)nerix1-6/+81
Relands #152295. Checking for the overloads did not account for them being out of order. For example, [the failed output](https://github.com/llvm/llvm-project/pull/152295#issuecomment-3177563247) contained the overloads, but out of order. The last commit here fixes that by using `-DAG`. --------- Co-authored-by: Jonas Devlieghere <jonas@devlieghere.com>
2025-08-11Revert "[LLDB][NativePDB] Find functions by basename" (#153131)Jonas Devlieghere1-81/+6
Reverts llvm/llvm-project#152295
2025-08-11[LLDB][NativePDB] Find functions by basename (#152295)nerix1-6/+81
This adds the ability for functions to be matched by their basename. Before, the globals were searched for the name. This works if the full name is available but fails for basenames. PDB only includes the full names of functions, so we need to cache all basenames. This is (again) very similar to [SymbolFilePDB](https://github.com/llvm/llvm-project/blob/b242150b075a8a720b00821682a9469258bbcd30/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp#L1291-L1383). There are two main differences: - We can't just access the parent of a function to determine that it's a member function - we need to check the type of the function, and its "this type". - SymbolFilePDB saved the full method name in the map. However, when searching for methods, only the basename is passed, so the function never found any methods. Fixes #51933. --------- Co-authored-by: Jonas Devlieghere <jonas@devlieghere.com>
2025-08-05[LLDB][NativePDB] Use undecorated name for types if UniqueName isn't mangled ↵nerix1-0/+85
(#152114) Languages other than C/C++ don't necessarily emit mangled names in the `UniqueName` field of type records. Rust specifically emits a unique ID that doesn't contain the name. For example, `(i32, i32)` is emitted as ```llvm !266 = !DICompositeType( tag: DW_TAG_structure_type, name: "tuple$<i32,i32>", file: !9, size: 64, align: 32, elements: !267, templateParams: !17, identifier: "19122721b0632fe96c0dd37477674472" ) ``` which results in ``` 0x1091 | LF_STRUCTURE [size = 72, hash = 0x1AC67] `tuple$<i32,i32>` unique name: `19122721b0632fe96c0dd37477674472` vtable: <no type>, base list: <no type>, field list: 0x1090 options: has unique name, sizeof 8 ``` In C++ with Clang and MSVC, a structure similar to this would result in ``` 0x136F | LF_STRUCTURE [size = 44, hash = 0x30BE2] `MyTuple` unique name: `.?AUMyTuple@@` vtable: <no type>, base list: <no type>, field list: 0x136E options: has unique name, sizeof 8 ``` With this PR, if a `UniqueName` is encountered that couldn't be parsed, it will fall back to using the undecorated (→ do the same as if the unique name is empty/unavailable). I'm not sure how to test this. Maybe compiling the LLVM IR that rustc emits? Fixes #152051.
2025-08-05[LLDB][NativePDB] Implement `FindNamespace` (#151950)nerix1-1/+26
`FindNamespace` was not implemented for `SymbolFileNativePDB`. Without it, it wasn't possible to lookup items through namespaces when evaluating expressions. This is mostly the same as in [SymbolFilePDB](https://github.com/llvm/llvm-project/blob/f1eb869bae2ab86726ee3a5a5c7980d5b2acbd5d/lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp#L1664-L1696) as well as [PDBAstParser](https://github.com/llvm/llvm-project/blob/f1eb869bae2ab86726ee3a5a5c7980d5b2acbd5d/lldb/source/Plugins/SymbolFile/PDB/PDBASTParser.cpp#L1126-L1150): The AST parser/builder saves the created namespaces in a map to lookup when a namespace is requested. This is working towards making [Shell/SymbolFile/PDB/expressions.test](https://github.com/llvm/llvm-project/blob/f1eb869bae2ab86726ee3a5a5c7980d5b2acbd5d/lldb/test/Shell/SymbolFile/PDB/expressions.test) pass with the native PDB plugin.
2025-08-04[LLDB][NativePDB] Allow type lookup in namespaces (#149876)nerix1-0/+135
Previously, `type lookup` for types in namespaces didn't work with the native PDB plugin, because `FindTypes` would only look for types whose base name was equal to their full name. PDB/CodeView does not store the base names in the TPI stream, but the types have their full name (e.g. `std::thread` instead of `thread`). So `findRecordsByName` would only return types in the top level namespace. This PR changes the lookup to go through all types and check their base name. As that could be a bit expensive, the names are first cached (similar to the function lookup in the DIA PDB plugin). Potential types are checked with `TypeQuery::ContextMatches`. To be able to handle anonymous namespaces, I changed `TypeQuery::ContextMatches`. The [`TypeQuery` constructor](https://github.com/llvm/llvm-project/blob/9ad7edef4276207ca4cefa6b39d11145f4145a72/lldb/source/Symbol/Type.cpp#L76-L79) inserts all name components as `CompilerContextKind::AnyDeclContext`. To skip over anonymous namespaces, `ContextMatches` checked if a component was empty and exactly of kind `Namespace`. For our query, the last check was always false, so we never skipped anonymous namespaces. DWARF doesn't have this problem, as it [constructs the context outside](https://github.com/llvm/llvm-project/blob/abe93d9d7e891a2a6596ddb0c6324280137c89dc/lldb/source/Plugins/SymbolFile/DWARF/DWARFIndex.cpp#L154-L160) and has proper information about namespaces. I'm not fully sure if my change is correct and that it doesn't break other users of `TypeQuery`. This enables `type lookup <type>` to work on types in namespaces. However, expressions don't work with this yet, because `FindNamespace` is unimplemented for native PDB.
2025-07-17[lldb] Adjust default target.max-children-depth (#149282)Michael Buch1-0/+1
Deeply nested structs can be noisy, so Apple's LLDB fork sets the default to `4`: https://github.com/swiftlang/llvm-project/blob/9c93adbb283005ab416fd155b75fd43e6a8288ca/lldb/source/Target/TargetProperties.td#L134-L136 Thought it would be useful to upstream this. Though happy to pick a different default or keep it as-is.
2025-04-14[lldb][test] Fix NativePDB/inline_sites_live.cpp inlined frame formatMichael Buch1-2/+2
Adjust after https://github.com/llvm/llvm-project/pull/135343
2024-11-15[lldb][test] Disable inline_sites_live.cpp for non-Windows targets (#116196)Vladislav Dzhidzhoev1-1/+1
This is a follow-up for the conversation here https://github.com/llvm/llvm-project/pull/115722/. This test is designed for Windows target/PDB format, so it shouldn't be built and run for DWARF/etc.
2024-11-13[lldb][test] Fix inline_sites_live.cpp Shell when run on Windows remotely ↵Vladislav Dzhidzhoev1-2/+2
from Linux (#115722) This test fails on https://lab.llvm.org/staging/#/builders/197/builds/76/steps/18/logs/FAIL__lldb-shell__inline_sites_live_cpp because of a little difference in the lldb output. ``` # .---command stderr------------ # | C:\buildbot\as-builder-10\lldb-x-aarch64\llvm-project\lldb\test\Shell\SymbolFile\NativePDB\inline_sites_live.cpp:25:11: error: CHECK: expected string not found in input # | // CHECK: * thread #1, stop reason = breakpoint 1 # | ^ # | <stdin>:1:1: note: scanning from here # | (lldb) platform select remote-linux # | ^ # | <stdin>:28:27: note: possible intended match here # | * thread #1, name = 'inline_sites_li', stop reason = breakpoint 1.3 # | ^ # | ```
2024-11-12[lldb][test] Fix remote Shell tests failures on Windows host (#115716)Vladislav Dzhidzhoev2-2/+2
Since the remote Shell test execution feature was added, these tests should now be disabled on Windows target instead of Windows host. It should fix failures on https://lab.llvm.org/staging/#/builders/197/builds/76.
2024-11-01[lldb][NativePDB] Parse global variables. (#114303)Zequan Wu2-6/+8
This doesn't parse S_CONSTANT case yet, because I found that the global variable `std::strong_ordering::equal` is a S_CONSTANT and has type of LF_STRUCTURE which is not currently handled when creating dwarf expression for the variable. Left a TODO for it to finish later. This makes `lldb/test/Shell/SymbolFile/PDB/ast-restore.test` and `lldb/test/Shell/SymbolFile/PDB/calling-conventions-x86.test` pass on windows with native pdb plugin only.
2024-10-31[lldb] Set LLDB_USE_NATIVE_PDB_READER at the directory level (#114455)Jonas Devlieghere35-37/+37
Lit allows you to set environment variables for all tests in a directory using a `lit.local.cfg` file. Do this for the PDB and NativePDB tests.
2024-10-31[lldb] Remove lldb-repro utilityJonas Devlieghere1-2/+0
Remove lldb-repro which was used to run the test suite against a reproducer. The corresponding functionality has been removed from LLDB so there's no need for the tool anymore.
2024-10-18Revert "Renormalize line endings whitespace only after dccebddb3b80"Luke Drummond8-755/+755
This reverts commit 9d98acb196a40fee5229afeb08f95fd36d41c10a.
2024-10-17Renormalize line endings whitespace only after dccebddb3b80Luke Drummond8-755/+755
Line ending policies were changed in the parent, dccebddb3b80. To make it easier to resolve downstream merge conflicts after line-ending policies are adjusted this is a separate whitespace-only commit. If you have merge conflicts as a result, you can simply `git add --renormalize -u && git merge --continue` or `git add --renormalize -u && git rebase --continue` - depending on your workflow.
2024-09-27[lldb] Inline expression evaluator error visualization (#106470)Adrian Prantl1-3/+1
This patch is a reworking of Pete Lawrence's (@PortalPete) proposal for better expression evaluator error messages: https://github.com/llvm/llvm-project/pull/80938 Before: ``` $ lldb -o "expr a+b" (lldb) expr a+b error: <user expression 0>:1:1: use of undeclared identifier 'a' a+b ^ error: <user expression 0>:1:3: use of undeclared identifier 'b' a+b ^ ``` After: ``` (lldb) expr a+b ^ ^ │ ╰─ error: use of undeclared identifier 'b' ╰─ error: use of undeclared identifier 'a' ``` This eliminates the confusing `<user expression 0>:1:3` source location and avoids echoing the expression to the console again, which results in a cleaner presentation that makes it easier to grasp what's going on. You can't see it here, bug the word "error" is now also in color, if so desired. Depends on https://github.com/llvm/llvm-project/pull/106442.
2024-09-27Revert "[lldb] Inline expression evaluator error visualization (#106470)"Adrian Prantl1-1/+3
This reverts commit 49372d1cccf50f404d52d40ae4b663db5604eb2c.
2024-09-27[lldb] Inline expression evaluator error visualization (#106470)Adrian Prantl1-3/+1
This patch is a reworking of Pete Lawrence's (@PortalPete) proposal for better expression evaluator error messages: https://github.com/llvm/llvm-project/pull/80938 Before: ``` $ lldb -o "expr a+b" (lldb) expr a+b error: <user expression 0>:1:1: use of undeclared identifier 'a' a+b ^ error: <user expression 0>:1:3: use of undeclared identifier 'b' a+b ^ ``` After: ``` (lldb) expr a+b ^ ^ │ ╰─ error: use of undeclared identifier 'b' ╰─ error: use of undeclared identifier 'a' ``` This eliminates the confusing `<user expression 0>:1:3` source location and avoids echoing the expression to the console again, which results in a cleaner presentation that makes it easier to grasp what's going on. You can't see it here, bug the word "error" is now also in color, if so desired. Depends on https://github.com/llvm/llvm-project/pull/106442.
2023-11-28[lldb][PDB] Fix message order in test caseDavid Spickett1-2/+2
Launch/stopped ordering was fixed by bd8f1068cad06b0f0342ac7ef351bf01c2e27322 but the Windows on Arm bot wasn't running at the time it landed.
2023-09-06[lldb] Fix inline_sites.testDaniel Paoliello1-1/+1
Fixes `lldb/test/Shell/SymbolFile/NativePDB/inline_sites.test` to use the correct line number now that https://github.com/llvm/llvm-project/commit/f2f36c9b2955d2d742a198416f1178fd80303921 is causing the inline call site info to be taken into account.
2023-06-12Speculative fix for windows testAdrian Prantl1-1/+1
2023-06-12[lldb][test] incomplete-tag-type.cpp: fix expected error messageMichael Buch1-1/+0
Follow up to 133c3eaac0a532380c3d6ad21a60da1490f51fb8 Differential Revision: https://reviews.llvm.org/D152590
2023-03-17[lldb] Fix d875838e8b45cb0da5070298d0c1a2d1ee78ce7eDave Lee1-1/+1
2023-03-17[lldb][test] Replace use of p with expression in Shell tests (NFC)Dave Lee5-48/+48
In Shell tests, replace use of the `p` alias with the `expression` command. To avoid conflating tests of the alias with tests of the expression command, this patch canonicalizes to the use `expression`. See also D141539 which made the same change to API tests. Differential Revision: https://reviews.llvm.org/D146230
2023-03-07Reland "[lldb][TypeSystemClang] Format pointers to member functions as ↵Michael Buch1-7/+7
eFormatHex" Before this patch, LLDB used to format pointers to members, such as, ``` void (Foo::*pointer_to_member_func)() = &Foo::member_func; ``` as `eFormatBytes`. E.g., ``` (lldb) v pointer_to_member_func (void (Foo::*)()) $1 = 94 3f 00 00 01 00 00 00 00 00 00 00 00 00 00 00 ``` This patch makes sure we format pointers to member functions the same way we do regular function pointers. After this patch we format member pointers as: ``` (lldb) v pointer_to_member_func (void (Foo::*)()) ::pointer_to_member_func = 0x00000000000000000000000100003f94 ``` Differential Revision: https://reviews.llvm.org/D145241