mirror of
https://github.com/intel/llvm.git
synced 2026-02-04 20:00:11 +08:00
[Clang] Use -main-file-name for source filename if not set
-main-file-name is currently used to set the source name used in debug information. If the source filename is "-" and -main-file-name is set, then use the filename also for source_filename and ModuleID of the output. The argument is generally used outside the internal clang calls when running clang in a wrapper like icecc which gives the source via stdin but still wants to get a object file with the original source filename both in debug info and IR code. Patch by: the_jk (Joel Klinghed) Differential Revision: https://reviews.llvm.org/D67592 llvm-svn: 373217
This commit is contained in:
@@ -687,7 +687,7 @@ let Flags = [CC1Option, CC1AsOption, NoDriverOption] in {
|
||||
def version : Flag<["-"], "version">,
|
||||
HelpText<"Print the compiler version">;
|
||||
def main_file_name : Separate<["-"], "main-file-name">,
|
||||
HelpText<"Main file name to use for debug info">;
|
||||
HelpText<"Main file name to use for debug info and source if missing">;
|
||||
def split_dwarf_output : Separate<["-"], "split-dwarf-output">,
|
||||
HelpText<"File name to use for split dwarf debug info output">;
|
||||
|
||||
|
||||
@@ -65,6 +65,13 @@ namespace {
|
||||
private:
|
||||
SmallVector<FunctionDecl *, 8> DeferredInlineMemberFuncDefs;
|
||||
|
||||
static llvm::StringRef ExpandModuleName(llvm::StringRef ModuleName,
|
||||
const CodeGenOptions &CGO) {
|
||||
if (ModuleName == "-" && !CGO.MainFileName.empty())
|
||||
return CGO.MainFileName;
|
||||
return ModuleName;
|
||||
}
|
||||
|
||||
public:
|
||||
CodeGeneratorImpl(DiagnosticsEngine &diags, llvm::StringRef ModuleName,
|
||||
const HeaderSearchOptions &HSO,
|
||||
@@ -73,7 +80,8 @@ namespace {
|
||||
CoverageSourceInfo *CoverageInfo = nullptr)
|
||||
: Diags(diags), Ctx(nullptr), HeaderSearchOpts(HSO),
|
||||
PreprocessorOpts(PPO), CodeGenOpts(CGO), HandlingTopLevelDecls(0),
|
||||
CoverageInfo(CoverageInfo), M(new llvm::Module(ModuleName, C)) {
|
||||
CoverageInfo(CoverageInfo),
|
||||
M(new llvm::Module(ExpandModuleName(ModuleName, CGO), C)) {
|
||||
C.setDiscardValueNames(CGO.DiscardValueNames);
|
||||
}
|
||||
|
||||
@@ -121,7 +129,7 @@ namespace {
|
||||
llvm::Module *StartModule(llvm::StringRef ModuleName,
|
||||
llvm::LLVMContext &C) {
|
||||
assert(!M && "Replacing existing Module?");
|
||||
M.reset(new llvm::Module(ModuleName, C));
|
||||
M.reset(new llvm::Module(ExpandModuleName(ModuleName, CodeGenOpts), C));
|
||||
Initialize(*Ctx);
|
||||
return M.get();
|
||||
}
|
||||
|
||||
7
clang/test/Frontend/stdin-input.c
Normal file
7
clang/test/Frontend/stdin-input.c
Normal file
@@ -0,0 +1,7 @@
|
||||
// RUN: cat %s | %clang -emit-llvm -g -S \
|
||||
// RUN: -Xclang -main-file-name -Xclang test/foo.c -x c - -o - | FileCheck %s
|
||||
// CHECK: ; ModuleID = 'test/foo.c'
|
||||
// CHECK: source_filename = "test/foo.c"
|
||||
// CHECK: !1 = !DIFile(filename: "test/foo.c"
|
||||
|
||||
int main() {}
|
||||
Reference in New Issue
Block a user