================
@@ -471,6 +475,18 @@ int clang_main(int Argc, char **Argv, const 
llvm::ToolContext &ToolContext) {
     Res = 1;
 #endif
 
+#if LLVM_ON_UNIX
+  // On Unix, signals are represented by return codes of 128 plus the signal
+  // number. If the return code indicates it was from a signal handler, raise
+  // the signal so that the exit code includes the signal number, as required
+  // by POSIX. Return code 255 is excluded because some tools, such as
+  // llvm-ifs, exit with code 255 (-1) on failure.
+  if (CommandRes > 128 && CommandRes != 255) {
----------------
daltenty wrote:

My only worry here is that not all programs the driver invokes are necessarily 
unix utilities (though many are), so it’s possible the exit code might not 
actually represent a signal value.

That said, I don't think there's much we can do other than to handle it on a 
case-by-case base as you did with llvm-ifs here, so I think think this is the 
best we can do for now.

https://github.com/llvm/llvm-project/pull/169340
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to