<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/73559>73559</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            clang crashes when using C++ constructs in C code
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            good first issue,
            clang:frontend,
            crash-on-invalid
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          berolinux
      </td>
    </tr>
</table>

<pre>
    Clang (not clang++) crashes on a file that contains just "::", throwing an assertion that such code should be guarded by checking for C++.

Of course this is not valid C, but I'd expect clang to give a proper error instead of an assertion and a backtrace.

```
$ echo '::' >test.c
$ clang test.c
clang-17: /builddir/build/BUILD/llvm-project-17.0.5.src/clang/lib/Parse/Parser.cpp:2180: bool clang::Parser::TryAnnotateCXXScopeToken(bool): Assertion `getLangOpts().CPlusPlus && "Call sites of this function should be guarded by checking for C++"' failed.
PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
Stack dump:
0. Program arguments: /usr/bin/clang-17 -cc1 -triple x86_64-pc-linux-gnu -emit-obj -mrelax-all -dumpdir a- -disable-free -clear-ast-before-backend -main-file-name output-pstoedit-18c507.c -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 -debugger-tuning=gdb -fcoverage-compilation-dir=/tmp -resource-dir /usr/lib64/clang/17 -internal-isystem /usr/lib64/clang/17/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib64/gcc/x86_64-openmandriva-linux-gnu/13.1.1/../../../../x86_64-openmandriva-linux-gnu/include -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdebug-compilation-dir=/tmp -ferror-limit 19 -fgnuc-version=13.1.1 -fcolor-diagnostics -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -o /tmp/test.o -x c test.c
1.      output-pstoedit-18c507.c:1:1: current parser token '::'
 #0 0x00007f514409b796 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) (/lib64/libLLVM-17.so+0x489b796)
 #1 0x00007f514409a40a llvm::sys::RunSignalHandlers() (/lib64/libLLVM-17.so+0x489a40a)
 #2 0x00007f514409b0b4 (/lib64/libLLVM-17.so+0x489b0b4)
 #3 0x00007f513f2556f0 (/lib64/libc.so.6+0x3d6f0)
 #4 0x00007f513f2a49bc (/lib64/libc.so.6+0x8c9bc)
 #5 0x00007f513f255642 gsignal (/lib64/libc.so.6+0x3d642)
 #6 0x00007f513f23e4ad abort (/lib64/libc.so.6+0x264ad)
 #7 0x00007f513f23e3d5 (/lib64/libc.so.6+0x263d5)
 #8 0x00007f513f24e042 (/lib64/libc.so.6+0x36042)
 #9 0x00007f514a95d8a2 clang::Parser::TryAnnotateCXXScopeToken(bool) (/lib64/libclang-cpp.so.17+0x175d8a2)
#10 0x00007f514a880d4b clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&, clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier, clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*, clang::ImplicitTypenameContext) (/lib64/libclang-cpp.so.17+0x1680d4b)
#11 0x00007f514a9569ed clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec&, clang::AccessSpecifier) (/lib64/libclang-cpp.so.17+0x17569ed)
#12 0x00007f514a956874 clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*, clang::AccessSpecifier) (/lib64/libclang-cpp.so.17+0x1756874)
#13 0x00007f514a9555b4 clang::Parser::ParseExternalDeclaration(clang::ParsedAttributes&, clang::ParsedAttributes&, clang::ParsingDeclSpec*) (/lib64/libclang-cpp.so.17+0x17555b4)
#14 0x00007f514a9533ef clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/lib64/libclang-cpp.so.17+0x17533ef)
#15 0x00007f514a95247e clang::Parser::ParseFirstTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, clang::Sema::ModuleImportState&) (/lib64/libclang-cpp.so.17+0x175247e)
#16 0x00007f514a85aa16 clang::ParseAST(clang::Sema&, bool, bool) (/lib64/libclang-cpp.so.17+0x165aa16)
#17 0x00007f514cc3a36b clang::FrontendAction::Execute() (/lib64/libclang-cpp.so.17+0x3a3a36b)
#18 0x00007f514cba10b9 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) (/lib64/libclang-cpp.so.17+0x39a10b9)
#19 0x00007f514ccb4af9 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) (/lib64/libclang-cpp.so.17+0x3ab4af9)
#20 0x00005642b7f49671 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) (/usr/bin/clang-17+0x16671)
#21 0x00005642b7f45e50 (/usr/bin/clang-17+0x12e50)
#22 0x00005642b7f446e1 clang_main(int, char**, llvm::ToolContext const&) (/usr/bin/clang-17+0x116e1)
#23 0x00005642b7f54442 main (/usr/bin/clang-17+0x21442)
#24 0x00007f513f23fc0a (/lib64/libc.so.6+0x27c0a)
#25 0x00007f513f23fcc5 __libc_start_main (/lib64/libc.so.6+0x27cc5)
#26 0x00005642b7f41f11 _start (/usr/bin/clang-17+0xef11)
clang: error: unable to execute command: Aborted (core dumped)
clang: error: clang frontend command failed due to signal (use -v to see invocation)
OpenMandriva 17.0.5-1 clang version 17.0.5 (/builddir/build/BUILD/llvm-project-17.0.5.src/clang 67c77eb4750e684d5c3fa07b1014bf3def1e9277)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/bin
clang: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang: note: diagnostic msg: /tmp/test-a39e9d.c
clang: note: diagnostic msg: /tmp/test-a39e9d.sh
clang: note: diagnostic msg: 

