• Kirill Smelkov's avatar
    libgolang: Fix double C++ defer · 14a249cb
    Kirill Smelkov authored
    If defer was used multiple times in one function it was failing to
    compile. For example added test is failing like this:
    
        In file included from golang/runtime/libgolang_test.cpp:22:
        golang/runtime/libgolang_test.cpp: In function ‘void __test_defer(int*)’:
        ./golang/libgolang.h:457:59: error: redeclaration of ‘golang::_deferred _defer___COUNTER__’
         #define defer(f) golang::_deferred _defer_ ## __COUNTER__ (f)
                                                                   ^
        golang/runtime/libgolang_test.cpp:473:5: note: in expansion of macro ‘defer’
             defer([&]() {
             ^~~~~
        ./golang/libgolang.h:457:36: note: ‘golang::_deferred _defer___COUNTER__’ previously declared here
         #define defer(f) golang::_deferred _defer_ ## __COUNTER__ (f)
                                            ^~~~~~~
        golang/runtime/libgolang_test.cpp:470:5: note: in expansion of macro ‘defer’
             defer([&]() {
             ^~~~~
    
    It turns out the __COUNTER__ was not expanded and they say you have to
    use 3 level of macro calls. Oh well...
    
    https://stackoverflow.com/a/27611869/9456786
    14a249cb
libgolang_test.cpp 15.9 KB