[PATCH] D67592: [Clang] Use -main-file-name for source filename if not set
the_jk created this revision. the_jk added a reviewer: rsmith. the_jk added a project: clang. Herald added subscribers: cfe-commits, aprantl. -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. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D67592 Files: clang/include/clang/Driver/CC1Options.td clang/lib/Frontend/FrontendAction.cpp clang/test/Frontend/stdin-input Index: clang/test/Frontend/stdin-input === --- /dev/null +++ clang/test/Frontend/stdin-input @@ -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() {} \ No newline at end of file Index: clang/lib/Frontend/FrontendAction.cpp === --- clang/lib/Frontend/FrontendAction.cpp +++ clang/lib/Frontend/FrontendAction.cpp @@ -819,6 +819,10 @@ std::string PresumedInputFile = getCurrentFileOrBufferName(); if (Input.isPreprocessed()) ReadOriginalFileName(CI, PresumedInputFile); +else if (PresumedInputFile == "-" && + !CI.getCodeGenOpts().MainFileName.empty()) { + PresumedInputFile = CI.getCodeGenOpts().MainFileName; +} std::unique_ptr Consumer = CreateWrappedASTConsumer(CI, PresumedInputFile); Index: clang/include/clang/Driver/CC1Options.td === --- clang/include/clang/Driver/CC1Options.td +++ clang/include/clang/Driver/CC1Options.td @@ -687,7 +687,7 @@ 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">; Index: clang/test/Frontend/stdin-input === --- /dev/null +++ clang/test/Frontend/stdin-input @@ -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() {} \ No newline at end of file Index: clang/lib/Frontend/FrontendAction.cpp === --- clang/lib/Frontend/FrontendAction.cpp +++ clang/lib/Frontend/FrontendAction.cpp @@ -819,6 +819,10 @@ std::string PresumedInputFile = getCurrentFileOrBufferName(); if (Input.isPreprocessed()) ReadOriginalFileName(CI, PresumedInputFile); +else if (PresumedInputFile == "-" && + !CI.getCodeGenOpts().MainFileName.empty()) { + PresumedInputFile = CI.getCodeGenOpts().MainFileName; +} std::unique_ptr Consumer = CreateWrappedASTConsumer(CI, PresumedInputFile); Index: clang/include/clang/Driver/CC1Options.td === --- clang/include/clang/Driver/CC1Options.td +++ clang/include/clang/Driver/CC1Options.td @@ -687,7 +687,7 @@ 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">; ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D67592: [Clang] Use -main-file-name for source filename if not set
the_jk added a comment. Forgot to link: https://bugs.llvm.org/show_bug.cgi?id=43250 Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D67592/new/ https://reviews.llvm.org/D67592 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D67592: [Clang] Use -main-file-name for source filename if not set
the_jk updated this revision to Diff 51. the_jk added a comment. Moved ModuleName change to CodeGeneratorImpl as suggested, agree that it seems to fit well there. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D67592/new/ https://reviews.llvm.org/D67592 Files: clang/include/clang/Driver/CC1Options.td clang/lib/CodeGen/ModuleBuilder.cpp clang/test/Frontend/stdin-input Index: clang/test/Frontend/stdin-input === --- /dev/null +++ clang/test/Frontend/stdin-input @@ -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() {} Index: clang/lib/CodeGen/ModuleBuilder.cpp === --- clang/lib/CodeGen/ModuleBuilder.cpp +++ clang/lib/CodeGen/ModuleBuilder.cpp @@ -65,6 +65,13 @@ private: SmallVector 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 @@ 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 @@ 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(); } Index: clang/include/clang/Driver/CC1Options.td === --- clang/include/clang/Driver/CC1Options.td +++ clang/include/clang/Driver/CC1Options.td @@ -687,7 +687,7 @@ 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">; Index: clang/test/Frontend/stdin-input === --- /dev/null +++ clang/test/Frontend/stdin-input @@ -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() {} Index: clang/lib/CodeGen/ModuleBuilder.cpp === --- clang/lib/CodeGen/ModuleBuilder.cpp +++ clang/lib/CodeGen/ModuleBuilder.cpp @@ -65,6 +65,13 @@ private: SmallVector 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 @@ 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 @@ 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(); } Index: clang/include/clang/Driver/
[PATCH] D67592: [Clang] Use -main-file-name for source filename if not set
the_jk added a comment. I don't have commit access so I'd need someone to push this, thanks. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D67592/new/ https://reviews.llvm.org/D67592 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D67592: [Clang] Use -main-file-name for source filename if not set
the_jk added a comment. Great, thanks again. CHANGES SINCE LAST ACTION https://reviews.llvm.org/D67592/new/ https://reviews.llvm.org/D67592 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits