This is an archive of the discontinued LLVM Phabricator instance.

Fix breakpoint language filtering for other C variants (like C99) and Pascal.
ClosedPublic

Authored by dawn on Dec 2 2015, 9:41 PM.

Details

Summary

This patch fixes setting breakpoints on symbol for variants of C and Pascal where the language is "unknown" within the filtering process added in r252356. It also renames GetLanguageForSymbolByName to GuessLanguageForSymbolByName and adds comments explaining the pitfalls of the flawed assumption that the language can be determined solely from the name and target.

Comment: Our users want to be able to set breakpoints in C, C++ or Pascal, but since the parsing of Pascal breakpoint identifiers is incompatible with ObjC, they're forced to set the target language option to Pascal. After r252356 however, the Pascal identifiers are interpreted as C++ and the C symbols are unknown, so all symbols are filtered out because they don't match the target language setting of Pascal, and they can no longer set symbolic breakpoints. I don't see a way to fix this without breaking the intent of r252356. Locally we have had to disable the filtering code. Ideas for how to resolve this?

Diff Detail

Repository
rL LLVM

Event Timeline

dawn updated this revision to Diff 41713.Dec 2 2015, 9:41 PM
dawn retitled this revision from to Fix breakpoint language filtering for other C variants (like C99) and Pascal..
dawn updated this object.
dawn added a reviewer: jingham.
dawn set the repository for this revision to rL LLVM.
dawn added a subscriber: lldb-commits.
jingham requested changes to this revision.Dec 3 2015, 3:41 PM
jingham edited edge metadata.

If we really can't tell whether a symbol is CPP or Pascal based on the name, then GetLanguageForSymbolByName should be reworked to take a std::vector& in which to return the "possible" language types. Then for Pascal or C++ symbols it should return "Pascal or CPP". Then the rest of the breakpoint filtering would pass the symbol if the requested language was one of the return values in the vector. It would mean "breakpoint set -l pascal/c++" will not limit the breakpoint to only Pascal/C++ symbols, but to Pascal and C++. But by definition we can't do any better here.

Alternatively, you could replace GetLanguageForSymbolByName with "GetLanguageForSymbolContext(SymbolContext &sc)" instead, and if there's more info in the Symbol Context that can help you figure out that it is Pascal then you could do a better job that way. This function is currently only used to filter breakpoints, and it always has a SymbolContext, so that would also be appropriate.

Or do both...

source/Breakpoint/BreakpointResolverName.cpp
297–302 ↗(On Diff #41713)

Maybe it is not appropriate to use Target::GetLanguage to prime the breakpoint language (in the Target::CreateBreakpoint* routines.) I was never really clear what the target level language setting was for. But if it isn't appropriate to seed the breakpoint language with the target language, I'm fine with the breakpoint language defaulting to eLanguageTypeAny and then you will only get breakpoint language filtering if you call it out explicitly.

This revision now requires changes to proceed.Dec 3 2015, 3:41 PM
dawn added a comment.Dec 3 2015, 9:16 PM

Jim, this patch doesn't attempt to fix the issue I raised in my comment - it just fixes the oversight of other C variants (clang picks C99 for example) and renames your function to a more meaningful name (and matches Mangled::GuessLanguage which is also uses the name to guess the language). I see no reason why to reject it.

I didn't want to try and tackle the bigger problem in this patch, but wanted to raise the question so I might know how to resolve it in a different patch.

Thank you for the feedback however - I like your "Any" suggestion and will submit another patch for it.

Please accept this patch?

jingham accepted this revision.Dec 4 2015, 9:18 AM
jingham edited edge metadata.

OK. It would have been better to make a patch that fixes the specific problem with other C variants. That's just a straight up bug, and mixing it with comments on the two separate issues, actually determining the language correctly and target language setting vrs. breakpoint language setting, confuses the real point of the patch. Adding in the rename further obscures the issue. We might get into a debate about the name, revert the patch, and end up re-introducing the actual bug you fixed...

This revision is now accepted and ready to land.Dec 4 2015, 9:18 AM
This revision was automatically updated to reflect the committed changes.