[all-commits] [llvm/llvm-project] 8ffda2: MCContext::reportError: don't call report_fatal_error

Fangrui Song via All-commits all-commits at lists.llvm.org
Sun Dec 20 23:27:32 PST 2020


  Branch: refs/heads/master
  Home:   https://github.com/llvm/llvm-project
  Commit: 8ffda237a6699780bc657a97ae178a3ea078957c
      https://github.com/llvm/llvm-project/commit/8ffda237a6699780bc657a97ae178a3ea078957c
  Author: Fangrui Song <i at maskray.me>
  Date:   2020-12-20 (Sun, 20 Dec 2020)

  Changed paths:
    M llvm/lib/MC/MCContext.cpp
    M llvm/test/CodeGen/AMDGPU/GlobalISel/lds-zero-initializer.ll
    M llvm/test/CodeGen/AMDGPU/lds-initializer.ll
    M llvm/test/CodeGen/AMDGPU/lds-zero-initializer.ll
    M llvm/test/CodeGen/XCore/section-name.ll

  Log Message:
  -----------
  MCContext::reportError: don't call report_fatal_error

Errors from MCAssembler, MCObjectStreamer and *ObjectWriter typically cause a crash:

```
% cat c.c
int bar;
extern int foo __attribute__((alias("bar")));
% clang -c -fcommon c.c
fatal error: error in backend: Common symbol 'bar' cannot be used in assignment expr
PLEASE submit a bug report to ...
Stack dump:
...
```

`LLVMTargetMachine::addPassesToEmitFile` constructs `MachineModuleInfoWrapperPass`
which creates a MCContext without SourceMgr. `MCContext::reportError` calls
`report_fatal_error` which gets captured by Clang `LLVMErrorHandler` and gets translated
to the output above.

Since `MCContext::reportError` errors indicate user errors, such a crashing style error
is inappropriate. So this patch changes `report_fatal_error` to `SourceMgr().PrintMessage`.
```
% clang -c -fcommon c.c
<unknown>:0: error: Common symbol 'bar' cannot be used in assignment expr
```

Ideally we should at least recover the original filename (the line information
is generally lost).  That requires general improvement to MC diagnostics,
because currently in many cases SMLoc information is lost.




More information about the All-commits mailing list