[PATCH] D86822: [clang] Enable -fsanitize=thread on Fuchsia.

2020-08-28 Thread Marco Vanotti via Phabricator via cfe-commits
charco created this revision.
charco added reviewers: mcgrathr, phosek.
Herald added subscribers: cfe-commits, danielkiss.
Herald added a project: clang.
charco requested review of this revision.

This CL modifies clang enabling using -fsanitize=thread on fuchsia. The
change doesn't build the runtime for fuchsia, it just enables the
instrumentation to be used.

pair-programmed-with: mdemp...@google.com
Change-Id: I816c4d240d1f15e9eae2803fb8ba3a7bf667ed51


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D86822

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/lib/Driver/ToolChains/Fuchsia.cpp


Index: clang/lib/Driver/ToolChains/Fuchsia.cpp
===
--- clang/lib/Driver/ToolChains/Fuchsia.cpp
+++ clang/lib/Driver/ToolChains/Fuchsia.cpp
@@ -95,6 +95,8 @@
 std::string Dyld = D.DyldPrefix;
 if (SanArgs.needsAsanRt() && SanArgs.needsSharedRt())
   Dyld += "asan/";
+if (SanArgs.needsTsanRt() && SanArgs.needsSharedRt())
+  Dyld += "tsan/";
 Dyld += "ld.so.1";
 CmdArgs.push_back("-dynamic-linker");
 CmdArgs.push_back(Args.MakeArgString(Dyld));
@@ -349,6 +351,7 @@
   Res |= SanitizerKind::Leak;
   Res |= SanitizerKind::SafeStack;
   Res |= SanitizerKind::Scudo;
+  Res |= SanitizerKind::Thread;
   return Res;
 }
 
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -698,6 +698,8 @@
   else
 SharedRuntimes.push_back("scudo");
 }
+if (SanArgs.needsTsanRt() && SanArgs.linkRuntimes())
+  SharedRuntimes.push_back("tsan");
 if (SanArgs.needsHwasanRt() && SanArgs.linkRuntimes())
   SharedRuntimes.push_back("hwasan");
   }
@@ -735,7 +737,8 @@
 if (SanArgs.linkCXXRuntimes())
   StaticRuntimes.push_back("msan_cxx");
   }
-  if (SanArgs.needsTsanRt() && SanArgs.linkRuntimes()) {
+  if (!SanArgs.needsSharedRt() && SanArgs.needsTsanRt() &&
+  SanArgs.linkRuntimes()) {
 StaticRuntimes.push_back("tsan");
 if (SanArgs.linkCXXRuntimes())
   StaticRuntimes.push_back("tsan_cxx");


Index: clang/lib/Driver/ToolChains/Fuchsia.cpp
===
--- clang/lib/Driver/ToolChains/Fuchsia.cpp
+++ clang/lib/Driver/ToolChains/Fuchsia.cpp
@@ -95,6 +95,8 @@
 std::string Dyld = D.DyldPrefix;
 if (SanArgs.needsAsanRt() && SanArgs.needsSharedRt())
   Dyld += "asan/";
+if (SanArgs.needsTsanRt() && SanArgs.needsSharedRt())
+  Dyld += "tsan/";
 Dyld += "ld.so.1";
 CmdArgs.push_back("-dynamic-linker");
 CmdArgs.push_back(Args.MakeArgString(Dyld));
@@ -349,6 +351,7 @@
   Res |= SanitizerKind::Leak;
   Res |= SanitizerKind::SafeStack;
   Res |= SanitizerKind::Scudo;
+  Res |= SanitizerKind::Thread;
   return Res;
 }
 
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -698,6 +698,8 @@
   else
 SharedRuntimes.push_back("scudo");
 }
+if (SanArgs.needsTsanRt() && SanArgs.linkRuntimes())
+  SharedRuntimes.push_back("tsan");
 if (SanArgs.needsHwasanRt() && SanArgs.linkRuntimes())
   SharedRuntimes.push_back("hwasan");
   }
