<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/63540>63540</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
Segmentation fault when dumping AST of an Objective-C source file into JSON.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
DongShuaike
</td>
</tr>
</table>
<pre>
The bug occurs when executing `clang::MangleContext::mangleObjCMethodName,` as shown in the figure below. The `MD->getClassInterface()` function returns a NULL object, and attempting to execute `getName` on it results in a null-pointer dereference. The bug seems to be existed from clang 13-16 (as far as I have tested).

The example code in my case:
```objective-c
#import "HYMediator+ContactsModule.h"
NSString *const kTargetContacts = @"Contacts";
@implementation HYMediator (ContactsModule)
- (void)HYMediator_applyForPermission:(void (^)(BOOL, NSError *))handler {
NSDictionary *param = @{@"handler" : handler};
[self performTarget:kTargetContacts action:@"applyForPermission" params:param];
}
- (NSArray<NSDictionary *> *)HYMediator_fetchAllLocalContacts {
return [self performTarget:kTargetContacts action:@"fetchAllLocalContacts" params:nil];
}
- (void)HYMediator_contactsDidChanged:(dispatch_block_t)handler {
NSDictionary *param = @{@"handler" : handler};
[self performTarget:kTargetContacts action:@"contactsDidChanged" params:param];
}
@end
```
CMD to reproduce the bug:
```
clang -Xclang -ast-dump=json test.m -fno-color-diagnostics
```
Stack Dump:
```
Stack dump:
0. Program arguments: /usr/lib/llvm-15/bin/clang -cc1 -triple x86_64-pc-linux-gnu -emit-obj -mrelax-all --mrelax-relocations -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name test.m -mrelocation-model pic -pic-level 2 -pic-is-pie -mframe-pointer=all -fmath-errno -ffp-contract=on -fno-rounding-math -mconstructor-aliases -funwind-tables=2 -target-cpu x86-64 -tune-cpu generic -mllvm -treat-scalable-fixed-error-as-warning -debugger-tuning=gdb -fcoverage-compilation-dir=/home/dsk/Playground/clang_error -resource-dir /usr/lib/llvm-15/lib/clang/15.0.7 -internal-isystem /usr/lib/llvm-15/lib/clang/15.0.7/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdebug-compilation-dir=/home/dsk/Playground/clang_error -ferror-limit 19 -fgnuc-version=4.2.1 -fobjc-runtime=gcc -fobjc-encode-cxx-class-template-spec -fobjc-exceptions -ast-dump=json -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/test-fe92c5.o -x objective-c test.m
1. <eof> parser at end of file
#0 0x00007f5c718ebe91 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/usr/lib/llvm-15/bin/../lib/libLLVM-15.so.1+0xf01e91)
#1 0x00007f5c718e9bde llvm::sys::RunSignalHandlers() (/usr/lib/llvm-15/bin/../lib/libLLVM-15.so.1+0xeffbde)
#2 0x00007f5c718ec3bb (/usr/lib/llvm-15/bin/../lib/libLLVM-15.so.1+0xf023bb)
#3 0x00007f5c7b409420 __restore_rt (/lib/x86_64-linux-gnu/libpthread.so.0+0x14420)
#4 0x00007f5c787fbaf7 clang::MangleContext::mangleObjCMethodName(clang::ObjCMethodDecl const*, llvm::raw_ostream&, bool, bool) (/usr/lib/llvm-15/bin/../lib/libclang-cpp.so.15+0xe7faf7)
#5 0x00007f5c787fc1d3 (/usr/lib/llvm-15/bin/../lib/libclang-cpp.so.15+0xe801d3)
#6 0x00007f5c787fc2fa clang::ASTNameGenerator::getName[abi:cxx11](clang::Decl const*) (/usr/lib/llvm-15/bin/../lib/libclang-cpp.so.15+0xe802fa)
#7 0x00007f5c787ece57 clang::JSONNodeDumper::VisitNamedDecl(clang::NamedDecl const*) (/usr/lib/llvm-15/bin/../lib/libclang-cpp.so.15+0xe70e57)
#8 0x00007f5c787efa34 clang::JSONNodeDumper::VisitObjCMethodDecl(clang::ObjCMethodDecl const*) (/usr/lib/llvm-15/bin/../lib/libclang-cpp.so.15+0xe73a34)
#9 0x00007f5c787e380a clang::JSONNodeDumper::Visit(clang::Decl const*) (/usr/lib/llvm-15/bin/../lib/libclang-cpp.so.15+0xe6780a)
#10 0x00007f5c7853a202 (/usr/lib/llvm-15/bin/../lib/libclang-cpp.so.15+0xbbe202)
#11 0x00007f5c78548e8b (/usr/lib/llvm-15/bin/../lib/libclang-cpp.so.15+0xbcce8b)
#12 0x00007f5c78539e52 (/usr/lib/llvm-15/bin/../lib/libclang-cpp.so.15+0xbbde52)
#13 0x00007f5c7853a383 (/usr/lib/llvm-15/bin/../lib/libclang-cpp.so.15+0xbbe383)
#14 0x00007f5c78548e8b (/usr/lib/llvm-15/bin/../lib/libclang-cpp.so.15+0xbcce8b)
#15 0x00007f5c78539be0 (/usr/lib/llvm-15/bin/../lib/libclang-cpp.so.15+0xbbdbe0)
#16 0x00007f5c7852d92b clang::Decl::dump(llvm::raw_ostream&, bool, clang::ASTDumpOutputFormat) const (/usr/lib/llvm-15/bin/../lib/libclang-cpp.so.15+0xbb192b)
#17 0x00007f5c79f41e9f (/usr/lib/llvm-15/bin/../lib/libclang-cpp.so.15+0x25c5e9f)
#18 0x00007f5c784088fb clang::ParseAST(clang::Sema&, bool, bool) (/usr/lib/llvm-15/bin/../lib/libclang-cpp.so.15+0xa8c8fb)
#19 0x00007f5c7a02dcb7 clang::FrontendAction::Execute() (/usr/lib/llvm-15/bin/../lib/libclang-cpp.so.15+0x26b1cb7)
#20 0x00007f5c79fa1ca6 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/usr/lib/llvm-15/bin/../lib/libclang-cpp.so.15+0x2625ca6)
#21 0x00007f5c7a0ab6ba clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/usr/lib/llvm-15/bin/../lib/libclang-cpp.so.15+0x272f6ba)
#22 0x0000556f1276391f cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/lib/llvm-15/bin/clang+0x1391f)
#23 0x0000556f12761b1b (/usr/lib/llvm-15/bin/clang+0x11b1b)
#24 0x0000556f1276196c clang_main(int, char**) (/usr/lib/llvm-15/bin/clang+0x1196c)
#25 0x00007f5c704ce083 __libc_start_main /build/glibc-iA3wr8/glibc-2.31/csu/../csu/libc-start.c:342:3
#26 0x0000556f1275e32e _start (/usr/lib/llvm-15/bin/clang+0xe32e)
clang: error: unable to execute command: Segmentation fault
clang: error: clang frontend command failed due to signal (use -v to see invocation)
Ubuntu clang version 15.0.7
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
clang: error: unable to execute command: Segmentation fault
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWV1v27jS_jXMDUFDoj59kQvHrnf7okmLdXffc64MihrJbClSIKnE-fcHpPwlN1u0uz6LAwSOPsh5nmc4HA4pZq1oFcA9yh5Qtrpjg9tpc7_Sqt3sBia-wl2l69f7zzvA1dBizflgLH7ZgcKwBz44oVqM8ohLplqULFCyeGSqlbDUysHejY-68Ohj9WX5CG6n6yfWAaJLlEeYWWx3-kVhobDbAW5EOxjAFUj9MsMeF-XR44qg5F0LbimZte-VA9MwDoiWiM69lWZQ3AmtsAE3GGUxw0-_f_iAdfUFuEN0iZmqMXMOuj5QdvrAP9hvwQVKeYS1wsJhA3aQznpSDKtBStJr4WFxDQYaMKA4jPS8WyxAZ73NCjDshXVQ48boDge34DghcY4RLZnFDTNe83u8Y8-AHfi2iM5nKFqhaHH4pTHKHkTHWkDZCtFy51xvvSvpGtF1K9xuqGZcd4iupXw-_iO90aPcNbMWnEV0XZZFFhUJouuaxlDUcUOSfM5IWlYZmce0IFEaM8jTZB7HlffmBQ8vD_as6yVgrmvw7uheMWcWPJmxZR6Nf6OrxTMQflSRiK7XxmFE6a__foRaMKcNog8-Nhh39lHXg4TZDlE6dnnabJwJEUUXXCvr8NfPzPhxP_TAKFlhlEaI0uMj3zl5OECmkfBsO1COhXg443r_T4FPaol_96yFH4hzhy3re_m61uYTmE5YK7QKQxBa-h4oe-dN0PLh48cPPsaeNu-MCUiL8GK-Y6qWYDAqDgTx02YlQqQy8-rb9cyw7qSqeBi1HfohSjFKFvh4W6xOSjHGGGUPFmSDezCNNt3oKZQsrn3GAqDnHoy_IYtSHIj4GAsXPuxOTi1WF2562iyMYa8oWV5LQcm7g_ILHzbg-G4h5QfNmTyPYnEhY5yyf1XNmwATQUrIP5fz7ajzg42VqJc7plqox1Gvhe2Z47ttJTX_unX_q8P7Bv8fG16URqDqq1k93i4fVz67GeiNrgcOIVNXQ_ttFhhvx7RH_nX4z6wj9dD1KFl9sVqFrDfrMGmUJlxLbUgtWKu0dYJb_KbF8XfjGP-KV8HU28hji_qyRTRD0fyT0a0fCmbawWcH7wqM6HqwxmdPUR1zaJwhuq6EQnR9YM95jIkzwmfBfZlv85T0nEihhj1p1YAJdMIRXX3BpDMg2Z4wKTE53hiQmodkZDGphWWVBNIYAEy4BGaCdypotAFSMf4VVH1uFyg9gxGNABMec2Zq8szkAESxDiwmHROKNEKOD07O7c7ApNM1SNwLjkkvOJHwDBLT8UZY0gvApGsM6-C4zqFkFVQ0HXM7AsYojUnT9MSHl2HcoWSl1TiERg-qFqolvi0mXcjcZuBOG8KkYNazbAb1IlRNnNdlUbKimLgQyIT3g3csyVNM3KAgPGhBgfGEO-8DPwDAHLGcydGBYg-15-UxLHlhRvl1g9RQDW0LxhsSviJZtXWFScP1MxjWAuG664Uc3VILrxPR9U77emRd26-Irj9J9toGTccY2AYcTAxYPRgOvuOfB894PxZEdB1ns2hWYBK8qpgkwr5aB93P9Ud0LRSXQw3fteRz4I81HSN8NjvhtZwjuj7E9ym4EV3Pj-2uft5o-i0u7P0F_xb_0PQNO9_v_fMQmDQhKP7WyDdjpEnRCYfjOSZNqwbuZ-ZYFqzSGZ3FmDS6-sKJGZQTHfjg4_z4EJQvoQjf7wn3VSzxtahkDojt4dxqz6E_JIvrtEkaVtfGihaT1Xb7y3K5_XXxx7vt6v8Xv63pdrl-v11sHlGyijHR3g2u6_0vWEcamFOezTQme3xRqB2SxZgnY58nUbIE3filvGfGgsHMYZ-RdIN9ijmsTogmEY72URRFRZPxIi6hgnmMQzEaKn77aseLT0YoF7LyZzOW7OdGhr1stfUzu0M09xWUUH5dDcXV93PzReRKUX348McjibOZ1bMY0Ydo30QxzONTgecJx1eE51UNbxH-bVAb0Somfx2XZTvuMv4-J2iaqoYJJ3rFiSdVdQvxNKmqCVByCVSl0TylEd5uDVinDWxDjV6ejL4xtaWoerczwGqPEwWcOE1pNIFJL2HKoqlYU-C_sjUsLzqd362ASxxWl1BnLvH3QqnSWp7___z4BQaE931wbDYOYdGwpphIzq4k87hOboNVRnGdTLDyayzasEv3Ljafvft-8Utn2GqFp8fNbfbAKoGSBd_v43jcV170vfLtjfxVRrRhEw3FVANwyCYh8n-bj09PugZf5MFBwR_CiqAhRMCU9-nx7ckXEWTTwS6vyDcsSX-I_DSGfzC-byUjYUk6kTG_kpGUEfshGf9EyORFGZ1DxifuyVJTZgmjEb0JVlUBjegEK55ipSWUP5-R38TiHMpqgkWvdM0hu5WuGrKpruTah0l5mzRVVZCUyQQr_Qd9mF37sILoVj6sIJpgTdNvRus5rfDVfBivQtX2_UrnuDxN07efcR8H1w9urU3HQjE0HoTdRlM8p1P_TdLxvEljmDc3waIZz2DeTMCm6TONyrKZOPCTLzkXm8_TNLOBjv0X13RW8rKZOmWSH1lEa15N1qi18RWMqhenk5dk8W48Tf6LxeKbHsyrmFfFJTMaTYeLxZzll8yWYY8D5r2yjikOE24HuhPnXknxbr4Ve5pxlk_Yx1O_siqvJuvOgedZxPPhAGPK-RuRt1t9aEGbvJosP_SYprMsb2Ja5Mk8bjDn8bZj3urFLA8no79Bg5Il3zFzXhuTd2GqT57RJR4PH3-Q_OFAwNfdnsGEYnJFMa7iH8m4FyZ9j4nJ9NrkPOfjWB11h73aqCqI-Hkd3uYEdJLNo5RDVCZ4u_WDtbWOGRew_d62GoT0u_TWvyNikbyY8nRLZ0nskexwHPTxMrwMdmYcJYskpf73DJ9PNWeQUMAj8E8J8_1Ouo6Bi8MRgr8YFKskXH6C4rrrmKr9yw20568XDRuk-zMz4_Fkc5jARxu4YUJCjeshINiwlfXsBwuYPIdnAFhczK0D0d-rQbnhYPZwsoEPx0_j56DjCfRbx6DHL0Z-i4jDeaNv2Gsr9uOrMFulhHolzOTw1Xvvlp46nQjf1fdJPU_m7A7u47wsyiyel8Xd7p6nEatp3CR1NK_SOs8hmUdFGhV1mtdVmt2JexrRJMppERVpTotZWecAlEecNXXMkgqlEXRMyJkPgpk27Z2wdoD7PMnS6E6yCqQN31QpVfCCw0tEKcpWd-Y-BE41tBalkRTW2bMVJ5yE-2-V4fGTq68rhGrxYvMZ6wYzhT-eDnOWeDycDOc0WCinsa_jZ3eDkfc__QExMLaIroOi_wQAAP__pGAttQ">