Skip to content

[lldb][Type Completion] Fix completion of ObjCObjectTypes #8891

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged

Conversation

Michael137
Copy link

The problem was introduced in:

commit e68f76a9e59104e2bfb972155af8ff04310cd078
Author: Michael Buch <[email protected]>
Date:   Fri Feb 16 14:35:34 2024 +0000

    [lldb][TypeSystemClang][NFCI] Factor completion logic out of GetCompleteQualType

This introduced an incorrect llvm::dyn_cast_or_null check causing us to incorrectly claim that we failed to complete a type.

This manifested in a crash when running following expression:

expr -l objc -- *(id)0x1234

rdar://129633122

The problem was introduced in:
```
commit e68f76a9e59104e2bfb972155af8ff04310cd078
Author: Michael Buch <[email protected]>
Date:   Fri Feb 16 14:35:34 2024 +0000

    [lldb][TypeSystemClang][NFCI] Factor completion logic out of GetCompleteQualType
```

This introduced an incorrect `llvm::dyn_cast_or_null` check
causing us to incorrectly claim that we failed to complete a type.

This manifested in a crash when running following expression:
```
expr -l objc -- *(id)0x1234
```

rdar://129633122
This is a minimal reproducer for a crash reported internally
where we would try to call `DumpTypeDescription` on an incomplete
type. This crash surfaced as part of an NFC refactor of some
of the logic in `GetCompleteQualType`:
```
(lldb) expr -l objc -- *(id)0x1234
Stack dump:
0.      Program arguments: ./bin/lldb a.out -o "b main" -o run -o "expr -l objc -- *(id)0x1234"
Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var LLVM_SYMBOLIZER_PATH to point to it):
0  lldb                     0x0000000102ec768c llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 56
1  lldb                     0x0000000102ec6010 llvm::sys::RunSignalHandlers() + 112
2  lldb                     0x0000000102ec7fa8 SignalHandler(int) + 292
3  libsystem_platform.dylib 0x000000018c7a8c44 _sigtramp + 56
4  LLDB                     0x0000000116b2030c lldb_private::TypeSystemClang::DumpTypeDescription(void*, lldb_private::Stream&, lldb::DescriptionLevel, lldb_private::ExecutionContextScope*) + 588
5  LLDB                     0x00000001166b5124 lldb_private::CompilerType::DumpTypeDescription(lldb_private::Stream*, lldb::DescriptionLevel, lldb_private::ExecutionContextScope*) const + 228
6  LLDB                     0x0000000116d4f08c IRForTarget::CreateResultVariable(llvm::Function&) + 2076
```

rdar://129633122
@Michael137 Michael137 merged commit 18c955b into swiftlang:next Jun 13, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant