<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/58888>58888</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[C++20] [Modules] [clangd] We shouldn't see Macro Definition in the importee
</td>
</tr>
<tr>
<th>Labels</th>
<td>
clangd,
clang:modules
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
ChuanqiXu9
</td>
</tr>
</table>
<pre>
Currently, the macro definition in a named module unit can be found in the importee by clangd. However, this is incorrect since the Macro Definitions inside a named module unit is invisible outside the TU.
Following is a simple reproducer:
```
// A.cppm
export module A;
#define MODULE_NAME A
// main.cpp
import A;
void foo() {
return MODULE_
}
// compile_commands.json
[
{
"directory": "/home/chuanqi.xcq/workspace.xuchuanqi/cxx-modules-examples/duplicate_header",
"command": "/home/chuanqi.xcq/workspace.xuchuanqi/llvm-project-for-work/build/bin/clang++ -fprebuilt-module-path=/home/chuanqi.xcq/workspace.xuchuanqi/cxx-modules-examples/duplicate_header -std=c++20 -o /home/chuanqi.xcq/workspace.xuchuanqi/cxx-modules-examples/duplicate_header/main.cpp.o -c /home/chuanqi.xcq/workspace.xuchuanqi/cxx-modules-examples/duplicate_header/main.cpp -I.",
"file": "/home/chuanqi.xcq/workspace.xuchuanqi/cxx-modules-examples/duplicate_header/main.cpp"
}
]
```
And compile them by the following command:
```
clang++ -std=c++20 --precompile -c A.cppm -o A.pcm
```
Then in the editor, when we type `MODULE_` in main.cpp, we'll get:
![image](https://user-images.githubusercontent.com/68680648/200776839-001331bb-3074-4044-b3e1-32cd583331c7.png)
But this is clearly incorrect.
---
BTW, although the bug shows in clangd, we should fix it in the clang part.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJy1VUtv4zgM_jXORbAhP-LHwYc0mWIX2O5eOpi5FbLMxJqVLY8lN-m_X9KPNukUc1ighhFHFMXHR-pjZeqXcj8OA3ROv3jRnrkGWCvkYFgNR9Upp0zHVMcE60QLNWtNPWpgI-4wKTpWATuasatJh86qtjeDA2DVC5NadKc6YH-YMzzDMJtXltHbSYNepWMW_8J09GFye3h1S1pW1fCh78nGs7KqQokZ3aRIVh6_Bh4_eHw3_94brc1ZdSc6IdBb2-OBAfoBjUkMKt5dq3spX955Gd3jy3aB7Pt2FsGFElxj2Xnx3aoaT4hhHv8cvv715env3cMXdmt8ttYK1ZHBWTgDdmXo2agaMTVelHtRwbxskTN8BnDj0K0eFqvZ4QMn0rS90vCE31Z0tQ1-WNMtGtsrizfmcRlFtaK6mAHbIUJ0SIQGG9MCfmQziu6nCi7yJ67OZvjX9kJCcBmXHdK5XPwZHuvDRRDgFsX12GslhYOnBkRN7YB29--cL-H-X9daP7c-lvYHZuAfzeCTGsqrUemavqojS9SXXnSHL2P-sR-A9t0StN8L13jx4VOSZr51NRqXs_uIM9-wT4L3fm20wDBffroX5v8ZfFjTI_bhp_fSaxjk4qq717uxPXx8waffHfLXcmGIQ1oiL-KS4yt5rH35W7a47qtf64x9CasTLMfMKVT-XdDL9jfRPTbQrfQKtcKrSUx6JukZ433pgeGJlRNSTrpvaKAmgp1pzU7g3scfhUgGqhUnIICivHGut6Q0kchoYfCnXRuclGvGiiTSdA7HRYC5oE6apzlPE6Sq-4jzLEvzuPA5D-M4rCo_5lniJzxJ_CqG0I8jWW_zGPdkFvSEVXEdzt3oXgeE1CAG_fI2KG5Y3ff9m4OP3yhRoV1jxlMzIVWNJ2Ybc6Y5sUyiGQySjhopVl0YDZIZ2EmD9WJwAdtAGaZpVuRRlPFNXcZ1ERdi45TTUCJg-7WoCBrD9cPcoMtq8YWLb6svJJ0MJx38OuPej83NOOjytgoz8gvcRHDveA6XytpxuhfbHJ9NU_Jjto1BpElRJMc8DrkEmaQ8TOIYkjjlGy0q0JaSIdJd0KG7y9Y1-l8uHm1sDxtVRjyKwpAXPI-SmAfbqE6327rgYQjpUXAv4YB9pwOKLjDDaTOUU6BYCoubWlln3zaFterUwYQo2RcjVm8o9_Pd_z4WmymtcsrpP5J_tAs">