@@ -735,7 +737,8 @@
 if (SanArgs.linkCXXRuntimes())
   StaticRuntimes.push_back("msan_cxx");
   }
-  if (SanArgs.needsTsanRt() && SanArgs.linkRuntimes()) {
+  if (!SanArgs.needsSharedRt() && SanArgs.needsTsanRt() &&
+  SanArgs.linkRuntimes()) {
 StaticRuntimes.push_back("tsan");
 if (SanArgs.linkCXXRuntimes())
   StaticRuntimes.push_back("tsan_cxx");
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D86822: [clang] Enable -fsanitize=thread on Fuchsia.

2020-08-28 Thread Marco Vanotti via Phabricator via cfe-commits
charco updated this revision to Diff 288735.
charco added a comment.

remove change-id lines.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D86822/new/

https://reviews.llvm.org/D86822

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/lib/Driver/ToolChains/Fuchsia.cpp


Index: clang/lib/Driver/ToolChains/Fuchsia.cpp
===
--- clang/lib/Driver/ToolChains/Fuchsia.cpp
+++ clang/lib/Driver/ToolChains/Fuchsia.cpp
@@ -95,6 +95,8 @@
 std::string Dyld = D.DyldPrefix;
 if (SanArgs.needsAsanRt() && SanArgs.needsSharedRt())
   Dyld += "asan/";
+if (SanArgs.needsTsanRt() && SanArgs.needsSharedRt())
+  Dyld += "tsan/";
 Dyld += "ld.so.1";
 CmdArgs.push_back("-dynamic-linker");
 CmdArgs.push_back(Args.MakeArgString(Dyld));
@@ -349,6 +351,7 @@
   Res |= SanitizerKind::Leak;
   Res |= SanitizerKind::SafeStack;
   Res |= SanitizerKind::Scudo;
+  Res |= SanitizerKind::Thread;
   return Res;
 }
 
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -698,6 +698,8 @@
   else
 SharedRuntimes.push_back("scudo");
 }
+if (SanArgs.needsTsanRt() && SanArgs.linkRuntimes())
+  SharedRuntimes.push_back("tsan");
 if (SanArgs.needsHwasanRt() && SanArgs.linkRuntimes())
   SharedRuntimes.push_back("hwasan");
   }
@@ -735,7 +737,8 @@
 if (SanArgs.linkCXXRuntimes())
   StaticRuntimes.push_back("msan_cxx");
   }
-  if (SanArgs.needsTsanRt() && SanArgs.linkRuntimes()) {
+  if (!SanArgs.needsSharedRt() && SanArgs.needsTsanRt() &&
+  SanArgs.linkRuntimes()) {
 StaticRuntimes.push_back("tsan");
 if (SanArgs.linkCXXRuntimes())
   StaticRuntimes.push_back("tsan_cxx");


Index: clang/lib/Driver/ToolChains/Fuchsia.cpp
===
--- clang/lib/Driver/ToolChains/Fuchsia.cpp
+++ clang/lib/Driver/ToolChains/Fuchsia.cpp
@@ -95,6 +95,8 @@
 std::string Dyld = D.DyldPrefix;
 if (SanArgs.needsAsanRt() && SanArgs.needsSharedRt())
   Dyld += "asan/";
+if (SanArgs.needsTsanRt() && SanArgs.needsSharedRt())
+  Dyld += "tsan/";
 Dyld += "ld.so.1";
 CmdArgs.push_back("-dynamic-linker");
 CmdArgs.push_back(Args.MakeArgString(Dyld));
@@ -349,6 +351,7 @@
   Res |= SanitizerKind::Leak;
   Res |= SanitizerKind::SafeStack;
   Res |= SanitizerKind::Scudo;
+  Res |= SanitizerKind::Thread;
   return Res;
 }
 
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -698,6 +698,8 @@
   else
 SharedRuntimes.push_back("scudo");
 }
+if (SanArgs.needsTsanRt() && SanArgs.linkRuntimes())
+  SharedRuntimes.push_back("tsan");
 if (SanArgs.needsHwasanRt() && SanArgs.linkRuntimes())
   SharedRuntimes.push_back("hwasan");
   }
@@ -735,7 +737,8 @@
 if (SanArgs.linkCXXRuntimes())
   StaticRuntimes.push_back("msan_cxx");
   }
-  if (SanArgs.needsTsanRt() && SanArgs.linkRuntimes()) {
+  if (!SanArgs.needsSharedRt() && SanArgs.needsTsanRt() &&
+  SanArgs.linkRuntimes()) {
 StaticRuntimes.push_back("tsan");
 if (SanArgs.linkCXXRuntimes())
   StaticRuntimes.push_back("tsan_cxx");
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D86822: [clang] Enable -fsanitize=thread on Fuchsia.

2020-08-28 Thread Marco Vanotti via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG2e800495a78a: [clang] Enable -fsanitize=thread on Fuchsia. 
(authored by charco).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D86822/new/

https://reviews.llvm.org/D86822

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/lib/Driver/ToolChains/Fuchsia.cpp


Index: clang/lib/Driver/ToolChains/Fuchsia.cpp
===
--- clang/lib/Driver/ToolChains/Fuchsia.cpp
+++ clang/lib/Driver/ToolChains/Fuchsia.cpp
@@ -95,6 +95,8 @@
 std::string Dyld = D.DyldPrefix;
 if (SanArgs.needsAsanRt() && SanArgs.needsSharedRt())
   Dyld += "asan/";
+if (SanArgs.needsTsanRt() && SanArgs.needsSharedRt())
+  Dyld += "tsan/";
 Dyld += "ld.so.1";
 CmdArgs.push_back("-dynamic-linker");
 CmdArgs.push_back(Args.MakeArgString(Dyld));
@@ -349,6 +351,7 @@
   Res |= SanitizerKind::Leak;
   Res |= SanitizerKind::SafeStack;
   Res |= SanitizerKind::Scudo;
+  Res |= SanitizerKind::Thread;
   return Res;
 }
 
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -703,6 +703,8 @@
   else
 SharedRuntimes.push_back("scudo");
 }
+if (SanArgs.needsTsanRt() && SanArgs.linkRuntimes())
+  SharedRuntimes.push_back("tsan");
 if (SanArgs.needsHwasanRt() && SanArgs.linkRuntimes())
   SharedRuntimes.push_back("hwasan");
   }
@@ -747,7 +749,8 @@
 if (SanArgs.linkCXXRuntimes())
   StaticRuntimes.push_back("msan_cxx");
   }
-  if (SanArgs.needsTsanRt() && SanArgs.linkRuntimes()) {
+  if (!SanArgs.needsSharedRt() && SanArgs.needsTsanRt() &&
+  SanArgs.linkRuntimes()) {
 StaticRuntimes.push_back("tsan");
 if (SanArgs.linkCXXRuntimes())
   StaticRuntimes.push_back("tsan_cxx");


Index: clang/lib/Driver/ToolChains/Fuchsia.cpp
===
--- clang/lib/Driver/ToolChains/Fuchsia.cpp
+++ clang/lib/Driver/ToolChains/Fuchsia.cpp
@@ -95,6 +95,8 @@
 std::string Dyld = D.DyldPrefix;
 if (SanArgs.needsAsanRt() && SanArgs.needsSharedRt())
   Dyld += "asan/";
+if (SanArgs.needsTsanRt() && SanArgs.needsSharedRt())
+  Dyld += "tsan/";
 Dyld += "ld.so.1";
 CmdArgs.push_back("-dynamic-linker");
 CmdArgs.push_back(Args.MakeArgString(Dyld));
@@ -349,6 +351,7 @@
   Res |= SanitizerKind::Leak;
   Res |= SanitizerKind::SafeStack;
   Res |= SanitizerKind::Scudo;
+  Res |= SanitizerKind::Thread;
   return Res;
 }
 
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -703,6 +703,8 @@
   else
 SharedRuntimes.push_back("scudo");
 }
+if (SanArgs.needsTsanRt() && SanArgs.linkRuntimes())
+  SharedRuntimes.push_back("tsan");
 if (SanArgs.needsHwasanRt() && SanArgs.linkRuntimes())
   SharedRuntimes.push_back("hwasan");
   }
@@ -747,7 +749,8 @@
 if (SanArgs.linkCXXRuntimes())
   StaticRuntimes.push_back("msan_cxx");
   }
-  if (SanArgs.needsTsanRt() && SanArgs.linkRuntimes()) {
+  if (!SanArgs.needsSharedRt() && SanArgs.needsTsanRt() &&
+  SanArgs.linkRuntimes()) {
 StaticRuntimes.push_back("tsan");
 if (SanArgs.linkCXXRuntimes())
   StaticRuntimes.push_back("tsan_cxx");
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D96570: [scan-build-py] Add sarif-html support in scan-build-py

2021-02-23 Thread Marco Vanotti via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG97a304cc8f94: [scan-build-py] Add sarif-html support in 
scan-build-py (authored by Daniel Hwang , committed by 
charco).
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D96570/new/

https://reviews.llvm.org/D96570

Files:
  clang/tools/scan-build-py/libscanbuild/analyze.py
  clang/tools/scan-build-py/libscanbuild/arguments.py
  clang/tools/scan-build-py/libscanbuild/report.py
  clang/tools/scan-build-py/tests/functional/cases/test_from_cdb.py

Index: clang/tools/scan-build-py/tests/functional/cases/test_from_cdb.py
===
--- clang/tools/scan-build-py/tests/functional/cases/test_from_cdb.py
+++ clang/tools/scan-build-py/tests/functional/cases/test_from_cdb.py
@@ -102,7 +102,11 @@
 def get_plist_count(directory):
 return len(glob.glob(os.path.join(directory, 'report-*.plist')))
 
-def test_default_creates_html_report(self):
+@staticmethod
+def get_sarif_count(directory):
+return len(glob.glob(os.path.join(directory, 'result-*.sarif')))
+
+def test_default_only_creates_html_report(self):
 with libear.TemporaryDirectory() as tmpdir:
 cdb = prepare_cdb('regular', tmpdir)
 exit_code, reportdir = run_analyzer(tmpdir, cdb, [])
@@ -110,8 +114,9 @@
 os.path.exists(os.path.join(reportdir, 'index.html')))
 self.assertEqual(self.get_html_count(reportdir), 2)
 self.assertEqual(self.get_plist_count(reportdir), 0)
+self.assertEqual(self.get_sarif_count(reportdir), 0)
 
-def test_plist_and_html_creates_html_report(self):
+def test_plist_and_html_creates_html_and_plist_reports(self):
 with libear.TemporaryDirectory() as tmpdir:
 cdb = prepare_cdb('regular', tmpdir)
 exit_code, reportdir = run_analyzer(tmpdir, cdb, ['--plist-html'])
@@ -119,8 +124,9 @@
 os.path.exists(os.path.join(reportdir, 'index.html')))
 self.assertEqual(self.get_html_count(reportdir), 2)
 self.assertEqual(self.get_plist_count(reportdir), 5)
+self.assertEqual(self.get_sarif_count(reportdir), 0)
 
-def test_plist_does_not_creates_html_report(self):
+def test_plist_only_creates_plist_report(self):
 with libear.TemporaryDirectory() as tmpdir:
 cdb = prepare_cdb('regular', tmpdir)
 exit_code, reportdir = run_analyzer(tmpdir, cdb, ['--plist'])
@@ -128,6 +134,31 @@
 os.path.exists(os.path.join(reportdir, 'index.html')))
 self.assertEqual(self.get_html_count(reportdir), 0)
 self.assertEqual(self.get_plist_count(reportdir), 5)
