[PATCH] D101972: Force visibility of llvm::Any to external
    serge via Phabricator via llvm-commits 
    llvm-commits at lists.llvm.org
       
    Fri Aug 27 02:42:48 PDT 2021
    
    
  
serge-sans-paille added a comment.
After weeks of painful quest, I now understand why this is not enough:
compiling the following:
  lass __attribute__((visibility("default"))) foo{};
  class __attribute__((visibility("hidden"))) bar{};
  
  template<class T>
  __attribute__((visibility("default"))) bool check() __attribute__((noinline)) {
    return true;
  }
  
  void pain(bool& x, bool& y) {
    x = check<foo>();
    y = check<bar>();
  }
with
  clang++ -shared -fPIC -o liba.so a.cpp -nostdlib
and inspecting the symbol table with
  nm liba.so -DC
yields
  0000000000201020 D __bss_start
  0000000000201020 D _edata
  0000000000201020 D _end
  0000000000000330 T pain(bool&, bool&)
  0000000000000360 W bool check<foo>()
interestingly, `check<bar>` is not listed, because a default linkage function parametrized by an hidden linkage class turns into an hidden linkage function (!). So a potential fix here would be to flag every `llvm::Any::TypeID` parameter class as default linkage (but we can't static assert on that, because we can't inspect such attributes). So the way forward really should be in the spirit of https://reviews.llvm.org/D108690
Repository:
  rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D101972/new/
https://reviews.llvm.org/D101972
    
    
More information about the llvm-commits
mailing list