<div dir="ltr"><div>I suspect it was caused by the new line splitting ("\r\n" vs "\n"?) on Windows. In the test, I write some strings (expected to be new line delimited) to a temp file (<a href="https://github.com/llvm-mirror/clang-tools-extra/blob/master/test/change-namespace/white-list.cpp#L1">https://github.com/llvm-mirror/clang-tools-extra/blob/master/test/change-namespace/white-list.cpp#L1</a>), read the content, and then split with "\n" (<a href="https://github.com/llvm-mirror/clang-tools-extra/blob/master/change-namespace/tool/ClangChangeNamespace.cpp#L92">https://github.com/llvm-mirror/clang-tools-extra/blob/master/change-namespace/tool/ClangChangeNamespace.cpp#L92</a>). I am trying trimming the lines to see if this fix the issue (r<span style="color:rgb(33,33,33)">296458</span>). </div><div><br></div><div>Unfortunately, I don't have a Windows machine available for testing so I couldn't verify this locally. </div><div><br></div><div>- Eric</div></div><br><div class="gmail_quote"><div dir="ltr">On Tue, Feb 28, 2017 at 10:28 AM Eric Liu <<a href="mailto:ioeric@google.com">ioeric@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg">Sorry for losing track of this.<div class="gmail_msg"><br class="gmail_msg"></div>I thought I fixed it with r296113. Not sure why windows builds are still failing. I'll look into this.<div class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_msg">Thanks,</div><div class="gmail_msg">Eric</div></div><br class="gmail_msg"><div class="gmail_quote gmail_msg"><div dir="ltr" class="gmail_msg">On Tue, Feb 28, 2017 at 2:19 AM Galina Kistanova <<a href="mailto:gkistanova@gmail.com" class="gmail_msg" target="_blank">gkistanova@gmail.com</a>> wrote:<br class="gmail_msg"></div><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="gmail_msg">Hello Eric,<br class="gmail_msg"><br class="gmail_msg">This commit broke test on one of our builders:<br class="gmail_msg"><br class="gmail_msg">    Clang Tools :: change-namespace/white-list.cpp<br class="gmail_msg"><br class="gmail_msg"><a href="http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/6153/steps/test/logs/stdio" class="gmail_msg" target="_blank">http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast/builds/6153/steps/test/logs/stdio</a><br class="gmail_msg"><br class="gmail_msg">Please have a look.<br class="gmail_msg"><br class="gmail_msg">Thanks</div><div dir="ltr" class="gmail_msg"><br class="gmail_msg"><br class="gmail_msg">Galina<br class="gmail_msg"><br class="gmail_msg"></div><div class="gmail_extra gmail_msg"><br class="gmail_msg"><div class="gmail_quote gmail_msg">On Fri, Feb 24, 2017 at 3:54 AM, Eric Liu via cfe-commits <span dir="ltr" class="gmail_msg"><<a href="mailto:cfe-commits@lists.llvm.org" class="gmail_msg" target="_blank">cfe-commits@lists.llvm.org</a>></span> wrote:<br class="gmail_msg"><blockquote class="gmail_quote gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: ioeric<br class="gmail_msg">
Date: Fri Feb 24 05:54:45 2017<br class="gmail_msg">
New Revision: 296110<br class="gmail_msg">
<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=296110&view=rev" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project?rev=296110&view=rev</a><br class="gmail_msg">
Log:<br class="gmail_msg">
[change-namepsace] make it possible to whitelist symbols so they don't get updated.<br class="gmail_msg">
<br class="gmail_msg">
Reviewers: hokein<br class="gmail_msg">
<br class="gmail_msg">
Reviewed By: hokein<br class="gmail_msg">
<br class="gmail_msg">
Subscribers: cfe-commits<br class="gmail_msg">
<br class="gmail_msg">
Differential Revision: <a href="https://reviews.llvm.org/D30328" rel="noreferrer" class="gmail_msg" target="_blank">https://reviews.llvm.org/D30328</a><br class="gmail_msg">
<br class="gmail_msg">
Added:<br class="gmail_msg">
    clang-tools-extra/trunk/test/change-namespace/Inputs/<br class="gmail_msg">
    clang-tools-extra/trunk/test/change-namespace/Inputs/fake-std.h<br class="gmail_msg">
    clang-tools-extra/trunk/test/change-namespace/white-list.cpp<br class="gmail_msg">
Modified:<br class="gmail_msg">
    clang-tools-extra/trunk/change-namespace/ChangeNamespace.cpp<br class="gmail_msg">
    clang-tools-extra/trunk/change-namespace/ChangeNamespace.h<br class="gmail_msg">
    clang-tools-extra/trunk/change-namespace/tool/ClangChangeNamespace.cpp<br class="gmail_msg">
    clang-tools-extra/trunk/unittests/change-namespace/ChangeNamespaceTests.cpp<br class="gmail_msg">
<br class="gmail_msg">
Modified: clang-tools-extra/trunk/change-namespace/ChangeNamespace.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/change-namespace/ChangeNamespace.cpp?rev=296110&r1=296109&r2=296110&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/change-namespace/ChangeNamespace.cpp?rev=296110&r1=296109&r2=296110&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- clang-tools-extra/trunk/change-namespace/ChangeNamespace.cpp (original)<br class="gmail_msg">
+++ clang-tools-extra/trunk/change-namespace/ChangeNamespace.cpp Fri Feb 24 05:54:45 2017<br class="gmail_msg">
@@ -290,6 +290,7 @@ AST_MATCHER(EnumDecl, isScoped) {<br class="gmail_msg">
<br class="gmail_msg">
 ChangeNamespaceTool::ChangeNamespaceTool(<br class="gmail_msg">
     llvm::StringRef OldNs, llvm::StringRef NewNs, llvm::StringRef FilePattern,<br class="gmail_msg">
+    llvm::ArrayRef<std::string> WhiteListedSymbolPatterns,<br class="gmail_msg">
     std::map<std::string, tooling::Replacements> *FileToReplacements,<br class="gmail_msg">
     llvm::StringRef FallbackStyle)<br class="gmail_msg">
     : FallbackStyle(FallbackStyle), FileToReplacements(*FileToReplacements),<br class="gmail_msg">
@@ -308,6 +309,9 @@ ChangeNamespaceTool::ChangeNamespaceTool<br class="gmail_msg">
   }<br class="gmail_msg">
   DiffOldNamespace = joinNamespaces(OldNsSplitted);<br class="gmail_msg">
   DiffNewNamespace = joinNamespaces(NewNsSplitted);<br class="gmail_msg">
+<br class="gmail_msg">
+  for (const auto &Pattern : WhiteListedSymbolPatterns)<br class="gmail_msg">
+    WhiteListedSymbolRegexes.emplace_back(Pattern);<br class="gmail_msg">
 }<br class="gmail_msg">
