Index: llvm/trunk/test/tools/llvm-rc/tag-menu.test =================================================================== --- llvm/trunk/test/tools/llvm-rc/tag-menu.test +++ llvm/trunk/test/tools/llvm-rc/tag-menu.test @@ -1,6 +1,11 @@ ; RUN: llvm-rc /FO %t %p/Inputs/tag-menu.rc ; RUN: llvm-readobj %t | FileCheck %s --check-prefix=MENU +; Test running llvm-rc without an explicit output file. +; RUN: cp %p/Inputs/tag-menu.rc %t.implicit.rc +; RUN: llvm-rc %t.implicit.rc +; RUN: llvm-readobj %t.implicit.res | FileCheck --check-prefix=MENU %s + ; MENU: Resource type (int): 4 ; MENU-NEXT: Resource name (string): CHECKRECURSION ; MENU-NEXT: Data version: 0 Index: llvm/trunk/test/tools/llvm-rc/tokenizer.test =================================================================== --- llvm/trunk/test/tools/llvm-rc/tokenizer.test +++ llvm/trunk/test/tools/llvm-rc/tokenizer.test @@ -1,4 +1,4 @@ -; RUN: not llvm-rc /V %p/Inputs/tokens.rc | FileCheck %s +; RUN: not llvm-rc /V /FO %t.res %p/Inputs/tokens.rc | FileCheck %s ; llvm-rc fails now on this sample because it is an invalid resource file ; script. We silence the error message and just analyze the output. Index: llvm/trunk/tools/llvm-rc/llvm-rc.cpp =================================================================== --- llvm/trunk/tools/llvm-rc/llvm-rc.cpp +++ llvm/trunk/tools/llvm-rc/llvm-rc.cpp @@ -24,6 +24,7 @@ #include "llvm/Support/InitLLVM.h" #include "llvm/Support/ManagedStatic.h" #include "llvm/Support/MemoryBuffer.h" +#include "llvm/Support/Path.h" #include "llvm/Support/PrettyStackTrace.h" #include "llvm/Support/Process.h" #include "llvm/Support/Signals.h" @@ -157,9 +158,15 @@ if (!IsDryRun) { auto OutArgsInfo = InputArgs.getAllArgValues(OPT_FILEOUT); + if (OutArgsInfo.empty()) { + SmallString<128> OutputFile = InputFile; + llvm::sys::path::replace_extension(OutputFile, "res"); + OutArgsInfo.push_back(OutputFile.str()); + } + if (OutArgsInfo.size() != 1) fatalError( - "Exactly one output file should be provided (using /FO flag)."); + "No more than one output file should be provided (using /FO flag)."); std::error_code EC; auto FOut =