samitolvanen added inline comments.

================
Comment at: llvm/lib/Transforms/IPO/ThinLTOBitcodeWriter.cpp:77
+      // references from inline assembly.
+      std::string Alias = ".set \"" + OldName + "\",\"" + NewName + "\"\n";
+      ExportM.appendModuleInlineAsm(Alias);
----------------
nickdesaulniers wrote:
> nickdesaulniers wrote:
> > Is there more information about "promotion aliases with 
> > x86_64-pc-windows-msvc" from D106392? Can we quote these only for msvc 
> > target triples? Can we add a comment about the quoting be necessary for 
> > those targets?
> > 
> > It's still not clear to me how tests using explicit -linux-gnu triples 
> > could fail on -mscv hosts.
> Also, I think the quoting hurts the readability of the generated asm.  Maybe 
> that doesn't matter for LTO, but I'd be curious if we could do such escaping 
> only when necessary? Perhaps that's only when targeting -msvc triples?
> Is there more information about "promotion aliases with 
> x86_64-pc-windows-msvc" from D106392?

Yes, the -msvc targets use Visual C++ compatible name mangling, which requires 
quotes when referred to in inline assembly. Here's a trivial reproducer:

```
$ cat test.cpp 
static void a(void) {}
void* b(void) { return (void *)a; }
$ clang -flto=thin -fvisibility=default -fsanitize=cfi -c test.cpp
$ clang -flto=thin -fvisibility=default -fsanitize=cfi -target 
x86_64-pc-windows-msvc -c test.cpp
Either SourceMgr should be available
UNREACHABLE executed at llvm-project/llvm/lib/MC/MCContext.cpp:913!
...
```

Here's the inline assembly generated when we compile the above example for the 
-msvc target:
```
.set ?a@@YAXXZ,?a@@YAXXZ.d7b56b39ccc53bc7515ae1b2533f1e3d
```

> Can we quote these only for msvc target triples? Can we add a comment about 
> the quoting be necessary for those targets?

I assume we could limit this only to -msvc targets, but I feel like that would 
unnecessarily complicate the code as there's no harm in quoting the names 
always.

> It's still not clear to me how tests using explicit -linux-gnu triples could 
> fail on -mscv hosts.

These tests don't specify a `-linux-gnu` triple. They are C++ and end up using 
the default target, which in this case is `-msvc`.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D104058

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

Reply via email to