+self.assertEqual(self.get_sarif_count(reportdir), 0)
+
+def test_sarif_only_creates_sarif_result(self):
+with libear.TemporaryDirectory() as tmpdir:
+cdb = prepare_cdb('regular', tmpdir)
+exit_code, reportdir = run_analyzer(tmpdir, cdb, ['--sarif'])
+self.assertFalse(
+os.path.exists(os.path.join(reportdir, 'index.html')))
+self.assertTrue(
+os.path.exists(os.path.join(reportdir, 'results-merged.sarif')))
+self.assertEqual(self.get_html_count(reportdir), 0)
+self.assertEqual(self.get_plist_count(reportdir), 0)
+self.assertEqual(self.get_sarif_count(reportdir), 5)
+
+def test_sarif_and_html_creates_sarif_and_html_reports(self):
+with libear.TemporaryDirectory() as tmpdir:
+cdb = prepare_cdb('regular', tmpdir)
+exit_code, reportdir = run_analyzer(tmpdir, cdb, ['--sarif-html'])
+self.assertTrue(
+os.path.exists(os.path.join(reportdir, 'index.html')))
+self.assertTrue(
+os.path.exists(os.path.join(reportdir, 'results-merged.sarif')))
+self.assertEqual(self.get_html_count(reportdir), 2)
+self.assertEqual(self.get_plist_count(reportdir), 0)
+self.assertEqual(self.get_sarif_count(reportdir), 5)
 
 
 class FailureReportTest(unittest.TestCase):
Index: clang/tools/scan-build-py/libscanbuild/report.py
===
--- clang/tools/scan-build-py/libscanbuild/report.py
+++ clang/tools/scan-build-py/libscanbuild/report.py
@@ -26,8 +26,8 @@
 def document(args):
 """ Generates cover report and returns the number of bugs/crashes. """
 
