From 08c588c73a895423e9cdfa83116b65a1bbb7263f Mon Sep 17 00:00:00 2001 From: Kirill Bobyrev Date: Thu, 21 Jul 2016 10:21:31 +0000 Subject: [PATCH] [clang-rename] check whether -new-name is valid identifier in C++17 llvm-svn: 276259 --- clang-tools-extra/clang-rename/tool/ClangRename.cpp | 13 ++++++++++++- clang-tools-extra/test/clang-rename/InvalidNewName.cpp | 2 ++ clang-tools-extra/test/clang-rename/NoNewName.cpp | 2 +- 3 files changed, 15 insertions(+), 2 deletions(-) create mode 100644 clang-tools-extra/test/clang-rename/InvalidNewName.cpp diff --git a/clang-tools-extra/clang-rename/tool/ClangRename.cpp b/clang-tools-extra/clang-rename/tool/ClangRename.cpp index 7475211..23d3126 100644 --- a/clang-tools-extra/clang-rename/tool/ClangRename.cpp +++ b/clang-tools-extra/clang-rename/tool/ClangRename.cpp @@ -99,7 +99,18 @@ int main(int argc, const char **argv) { // Check the arguments for correctness. if (NewName.empty()) { - errs() << "clang-rename: no new name provided.\n\n"; + errs() << "ERROR: no new name provided.\n\n"; + exit(1); + } + + // Check if NewName is a valid identifier in C++17. + LangOptions Options; + Options.CPlusPlus = true; + Options.CPlusPlus1z = true; + IdentifierTable Table(Options); + auto NewNameTokKind = Table.get(NewName).getTokenID(); + if (!tok::isAnyIdentifier(NewNameTokKind)) { + errs() << "ERROR: new name is not a valid identifier in C++17.\n\n"; exit(1); } diff --git a/clang-tools-extra/test/clang-rename/InvalidNewName.cpp b/clang-tools-extra/test/clang-rename/InvalidNewName.cpp new file mode 100644 index 0000000..826771a --- /dev/null +++ b/clang-tools-extra/test/clang-rename/InvalidNewName.cpp @@ -0,0 +1,2 @@ +// RUN: not clang-rename -new-name=class -offset=133 %s 2>&1 | FileCheck %s +// CHECK: ERROR: new name is not a valid identifier in C++17. diff --git a/clang-tools-extra/test/clang-rename/NoNewName.cpp b/clang-tools-extra/test/clang-rename/NoNewName.cpp index d50efd6..445f94a 100644 --- a/clang-tools-extra/test/clang-rename/NoNewName.cpp +++ b/clang-tools-extra/test/clang-rename/NoNewName.cpp @@ -1,4 +1,4 @@ // Check for an error while -new-name argument has not been passed to // clang-rename. // RUN: not clang-rename -offset=133 %s 2>&1 | FileCheck %s -// CHECK: clang-rename: no new name provided. +// CHECK: ERROR: no new name provided. -- 2.7.4