asmar created this revision.
asmar added a reviewer: NoQ.
Herald added subscribers: cfe-commits, Charusso.
Herald added a project: clang.

Fixes "Use of uninitialized value $ScanView in exec" error on systems with 
scan-view executable not located in the expected place.

Currently when scan-build is installed in Debian-like (Ubuntu 18.04 my case) 
system the scan-view executable is not correctly identified when installed by 
apt from clang-tools package.

The buggy code was first introduced here 10 ago:

https://bugs.llvm.org/show_bug.cgi?id=3725

The issue was recently reported on Debian Bugs:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=941614

The problem lies in current master scan-build:974:

https://github.com/llvm/llvm-project/blob/350522670232c74587138dc83161de514567f411/clang/tools/scan-build/bin/scan-build#L974

Searching for "$RealBin/../../scan-view/bin/scan-view" may not work in such 
cases because directories are versioned e.g. 
"$RealBin/../../scan-view-6.0/bin/scan-view".


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D77880

Files:
  clang/tools/scan-build/bin/scan-build


Index: clang/tools/scan-build/bin/scan-build
===================================================================
--- clang/tools/scan-build/bin/scan-build
+++ clang/tools/scan-build/bin/scan-build
@@ -971,6 +971,7 @@
         my $ScanView = Cwd::realpath("$RealBin/scan-view");
         if (! -x $ScanView) { $ScanView = "scan-view"; }
         if (! -x $ScanView) { $ScanView = 
Cwd::realpath("$RealBin/../../scan-view/bin/scan-view"); }
+        if (! -x $ScanView) { $ScanView = `which scan-view`; chomp $ScanView; }
         exec $ScanView, "$Options{OutputDir}";
       }
 


Index: clang/tools/scan-build/bin/scan-build
===================================================================
--- clang/tools/scan-build/bin/scan-build
+++ clang/tools/scan-build/bin/scan-build
@@ -971,6 +971,7 @@
         my $ScanView = Cwd::realpath("$RealBin/scan-view");
         if (! -x $ScanView) { $ScanView = "scan-view"; }
         if (! -x $ScanView) { $ScanView = Cwd::realpath("$RealBin/../../scan-view/bin/scan-view"); }
+        if (! -x $ScanView) { $ScanView = `which scan-view`; chomp $ScanView; }
         exec $ScanView, "$Options{OutputDir}";
       }
 
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to