hintonda created this revision.
hintonda added a reviewer: alexfh.
Herald added a project: clang.
LibTooling's '-h' option was intended to be as an alias for
'-help', but since the '-help' option is declared as a function scoped
static, it isn't visible, leaving it to individual clients to handle
'-h' -- which none seem to do.
This fix scans argv and expands '-h' to '-help' so that llvm's
CommandLineParser can handle it appropriately.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D59746
Files:
clang/lib/Tooling/CommonOptionsParser.cpp
Index: clang/lib/Tooling/CommonOptionsParser.cpp
===================================================================
--- clang/lib/Tooling/CommonOptionsParser.cpp
+++ clang/lib/Tooling/CommonOptionsParser.cpp
@@ -114,8 +114,24 @@
if (!ErrorMessage.empty())
ErrorMessage.append("\n");
llvm::raw_string_ostream OS(ErrorMessage);
+
+ // Expand "-h" to "-help" so it's static handler can be used.
+ SmallVector<const char *, 20> NewArgv;
+ // Append options from command line.
+ bool SawDoubleDash = false;
+ for (int I = 0; I < argc; ++I) {
+ StringRef Arg(argv[I]);
+ if (Arg == "--")
+ SawDoubleDash = true;
+ if(!SawDoubleDash && Arg == "-h")
+ NewArgv.push_back("-help");
+ else
+ NewArgv.push_back(argv[I]);
+ }
+ int NewArgc = static_cast<int>(NewArgv.size());
+
// Stop initializing if command-line option parsing failed.
- if (!cl::ParseCommandLineOptions(argc, argv, Overview, &OS)) {
+ if (!cl::ParseCommandLineOptions(NewArgc, &NewArgv[0], Overview, &OS)) {
OS.flush();
return llvm::make_error<llvm::StringError>("[CommonOptionsParser]: " +
ErrorMessage,
Index: clang/lib/Tooling/CommonOptionsParser.cpp
===================================================================
--- clang/lib/Tooling/CommonOptionsParser.cpp
+++ clang/lib/Tooling/CommonOptionsParser.cpp
@@ -114,8 +114,24 @@
if (!ErrorMessage.empty())
ErrorMessage.append("\n");
llvm::raw_string_ostream OS(ErrorMessage);
+
+ // Expand "-h" to "-help" so it's static handler can be used.
+ SmallVector<const char *, 20> NewArgv;
+ // Append options from command line.
+ bool SawDoubleDash = false;
+ for (int I = 0; I < argc; ++I) {
+ StringRef Arg(argv[I]);
+ if (Arg == "--")
+ SawDoubleDash = true;
+ if(!SawDoubleDash && Arg == "-h")
+ NewArgv.push_back("-help");
+ else
+ NewArgv.push_back(argv[I]);
+ }
+ int NewArgc = static_cast<int>(NewArgv.size());
+
// Stop initializing if command-line option parsing failed.
- if (!cl::ParseCommandLineOptions(argc, argv, Overview, &OS)) {
+ if (!cl::ParseCommandLineOptions(NewArgc, &NewArgv[0], Overview, &OS)) {
OS.flush();
return llvm::make_error<llvm::StringError>("[CommonOptionsParser]: " +
ErrorMessage,
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits