Test resolution of more complex types (#42)

This commit is contained in:
Jeremy Rifkin 2023-09-22 10:31:19 -04:00 committed by GitHub
parent 631d00470d
commit 3e18bd3c10
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 306 additions and 77 deletions

View File

@ -1,4 +1,15 @@
./test||0||trace() ./test||0||trace()
./test||0||www(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*> >&&)
./test||0||jjj(void (* const*)(float))
./test||0||iii(Foo::Bar)
./test||0||hhh(int (* (*) [10]) [20])
./test||0||ggg(int const* const*)
./test||0||fff(int (S::*)(float) const volatile &&)
./test||0||eee(int (*(* const* volatile (*) [10])())(float))
./test||0||ddd(int (* (*) [10])())
./test||0||ccc(int (*) [5][6][7][8])
./test||0||bbb(int (* const (&) [5])(float, int const&))
./test||0||aaa(int (&) [5])
./test||0||foo(int) ./test||0||foo(int)
./test||0||foo(int) ./test||0||foo(int)
./test||0||foo(int) ./test||0||foo(int)
@ -22,5 +33,6 @@
./test||0||function_two(int, float) ./test||0||function_two(int, float)
./test||0||function_one(int) ./test||0||function_one(int)
./test||0||main ./test||0||main
/lib/x86_64-linux-gnu/libc.so.6||0||
/lib/x86_64-linux-gnu/libc.so.6||0||__libc_start_main /lib/x86_64-linux-gnu/libc.so.6||0||__libc_start_main
./test||0||_start ./test||0||_start

View File

@ -1,27 +1,38 @@
test/test.cpp||19||trace() test/test.cpp||21||trace()
test/test.cpp||35||foo(int) test/test.cpp||33||www(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*> >&&)
test/test.cpp||39||foo(int) test/test.cpp||37||jjj(void (* const*)(float))
test/test.cpp||39||foo(int) test/test.cpp||45||iii(Foo::Bar)
test/test.cpp||39||foo(int) test/test.cpp||55||hhh(int (* (*) [10]) [20])
test/test.cpp||39||foo(int) test/test.cpp||59||ggg(int const* const*)
test/test.cpp||39||foo(int) test/test.cpp||63||fff(int (S::*)(float) const volatile &&)
test/test.cpp||39||foo(int) test/test.cpp||68||eee(int (*(* const* volatile (*) [10])())(float))
test/test.cpp||39||foo(int) test/test.cpp||72||ddd(int (* (*) [10])())
test/test.cpp||39||foo(int) test/test.cpp||76||ccc(int (*) [5][6][7][8])
test/test.cpp||39||foo(int) test/test.cpp||80||bbb(int (* const (&) [5])(float, int const&))
test/test.cpp||39||foo(int) test/test.cpp||85||aaa(int (&) [5])
test/test.cpp||47||void foo<int>(int, int) test/test.cpp||94||foo(int)
test/test.cpp||47||void foo<int, int>(int, int, int) test/test.cpp||98||foo(int)
test/test.cpp||47||void foo<int, int, int>(int, int, int, int) test/test.cpp||98||foo(int)
test/test.cpp||47||void foo<int, int, int, int>(int, int, int, int, int) test/test.cpp||98||foo(int)
test/test.cpp||47||void foo<int, int, int, int, int>(int, int, int, int, int, int) test/test.cpp||98||foo(int)
test/test.cpp||47||void foo<int, int, int, int, int, int>(int, int, int, int, int, int, int) test/test.cpp||98||foo(int)
test/test.cpp||47||void foo<int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int) test/test.cpp||98||foo(int)
test/test.cpp||47||void foo<int, int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int, int) test/test.cpp||98||foo(int)
test/test.cpp||47||void foo<int, int, int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int, int, int) test/test.cpp||98||foo(int)
test/test.cpp||53||function_two(int, float) test/test.cpp||98||foo(int)
test/test.cpp||59||function_one(int) test/test.cpp||98||foo(int)
test/test.cpp||65||main test/test.cpp||106||void foo<int>(int, int)
../csu/libc-start.c||308||__libc_start_main test/test.cpp||106||void foo<int, int>(int, int, int)
||0||_start test/test.cpp||106||void foo<int, int, int>(int, int, int, int)
||0|| test/test.cpp||106||void foo<int, int, int, int>(int, int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int, int>(int, int, int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int, int, int>(int, int, int, int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int, int, int)
test/test.cpp||112||function_two(int, float)
test/test.cpp||118||function_one(int)
test/test.cpp||124||main
./csu/../sysdeps/nptl/libc_start_call_main.h||58||__libc_start_call_main
./csu/../csu/libc-start.c||392||__libc_start_main_impl
./test||0||

View File

@ -0,0 +1,36 @@
build/test||0||trace()
build/test||0||www(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>*, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>*>>&&)
build/test||0||jjj(void (* const*)(float))
build/test||0||iii(Foo::Bar)
build/test||0||hhh(int (* (*) [10]) [20])
build/test||0||ggg(int const* const*)
build/test||0||fff(int (S::*)(float) const volatile &&)
build/test||0||eee(int (* (* const* volatile (*) [10])())(float))
build/test||0||ddd(int (* (*) [10])())
build/test||0||ccc(int (*) [5][6][7][8])
build/test||0||bbb(int (* const (&) [5])(float, int const&))
build/test||0||aaa(int (&) [5])
build/test||0||foo(int)
build/test||0||foo(int)
build/test||0||foo(int)
build/test||0||foo(int)
build/test||0||foo(int)
build/test||0||foo(int)
build/test||0||foo(int)
build/test||0||foo(int)
build/test||0||foo(int)
build/test||0||foo(int)
build/test||0||foo(int)
build/test||0||void foo<int>(int, int)
build/test||0||void foo<int, int>(int, int, int)
build/test||0||void foo<int, int, int>(int, int, int, int)
build/test||0||void foo<int, int, int, int>(int, int, int, int, int)
build/test||0||void foo<int, int, int, int, int>(int, int, int, int, int, int)
build/test||0||void foo<int, int, int, int, int, int>(int, int, int, int, int, int, int)
build/test||0||void foo<int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int)
build/test||0||void foo<int, int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int, int)
build/test||0||void foo<int, int, int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int, int, int)
build/test||0||function_two(int, float)
build/test||0||function_one(int)
build/test||0||main
/usr/lib/dyld||0||start