<br class="gmail_msg">
 void ChangeNamespaceTool::registerMatchers(ast_matchers::MatchFinder *Finder) {<br class="gmail_msg">
@@ -736,6 +740,9 @@ void ChangeNamespaceTool::replaceQualifi<br class="gmail_msg">
           Result.SourceManager->getSpellingLoc(End)),<br class="gmail_msg">
       *Result.SourceManager, Result.Context->getLangOpts());<br class="gmail_msg">
   std::string FromDeclName = FromDecl->getQualifiedNameAsString();<br class="gmail_msg">
+  for (llvm::Regex &RE : WhiteListedSymbolRegexes)<br class="gmail_msg">
+    if (RE.match(FromDeclName))<br class="gmail_msg">
+      return;<br class="gmail_msg">
   std::string ReplaceName =<br class="gmail_msg">
       getShortestQualifiedNameInNamespace(FromDeclName, NewNs);<br class="gmail_msg">
   // Checks if there is any using namespace declarations that can shorten the<br class="gmail_msg">
<br class="gmail_msg">
Modified: clang-tools-extra/trunk/change-namespace/ChangeNamespace.h<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/change-namespace/ChangeNamespace.h?rev=296110&r1=296109&r2=296110&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/change-namespace/ChangeNamespace.h?rev=296110&r1=296109&r2=296110&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- clang-tools-extra/trunk/change-namespace/ChangeNamespace.h (original)<br class="gmail_msg">
+++ clang-tools-extra/trunk/change-namespace/ChangeNamespace.h Fri Feb 24 05:54:45 2017<br class="gmail_msg">
@@ -50,6 +50,7 @@ public:<br class="gmail_msg">
   // files matching `FilePattern`.<br class="gmail_msg">
   ChangeNamespaceTool(<br class="gmail_msg">
       llvm::StringRef OldNs, llvm::StringRef NewNs, llvm::StringRef FilePattern,<br class="gmail_msg">
+      llvm::ArrayRef<std::string> WhiteListedSymbolPatterns,<br class="gmail_msg">
       std::map<std::string, tooling::Replacements> *FileToReplacements,<br class="gmail_msg">
       llvm::StringRef FallbackStyle = "LLVM");<br class="gmail_msg">
<br class="gmail_msg">
@@ -164,6 +165,9 @@ private:<br class="gmail_msg">
   // CallExpr and one as DeclRefExpr), we record all DeclRefExpr's that have<br class="gmail_msg">
   // been processed so that we don't handle them twice.<br class="gmail_msg">
   llvm::SmallPtrSet<const clang::DeclRefExpr*, 16> ProcessedFuncRefs;<br class="gmail_msg">
+  // Patterns of symbol names whose references are not expected to be updated<br class="gmail_msg">
+  // when changing namespaces around them.<br class="gmail_msg">
+  std::vector<llvm::Regex> WhiteListedSymbolRegexes;<br class="gmail_msg">
 };<br class="gmail_msg">
<br class="gmail_msg">
 } // namespace change_namespace<br class="gmail_msg">
<br class="gmail_msg">
Modified: clang-tools-extra/trunk/change-namespace/tool/ClangChangeNamespace.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/change-namespace/tool/ClangChangeNamespace.cpp?rev=296110&r1=296109&r2=296110&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/change-namespace/tool/ClangChangeNamespace.cpp?rev=296110&r1=296109&r2=296110&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- clang-tools-extra/trunk/change-namespace/tool/ClangChangeNamespace.cpp (original)<br class="gmail_msg">
+++ clang-tools-extra/trunk/change-namespace/tool/ClangChangeNamespace.cpp Fri Feb 24 05:54:45 2017<br class="gmail_msg">
@@ -73,6 +73,25 @@ cl::opt<std::string> Style("style",<br class="gmail_msg">
                            cl::desc("The style name used for reformatting."),<br class="gmail_msg">
                            cl::init("LLVM"), cl::cat(ChangeNamespaceCategory));<br class="gmail_msg">
<br class="gmail_msg">
+cl::opt<std::string> WhiteListFile(<br class="gmail_msg">
+    "whitelist_file",<br class="gmail_msg">
+    cl::desc("A file containing regexes of symbol names that are not expected "<br class="gmail_msg">
+             "to be updated when changing namespaces around them."),<br class="gmail_msg">
+    cl::init(""), cl::cat(ChangeNamespaceCategory));<br class="gmail_msg">
+<br class="gmail_msg">
+llvm::ErrorOr<std::vector<std::string>> GetWhiteListedSymbolPatterns() {<br class="gmail_msg">
+  llvm::SmallVector<StringRef, 8> Lines;<br class="gmail_msg">
+  if (!WhiteListFile.empty()) {<br class="gmail_msg">
+    llvm::ErrorOr<std::unique_ptr<llvm::MemoryBuffer>> File =<br class="gmail_msg">
+        llvm::MemoryBuffer::getFile(WhiteListFile);<br class="gmail_msg">
+    if (!File)<br class="gmail_msg">
+      return File.getError();<br class="gmail_msg">
+    llvm::StringRef Content = File.get()->getBuffer();<br class="gmail_msg">
+    Content.split(Lines, '\n', /*MaxSplit=*/-1, /*KeepEmpty=*/false);<br class="gmail_msg">
+  }<br class="gmail_msg">
+  return std::vector<std::string>(Lines.begin(), Lines.end());<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
 } // anonymous namespace<br class="gmail_msg">
<br class="gmail_msg">
 int main(int argc, const char **argv) {<br class="gmail_msg">
@@ -81,8 +100,16 @@ int main(int argc, const char **argv) {<br class="gmail_msg">
                                              ChangeNamespaceCategory);<br class="gmail_msg">
   const auto &Files = OptionsParser.getSourcePathList();<br class="gmail_msg">
   tooling::RefactoringTool Tool(OptionsParser.getCompilations(), Files);<br class="gmail_msg">
+  llvm::ErrorOr<std::vector<std::string>> WhiteListPatterns =<br class="gmail_msg">
+      GetWhiteListedSymbolPatterns();<br class="gmail_msg">
+  if (!WhiteListPatterns) {<br class="gmail_msg">
+    llvm::errs() << "Failed to open whitelist file " << WhiteListFile << ". "<br class="gmail_msg">
+                 << WhiteListPatterns.getError().message() << "\n";<br class="gmail_msg">
+    return 1;<br class="gmail_msg">
+  }<br class="gmail_msg">
   change_namespace::ChangeNamespaceTool NamespaceTool(<br class="gmail_msg">
-      OldNamespace, NewNamespace, FilePattern, &Tool.getReplacements(), Style);<br class="gmail_msg">
+      OldNamespace, NewNamespace, FilePattern, *WhiteListPatterns,<br class="gmail_msg">
+      &Tool.getReplacements(), Style);<br class="gmail_msg">
   ast_matchers::MatchFinder Finder;<br class="gmail_msg">
   NamespaceTool.registerMatchers(&Finder);<br class="gmail_msg">
   std::unique_ptr<tooling::FrontendActionFactory> Factory =<br class="gmail_msg">
<br class="gmail_msg">
Added: clang-tools-extra/trunk/test/change-namespace/Inputs/fake-std.h<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/change-namespace/Inputs/fake-std.h?rev=296110&view=auto" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/change-namespace/Inputs/fake-std.h?rev=296110&view=auto</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- clang-tools-extra/trunk/test/change-namespace/Inputs/fake-std.h (added)<br class="gmail_msg">
+++ clang-tools-extra/trunk/test/change-namespace/Inputs/fake-std.h Fri Feb 24 05:54:45 2017<br class="gmail_msg">
@@ -0,0 +1,5 @@<br class="gmail_msg">
+namespace std {<br class="gmail_msg">
+  class STD {};<br class="gmail_msg">
+}<br class="gmail_msg">
+<br class="gmail_msg">
+using namespace std;<br class="gmail_msg">
<br class="gmail_msg">
Added: clang-tools-extra/trunk/test/change-namespace/white-list.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/change-namespace/white-list.cpp?rev=296110&view=auto" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/change-namespace/white-list.cpp?rev=296110&view=auto</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- clang-tools-extra/trunk/test/change-namespace/white-list.cpp (added)<br class="gmail_msg">
+++ clang-tools-extra/trunk/test/change-namespace/white-list.cpp Fri Feb 24 05:54:45 2017<br class="gmail_msg">
@@ -0,0 +1,19 @@<br class="gmail_msg">
+// RUN: echo "^std::.*$" > %T/white-list.txt<br class="gmail_msg">
+// RUN: clang-change-namespace -old_namespace "na::nb" -new_namespace "x::y" --file_pattern ".*" --whitelist_file %T/white-list.txt %s -- | sed 's,// CHECK.*,,' | FileCheck %s<br class="gmail_msg">
+<br class="gmail_msg">
+#include "Inputs/fake-std.h"<br class="gmail_msg">
+<br class="gmail_msg">
+// CHECK: namespace x {<br class="gmail_msg">
+// CHECK-NEXT: namespace y {<br class="gmail_msg">
+namespace na {<br class="gmail_msg">
+namespace nb {<br class="gmail_msg">
+void f() {<br class="gmail_msg">
+  std::STD x1;<br class="gmail_msg">
+  STD x2;<br class="gmail_msg">
+// CHECK: {{^}}  std::STD x1;{{$}}<br class="gmail_msg">
+// CHECK-NEXT: {{^}}  STD x2;{{$}}<br class="gmail_msg">
+}<br class="gmail_msg">
+// CHECK: } // namespace y<br class="gmail_msg">
+// CHECK-NEXT: } // namespace x<br class="gmail_msg">
+}<br class="gmail_msg">
+}<br class="gmail_msg">
<br class="gmail_msg">
Modified: clang-tools-extra/trunk/unittests/change-namespace/ChangeNamespaceTests.cpp<br class="gmail_msg">
URL: <a href="http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/change-namespace/ChangeNamespaceTests.cpp?rev=296110&r1=296109&r2=296110&view=diff" rel="noreferrer" class="gmail_msg" target="_blank">http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/unittests/change-namespace/ChangeNamespaceTests.cpp?rev=296110&r1=296109&r2=296110&view=diff</a><br class="gmail_msg">
==============================================================================<br class="gmail_msg">
--- clang-tools-extra/trunk/unittests/change-namespace/ChangeNamespaceTests.cpp (original)<br class="gmail_msg">
+++ clang-tools-extra/trunk/unittests/change-namespace/ChangeNamespaceTests.cpp Fri Feb 24 05:54:45 2017<br class="gmail_msg">
@@ -38,7 +38,8 @@ public:<br class="gmail_msg">
<br class="gmail_msg">
     std::map<std::string, tooling::Replacements> FileToReplacements;<br class="gmail_msg">
     change_namespace::ChangeNamespaceTool NamespaceTool(<br class="gmail_msg">
-        OldNamespace, NewNamespace, FilePattern, &FileToReplacements);<br class="gmail_msg">
+        OldNamespace, NewNamespace, FilePattern,<br class="gmail_msg">
+        /*WhiteListedSymbolPatterns*/ {}, &FileToReplacements);<br class="gmail_msg">
     ast_matchers::MatchFinder Finder;<br class="gmail_msg">
     NamespaceTool.registerMatchers(&Finder);<br class="gmail_msg">
     std::unique_ptr<tooling::FrontendActionFactory> Factory =<br class="gmail_msg">
<br class="gmail_msg">
<br class="gmail_msg">
_______________________________________________<br class="gmail_msg">
cfe-commits mailing list<br class="gmail_msg">
<a href="mailto:cfe-commits@lists.llvm.org" class="gmail_msg" target="_blank">cfe-commits@lists.llvm.org</a><br class="gmail_msg">
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits" rel="noreferrer" class="gmail_msg" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits</a><br class="gmail_msg">
</blockquote></div><br class="gmail_msg"></div>
</blockquote></div></blockquote></div>