llvm / llvm-project

The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.
http://llvm.org
Other
26.78k stars 10.97k forks source link

misc-use-internal-linkage warns on exported functions #97190

Open cjdb opened 6 days ago

cjdb commented 6 days ago

The following code gets warned on by misc-use-internal-linkage (note that the definition is in another source file).

module;
#include <string>
#include <string_view>

export module greeter;

export std::string greet(std::string_view greeting, std::string_view name);
FAILED: source/module_interface/CMakeFiles/greeter_module.dir/greeter_module.cpp.o source/module_interface/CMakeFiles/greeter_module.dir/greeter.pcm 
/usr/local/bin/cmake -E __run_co_compile --tidy="/usr/bin/clang-tidy;-p=/build/test/default-options/tests/llvm/Output/Debug.test.tmp/build;--enable-module-headers-parsing;--use-color;--extra-arg-before=--driver-mode=g++" --source=/build/test/default-options/tests/llvm/Output/Debug.test.tmp/llvm_toolchain/source/module_interface/greeter_module.cpp -- /usr/bin/clang++ --target=x86_64-unknown-linux-gnu   -fdiagnostics-color=always -fstack-protector-strong -fvisibility=hidden -Werror -pedantic -Wall -Wattributes -Wcast-align -Wconversion -Wdouble-promotion -Wextra -Wformat=2 -Wnon-virtual-dtor -Wnull-dereference -Wodr -Wold-style-cast -Woverloaded-virtual -Wshadow -Wsign-conversion -Wsign-promo -Wunused -Wno-ignored-attributes -Wno-unused-command-line-argument -stdlib=libc++ -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FAST -fsanitize=address,undefined -fno-sanitize-recover=all -g -std=gnu++23 -MD -MT source/module_interface/CMakeFiles/greeter_module.dir/greeter_module.cpp.o -MF source/module_interface/CMakeFiles/greeter_module.dir/greeter_module.cpp.o.d @source/module_interface/CMakeFiles/greeter_module.dir/greeter_module.cpp.o.modmap -o source/module_interface/CMakeFiles/greeter_module.dir/greeter_module.cpp.o -c /build/test/default-options/tests/llvm/Output/Debug.test.tmp/llvm_toolchain/source/module_interface/greeter_module.cpp
/build/test/default-options/tests/llvm/Output/Debug.test.tmp/llvm_toolchain/source/module_interface/greeter_module.cpp:7:20: error: function 'greet' can be made static or moved into an anonymous namespace to enforce internal linkage [misc-use-internal-linkage,-warnings-as-errors]
    7 | export std::string greet(std::string_view greeting, std::string_view name);
      |                    ^
30786 warnings generated.
Suppressed 30785 warnings (30785 in non-user code).
Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well.
1 warning treated as error

System info

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04 LTS
Release:        24.04
Codename:       noble
$ clang --version
Ubuntu clang version 19.0.0 (++20240615071947+8cc6a2469c95-1~exp1~20240615071959.215)
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-19/bin
llvmbot commented 6 days ago

@llvm/issue-subscribers-clang-tidy

Author: Christopher Di Bella (cjdb)

The following code gets warned on by misc-use-internal-linkage (note that the definition is in another source file). ```cpp module; #include <string> #include <string_view> export module greeter; export std::string greet(std::string_view greeting, std::string_view name); ``` ``` FAILED: source/module_interface/CMakeFiles/greeter_module.dir/greeter_module.cpp.o source/module_interface/CMakeFiles/greeter_module.dir/greeter.pcm /usr/local/bin/cmake -E __run_co_compile --tidy="/usr/bin/clang-tidy;-p=/build/test/default-options/tests/llvm/Output/Debug.test.tmp/build;--enable-module-headers-parsing;--use-color;--extra-arg-before=--driver-mode=g++" --source=/build/test/default-options/tests/llvm/Output/Debug.test.tmp/llvm_toolchain/source/module_interface/greeter_module.cpp -- /usr/bin/clang++ --target=x86_64-unknown-linux-gnu -fdiagnostics-color=always -fstack-protector-strong -fvisibility=hidden -Werror -pedantic -Wall -Wattributes -Wcast-align -Wconversion -Wdouble-promotion -Wextra -Wformat=2 -Wnon-virtual-dtor -Wnull-dereference -Wodr -Wold-style-cast -Woverloaded-virtual -Wshadow -Wsign-conversion -Wsign-promo -Wunused -Wno-ignored-attributes -Wno-unused-command-line-argument -stdlib=libc++ -D_LIBCPP_HARDENING_MODE=_LIBCPP_HARDENING_MODE_FAST -fsanitize=address,undefined -fno-sanitize-recover=all -g -std=gnu++23 -MD -MT source/module_interface/CMakeFiles/greeter_module.dir/greeter_module.cpp.o -MF source/module_interface/CMakeFiles/greeter_module.dir/greeter_module.cpp.o.d @source/module_interface/CMakeFiles/greeter_module.dir/greeter_module.cpp.o.modmap -o source/module_interface/CMakeFiles/greeter_module.dir/greeter_module.cpp.o -c /build/test/default-options/tests/llvm/Output/Debug.test.tmp/llvm_toolchain/source/module_interface/greeter_module.cpp /build/test/default-options/tests/llvm/Output/Debug.test.tmp/llvm_toolchain/source/module_interface/greeter_module.cpp:7:20: error: function 'greet' can be made static or moved into an anonymous namespace to enforce internal linkage [misc-use-internal-linkage,-warnings-as-errors] 7 | export std::string greet(std::string_view greeting, std::string_view name); | ^ 30786 warnings generated. Suppressed 30785 warnings (30785 in non-user code). Use -header-filter=.* to display errors from all non-system headers. Use -system-headers to display errors from system headers as well. 1 warning treated as error ``` **System info** ``` $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 24.04 LTS Release: 24.04 Codename: noble ``` ``` $ clang --version Ubuntu clang version 19.0.0 (++20240615071947+8cc6a2469c95-1~exp1~20240615071959.215) Target: x86_64-pc-linux-gnu Thread model: posix InstalledDir: /usr/lib/llvm-19/bin ```
cjdb commented 6 days ago

Ah, greeter.cpp (the place where greet is defined) is also flagged.