aaron.ballman added inline comments.
================ Comment at: clang-tools-extra/test/clang-tidy/checkers/modernize-use-using.cpp:305 }; + +extern "C" { ---------------- steveire wrote: > njames93 wrote: > > steveire wrote: > > > Can you add tests for typedefs in other scopes like > > > > > > ``` > > > > > > extern "C" { > > > typedef int CType; > > > > > > struct CAnother { > > > }; > > > > > > typedef struct { > > > int b; > > > typedef struct CAnother AStruct; > > > } CStruct; > > > > > > void foo() > > > { > > > typedef struct CAnother AStruct; > > > } > > > } > > > > > > ``` > > I'm not sure those tests add any value. For the struct, you can't have a > > typedef in a struct in c. The function typedef is valid in c, but I still > > can't see a reason to use extern C when defining a function in c++ > Fair enough - Clang accepts the typedef in the struct with a warning, but it > doesn't get transformed by the check anyway. The one in the function doesn't > get transformed either, and if functions are so unlikely to appear in extern > C, that it doesn't need to be covered, that's fine with me. > I still can't see a reason to use extern C when defining a function in c++ There are a few reasons. 1) You're defining an extern linkage function with C language linkage and not providing the declaration or you're being consistent between the declaration and the definition. 2) You have an `extern "C"` block that contains function definitions. 3) Pedantically, if the function declaration is `extern "C"`, the function definition must be as well (http://eel.is/c++draft/dcl.link#1.sentence-5, http://eel.is/c++draft/dcl.link#6), however, many compilers ignore these requirements because otherwise the STL has issues. So it definitely does happen in the wild. As some examples: https://codesearch.isocpp.org/actcd19/main/b/bali-phy/bali-phy_3.4+dfsg-1/src/builtins/SModel.cc https://codesearch.isocpp.org/actcd19/main/o/openjdk-11/openjdk-11_11.0.3+1-1/test/hotspot/jtreg/vmTestbase/nsk/jvmti/AttachOnDemand/attach015/attach015Agent00.c https://codesearch.isocpp.org/actcd19/main/m/mp3fs/mp3fs_0.91-1/src/transcode.cc https://codesearch.isocpp.org/actcd19/main/t/theano/theano_0.8.2-6/theano/sandbox/cuda/cnmem.cpp Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D96725/new/ https://reviews.llvm.org/D96725 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits