scott.linder added a comment.

That's my understanding, at least.

Take for example:

  $ cat foo.c 
  static void foo() { }
  void bar() { }
  
  void baz() { bar(); foo(); }
  $ clang -fvisibility=protected -O0 -S -emit-llvm foo.c -o - 
  ...
  
  ; Function Attrs: noinline nounwind optnone uwtable
  define protected void @bar() #0 {
  entry:
    ret void
  }
  
  ; Function Attrs: noinline nounwind optnone uwtable
  define protected void @baz() #0 {
  entry:
    call void @bar()
    call void @foo()
    ret void
  }
  
  ; Function Attrs: noinline nounwind optnone uwtable
  define internal void @foo() #0 {
  entry:
    ret void
  }
  
  ...

Here `foo` has default visibility, while the user asked for protected. I still 
do not completely understand the interaction between linkage and visibility, as 
Clang gives default visibility to any symbol with internal linkage.


https://reviews.llvm.org/D53153



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to