Open T-Maxxx opened 1 year ago
I can not force clang-check to load custom plugin and dump AST to see how custom attributes parsed. Is it possible?
clang-check
Clang version: clang++13 and clang-check-13 from apt-get on Ubuntu 22. Clang plugin code: Attribute.cpp from example
clang++13
clang-check-13
apt-get
Attribute.cpp
Plugin compiled out of Clang tree using CMake and find_package(Clang REQUIRED) feature and following configuration:
find_package(Clang REQUIRED)
add_library(clang_example_plugin SHARED Attribute.cpp) target_include_directories(clang_example_plugin PRIVATE ${CLANG_INCLUDE_DIRS}) target_link_libraries(clang_example_plugin PRIVATE clangTooling)
Example source file with custom attribute (source.cpp):
source.cpp
[[plugin::example]] int foo() { return 0; };
I got following results. Command 1. Compile source file using example plugin:
clang++ --verbose -fsyntax-only -fplugin=/home/user/projects/clang_example_plugin/build/src/libclang_example_plugin.so /home/user/projects/clang_example_plugin/tests/source.cpp
Output: new attribute added, no warnings appear, everything seems fine:
Ubuntu clang version 13.0.1-2ubuntu2.1 Target: x86_64-pc-linux-gnu Thread model: posix InstalledDir: /usr/bin Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/11 Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/11 Candidate multilib: .;@m64 Candidate multilib: 32;@m32 Candidate multilib: x32;@mx32 Selected multilib: .;@m64 (in-process) "/usr/lib/llvm-13/bin/clang" -cc1 -triple x86_64-pc-linux-gnu -fsyntax-only -disable-free -disable-llvm-verifier -discard-value-names -main-file-name source.cpp -mrelocation-model static -mframe-pointer=all -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -v -fcoverage-compilation-dir=/home/user -resource-dir /usr/lib/llvm-13/lib/clang/13.0.1 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/x86_64-linux-gnu/c++/11 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/backward -internal-isystem /usr/lib/llvm-13/lib/clang/13.0.1/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir=/home/user -ferror-limit 19 -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -fcolor-diagnostics -load /home/user/projects/clang_example_plugin/build/src/libclang_example_plugin.so -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -x c++ /home/user/projects/clang_example_plugin/tests/source.cpp clang -cc1 version 13.0.1 based upon LLVM 13.0.1 default target x86_64-pc-linux-gnu ignoring nonexistent directory "/usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include" ignoring nonexistent directory "/include" #include "..." search starts here: #include <...> search starts here: /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11 /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/x86_64-linux-gnu/c++/11 /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/backward /usr/lib/llvm-13/lib/clang/13.0.1/include /usr/local/include /usr/include/x86_64-linux-gnu /usr/include End of search list.
Command 2. Make sure there's a warning about custom attrribute compiling without custom plugin. Just in case:
clang++ --verbose -fsyntax-only /home/user/projects/clang_example_plugin/tests/source.cpp
Output: got expected warning. So plugin works:
Ubuntu clang version 13.0.1-2ubuntu2.1 Target: x86_64-pc-linux-gnu Thread model: posix InstalledDir: /usr/bin Found candidate GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/11 Selected GCC installation: /usr/bin/../lib/gcc/x86_64-linux-gnu/11 Candidate multilib: .;@m64 Candidate multilib: 32;@m32 Candidate multilib: x32;@mx32 Selected multilib: .;@m64 (in-process) "/usr/lib/llvm-13/bin/clang" -cc1 -triple x86_64-pc-linux-gnu -fsyntax-only -disable-free -disable-llvm-verifier -discard-value-names -main-file-name source.cpp -mrelocation-model static -mframe-pointer=all -fmath-errno -fno-rounding-math -mconstructor-aliases -munwind-tables -target-cpu x86-64 -tune-cpu generic -debugger-tuning=gdb -v -fcoverage-compilation-dir=/home/user -resource-dir /usr/lib/llvm-13/lib/clang/13.0.1 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/x86_64-linux-gnu/c++/11 -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/backward -internal-isystem /usr/lib/llvm-13/lib/clang/13.0.1/include -internal-isystem /usr/local/include -internal-isystem /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -fdeprecated-macro -fdebug-compilation-dir=/home/user -ferror-limit 19 -fgnuc-version=4.2.1 -fcxx-exceptions -fexceptions -fcolor-diagnostics -faddrsig -D__GCC_HAVE_DWARF2_CFI_ASM=1 -x c++ /home/user/projects/clang_example_plugin/tests/source.cpp clang -cc1 version 13.0.1 based upon LLVM 13.0.1 default target x86_64-pc-linux-gnu ignoring nonexistent directory "/usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include" ignoring nonexistent directory "/include" #include "..." search starts here: #include <...> search starts here: /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11 /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/x86_64-linux-gnu/c++/11 /usr/bin/../lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/backward /usr/lib/llvm-13/lib/clang/13.0.1/include /usr/local/include /usr/include/x86_64-linux-gnu /usr/include End of search list. /home/user/projects/clang_example_plugin/tests/source.cpp:1:3: warning: unknown attribute 'example' ignored [-Wunknown-attributes] [[plugin::example]] int foo() { ^~~~~~~~~~~~~~~ 1 warning generated.
Command 3. Trying to dump source.cpp AST with custom plugin:
clang-check-13 -ast-dump --extra-arg="--verbose" --extra-arg="-fsyntax-only" --extra-arg="-fplugin=/home/user/projects/clang_example_plugin/build/src/libclang_example_plugin.so" /home/user/projects/clang_example_plugin/tests/source.cpp
Output: warning appeared like there's no plugin loaded, AST dump contains no information about custom attribute:
Error while trying to load a compilation database: Could not auto-detect compilation database for file "/home/user/projects/clang_example_plugin/tests/source.cpp" No compilation database found in /home/user/projects/clang_example_plugin/tests or any parent directory fixed-compilation-database: Error while opening fixed database: No such file or directory json-compilation-database: Error while opening JSON database: No such file or directory Running without flags. Ubuntu clang version 13.0.1-2ubuntu2.1 Target: x86_64-pc-linux-gnu Thread model: posix InstalledDir: /usr/lib/llvm-13/bin Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/11 Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/11 Candidate multilib: .;@m64 Candidate multilib: 32;@m32 Candidate multilib: x32;@mx32 Selected multilib: .;@m64 clang Invocation: "/usr/lib/llvm-13/bin/clang-tool" "-cc1" "-triple" "x86_64-pc-linux-gnu" "-fsyntax-only" "-disable-free" "-disable-llvm-verifier" "-discard-value-names" "-main-file-name" "source.cpp" "-mrelocation-model" "static" "-mframe-pointer=all" "-fmath-errno" "-fno-rounding-math" "-mconstructor-aliases" "-munwind-tables" "-target-cpu" "x86-64" "-tune-cpu" "generic" "-debugger-tuning=gdb" "-v" "-fcoverage-compilation-dir=/home/user" "-resource-dir" "/usr/lib/llvm-13/lib/clang/13.0.1" "-internal-isystem" "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11" "-internal-isystem" "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../include/x86_64-linux-gnu/c++/11" "-internal-isystem" "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/backward" "-internal-isystem" "/usr/lib/llvm-13/lib/clang/13.0.1/include" "-internal-isystem" "/usr/local/include" "-internal-isystem" "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include" "-internal-externc-isystem" "/usr/include/x86_64-linux-gnu" "-internal-externc-isystem" "/include" "-internal-externc-isystem" "/usr/include" "-fdeprecated-macro" "-fdebug-compilation-dir=/home/user" "-ferror-limit" "19" "-fgnuc-version=4.2.1" "-fcxx-exceptions" "-fexceptions" "-fcolor-diagnostics" "-load" "/home/user/projects/clang_example_plugin/build/src/libclang_example_plugin.so" "-faddrsig" "-D__GCC_HAVE_DWARF2_CFI_ASM=1" "-x" "c++" "/home/user/projects/clang_example_plugin/tests/source.cpp" clang -cc1 version 13.0.1 based upon LLVM 13.0.1 default target x86_64-pc-linux-gnu ignoring nonexistent directory "/usr/lib/gcc/x86_64-linux-gnu/11/../../../../x86_64-linux-gnu/include" ignoring nonexistent directory "/include" #include "..." search starts here: #include <...> search starts here: /usr/lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11 /usr/lib/gcc/x86_64-linux-gnu/11/../../../../include/x86_64-linux-gnu/c++/11 /usr/lib/gcc/x86_64-linux-gnu/11/../../../../include/c++/11/backward /usr/lib/llvm-13/lib/clang/13.0.1/include /usr/local/include /usr/include/x86_64-linux-gnu /usr/include End of search list. /home/user/projects/clang_example_plugin/tests/source.cpp:1:3: warning: unknown attribute 'example' ignored [-Wunknown-attributes] [[plugin::example]] int foo() { ^~~~~~~~~~~~~~~ TranslationUnitDecl 0x139e008 <<invalid sloc>> <invalid sloc> |-TypedefDecl 0x139e910 <<invalid sloc>> <invalid sloc> implicit __int128_t '__int128' | `-BuiltinType 0x139e5b0 '__int128' |-TypedefDecl 0x139e980 <<invalid sloc>> <invalid sloc> implicit __uint128_t 'unsigned __int128' | `-BuiltinType 0x139e5d0 'unsigned __int128' |-TypedefDecl 0x139ecf8 <<invalid sloc>> <invalid sloc> implicit __NSConstantString '__NSConstantString_tag' | `-RecordType 0x139ea70 '__NSConstantString_tag' | `-CXXRecord 0x139e9d8 '__NSConstantString_tag' |-TypedefDecl 0x139ed90 <<invalid sloc>> <invalid sloc> implicit __builtin_ms_va_list 'char *' | `-PointerType 0x139ed50 'char *' | `-BuiltinType 0x139e0b0 'char' |-TypedefDecl 0x13df708 <<invalid sloc>> <invalid sloc> implicit __builtin_va_list '__va_list_tag [1]' | `-ConstantArrayType 0x13df6b0 '__va_list_tag [1]' 1 | `-RecordType 0x139ee80 '__va_list_tag' | `-CXXRecord 0x139ede8 '__va_list_tag' |-FunctionDecl 0x13df7b0 </home/user/projects/clang_example_plugin/tests/source.cpp:1:21, line:3:1> line:1:25 foo 'int ()' | `-CompoundStmt 0x13df8c8 <col:31, line:3:1> | `-ReturnStmt 0x13df8b8 <line:2:5, col:12> | `-IntegerLiteral 0x13df898 <col:12> 'int' 0 `-EmptyDecl 0x13df8e0 <line:3:2> col:2 1 warning generated.
Am I doing something wrong?
Could you please try 16 or main branch? https://godbolt.org should be helpful.
main
I can not force
clang-check
to load custom plugin and dump AST to see how custom attributes parsed. Is it possible?Clang version:
clang++13
andclang-check-13
fromapt-get
on Ubuntu 22. Clang plugin code:Attribute.cpp
from examplePlugin compiled out of Clang tree using CMake and
find_package(Clang REQUIRED)
feature and following configuration:Example source file with custom attribute (
source.cpp
):I got following results. Command 1. Compile source file using example plugin:
Output: new attribute added, no warnings appear, everything seems fine:
Command 2. Make sure there's a warning about custom attrribute compiling without custom plugin. Just in case:
Output: got expected warning. So plugin works:
Command 3. Trying to dump
source.cpp
AST with custom plugin:Output: warning appeared like there's no plugin loaded, AST dump contains no information about custom attribute:
Am I doing something wrong?