steplong added a comment.

> Isn't the question whether `f` is considered "extern C" in the end or not? I 
> thought `isExternC()` checks that? Are you saying it would return false for 
> `f` in your example?

Yup, `isExternC()` is returning false for that case because there's "static".

> I'm probably missing something. Is the "static" important in this example? 
> Since `f` has internal linkage, I don't see why a user would care if it's 
> "extern C" or not, and also not in which section it would go (in this case it 
> will not be emitted at all, because it's not used).

Hmm, good point. This is the disassembly I see for:

  extern "C" { static void f(); }
  static void f();
  #pragma alloc_text(s, f)
  static void f() {}
  
  void bar() {
    f();
  }
  
  Disassembly of section .text$mn:
  ?bar@@YAXXZ:
         0:       fd 7b bf a9     stp     x29, x30, [sp, #-16]!
         4:       fd 03 00 91     mov     x29, sp
         8:       00 00 00 94     bl      #0 <?bar@@YAXXZ+0x8>
         c:       fd 7b c1 a8     ldp     x29, x30, [sp], #16
        10:       c0 03 5f d6     ret
  Disassembly of section s:
  s:
         0:       c0 03 5f d6     ret


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D128649/new/

https://reviews.llvm.org/D128649

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

Reply via email to