-html_reports_available = args.output_format in {'html', 'plist-html'}
-sarif_reports_available = args.output_format in {'sarif'}
+html_reports_available = args.output_format in {'html', 'plist-html', 'sarif-html'}
+sarif_reports_available = args.output_format in {'sarif', 'sarif-html'}
 
 logging.debug('count cra

[PATCH] D104138: Create install targets for scan-build-py.

2021-06-21 Thread Marco Vanotti via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGd9cf8291e7ef: Create install targets for scan-build-py. 
(authored by Daniel Hwang , committed by charco).

Changed prior to commit:
  https://reviews.llvm.org/D104138?vs=352199&id=353471#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D104138/new/

https://reviews.llvm.org/D104138

Files:
  clang/cmake/caches/Fuchsia-stage2.cmake
  clang/tools/CMakeLists.txt
  clang/tools/scan-build-py/CMakeLists.txt
  clang/tools/scan-build-py/bin/analyze-build
  clang/tools/scan-build-py/bin/analyze-c++
  clang/tools/scan-build-py/bin/analyze-cc
  clang/tools/scan-build-py/bin/intercept-build
  clang/tools/scan-build-py/bin/intercept-c++
  clang/tools/scan-build-py/bin/intercept-cc
  clang/tools/scan-build-py/bin/scan-build
  clang/tools/scan-build-py/lib/libear/__init__.py
  clang/tools/scan-build-py/lib/libear/config.h.in
  clang/tools/scan-build-py/lib/libear/ear.c
  clang/tools/scan-build-py/lib/libscanbuild/__init__.py
  clang/tools/scan-build-py/lib/libscanbuild/analyze.py
  clang/tools/scan-build-py/lib/libscanbuild/arguments.py
  clang/tools/scan-build-py/lib/libscanbuild/clang.py
  clang/tools/scan-build-py/lib/libscanbuild/compilation.py
  clang/tools/scan-build-py/lib/libscanbuild/intercept.py
  clang/tools/scan-build-py/lib/libscanbuild/report.py
  clang/tools/scan-build-py/lib/libscanbuild/resources/scanview.css
  clang/tools/scan-build-py/lib/libscanbuild/resources/selectable.js
  clang/tools/scan-build-py/lib/libscanbuild/resources/sorttable.js
  clang/tools/scan-build-py/lib/libscanbuild/shell.py
  clang/tools/scan-build-py/libear/__init__.py
  clang/tools/scan-build-py/libear/config.h.in
  clang/tools/scan-build-py/libear/ear.c
  clang/tools/scan-build-py/libexec/analyze-c++
  clang/tools/scan-build-py/libexec/analyze-cc
  clang/tools/scan-build-py/libexec/intercept-c++
  clang/tools/scan-build-py/libexec/intercept-cc
  clang/tools/scan-build-py/libscanbuild/__init__.py
  clang/tools/scan-build-py/libscanbuild/analyze.py
  clang/tools/scan-build-py/libscanbuild/arguments.py
  clang/tools/scan-build-py/libscanbuild/clang.py
  clang/tools/scan-build-py/libscanbuild/compilation.py
  clang/tools/scan-build-py/libscanbuild/intercept.py
  clang/tools/scan-build-py/libscanbuild/report.py
  clang/tools/scan-build-py/libscanbuild/resources/scanview.css
  clang/tools/scan-build-py/libscanbuild/resources/selectable.js
  clang/tools/scan-build-py/libscanbuild/shell.py
  clang/tools/scan-build-py/tests/__init__.py
  clang/tools/scan-build-py/tests/functional/cases/__init__.py
  clang/tools/scan-build-py/tests/functional/cases/test_exec_anatomy.py
  clang/tools/scan-build-py/tests/functional/cases/test_from_cdb.py
  clang/tools/scan-build-py/tests/functional/cases/test_from_cmd.py
  clang/tools/scan-build-py/tests/unit/test_analyze.py

Index: clang/tools/scan-build-py/tests/unit/test_analyze.py
===
--- clang/tools/scan-build-py/tests/unit/test_analyze.py
+++ clang/tools/scan-build-py/tests/unit/test_analyze.py
@@ -18,9 +18,9 @@
 # scan-build can be easily matched up to compare results.
 def test_directory_name_comparison(self):
 with libear.TemporaryDirectory() as tmpdir, \
- sut.report_directory(tmpdir, False) as report_dir1, \
- sut.report_directory(tmpdir, False) as report_dir2, \
- sut.report_directory(tmpdir, False) as report_dir3:
+ sut.report_directory(tmpdir, False, 'html') as report_dir1, \
+ sut.report_directory(tmpdir, False, 'html') as report_dir2, \
+ sut.report_directory(tmpdir, False, 'html') as report_dir3:
 self.assertLess(report_dir1, report_dir2)
 self.assertLess(report_dir2, report_dir3)
 
Index: clang/tools/scan-build-py/tests/functional/cases/test_from_cmd.py
===
--- clang/tools/scan-build-py/tests/functional/cases/test_from_cmd.py
+++ clang/tools/scan-build-py/tests/functional/cases/test_from_cmd.py
@@ -17,7 +17,7 @@
 @staticmethod
 def run_analyzer(outdir, args, cmd):
 return check_call_and_report(
-['scan-build', '--intercept-first', '-o', outdir] + args,
+['scan-build-py', '--intercept-first', '-o', outdir] + args,
 cmd)
 
 def test_regular_keeps_report_dir(self):
@@ -49,7 +49,7 @@
 with libear.TemporaryDirectory() as tmpdir:
 make = make_args(tmpdir) + ['build_regular']
 outdir = check_call_and_report(
-['scan-build', '--plist', '-o', tmpdir, '--override-compiler'],
+['scan-build-py', '--plist', '-o', tmpdir, '--override-compiler'],
 make)
 
 self.assertTrue(os.path.isdir(outdir))
@@ -59,7 +59,7 @@