********************
```

The same thing happens in real world code where, for example, a C application tries to `#include` a header containing C++ constructs, such as

```
extern void a(const char* b, std::ostream & c, bool d);

int main(void)
{
}
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWVtv27jy_zTKy4CGRN3shzy4dtwGSP8pmuzlLaDIkcytROpPUmn67Q9IyYnlpEm2e7A4hevI1HDmNxcOh0NmrWwU4nmUf4jy7Rkb3F6b8wqNbqUaHs4qLX6cb1qmGojoUmkH3P-I6IfwWQE3zO7RglbAoJYtgtszB1wrx6Sy8NdgHUSURunafyiN6Abc3ujvUjXAFDBr0Tip1TjRDnwPXAsEu9dDK6BCaAZmBAqofgDfI__mZ9bawGaEsYjibRSvx-_rGrgejPU4pAVpwYO-Z60Unn4D1eDgMqKlAHzokU8KgdPQyHsEBr3RPRpAY7QBqaxDJkDXc6xMCWBQMf7NGcZxBiEq4ukz_qQZIN9riGh5sEIJUXrh0LoFfyKagByNhhGS-GkQ0V01yFYIaQ6PEd19-O3yahvRXdved6Q3-i_kjiTlIl7kC2t4RHeTv3atrCK6-8KMxcNfs-B9H6VrmixjL6LSup38G3COROPzrfmxVko75nDz5583XPd4q7-hiujST4voynNYPxooKuIG3RVTzXXvbESXEV0tNl_awfr_ENEiooUPjA1rW7DS-RiqR6fVg-KBybtDIMRVCTWTLYrJGV-uLtY3F2CHqpPOO2towGCvjfPO3jvX2-CLXUR3jXT7oVpw3U22PDFpRHfS2gFtRHfB91LxdhA-yHBcAk-x4IOsN9gbzdFaFGD1YMbhEDXWai6ZQwFmUGC5kb2bIN84xr-BGDrvlXEoXsAXoxvDOmCmGTpUzk7hMNgQCVIdvEySEgjnCRBnZN8iPCyLuyIjPSdhNZNGDUCwk47o6i8gncGWPRDvAOKFCmmAESBCWla1SGqDCIS3yAxh1pEKa22QeE1RCSAdk4r4NU8U6xD04PrBkd46jUI6kix5HpcLPgrSnHmfkk4LbKGXHEgvOWnxHlug4w9pSS8RSFcb1iHptVTOB-A2QKw75vYEjVEaSF33xCcZw7iL0q1WQGqlidGDElI1xNMC6bhW1pmBO20IayWzaIHUg_oulSDOa2mjdEuBOGYadIT3g7caKTIgblAYBhpUaDxggdXQNGj8K-lXybYRFZCa63s0rEHCddfLdlTUL9TUr03X9UAMjmHgh5-c18qqyI4WqXdg0Fmxlkj7wzrsXqP2cTlF4mvzNGft-0jHaFosjqQ13KeRKZR0j6pjShh5z56CymNJF8kiOcw9-Xpr8nNg-OAf-DHAdxGNWjyS1sFjr7ilDmmetNLniGQFpG7UwMk9Giu1itLtqFfwcasNEZI1SlsnuY8jJoSxsgGyvbv7uNncfVr_fnG3_WP9dUfvNrvLu_XNZ88CiE_-XqD_9vldA3kAPsv1yQLCv5-toihdJ9N_4IMxqBz0IUGD84l4tr2MLCGiaQzxQxzHcVnnSZbFq6pcFRAyXKC1P-yU641ULuSf2zGJLZ-IDPt-p60zyLqQtzcglfObf0jrj4HSyurq6vfPfvuxOqIf4odsGeT5zeERUHICiGUxewnQ10HdyEax9hNTokUz7SHvkelZzmTSUyPEVfYu8HGVzRilR4zSmuZ5UcfPGfGF1YsiMElFUcczFtmcBctWFX-VxZKvKj5jkT9DkVFobLDWW2gyOmNVzFmlmDEBrPKb5GuMaJExMWNUnjJKRf4Gi1TkMxbLOYsM44y-rk4Rn6izOnY0W-ViyeivVzQvCA_bLO97D8Kn3w_xQ1IGMY84fIzPVh1bLmORVT_DEZ63yFtmQoa66ZHLWo4RfzTHk_h30xJ8jZu4xa5vmcNLVWsIe-DzWWvu65NHaa_wPEjeaOXwwb1CecUcjgjWzpkr6eWuT-gvu76VXLrbHz36uuGR63vtXQRzzuydnPi9WKF4097XZjcVmlusL6dNZW7zJ11kNThf_r1o-zcppGp-7r5njnh_4Hk9Z4agp4ZYltl7A29mD6mkf_oXzHEaH__EHMsym5kjPTFHnlevm-PiYQyDI7P8OyZ4v5Jeh5mS2YmSaYr1q0re6v7Kl90ewFy76579_4BfnInSzUnq-Wj00H_FOkovnmt0gx0bnz5rMbR42flz1o3PrYH4_dp58DPt8hPtaFbiq9rtpLHuf1lFr8FMxWK-W-SMJcUzFdc3t3NFAqAR5rhfHf6-O48GQTMkx7t4xnnK0mK2b-2MT9ZKrEOaGMcuHpAP3ggvl2cviU5Z4DwTvZyJrlgSV6tj0ZtQw6O5VNYxxXEmfMIzs88J1r_ho3QVpM_greaWqTJWz-BNQJ5Q3k8H3jmoZ1r8jbWfsiD1GBY9FBq-BKzKOlsVZQKcJ3f-bD4r4tfGsB8huDd8z8yhKliHYN_AfIxu4F5LMUP3UrthCqSiTGaokhNUOebxm1wo5vGMCz3hkhWYjCY_aBeOISP2ADUAf1L5Vut2qi6OiqC39UkKnOuTzpHkWZZR8BjeYkWTLJtVhvSk_E9rHrPX6-SSH51mPIv8GQuew92dn3ZnHTPu7gjaT5nyfMa0ODF2UicJjOzeUhLr5Mlch1gf-6f-YVCsahGcBhzXCHDddUyJ0DD0Rw0UXgTXBkPv66ikec5tbJLW09o-sJo6fyCGIOjpKDRYBHIfxhBBHq3KScJ1j-rz1JOAsXFKpiiDqQswDU9m-PUmLBQlL0ussjKPsVhmIudpzeKySuIkq-pUYJ3gipblI7jb0JTyar_QyZtI9gaZgNBV84S9tvJhfBVyTNui2ErzrGU4N6_SzidUeGpvQGfDm0OE_IPPUWt86smub2_Xm09w--kCdtdXV9d_XP7fR9hdXl3cwO11GP7w20f4evHl-uvtYyf0y0s91aX1C_qnfdVHAoMQOpAogLlHlu_R_7hvQ1i6wpWYted_Ybrd_13z_7eccHIzMUUQgmVduDBRDexZ36OyIBUYZC1816YV443M9z2a0MeutQF8YF3fjm1t2ADr_amOjRc5RqL1a85LounUjYuKGBjskQk0h_shL3Bq4cNjq9Z6nuEeiNlX7lXG7l_Yp4CF_KGsO-wFUAUmTow7wdS9gogWwA-VEoQ8k344liGVg2lzGTfAQ4osD2Tl9gTNmThPxSpdsTM8T8o4SZIiKbOz_fmyyJY546IqeB2LKudpTJN66XdDFvOSnclzGvvDKy1pnBRJtiirNEnLZCloitWqSKIsxo7JduEzy0Kb5izcQpyXaZ6vzlpWYWvD1R2ljdYCal_6QqAZb9oiSg9BdkiZTy8Ms3uiFZEqXI_5F_n2zJyHNFYNjY2yuJXW2SfxTroWz8dsdrj5-75HBYN92ZU-jDYhes4G057_-q1LUPk_AQAA__8SlaQw">