Fix crash with -ast-dump=json (#137324)

When given an invalid Objective-C extension, Clang would crash when
trying to emit the mangled name of the method to the JSON dump output.

Fixes #137320
This commit is contained in:
Aaron Ballman 2025-04-29 07:55:32 -04:00 committed by GitHub
parent 0b5daeb2e5
commit c5bf901b1b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 21 additions and 3 deletions

View File

@ -220,6 +220,8 @@ Non-comprehensive list of changes in this release
- Added `__builtin_elementwise_exp10`.
- For AMDPGU targets, added `__builtin_v_cvt_off_f32_i4` that maps to the `v_cvt_off_f32_i4` instruction.
- Added `__builtin_elementwise_minnum` and `__builtin_elementwise_maxnum`.
- No longer crashing on invalid Objective-C categories and extensions when
dumping the AST as JSON. (#GH137320)
New Compiler Flags
------------------

View File

@ -367,9 +367,11 @@ void MangleContext::mangleObjCMethodName(const ObjCMethodDecl *MD,
}
OS << (MD->isInstanceMethod() ? '-' : '+') << '[';
if (const auto *CID = MD->getCategory()) {
OS << CID->getClassInterface()->getName();
if (includeCategoryNamespace) {
OS << '(' << *CID << ')';
if (const auto *CI = CID->getClassInterface()) {
OS << CI->getName();
if (includeCategoryNamespace) {
OS << '(' << *CID << ')';
}
}
} else if (const auto *CD =
dyn_cast<ObjCContainerDecl>(MD->getDeclContext())) {

View File

@ -0,0 +1,14 @@
// RUN: not %clang_cc1 -ast-dump=json %s 2>&1 | FileCheck %s
// Ensure that dumping this does not crash when emitting the mangled name.
// See GH137320 for details.
// Note, this file does not compile and so we also check the error.
@interface SomeClass (SomeExtension)
+ (void)someMethod;
@end
// CHECK: error: cannot find interface declaration for 'SomeClass'
// CHECK: "name": "someMethod"
// CHECK-NEXT: "mangledName": "+[ someMethod]",