View File

@ -0,0 +1,38 @@
test/test.cpp||21||trace()
test/test.cpp||33||www(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>&&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>> const&, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>*, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char>>*>>&&)
test/test.cpp||37||jjj(void (* const*)(float))
test/test.cpp||45||iii(Foo::Bar)
test/test.cpp||55||hhh(int (* (*) [10]) [20])
test/test.cpp||59||ggg(int const* const*)
test/test.cpp||63||fff(int (S::*)(float) const volatile &&)
test/test.cpp||68||eee(int (* (* const* volatile (*) [10])())(float))
test/test.cpp||72||ddd(int (* (*) [10])())
test/test.cpp||76||ccc(int (*) [5][6][7][8])
test/test.cpp||80||bbb(int (* const (&) [5])(float, int const&))
test/test.cpp||85||aaa(int (&) [5])
test/test.cpp||94||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||106||void foo<int>(int, int)
test/test.cpp||106||void foo<int, int>(int, int, int)
test/test.cpp||106||void foo<int, int, int>(int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int>(int, int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int, int>(int, int, int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int, int, int>(int, int, int, int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int, int, int)
test/test.cpp||112||function_two(int, float)
test/test.cpp||118||function_one(int)
test/test.cpp||124||main
./csu/../sysdeps/nptl/libc_start_call_main.h||58||__libc_start_call_main
./csu/../csu/libc-start.c||392||__libc_start_main_impl
./test||0||

View File

@ -0,0 +1,38 @@
test/test.cpp||21||trace()
test/test.cpp||33||www(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*>>&&)
test/test.cpp||37||jjj(void (* const*)(float))
test/test.cpp||45||iii(Foo::Bar)
test/test.cpp||55||hhh(int (* (*) [10]) [20])
test/test.cpp||59||ggg(int const* const*)
test/test.cpp||63||fff(int (S::*)(float) const volatile &&)
test/test.cpp||68||eee(int (* (* const* volatile (*) [10])())(float))
test/test.cpp||72||ddd(int (* (*) [10])())
test/test.cpp||76||ccc(int (*) [5][6][7][8])
test/test.cpp||80||bbb(int (* const (&) [5])(float, int const&))
test/test.cpp||85||aaa(int (&) [5])
test/test.cpp||94||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||106||void foo<int>(int, int)
test/test.cpp||106||void foo<int, int>(int, int, int)
test/test.cpp||106||void foo<int, int, int>(int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int>(int, int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int, int>(int, int, int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int, int, int>(int, int, int, int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int, int, int)
test/test.cpp||112||function_two(int, float)
test/test.cpp||118||function_one(int)
test/test.cpp||124||main
./csu/../sysdeps/nptl/libc_start_call_main.h||58||__libc_start_call_main
./csu/../csu/libc-start.c||392||__libc_start_main_impl
./test||0||

View File

@ -1,4 +1,15 @@
build/test||0||trace() build/test||0||trace()
build/test||0||www(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*> >&&)
build/test||0||jjj(void (* const*)(float))
build/test||0||iii(Foo::Bar)
build/test||0||hhh(int (* (*) [10]) [20])
build/test||0||ggg(int const* const*)
build/test||0||fff(int (S::*)(float) const volatile &&)
build/test||0||eee(int (*(* const* volatile (*) [10])())(float))
build/test||0||ddd(int (* (*) [10])())
build/test||0||ccc(int (*) [5][6][7][8])
build/test||0||bbb(int (* const (&) [5])(float, int const&))
build/test||0||aaa(int (&) [5])
build/test||0||foo(int) build/test||0||foo(int)
build/test||0||foo(int) build/test||0||foo(int)
build/test||0||foo(int) build/test||0||foo(int)

View File

@ -0,0 +1,38 @@
test/test.cpp||21||trace()
test/test.cpp||33||www(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >&&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*> >&&)
test/test.cpp||37||jjj(void (* const*)(float))
test/test.cpp||45||iii(Foo::Bar)
test/test.cpp||55||hhh(int (* (*) [10]) [20])
test/test.cpp||59||ggg(int const* const*)
test/test.cpp||63||fff(int (S::*)(float) const volatile &&)
test/test.cpp||68||eee(int (*(* const* volatile (*) [10])())(float))
test/test.cpp||72||ddd(int (* (*) [10])())
test/test.cpp||76||ccc(int (*) [5][6][7][8])
test/test.cpp||80||bbb(int (* const (&) [5])(float, int const&))
test/test.cpp||85||aaa(int (&) [5])
test/test.cpp||94||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||98||foo(int)
test/test.cpp||106||void foo<int>(int, int)
test/test.cpp||106||void foo<int, int>(int, int, int)
test/test.cpp||106||void foo<int, int, int>(int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int>(int, int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int, int>(int, int, int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int, int, int>(int, int, int, int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int, int)
test/test.cpp||106||void foo<int, int, int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int, int, int)
test/test.cpp||112||function_two(int, float)
test/test.cpp||118||function_one(int)
test/test.cpp||124||main
./csu/../sysdeps/nptl/libc_start_call_main.h||58||__libc_start_call_main
./csu/../csu/libc-start.c||392||__libc_start_main_impl
./test||0||

View File

@ -1,25 +0,0 @@
test/test.cpp||19||trace()
test/test.cpp||35||foo(int)
test/test.cpp||39||foo(int)
test/test.cpp||39||foo(int)
test/test.cpp||39||foo(int)
test/test.cpp||39||foo(int)
test/test.cpp||39||foo(int)
test/test.cpp||39||foo(int)
test/test.cpp||39||foo(int)
test/test.cpp||39||foo(int)
test/test.cpp||39||foo(int)
test/test.cpp||39||foo(int)
test/test.cpp||47||void foo<int>(int, int)
test/test.cpp||47||void foo<int, int>(int, int, int)
test/test.cpp||47||void foo<int, int, int>(int, int, int, int)
test/test.cpp||47||void foo<int, int, int, int>(int, int, int, int, int)
test/test.cpp||47||void foo<int, int, int, int, int>(int, int, int, int, int, int)
test/test.cpp||47||void foo<int, int, int, int, int, int>(int, int, int, int, int, int, int)
test/test.cpp||47||void foo<int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int)
test/test.cpp||47||void foo<int, int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int, int)
test/test.cpp||47||void foo<int, int, int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int, int, int)
test/test.cpp||53||function_two(int, float)
test/test.cpp||59||function_one(int)
test/test.cpp||65||main
||0||

View File

@ -1,27 +1,38 @@
test\test.cpp||19||trace() test\test.cpp||21||trace()
test\test.cpp||35||foo(int) test\test.cpp||37||www(std::basic_string<char, std::char_traits<char>, std::allocator<char> >*, std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> > *, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > *> >*)
test\test.cpp||39||foo(int) test\test.cpp||41||jjj(void(*(*))(float))
test\test.cpp||39||foo(int) test\test.cpp||49||iii(Foo::Bar)
test\test.cpp||39||foo(int) test\test.cpp||59||hhh(int(*(*)[10])[20])
test\test.cpp||39||foo(int) test\test.cpp||63||ggg(int**)
test\test.cpp||39||foo(int) test\test.cpp||67||fff(int(S::*)(float))
test\test.cpp||39||foo(int) test\test.cpp||72||eee(int(*(*(*(*)[10]))())(float))
test\test.cpp||39||foo(int) test\test.cpp||76||ddd(int(*(*)[10])())
test\test.cpp||39||foo(int) test\test.cpp||80||ccc(int(*)[5][6][7][8])
test\test.cpp||39||foo(int) test\test.cpp||84||bbb(int(*(&)[5])(float, int&))
test\test.cpp||39||foo(int) test\test.cpp||89||aaa(int(&)[5])
test\test.cpp||47||foo<int>(int, int) test\test.cpp||98||foo(int)
test\test.cpp||47||foo<int, int>(int, int, int) test\test.cpp||102||foo(int)
test\test.cpp||47||foo<int, int, int>(int, int, int, int) test\test.cpp||102||foo(int)
test\test.cpp||47||foo<int, int, int, int>(int, int, int, int, int) test\test.cpp||102||foo(int)
test\test.cpp||47||foo<int, int, int, int, int>(int, int, int, int, int, int) test\test.cpp||102||foo(int)
test\test.cpp||47||foo<int, int, int, int, int, int>(int, int, int, int, int, int, int) test\test.cpp||102||foo(int)
test\test.cpp||47||foo<int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int) test\test.cpp||102||foo(int)
test\test.cpp||47||foo<int, int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int, int) test\test.cpp||102||foo(int)
test\test.cpp||47||foo<int, int, int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int, int, int) test\test.cpp||102||foo(int)
test\test.cpp||54||function_two(int, float) test\test.cpp||102||foo(int)
test\test.cpp||59||function_one(int) test\test.cpp||102||foo(int)
test\test.cpp||65||main() test\test.cpp||110||foo<int>(int, int)
test\test.cpp||110||foo<int, int>(int, int, int)
test\test.cpp||110||foo<int, int, int>(int, int, int, int)
test\test.cpp||110||foo<int, int, int, int>(int, int, int, int, int)
test\test.cpp||110||foo<int, int, int, int, int>(int, int, int, int, int, int)
test\test.cpp||110||foo<int, int, int, int, int, int>(int, int, int, int, int, int, int)
test\test.cpp||110||foo<int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int)
test\test.cpp||110||foo<int, int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int, int)
test\test.cpp||110||foo<int, int, int, int, int, int, int, int, int>(int, int, int, int, int, int, int, int, int, int)
test\test.cpp||116||function_two(int, float)
test\test.cpp||122||function_one(int)
test\test.cpp||128||main()
D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl||79||invoke_main() D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl||79||invoke_main()
D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl||288||__scrt_common_main_seh() D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl||288||__scrt_common_main_seh()
D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl||331||__scrt_common_main() D:\a\_work\1\s\src\vctools\crt\vcstartup\src\startup\exe_common.inl||331||__scrt_common_main()

View File

@ -1,9 +1,11 @@
#include <cpptrace/cpptrace.hpp> #include <cpptrace/cpptrace.hpp>
#include <algorithm> #include <algorithm>
#include <array>
#include <cctype> #include <cctype>
#include <iostream> #include <iostream>
#include <string> #include <string>
#include <vector>
std::string normalize_filename(std::string name) { std::string normalize_filename(std::string name) {
if(name.find('/') == 0 || (name.find(':') == 1 && std::isupper(name[0]))) { if(name.find('/') == 0 || (name.find(':') == 1 && std::isupper(name[0]))) {
@ -27,12 +29,69 @@ void trace() {
} }
} }
void www(std::string&&, const std::string& str, std::vector<std::string*>&& foobar) {
trace();
}
void jjj(void(*const arr[5])(float)) {
www(std::string{}, "", {});
}
namespace Foo {
struct Bar {};
}
void iii(Foo::Bar) {
jjj(nullptr);
}
struct S {
int foo(float) const volatile && {
return 1;
}
};
void hhh(int(*(*)[10])[20]) {
iii(Foo::Bar{});
}
void ggg(const int * const *) {
hhh(nullptr);
}
void fff(int(S::*)(float) const volatile &&) {
ggg(nullptr);
}
//void eee(int(*(*(*)[10])())(float)) {
void eee(int(*(* const * volatile(*)[10])())(float)) {
fff(&S::foo);
}
void ddd(int(*(*)[10])()) {
eee(nullptr);
}
void ccc(int(*)[5][6][7][8]) {
ddd(nullptr);
}
void bbb(int(*const (&)[5])(float, const int&)) {
ccc(nullptr);
}
void aaa(int(&)[5]) {
int(*const (arr)[5])(float, const int&) = {};
bbb(arr);
}
int x; int x;
void foo(int n) { void foo(int n) {
if(n == 0) { if(n == 0) {
x = 0; x = 0;
trace(); int arr[5];
aaa(arr);
x = 0; x = 0;
} else { } else {
x = 0; x = 0;