[libclc] r367800 - Rename F_{None, Text, Append} to OF_{None, Text, Append}. NFC

2019-08-04 Thread Fangrui Song via cfe-commits
Author: maskray
Date: Sun Aug  4 22:43:48 2019
New Revision: 367800

URL: http://llvm.org/viewvc/llvm-project?rev=367800=rev
Log:
Rename F_{None,Text,Append} to OF_{None,Text,Append}. NFC

F_{None,Text,Append} are kept for compatibility since r334221.

Modified:
libclc/trunk/utils/prepare-builtins.cpp

Modified: libclc/trunk/utils/prepare-builtins.cpp
URL: 
http://llvm.org/viewvc/llvm-project/libclc/trunk/utils/prepare-builtins.cpp?rev=367800=367799=367800=diff
==
--- libclc/trunk/utils/prepare-builtins.cpp (original)
+++ libclc/trunk/utils/prepare-builtins.cpp Sun Aug  4 22:43:48 2019
@@ -95,10 +95,10 @@ int main(int argc, char **argv) {
   std::error_code EC;
 #if HAVE_LLVM >= 0x0600
   std::unique_ptr Out(
-  new ToolOutputFile(OutputFilename, EC, sys::fs::F_None));
+  new ToolOutputFile(OutputFilename, EC, sys::fs::OF_None));
 #else
   std::unique_ptr Out(
-  new tool_output_file(OutputFilename, EC, sys::fs::F_None));
+  new tool_output_file(OutputFilename, EC, sys::fs::OF_None));
 #endif
   if (EC) {
 errs() << EC.message() << '\n';


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r367800 - Rename F_{None,Text,Append} to OF_{None,Text,Append}. NFC

2019-08-04 Thread Fangrui Song via cfe-commits
Author: maskray
Date: Sun Aug  4 22:43:48 2019
New Revision: 367800

URL: http://llvm.org/viewvc/llvm-project?rev=367800=rev
Log:
Rename F_{None,Text,Append} to OF_{None,Text,Append}. NFC

F_{None,Text,Append} are kept for compatibility since r334221.

Modified:
cfe/trunk/lib/ARCMigrate/FileRemapper.cpp
cfe/trunk/lib/ARCMigrate/ObjCMT.cpp
cfe/trunk/lib/ARCMigrate/PlistReporter.cpp
cfe/trunk/lib/CodeGen/BackendUtil.cpp
cfe/trunk/lib/Driver/Compilation.cpp
cfe/trunk/lib/Driver/ToolChains/Clang.cpp
cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp
cfe/trunk/lib/Frontend/CompilerInstance.cpp
cfe/trunk/lib/Frontend/DependencyFile.cpp
cfe/trunk/lib/Frontend/DependencyGraph.cpp
cfe/trunk/lib/Frontend/FrontendActions.cpp
cfe/trunk/lib/Frontend/HeaderIncludeGen.cpp
cfe/trunk/lib/Frontend/ModuleDependencyCollector.cpp
cfe/trunk/lib/Frontend/Rewrite/FixItRewriter.cpp
cfe/trunk/lib/Frontend/SerializedDiagnosticPrinter.cpp
cfe/trunk/lib/Serialization/ASTReader.cpp
cfe/trunk/lib/StaticAnalyzer/Core/PlistDiagnostics.cpp
cfe/trunk/lib/StaticAnalyzer/Core/SarifDiagnostics.cpp
cfe/trunk/tools/clang-offload-bundler/ClangOffloadBundler.cpp
cfe/trunk/tools/clang-refactor/ClangRefactor.cpp
cfe/trunk/tools/clang-rename/ClangRename.cpp
cfe/trunk/tools/driver/cc1as_main.cpp

Modified: cfe/trunk/lib/ARCMigrate/FileRemapper.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ARCMigrate/FileRemapper.cpp?rev=367800=367799=367800=diff
==
--- cfe/trunk/lib/ARCMigrate/FileRemapper.cpp (original)
+++ cfe/trunk/lib/ARCMigrate/FileRemapper.cpp Sun Aug  4 22:43:48 2019
@@ -121,7 +121,7 @@ bool FileRemapper::flushToFile(StringRef
 
   std::error_code EC;
   std::string infoFile = outputPath;
-  llvm::raw_fd_ostream infoOut(infoFile, EC, llvm::sys::fs::F_None);
+  llvm::raw_fd_ostream infoOut(infoFile, EC, llvm::sys::fs::OF_None);
   if (EC)
 return report(EC.message(), Diag);
 
@@ -177,7 +177,7 @@ bool FileRemapper::overwriteOriginal(Dia
 Diag);
 
 std::error_code EC;
-llvm::raw_fd_ostream Out(origFE->getName(), EC, llvm::sys::fs::F_None);
+llvm::raw_fd_ostream Out(origFE->getName(), EC, llvm::sys::fs::OF_None);
 if (EC)
   return report(EC.message(), Diag);
 

Modified: cfe/trunk/lib/ARCMigrate/ObjCMT.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ARCMigrate/ObjCMT.cpp?rev=367800=367799=367800=diff
==
--- cfe/trunk/lib/ARCMigrate/ObjCMT.cpp (original)
+++ cfe/trunk/lib/ARCMigrate/ObjCMT.cpp Sun Aug  4 22:43:48 2019
@@ -1951,7 +1951,7 @@ void ObjCMigrateASTConsumer::HandleTrans
 
  if (IsOutputFile) {
std::error_code EC;
-   llvm::raw_fd_ostream OS(MigrateDir, EC, llvm::sys::fs::F_None);
+   llvm::raw_fd_ostream OS(MigrateDir, EC, llvm::sys::fs::OF_None);
if (EC) {
   DiagnosticsEngine  = Ctx.getDiagnostics();
   Diags.Report(Diags.getCustomDiagID(DiagnosticsEngine::Error, "%0"))

Modified: cfe/trunk/lib/ARCMigrate/PlistReporter.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/ARCMigrate/PlistReporter.cpp?rev=367800=367799=367800=diff
==
--- cfe/trunk/lib/ARCMigrate/PlistReporter.cpp (original)
+++ cfe/trunk/lib/ARCMigrate/PlistReporter.cpp Sun Aug  4 22:43:48 2019
@@ -56,7 +56,7 @@ void arcmt::writeARCDiagsToPlist(const s
   }
 
   std::error_code EC;
-  llvm::raw_fd_ostream o(outPath, EC, llvm::sys::fs::F_Text);
+  llvm::raw_fd_ostream o(outPath, EC, llvm::sys::fs::OF_Text);
   if (EC) {
 llvm::errs() << "error: could not create file: " << outPath << '\n';
 return;

Modified: cfe/trunk/lib/CodeGen/BackendUtil.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/BackendUtil.cpp?rev=367800=367799=367800=diff
==
--- cfe/trunk/lib/CodeGen/BackendUtil.cpp (original)
+++ cfe/trunk/lib/CodeGen/BackendUtil.cpp Sun Aug  4 22:43:48 2019
@@ -119,7 +119,7 @@ class EmitAssemblyHelper {
   std::unique_ptr openOutputFile(StringRef Path) {
 std::error_code EC;
 auto F = llvm::make_unique(Path, EC,
- llvm::sys::fs::F_None);
+ llvm::sys::fs::OF_None);
 if (EC) {
   Diags.Report(diag::err_fe_unable_to_open_output) << Path << EC.message();
   F.reset();

Modified: cfe/trunk/lib/Driver/Compilation.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Compilation.cpp?rev=367800=367799=367800=diff
==
--- cfe/trunk/lib/Driver/Compilation.cpp (original)
+++ cfe/trunk/lib/Driver/Compilation.cpp Sun Aug  4 22:43:48 2019
@@ -161,7 +161,7 @@ int 

[clang-tools-extra] r367800 - Rename F_{None, Text, Append} to OF_{None, Text, Append}. NFC

2019-08-04 Thread Fangrui Song via cfe-commits
Author: maskray
Date: Sun Aug  4 22:43:48 2019
New Revision: 367800

URL: http://llvm.org/viewvc/llvm-project?rev=367800=rev
Log:
Rename F_{None,Text,Append} to OF_{None,Text,Append}. NFC

F_{None,Text,Append} are kept for compatibility since r334221.

Modified:

clang-tools-extra/trunk/clang-apply-replacements/tool/ClangApplyReplacementsMain.cpp
clang-tools-extra/trunk/clang-doc/tool/ClangDocMain.cpp

clang-tools-extra/trunk/clang-include-fixer/find-all-symbols/tool/FindAllSymbolsMain.cpp
clang-tools-extra/trunk/clang-move/tool/ClangMove.cpp
clang-tools-extra/trunk/clang-tidy/ClangTidyProfiling.cpp
clang-tools-extra/trunk/clang-tidy/tool/ClangTidyMain.cpp
clang-tools-extra/trunk/modularize/ModuleAssistant.cpp
clang-tools-extra/trunk/pp-trace/PPTrace.cpp

Modified: 
clang-tools-extra/trunk/clang-apply-replacements/tool/ClangApplyReplacementsMain.cpp
URL: 
http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-apply-replacements/tool/ClangApplyReplacementsMain.cpp?rev=367800=367799=367800=diff
==
--- 
clang-tools-extra/trunk/clang-apply-replacements/tool/ClangApplyReplacementsMain.cpp
 (original)
+++ 
clang-tools-extra/trunk/clang-apply-replacements/tool/ClangApplyReplacementsMain.cpp
 Sun Aug  4 22:43:48 2019
@@ -152,7 +152,7 @@ int main(int argc, char **argv) {
 
 // Write new file to disk
 std::error_code EC;
-llvm::raw_fd_ostream FileStream(FileName, EC, llvm::sys::fs::F_None);
+llvm::raw_fd_ostream FileStream(FileName, EC, llvm::sys::fs::OF_None);
 if (EC) {
   llvm::errs() << "Could not open " << FileName << " for writing\n";
   continue;

Modified: clang-tools-extra/trunk/clang-doc/tool/ClangDocMain.cpp
URL: 
http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-doc/tool/ClangDocMain.cpp?rev=367800=367799=367800=diff
==
--- clang-tools-extra/trunk/clang-doc/tool/ClangDocMain.cpp (original)
+++ clang-tools-extra/trunk/clang-doc/tool/ClangDocMain.cpp Sun Aug  4 22:43:48 
2019
@@ -269,7 +269,8 @@ int main(int argc, const char **argv) {
   return 1;
 }
 std::error_code FileErr;
-llvm::raw_fd_ostream InfoOS(InfoPath.get(), FileErr, 
llvm::sys::fs::F_None);
+llvm::raw_fd_ostream InfoOS(InfoPath.get(), FileErr,
+llvm::sys::fs::OF_None);
 if (FileErr != OK) {
   llvm::errs() << "Error opening info file: " << FileErr.message() << "\n";
   continue;

Modified: 
clang-tools-extra/trunk/clang-include-fixer/find-all-symbols/tool/FindAllSymbolsMain.cpp
URL: 
http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-include-fixer/find-all-symbols/tool/FindAllSymbolsMain.cpp?rev=367800=367799=367800=diff
==
--- 
clang-tools-extra/trunk/clang-include-fixer/find-all-symbols/tool/FindAllSymbolsMain.cpp
 (original)
+++ 
clang-tools-extra/trunk/clang-include-fixer/find-all-symbols/tool/FindAllSymbolsMain.cpp
 Sun Aug  4 22:43:48 2019
@@ -114,7 +114,7 @@ bool Merge(llvm::StringRef MergeDir, llv
 }
   }
 
-  llvm::raw_fd_ostream OS(OutputFile, EC, llvm::sys::fs::F_None);
+  llvm::raw_fd_ostream OS(OutputFile, EC, llvm::sys::fs::OF_None);
   if (EC) {
 llvm::errs() << "Can't open '" << OutputFile << "': " << EC.message()
  << '\n';

Modified: clang-tools-extra/trunk/clang-move/tool/ClangMove.cpp
URL: 
http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-move/tool/ClangMove.cpp?rev=367800=367799=367800=diff
==
--- clang-tools-extra/trunk/clang-move/tool/ClangMove.cpp (original)
+++ clang-tools-extra/trunk/clang-move/tool/ClangMove.cpp Sun Aug  4 22:43:48 
2019
@@ -30,7 +30,7 @@ namespace {
 std::error_code CreateNewFile(const llvm::Twine ) {
   int fd = 0;
   if (std::error_code ec = llvm::sys::fs::openFileForWrite(
-  path, fd, llvm::sys::fs::CD_CreateAlways, llvm::sys::fs::F_Text))
+  path, fd, llvm::sys::fs::CD_CreateAlways, llvm::sys::fs::OF_Text))
 return ec;
 
   return llvm::sys::Process::SafelyCloseFileDescriptor(fd);

Modified: clang-tools-extra/trunk/clang-tidy/ClangTidyProfiling.cpp
URL: 
http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/ClangTidyProfiling.cpp?rev=367800=367799=367800=diff
==
--- clang-tools-extra/trunk/clang-tidy/ClangTidyProfiling.cpp (original)
+++ clang-tools-extra/trunk/clang-tidy/ClangTidyProfiling.cpp Sun Aug  4 
22:43:48 2019
@@ -66,7 +66,7 @@ void ClangTidyProfiling::storeProfileDat
   }
 
   std::error_code EC;
-  llvm::raw_fd_ostream OS(Storage->StoreFilename, EC, llvm::sys::fs::F_None);
+  llvm::raw_fd_ostream OS(Storage->StoreFilename, EC, llvm::sys::fs::OF_None);
   if (EC) {
 

[PATCH] D62445: [test] Fix plugin tests

2019-08-04 Thread Don Hinton via Phabricator via cfe-commits
hintonda added a comment.

In D62445#1613268 , @NoQ wrote:

> Ugh, there seems to be one more forgotten buildbot with plugins problems: 
> http://green.lab.llvm.org/green/job/clang-stage2-cmake-RgSan/6406/consoleText
>
>   FAIL: Clang :: Analysis/checker-plugins.c (467 of 14955)
>    TEST 'Clang :: Analysis/checker-plugins.c' FAILED 
> 
>   Script:
>   --
>   : 'RUN: at line 3';   
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/bin/clang
>  -cc1 -internal-isystem 
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/lib/clang/9.0.0/include
>  -nostdsysteminc -analyze -analyzer-constraints=range -verify 
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/llvm/tools/clang/test/Analysis/checker-plugins.c
> -load 
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/./lib/SampleAnalyzerPlugin.dylib
> -analyzer-checker='example.MainCallChecker'




> - Exit Code: 1 ```
> 
>   The error message doesn't seem to be very expressive. I also can't 
> reproduce it locally.
> 
>   It got suddenly fixed in 
> http://green.lab.llvm.org/green/job/clang-stage2-cmake-RgSan/6409/ but then 
> immediately failed again later and it's still failing in a similar manner, 
> and nobody noticed for two months =/
> 
>   I'll keep looking into this but i'd love to hear if you have any immediate 
> thoughts on that :)

I don't see anything obvious, but could change the bot to pass "-vv" to lit 
instead of just "-v"?  That way the actual error will make to the log.


Repository:
  rL LLVM

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

https://reviews.llvm.org/D62445



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D65286: [OpenCL] Allow OpenCL C style vector initialization in C++

2019-08-04 Thread Evgeniy via Phabricator via cfe-commits
ebrevnov added a comment.

Please be aware about build bot failure 
(http://lab.llvm.org:8011/builders/clang-cmake-thumbv7-full-sh/builds/2185) 
most likely caused by this change.


Repository:
  rL LLVM

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

https://reviews.llvm.org/D65286



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D65715: [Driver] Don't disable -fsanitizer-coverage for safe-stack or shadow-call-stack

2019-08-04 Thread Petr Hosek via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL367799: [Driver] Dont disable -fsanitizer-coverage for 
safe-stack or shadow-call-stack (authored by phosek, committed by ).
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Changed prior to commit:
  https://reviews.llvm.org/D65715?vs=213280=213281#toc

Repository:
  rL LLVM

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

https://reviews.llvm.org/D65715

Files:
  cfe/trunk/lib/Driver/SanitizerArgs.cpp
  cfe/trunk/test/Driver/fsanitize-coverage.c


Index: cfe/trunk/lib/Driver/SanitizerArgs.cpp
===
--- cfe/trunk/lib/Driver/SanitizerArgs.cpp
+++ cfe/trunk/lib/Driver/SanitizerArgs.cpp
@@ -46,7 +46,8 @@
 SanitizerKind::Undefined | SanitizerKind::Integer |
 SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |
 SanitizerKind::DataFlow | SanitizerKind::Fuzzer |
-SanitizerKind::FuzzerNoLink | SanitizerKind::FloatDivideByZero;
+SanitizerKind::FuzzerNoLink | SanitizerKind::FloatDivideByZero |
+SanitizerKind::SafeStack | SanitizerKind::ShadowCallStack;
 static const SanitizerMask RecoverableByDefault =
 SanitizerKind::Undefined | SanitizerKind::Integer |
 SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |
Index: cfe/trunk/test/Driver/fsanitize-coverage.c
===
--- cfe/trunk/test/Driver/fsanitize-coverage.c
+++ cfe/trunk/test/Driver/fsanitize-coverage.c
@@ -118,8 +118,8 @@
 // CLANG-CL-COVERAGE: -fsanitize=address
 
 // RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack 
-fsanitize-coverage=trace-pc-guard %s -### 2>&1 | FileCheck %s 
--check-prefix=CHECK-VS-SAFESTACK
+// CHECK-VS-SAFESTACK: -fsanitize-coverage-trace-pc-guard
 // CHECK-VS-SAFESTACK: -fsanitize=safe-stack
-// CHECK-VS-SAFESTACK-NOT: -fsanitize-coverage-trace-pc-guard
 
 // RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack 
-fsanitize-coverage=trace-pc-guard -fno-sanitize=safe-stack %s -### 2>&1 | 
FileCheck %s --check-prefix=CHECK-NO-SAFESTACK
 // CHECK-NO-SAFESTACK-NOT: error:
@@ -128,3 +128,15 @@
 // CHECK-NO-SAFESTACK-NOT: unknown argument
 // CHECK-NO-SAFESTACK-NOT: -fsanitize=safe-stack
 // CHECK-NO-SAFESTACK: -fsanitize-coverage-trace-pc-guard
+
+// RUN: %clang -target x86_64-linux-gnu -fsanitize=shadow-call-stack 
-fsanitize-coverage=trace-pc-guard %s -### 2>&1 | FileCheck %s 
--check-prefix=CHECK-VS-SHADOWCALLSTACK
+// CHECK-VS-SHADOWCALLSTACK: -fsanitize-coverage-trace-pc-guard
+// CHECK-VS-SHADOWCALLSTACK: -fsanitize=shadow-call-stack
+
+// RUN: %clang -target x86_64-linux-gnu -fsanitize=shadow-call-stack 
-fsanitize-coverage=trace-pc-guard -fno-sanitize=shadow-call-stack %s -### 2>&1 
| FileCheck %s --check-prefix=CHECK-NO-SAFESTACK
+// CHECK-NO-SHADOWCALLSTACK-NOT: error:
+// CHECK-NO-SHADOWCALLSTACK-NOT: warning:
+// CHECK-NO-SHADOWCALLSTACK-NOT: argument unused
+// CHECK-NO-SHADOWCALLSTACK-NOT: unknown argument
+// CHECK-NO-SHADOWCALLSTACK-NOT: -fsanitize=shadow-call-stack
+// CHECK-NO-SHADOWCALLSTACK: -fsanitize-coverage-trace-pc-guard


Index: cfe/trunk/lib/Driver/SanitizerArgs.cpp
===
--- cfe/trunk/lib/Driver/SanitizerArgs.cpp
+++ cfe/trunk/lib/Driver/SanitizerArgs.cpp
@@ -46,7 +46,8 @@
 SanitizerKind::Undefined | SanitizerKind::Integer |
 SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |
 SanitizerKind::DataFlow | SanitizerKind::Fuzzer |
-SanitizerKind::FuzzerNoLink | SanitizerKind::FloatDivideByZero;
+SanitizerKind::FuzzerNoLink | SanitizerKind::FloatDivideByZero |
+SanitizerKind::SafeStack | SanitizerKind::ShadowCallStack;
 static const SanitizerMask RecoverableByDefault =
 SanitizerKind::Undefined | SanitizerKind::Integer |
 SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |
Index: cfe/trunk/test/Driver/fsanitize-coverage.c
===
--- cfe/trunk/test/Driver/fsanitize-coverage.c
+++ cfe/trunk/test/Driver/fsanitize-coverage.c
@@ -118,8 +118,8 @@
 // CLANG-CL-COVERAGE: -fsanitize=address
 
 // RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack -fsanitize-coverage=trace-pc-guard %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-VS-SAFESTACK
+// CHECK-VS-SAFESTACK: -fsanitize-coverage-trace-pc-guard
 // CHECK-VS-SAFESTACK: -fsanitize=safe-stack
-// CHECK-VS-SAFESTACK-NOT: -fsanitize-coverage-trace-pc-guard
 
 // RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack -fsanitize-coverage=trace-pc-guard -fno-sanitize=safe-stack %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-SAFESTACK
 // CHECK-NO-SAFESTACK-NOT: error:
@@ -128,3 +128,15 @@
 // CHECK-NO-SAFESTACK-NOT: unknown argument
 // CHECK-NO-SAFESTACK-NOT: -fsanitize=safe-stack
 // CHECK-NO-SAFESTACK: -fsanitize-coverage-trace-pc-guard
+
+// RUN: %clang 

[PATCH] D65715: [Driver] Don't disable -fsanitizer-coverage for safe-stack or shadow-call-stack

2019-08-04 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay added a comment.

Can you also take a quick look at https://reviews.llvm.org/D65699 :)


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

https://reviews.llvm.org/D65715



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r367799 - [Driver] Don't disable -fsanitizer-coverage for safe-stack or shadow-call-stack

2019-08-04 Thread Petr Hosek via cfe-commits
Author: phosek
Date: Sun Aug  4 21:48:56 2019
New Revision: 367799

URL: http://llvm.org/viewvc/llvm-project?rev=367799=rev
Log:
[Driver] Don't disable -fsanitizer-coverage for safe-stack or shadow-call-stack

These "sanitizers" are hardened ABIs that are wholly orthogonal
to the SanitizerCoverage instrumentation.

Differential Revision: https://reviews.llvm.org/D65715

Modified:
cfe/trunk/lib/Driver/SanitizerArgs.cpp
cfe/trunk/test/Driver/fsanitize-coverage.c

Modified: cfe/trunk/lib/Driver/SanitizerArgs.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/SanitizerArgs.cpp?rev=367799=367798=367799=diff
==
--- cfe/trunk/lib/Driver/SanitizerArgs.cpp (original)
+++ cfe/trunk/lib/Driver/SanitizerArgs.cpp Sun Aug  4 21:48:56 2019
@@ -46,7 +46,8 @@ static const SanitizerMask SupportsCover
 SanitizerKind::Undefined | SanitizerKind::Integer |
 SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |
 SanitizerKind::DataFlow | SanitizerKind::Fuzzer |
-SanitizerKind::FuzzerNoLink | SanitizerKind::FloatDivideByZero;
+SanitizerKind::FuzzerNoLink | SanitizerKind::FloatDivideByZero |
+SanitizerKind::SafeStack | SanitizerKind::ShadowCallStack;
 static const SanitizerMask RecoverableByDefault =
 SanitizerKind::Undefined | SanitizerKind::Integer |
 SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |

Modified: cfe/trunk/test/Driver/fsanitize-coverage.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/fsanitize-coverage.c?rev=367799=367798=367799=diff
==
--- cfe/trunk/test/Driver/fsanitize-coverage.c (original)
+++ cfe/trunk/test/Driver/fsanitize-coverage.c Sun Aug  4 21:48:56 2019
@@ -118,8 +118,8 @@
 // CLANG-CL-COVERAGE: -fsanitize=address
 
 // RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack 
-fsanitize-coverage=trace-pc-guard %s -### 2>&1 | FileCheck %s 
--check-prefix=CHECK-VS-SAFESTACK
+// CHECK-VS-SAFESTACK: -fsanitize-coverage-trace-pc-guard
 // CHECK-VS-SAFESTACK: -fsanitize=safe-stack
-// CHECK-VS-SAFESTACK-NOT: -fsanitize-coverage-trace-pc-guard
 
 // RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack 
-fsanitize-coverage=trace-pc-guard -fno-sanitize=safe-stack %s -### 2>&1 | 
FileCheck %s --check-prefix=CHECK-NO-SAFESTACK
 // CHECK-NO-SAFESTACK-NOT: error:
@@ -128,3 +128,15 @@
 // CHECK-NO-SAFESTACK-NOT: unknown argument
 // CHECK-NO-SAFESTACK-NOT: -fsanitize=safe-stack
 // CHECK-NO-SAFESTACK: -fsanitize-coverage-trace-pc-guard
+
+// RUN: %clang -target x86_64-linux-gnu -fsanitize=shadow-call-stack 
-fsanitize-coverage=trace-pc-guard %s -### 2>&1 | FileCheck %s 
--check-prefix=CHECK-VS-SHADOWCALLSTACK
+// CHECK-VS-SHADOWCALLSTACK: -fsanitize-coverage-trace-pc-guard
+// CHECK-VS-SHADOWCALLSTACK: -fsanitize=shadow-call-stack
+
+// RUN: %clang -target x86_64-linux-gnu -fsanitize=shadow-call-stack 
-fsanitize-coverage=trace-pc-guard -fno-sanitize=shadow-call-stack %s -### 2>&1 
| FileCheck %s --check-prefix=CHECK-NO-SAFESTACK
+// CHECK-NO-SHADOWCALLSTACK-NOT: error:
+// CHECK-NO-SHADOWCALLSTACK-NOT: warning:
+// CHECK-NO-SHADOWCALLSTACK-NOT: argument unused
+// CHECK-NO-SHADOWCALLSTACK-NOT: unknown argument
+// CHECK-NO-SHADOWCALLSTACK-NOT: -fsanitize=shadow-call-stack
+// CHECK-NO-SHADOWCALLSTACK: -fsanitize-coverage-trace-pc-guard


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D62445: [test] Fix plugin tests

2019-08-04 Thread Don Hinton via cfe-commits
Just saw this.  I'll take a look, and thanks for pointing it out...

On Fri, Aug 2, 2019 at 6:24 PM Artem Dergachev via Phabricator <
revi...@reviews.llvm.org> wrote:

> NoQ added a comment.
>
> Ugh, there seems to be one more forgotten buildbot with plugins problems:
> http://green.lab.llvm.org/green/job/clang-stage2-cmake-RgSan/6406/consoleText
>
>   FAIL: Clang :: Analysis/checker-plugins.c (467 of 14955)
>    TEST 'Clang :: Analysis/checker-plugins.c' FAILED
> 
>   Script:
>   --
>   : 'RUN: at line 3';
>  
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/bin/clang
> -cc1 -internal-isystem
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/lib/clang/9.0.0/include
> -nostdsysteminc -analyze -analyzer-constraints=range -verify
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/llvm/tools/clang/test/Analysis/checker-plugins.c
>   -load
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/./lib/SampleAnalyzerPlugin.dylib
>   -analyzer-checker='example.MainCallChecker'
>   : 'RUN: at line 15';
>  
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/bin/clang
> -cc1 -internal-isystem
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/lib/clang/9.0.0/include
> -nostdsysteminc -analyze -analyzer-constraints=range
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/llvm/tools/clang/test/Analysis/checker-plugins.c
>   -load
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/./lib/CheckerDependencyHandlingAnalyzerPlugin.dylib
>  -analyzer-checker=example.DependendentChecker
> -analyzer-list-enabled-checkers2>&1 |
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/bin/FileCheck
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/llvm/tools/clang/test/Analysis/checker-plugins.c
> -check-prefix=CHECK-IMPLICITLY-ENABLED
>   : 'RUN: at line 24';
>  
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/bin/clang
> -cc1 -internal-isystem
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/lib/clang/9.0.0/include
> -nostdsysteminc -analyze -analyzer-constraints=range
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/llvm/tools/clang/test/Analysis/checker-plugins.c
>   -load
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/./lib/CheckerDependencyHandlingAnalyzerPlugin.dylib
>  -analyzer-checker=example.DependendentChecker
> -analyzer-disable-checker=example.Dependency
> -analyzer-list-enabled-checkers2>&1 |
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/bin/FileCheck
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/llvm/tools/clang/test/Analysis/checker-plugins.c
> -check-prefix=CHECK-IMPLICITLY-DISABLED
>   : 'RUN: at line 34';
>  
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/bin/clang
> -cc1 -internal-isystem
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/lib/clang/9.0.0/include
> -nostdsysteminc -analyze -analyzer-constraints=range
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/llvm/tools/clang/test/Analysis/checker-plugins.c
>   -load
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/./lib/CheckerOptionHandlingAnalyzerPlugin.dylib
>  -analyzer-checker=example.MyChecker2>&1 |
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/bin/FileCheck
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/llvm/tools/clang/test/Analysis/checker-plugins.c
> -check-prefix=CHECK-CHECKER-OPTION-OUTPUT
>   : 'RUN: at line 41';
>  
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/bin/clang
> -cc1 -internal-isystem
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/lib/clang/9.0.0/include
> -nostdsysteminc -analyze -analyzer-constraints=range
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/llvm/tools/clang/test/Analysis/checker-plugins.c
>   -load
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/./lib/CheckerOptionHandlingAnalyzerPlugin.dylib
>  -analyzer-checker=example.MyChecker-analyzer-config
> example.MyChecker:ExampleOption=true2>&1 |
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/bin/FileCheck
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/llvm/tools/clang/test/Analysis/checker-plugins.c
> -check-prefix=CHECK-CHECKER-OPTION-OUTPUT-TRUE
>   : 'RUN: at line 49';
>  
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/bin/clang
> -cc1 -internal-isystem
> /Users/buildslave/jenkins/workspace/clang-stage2-cmake-RgSan/clang-build/lib/clang/9.0.0/include
> -nostdsysteminc -analyze -analyzer-constraints=range
> 

[PATCH] D65715: [Driver] Don't disable -fsanitizer-coverage for safe-stack or shadow-call-stack

2019-08-04 Thread Petr Hosek via Phabricator via cfe-commits
phosek updated this revision to Diff 213280.

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

https://reviews.llvm.org/D65715

Files:
  clang/lib/Driver/SanitizerArgs.cpp
  clang/test/Driver/fsanitize-coverage.c


Index: clang/test/Driver/fsanitize-coverage.c
===
--- clang/test/Driver/fsanitize-coverage.c
+++ clang/test/Driver/fsanitize-coverage.c
@@ -118,8 +118,8 @@
 // CLANG-CL-COVERAGE: -fsanitize=address
 
 // RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack 
-fsanitize-coverage=trace-pc-guard %s -### 2>&1 | FileCheck %s 
--check-prefix=CHECK-VS-SAFESTACK
+// CHECK-VS-SAFESTACK: -fsanitize-coverage-trace-pc-guard
 // CHECK-VS-SAFESTACK: -fsanitize=safe-stack
-// CHECK-VS-SAFESTACK-NOT: -fsanitize-coverage-trace-pc-guard
 
 // RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack 
-fsanitize-coverage=trace-pc-guard -fno-sanitize=safe-stack %s -### 2>&1 | 
FileCheck %s --check-prefix=CHECK-NO-SAFESTACK
 // CHECK-NO-SAFESTACK-NOT: error:
@@ -128,3 +128,15 @@
 // CHECK-NO-SAFESTACK-NOT: unknown argument
 // CHECK-NO-SAFESTACK-NOT: -fsanitize=safe-stack
 // CHECK-NO-SAFESTACK: -fsanitize-coverage-trace-pc-guard
+
+// RUN: %clang -target x86_64-linux-gnu -fsanitize=shadow-call-stack 
-fsanitize-coverage=trace-pc-guard %s -### 2>&1 | FileCheck %s 
--check-prefix=CHECK-VS-SHADOWCALLSTACK
+// CHECK-VS-SHADOWCALLSTACK: -fsanitize-coverage-trace-pc-guard
+// CHECK-VS-SHADOWCALLSTACK: -fsanitize=shadow-call-stack
+
+// RUN: %clang -target x86_64-linux-gnu -fsanitize=shadow-call-stack 
-fsanitize-coverage=trace-pc-guard -fno-sanitize=shadow-call-stack %s -### 2>&1 
| FileCheck %s --check-prefix=CHECK-NO-SAFESTACK
+// CHECK-NO-SHADOWCALLSTACK-NOT: error:
+// CHECK-NO-SHADOWCALLSTACK-NOT: warning:
+// CHECK-NO-SHADOWCALLSTACK-NOT: argument unused
+// CHECK-NO-SHADOWCALLSTACK-NOT: unknown argument
+// CHECK-NO-SHADOWCALLSTACK-NOT: -fsanitize=shadow-call-stack
+// CHECK-NO-SHADOWCALLSTACK: -fsanitize-coverage-trace-pc-guard
Index: clang/lib/Driver/SanitizerArgs.cpp
===
--- clang/lib/Driver/SanitizerArgs.cpp
+++ clang/lib/Driver/SanitizerArgs.cpp
@@ -46,7 +46,8 @@
 SanitizerKind::Undefined | SanitizerKind::Integer |
 SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |
 SanitizerKind::DataFlow | SanitizerKind::Fuzzer |
-SanitizerKind::FuzzerNoLink | SanitizerKind::FloatDivideByZero;
+SanitizerKind::FuzzerNoLink | SanitizerKind::FloatDivideByZero |
+SanitizerKind::SafeStack | SanitizerKind::ShadowCallStack;
 static const SanitizerMask RecoverableByDefault =
 SanitizerKind::Undefined | SanitizerKind::Integer |
 SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |


Index: clang/test/Driver/fsanitize-coverage.c
===
--- clang/test/Driver/fsanitize-coverage.c
+++ clang/test/Driver/fsanitize-coverage.c
@@ -118,8 +118,8 @@
 // CLANG-CL-COVERAGE: -fsanitize=address
 
 // RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack -fsanitize-coverage=trace-pc-guard %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-VS-SAFESTACK
+// CHECK-VS-SAFESTACK: -fsanitize-coverage-trace-pc-guard
 // CHECK-VS-SAFESTACK: -fsanitize=safe-stack
-// CHECK-VS-SAFESTACK-NOT: -fsanitize-coverage-trace-pc-guard
 
 // RUN: %clang -target x86_64-linux-gnu -fsanitize=safe-stack -fsanitize-coverage=trace-pc-guard -fno-sanitize=safe-stack %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-SAFESTACK
 // CHECK-NO-SAFESTACK-NOT: error:
@@ -128,3 +128,15 @@
 // CHECK-NO-SAFESTACK-NOT: unknown argument
 // CHECK-NO-SAFESTACK-NOT: -fsanitize=safe-stack
 // CHECK-NO-SAFESTACK: -fsanitize-coverage-trace-pc-guard
+
+// RUN: %clang -target x86_64-linux-gnu -fsanitize=shadow-call-stack -fsanitize-coverage=trace-pc-guard %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-VS-SHADOWCALLSTACK
+// CHECK-VS-SHADOWCALLSTACK: -fsanitize-coverage-trace-pc-guard
+// CHECK-VS-SHADOWCALLSTACK: -fsanitize=shadow-call-stack
+
+// RUN: %clang -target x86_64-linux-gnu -fsanitize=shadow-call-stack -fsanitize-coverage=trace-pc-guard -fno-sanitize=shadow-call-stack %s -### 2>&1 | FileCheck %s --check-prefix=CHECK-NO-SAFESTACK
+// CHECK-NO-SHADOWCALLSTACK-NOT: error:
+// CHECK-NO-SHADOWCALLSTACK-NOT: warning:
+// CHECK-NO-SHADOWCALLSTACK-NOT: argument unused
+// CHECK-NO-SHADOWCALLSTACK-NOT: unknown argument
+// CHECK-NO-SHADOWCALLSTACK-NOT: -fsanitize=shadow-call-stack
+// CHECK-NO-SHADOWCALLSTACK: -fsanitize-coverage-trace-pc-guard
Index: clang/lib/Driver/SanitizerArgs.cpp
===
--- clang/lib/Driver/SanitizerArgs.cpp
+++ clang/lib/Driver/SanitizerArgs.cpp
@@ -46,7 +46,8 @@
 SanitizerKind::Undefined | SanitizerKind::Integer |
 SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |
 SanitizerKind::DataFlow | 

[PATCH] D65706: [docs] Better documentation for -Weverything

2019-08-04 Thread JF Bastien via Phabricator via cfe-commits
jfb updated this revision to Diff 213278.
jfb marked 5 inline comments as done.
jfb added a comment.

- Address Aaron's comments.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D65706

Files:
  clang/docs/UsersManual.rst


Index: clang/docs/UsersManual.rst
===
--- clang/docs/UsersManual.rst
+++ clang/docs/UsersManual.rst
@@ -992,13 +992,24 @@
 Enabling All Diagnostics
 ^
 
-In addition to the traditional ``-W`` flags, one can enable **all**
-diagnostics by passing :option:`-Weverything`. This works as expected
-with
-:option:`-Werror`, and also includes the warnings from :option:`-pedantic`.
-
-Note that when combined with :option:`-w` (which disables all warnings), that
-flag wins.
+In addition to the traditional ``-W`` flags, one can enable **all** diagnostics
+by passing :option:`-Weverything`. This works as expected with
+:option:`-Werror`, and also includes the warnings from :option:`-pedantic`. 
Some
+diagnostics contradict each other, therefore, users of :option:`-Weverything`
+often disable many diagnostics such as :option:`-Wno-c++98-compat`
+:option:`-Wno-c++-compat` because they contradict recent C++ standards.
+
+Since :option:`-Weverything` enables every diagnostic, we generally don't
+recommend using it. :option:`-Wall` :option:`-Wextra` are a better choice for
+most projects. Using :option:`-Weverything` means that updating your compiler 
is
+more difficult because you're exposed to experimental diagnostics which might 
be
+of lower quality than the default ones. If you do use :option:`-Weverything`
+then we advise that you address all new compiler diagnostics as they get added
+to Clang, either by fixing everything they find or explicitly disabling that
+diagnostic with its corresponding `Wno-` option.
+
+Note that when combined with :option:`-w` (which disables all warnings),
+disabling all warnings wins.
 
 Controlling Static Analyzer Diagnostics
 ^^^


Index: clang/docs/UsersManual.rst
===
--- clang/docs/UsersManual.rst
+++ clang/docs/UsersManual.rst
@@ -992,13 +992,24 @@
 Enabling All Diagnostics
 ^
 
-In addition to the traditional ``-W`` flags, one can enable **all**
-diagnostics by passing :option:`-Weverything`. This works as expected
-with
-:option:`-Werror`, and also includes the warnings from :option:`-pedantic`.
-
-Note that when combined with :option:`-w` (which disables all warnings), that
-flag wins.
+In addition to the traditional ``-W`` flags, one can enable **all** diagnostics
+by passing :option:`-Weverything`. This works as expected with
+:option:`-Werror`, and also includes the warnings from :option:`-pedantic`. Some
+diagnostics contradict each other, therefore, users of :option:`-Weverything`
+often disable many diagnostics such as :option:`-Wno-c++98-compat`
+:option:`-Wno-c++-compat` because they contradict recent C++ standards.
+
+Since :option:`-Weverything` enables every diagnostic, we generally don't
+recommend using it. :option:`-Wall` :option:`-Wextra` are a better choice for
+most projects. Using :option:`-Weverything` means that updating your compiler is
+more difficult because you're exposed to experimental diagnostics which might be
+of lower quality than the default ones. If you do use :option:`-Weverything`
+then we advise that you address all new compiler diagnostics as they get added
+to Clang, either by fixing everything they find or explicitly disabling that
+diagnostic with its corresponding `Wno-` option.
+
+Note that when combined with :option:`-w` (which disables all warnings),
+disabling all warnings wins.
 
 Controlling Static Analyzer Diagnostics
 ^^^
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D65706: [docs] Better documentation for -Weverything

2019-08-04 Thread JF Bastien via Phabricator via cfe-commits
jfb added inline comments.



Comment at: clang/docs/UsersManual.rst:999-1000
+diagnostics contradict each other, users of :option:`-Weverything` therefore
+often disable many diagnostics such as :option:`-Wno-c++98-compat`
+:option:`-Wno-c++-compat`.
+

aaron.ballman wrote:
> Would you care to propose a more exhaustive list of conflicting diagnostics? 
> (Perhaps in a follow-up patch.)
I looked a bit and I'm worried that providing a list won't be particularly 
satisfying for people looking at this. I think it's better to have some 
warning, and let folks figure out what works for their particular situation. 
Here I'm assuming that they don't use C++98 and that seems reasonable, but 
figuring out what side of contradictions they're on doesn't seem like it'll 
work out.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D65706



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D65597: WIP: Builtins: Start adding half versions of math builtins

2019-08-04 Thread Matt Arsenault via Phabricator via cfe-commits
arsenm updated this revision to Diff 213276.
arsenm added a comment.

Change naming scheme, add more and tests


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

https://reviews.llvm.org/D65597

Files:
  include/clang/Basic/Builtins.def
  lib/CodeGen/CGBuiltin.cpp
  test/CodeGenOpenCL/builtins-f16.cl

Index: test/CodeGenOpenCL/builtins-f16.cl
===
--- /dev/null
+++ test/CodeGenOpenCL/builtins-f16.cl
@@ -0,0 +1,71 @@
+// RUN: %clang_cc1 -emit-llvm -o - -triple x86_64-darwin-apple %s | FileCheck %s
+
+#pragma OPENCL EXTENSION cl_khr_fp16 : enable
+
+// CHECK-LABEL: define void @test_half_builtins
+void test_half_builtins(half h0, half h1, half h2) {
+  volatile half res;
+
+  // CHECK: call half @llvm.copysign.f16(half %h0, half %h1)
+  res = __builtin_copysignf16(h0, h1);
+
+  // CHECK: call half @llvm.fabs.f16(half %h0)
+  res = __builtin_fabsf16(h0);
+
+  // CHECK: call half @llvm.ceil.f16(half %h0)
+  res = __builtin_ceilf16(h0);
+
+  // CHECK: call half @llvm.cos.f16(half %h0)
+  res = __builtin_cosf16(h0);
+
+  // CHECK: call half @llvm.exp.f16(half %h0)
+  res = __builtin_expf16(h0);
+
+  // CHECK: call half @llvm.exp2.f16(half %h0)
+  res = __builtin_exp2f16(h0);
+
+  // CHECK: call half @llvm.floor.f16(half %h0)
+  res = __builtin_floorf16(h0);
+
+  // CHECK: call half @llvm.fma.f16(half %h0, half %h1, half %h2)
+  res = __builtin_fmaf16(h0, h1 ,h2);
+
+  // CHECK: call half @llvm.maxnum.f16(half %h0, half %h1)
+  res = __builtin_fmaxf16(h0, h1);
+
+  // CHECK: call half @llvm.minnum.f16(half %h0, half %h1)
+  res = __builtin_fminf16(h0, h1);
+
+  // CHECK: frem half %h0, %h1
+  res = __builtin_fmodf16(h0, h1);
+
+  // CHECK: call half @llvm.pow.f16(half %h0, half %h1)
+  res = __builtin_powf16(h0, h1);
+
+  // CHECK: call half @llvm.log10.f16(half %h0)
+  res = __builtin_log10f16(h0);
+
+  // CHECK: call half @llvm.log2.f16(half %h0)
+  res = __builtin_log2f16(h0);
+
+  // CHECK: call half @llvm.log.f16(half %h0)
+  res = __builtin_logf16(h0);
+
+  // CHECK: call half @llvm.rint.f16(half %h0)
+  res = __builtin_rintf16(h0);
+
+  // CHECK: call half @llvm.round.f16(half %h0)
+  res = __builtin_roundf16(h0);
+
+  // CHECK: call half @llvm.sin.f16(half %h0)
+  res = __builtin_sinf16(h0);
+
+  // CHECK: call half @llvm.sqrt.f16(half %h0)
+  res = __builtin_sqrtf16(h0);
+
+  // CHECK: call half @llvm.trunc.f16(half %h0)
+  res = __builtin_truncf16(h0);
+
+  // CHECK: call half @llvm.canonicalize.f16(half %h0)
+  res = __builtin_canonicalizef16(h0);
+}
Index: lib/CodeGen/CGBuiltin.cpp
===
--- lib/CodeGen/CGBuiltin.cpp
+++ lib/CodeGen/CGBuiltin.cpp
@@ -1557,6 +1557,7 @@
 case Builtin::BIceill:
 case Builtin::BI__builtin_ceil:
 case Builtin::BI__builtin_ceilf:
+case Builtin::BI__builtin_ceilf16:
 case Builtin::BI__builtin_ceill:
   return RValue::get(emitUnaryBuiltin(*this, E, Intrinsic::ceil));
 
@@ -1565,6 +1566,7 @@
 case Builtin::BIcopysignl:
 case Builtin::BI__builtin_copysign:
 case Builtin::BI__builtin_copysignf:
+case Builtin::BI__builtin_copysignf16:
 case Builtin::BI__builtin_copysignl:
 case Builtin::BI__builtin_copysignf128:
   return RValue::get(emitBinaryBuiltin(*this, E, Intrinsic::copysign));
@@ -1574,6 +1576,7 @@
 case Builtin::BIcosl:
 case Builtin::BI__builtin_cos:
 case Builtin::BI__builtin_cosf:
+case Builtin::BI__builtin_cosf16:
 case Builtin::BI__builtin_cosl:
   return RValue::get(emitUnaryBuiltin(*this, E, Intrinsic::cos));
 
@@ -1582,6 +1585,7 @@
 case Builtin::BIexpl:
 case Builtin::BI__builtin_exp:
 case Builtin::BI__builtin_expf:
+case Builtin::BI__builtin_expf16:
 case Builtin::BI__builtin_expl:
   return RValue::get(emitUnaryBuiltin(*this, E, Intrinsic::exp));
 
@@ -1590,6 +1594,7 @@
 case Builtin::BIexp2l:
 case Builtin::BI__builtin_exp2:
 case Builtin::BI__builtin_exp2f:
+case Builtin::BI__builtin_exp2f16:
 case Builtin::BI__builtin_exp2l:
   return RValue::get(emitUnaryBuiltin(*this, E, Intrinsic::exp2));
 
@@ -1598,6 +1603,7 @@
 case Builtin::BIfabsl:
 case Builtin::BI__builtin_fabs:
 case Builtin::BI__builtin_fabsf:
+case Builtin::BI__builtin_fabsf16:
 case Builtin::BI__builtin_fabsl:
 case Builtin::BI__builtin_fabsf128:
   return RValue::get(emitUnaryBuiltin(*this, E, Intrinsic::fabs));
@@ -1607,6 +1613,7 @@
 case Builtin::BIfloorl:
 case Builtin::BI__builtin_floor:
 case Builtin::BI__builtin_floorf:
+case Builtin::BI__builtin_floorf16:
 case Builtin::BI__builtin_floorl:
   return RValue::get(emitUnaryBuiltin(*this, E, Intrinsic::floor));
 
@@ -1615,6 +1622,7 @@
 case Builtin::BIfmal:
 case Builtin::BI__builtin_fma:
 case Builtin::BI__builtin_fmaf:
+case Builtin::BI__builtin_fmaf16:
 case Builtin::BI__builtin_fmal:
   return 

[PATCH] D65572: Fix static linking failure with --unwindlib=libunwind

2019-08-04 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay added a comment.

If libunwind is configured with `-DLIBUNWIND_ENABLE_THREADS=Off` / it is on 
Windows / `-DLIBUNWIND_USE_WEAK_PTHREAD=On`, libpthread is not a hard 
dependency.

If you use lld:

  #if _LIBUNWIND_USE_DLADDR
  #include 
  #if defined(__unix__) && defined(__ELF__) && 
defined(_LIBUNWIND_HAS_COMMENT_LIB_PRAGMA)
  #pragma comment(lib, "dl")
  #endif
  #endif
  
  #if defined(__unix__) && !defined(__ANDROID__) && defined(__ELF__) && 
defined(_LIBUNWIND_HAS_COMMENT_LIB_PRAGMA)
  #pragma comment(lib, "pthread")
  #endif


Repository:
  rC Clang

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

https://reviews.llvm.org/D65572



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D65699: [Driver] Prioritize SYSROOT/usr/include over RESOURCE_DIR/include on linux-musl

2019-08-04 Thread Rich Felker via Phabricator via cfe-commits
dalias added a comment.

Just chiming in to confirm that the requested change is correct for musl. musl 
does not support use/mixing of compiler-provided std headers with its headers, 
and intentionally has no mechanism for communicating with such headers as to 
which types have already been defined or still need to be defined. If the 
current include order, with clang's headers before the libc ones, works in some 
situations, it's only by accident.

My understanding is that most if not all of the BSDs also work this way; GCC 
has their libc header dirs ordered before the GCC include dir. So it probably 
makes sense to do the same change for them.


Repository:
  rC Clang

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

https://reviews.llvm.org/D65699



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r367797 - [Driver] Derive Fuchsia Linker directly from Tool

2019-08-04 Thread Petr Hosek via cfe-commits
Author: phosek
Date: Sun Aug  4 18:36:51 2019
New Revision: 367797

URL: http://llvm.org/viewvc/llvm-project?rev=367797=rev
Log:
[Driver] Derive Fuchsia Linker directly from Tool

Fuchsia Linker tool doesn't need any of the GnuTool behavior.

Modified:
cfe/trunk/lib/Driver/ToolChains/Fuchsia.h

Modified: cfe/trunk/lib/Driver/ToolChains/Fuchsia.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Fuchsia.h?rev=367797=367796=367797=diff
==
--- cfe/trunk/lib/Driver/ToolChains/Fuchsia.h (original)
+++ cfe/trunk/lib/Driver/ToolChains/Fuchsia.h Sun Aug  4 18:36:51 2019
@@ -17,9 +17,9 @@ namespace clang {
 namespace driver {
 namespace tools {
 namespace fuchsia {
-class LLVM_LIBRARY_VISIBILITY Linker : public GnuTool {
+class LLVM_LIBRARY_VISIBILITY Linker : public Tool {
 public:
-  Linker(const ToolChain ) : GnuTool("fuchsia::Linker", "ld.lld", TC) {}
+  Linker(const ToolChain ) : Tool("fuchsia::Linker", "ld.lld", TC) {}
 
   bool hasIntegratedCPP() const override { return false; }
   bool isLinkJob() const override { return true; }


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r367796 - [Driver] Always use -z separate-code with lld on Fuchsia

2019-08-04 Thread Petr Hosek via cfe-commits
Author: phosek
Date: Sun Aug  4 18:15:33 2019
New Revision: 367796

URL: http://llvm.org/viewvc/llvm-project?rev=367796=rev
Log:
[Driver] Always use -z separate-code with lld on Fuchsia

Previously -z separate-code was the default lld behavior, but now it
has to be explicitly requested by specifying the flag.

Modified:
cfe/trunk/lib/Driver/ToolChains/Fuchsia.cpp
cfe/trunk/test/Driver/fuchsia.c

Modified: cfe/trunk/lib/Driver/ToolChains/Fuchsia.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/Fuchsia.cpp?rev=367796=367795=367796=diff
==
--- cfe/trunk/lib/Driver/ToolChains/Fuchsia.cpp (original)
+++ cfe/trunk/lib/Driver/ToolChains/Fuchsia.cpp Sun Aug  4 18:15:33 2019
@@ -51,6 +51,8 @@ void fuchsia::Linker::ConstructJob(Compi
   llvm::sys::path::stem(Exec).equals_lower("ld.lld")) {
 CmdArgs.push_back("-z");
 CmdArgs.push_back("rodynamic");
+CmdArgs.push_back("-z");
+CmdArgs.push_back("separate-code");
   }
 
   if (!D.SysRoot.empty())

Modified: cfe/trunk/test/Driver/fuchsia.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/fuchsia.c?rev=367796=367795=367796=diff
==
--- cfe/trunk/test/Driver/fuchsia.c (original)
+++ cfe/trunk/test/Driver/fuchsia.c Sun Aug  4 18:15:33 2019
@@ -16,7 +16,7 @@
 // CHECK: "-fsanitize=safe-stack"
 // CHECK: "-stack-protector" "2"
 // CHECK: "-fno-common"
-// CHECK: {{.*}}ld.lld{{.*}}" "-z" "rodynamic"
+// CHECK: {{.*}}ld.lld{{.*}}" "-z" "rodynamic" "-z" "separate-code"
 // CHECK: "--sysroot=[[SYSROOT]]"
 // CHECK: "-pie"
 // CHECK: "--build-id"


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D65484: [analyzer][NFC] Refactoring BugReporter.cpp P5.: Compact mile long function invocations into objects

2019-08-04 Thread Kristóf Umann via Phabricator via cfe-commits
Szelethus marked an inline comment as done.
Szelethus added inline comments.



Comment at: clang/lib/StaticAnalyzer/Core/BugReporter.cpp:111
+/// getters and some well placed asserts for extra security.
+class BugReportConstruct {
+  /// The consumer we're constructing the bug report for.

NoQ wrote:
> You mean `Construct` like a noun? Not sure what that means.
> 
> Maybe `PathDiagnosticContext`?
Yea, I originally wanted to have the class name `BaconStrip` so that it screams 
just a bit louder that I couldnt come up with anything good, but maybe 
`PathDiagnosticConstruction` or something like that would be better.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D65484



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D65029: [Driver] Support for disabling sanitizer runtime linking

2019-08-04 Thread Petr Hosek via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL367794: [Driver] Support for disabling sanitizer runtime 
linking (authored by phosek, committed by ).
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Changed prior to commit:
  https://reviews.llvm.org/D65029?vs=213267=213271#toc

Repository:
  rL LLVM

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

https://reviews.llvm.org/D65029

Files:
  cfe/trunk/include/clang/Driver/Options.td
  cfe/trunk/include/clang/Driver/SanitizerArgs.h
  cfe/trunk/lib/Driver/SanitizerArgs.cpp
  cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp
  cfe/trunk/test/Driver/sanitizer-ld.c

Index: cfe/trunk/lib/Driver/SanitizerArgs.cpp
===
--- cfe/trunk/lib/Driver/SanitizerArgs.cpp
+++ cfe/trunk/lib/Driver/SanitizerArgs.cpp
@@ -824,9 +824,15 @@
 SafeStackRuntime = !TC.getTriple().isOSFuchsia();
   }
 
+  LinkRuntimes =
+  Args.hasFlag(options::OPT_fsanitize_link_runtime,
+   options::OPT_fno_sanitize_link_runtime, LinkRuntimes);
+
   // Parse -link-cxx-sanitizer flag.
-  LinkCXXRuntimes =
-  Args.hasArg(options::OPT_fsanitize_link_cxx_runtime) || D.CCCIsCXX();
+  LinkCXXRuntimes = Args.hasArg(options::OPT_fsanitize_link_cxx_runtime,
+options::OPT_fno_sanitize_link_cxx_runtime,
+LinkCXXRuntimes) ||
+D.CCCIsCXX();
 
   // Finally, initialize the set of available and recoverable sanitizers.
   Sanitizers.Mask |= Kinds;
Index: cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp
===
--- cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp
+++ cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp
@@ -605,29 +605,29 @@
   const SanitizerArgs  = TC.getSanitizerArgs();
   // Collect shared runtimes.
   if (SanArgs.needsSharedRt()) {
-if (SanArgs.needsAsanRt()) {
+if (SanArgs.needsAsanRt() && SanArgs.linkRuntimes()) {
   SharedRuntimes.push_back("asan");
   if (!Args.hasArg(options::OPT_shared) && !TC.getTriple().isAndroid())
 HelperStaticRuntimes.push_back("asan-preinit");
 }
-if (SanArgs.needsUbsanRt()) {
+if (SanArgs.needsUbsanRt() && SanArgs.linkRuntimes()) {
   if (SanArgs.requiresMinimalRuntime())
 SharedRuntimes.push_back("ubsan_minimal");
   else
 SharedRuntimes.push_back("ubsan_standalone");
 }
-if (SanArgs.needsScudoRt()) {
+if (SanArgs.needsScudoRt() && SanArgs.linkRuntimes()) {
   if (SanArgs.requiresMinimalRuntime())
 SharedRuntimes.push_back("scudo_minimal");
   else
 SharedRuntimes.push_back("scudo");
 }
-if (SanArgs.needsHwasanRt())
+if (SanArgs.needsHwasanRt() && SanArgs.linkRuntimes())
   SharedRuntimes.push_back("hwasan");
   }
 
   // The stats_client library is also statically linked into DSOs.
-  if (SanArgs.needsStatsRt())
+  if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
   // Collect static runtimes.
@@ -635,32 +635,32 @@
 // Don't link static runtimes into DSOs or if -shared-libasan.
 return;
   }
-  if (SanArgs.needsAsanRt()) {
+  if (SanArgs.needsAsanRt() && SanArgs.linkRuntimes()) {
 StaticRuntimes.push_back("asan");
 if (SanArgs.linkCXXRuntimes())
   StaticRuntimes.push_back("asan_cxx");
   }
 
-  if (SanArgs.needsHwasanRt()) {
+  if (SanArgs.needsHwasanRt() && SanArgs.linkRuntimes()) {
 StaticRuntimes.push_back("hwasan");
 if (SanArgs.linkCXXRuntimes())
   StaticRuntimes.push_back("hwasan_cxx");
   }
-  if (SanArgs.needsDfsanRt())
+  if (SanArgs.needsDfsanRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("dfsan");
-  if (SanArgs.needsLsanRt())
+  if (SanArgs.needsLsanRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("lsan");
-  if (SanArgs.needsMsanRt()) {
+  if (SanArgs.needsMsanRt() && SanArgs.linkRuntimes()) {
 StaticRuntimes.push_back("msan");
 if (SanArgs.linkCXXRuntimes())
   StaticRuntimes.push_back("msan_cxx");
   }
-  if (SanArgs.needsTsanRt()) {
+  if (SanArgs.needsTsanRt() && SanArgs.linkRuntimes()) {
 StaticRuntimes.push_back("tsan");
 if (SanArgs.linkCXXRuntimes())
   StaticRuntimes.push_back("tsan_cxx");
   }
-  if (SanArgs.needsUbsanRt()) {
+  if (SanArgs.needsUbsanRt() && SanArgs.linkRuntimes()) {
 if (SanArgs.requiresMinimalRuntime()) {
   StaticRuntimes.push_back("ubsan_minimal");
 } else {
@@ -669,22 +669,22 @@
 StaticRuntimes.push_back("ubsan_standalone_cxx");
 }
   }
-  if (SanArgs.needsSafeStackRt()) {
+  if (SanArgs.needsSafeStackRt() && SanArgs.linkRuntimes()) {
 NonWholeStaticRuntimes.push_back("safestack");
 RequiredSymbols.push_back("__safestack_init");
   }
-  if (SanArgs.needsCfiRt())
+  if (SanArgs.needsCfiRt() && SanArgs.linkRuntimes())
 

r367794 - [Driver] Support for disabling sanitizer runtime linking

2019-08-04 Thread Petr Hosek via cfe-commits
Author: phosek
Date: Sun Aug  4 15:24:14 2019
New Revision: 367794

URL: http://llvm.org/viewvc/llvm-project?rev=367794=rev
Log:
[Driver] Support for disabling sanitizer runtime linking

This change introduces a pair of -fsanitize-link-runtime and
-fno-sanitize-link-runtime flags which can be used to control linking of
sanitizer runtimes. This is useful in certain environments like kernels
where existing runtime libraries cannot be used.

Differential Revision: https://reviews.llvm.org/D65029

Modified:
cfe/trunk/include/clang/Driver/Options.td
cfe/trunk/include/clang/Driver/SanitizerArgs.h
cfe/trunk/lib/Driver/SanitizerArgs.cpp
cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp
cfe/trunk/test/Driver/sanitizer-ld.c

Modified: cfe/trunk/include/clang/Driver/Options.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=367794=367793=367794=diff
==
--- cfe/trunk/include/clang/Driver/Options.td (original)
+++ cfe/trunk/include/clang/Driver/Options.td Sun Aug  4 15:24:14 2019
@@ -1043,8 +1043,14 @@ def fsanitize_minimal_runtime : Flag<["-
 Group;
 def fno_sanitize_minimal_runtime : Flag<["-"], "fno-sanitize-minimal-runtime">,
 Group;
+def fsanitize_link_runtime : Flag<["-"], "fsanitize-link-runtime">,
+   Group;
+def fno_sanitize_link_runtime : Flag<["-"], "fno-sanitize-link-runtime">,
+  Group;
 def fsanitize_link_cxx_runtime : Flag<["-"], "fsanitize-link-c++-runtime">,
  Group;
+def fno_sanitize_link_cxx_runtime : Flag<["-"], 
"fno-sanitize-link-c++-runtime">,
+Group;
 def fsanitize_cfi_cross_dso : Flag<["-"], "fsanitize-cfi-cross-dso">,
   Group,
   HelpText<"Enable control flow integrity (CFI) 
checks for cross-DSO calls.">;

Modified: cfe/trunk/include/clang/Driver/SanitizerArgs.h
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/SanitizerArgs.h?rev=367794=367793=367794=diff
==
--- cfe/trunk/include/clang/Driver/SanitizerArgs.h (original)
+++ cfe/trunk/include/clang/Driver/SanitizerArgs.h Sun Aug  4 15:24:14 2019
@@ -41,6 +41,7 @@ class SanitizerArgs {
   bool AsanInvalidPointerCmp = false;
   bool AsanInvalidPointerSub = false;
   std::string HwasanAbi;
+  bool LinkRuntimes = true;
   bool LinkCXXRuntimes = false;
   bool NeedPIE = false;
   bool SafeStackRuntime = false;
@@ -59,7 +60,9 @@ class SanitizerArgs {
   bool needsSharedRt() const { return SharedRuntime; }
 
   bool needsAsanRt() const { return Sanitizers.has(SanitizerKind::Address); }
-  bool needsHwasanRt() const { return 
Sanitizers.has(SanitizerKind::HWAddress); }
+  bool needsHwasanRt() const {
+return Sanitizers.has(SanitizerKind::HWAddress);
+  }
   bool needsTsanRt() const { return Sanitizers.has(SanitizerKind::Thread); }
   bool needsMsanRt() const { return Sanitizers.has(SanitizerKind::Memory); }
   bool needsFuzzer() const { return Sanitizers.has(SanitizerKind::Fuzzer); }
@@ -80,6 +83,7 @@ class SanitizerArgs {
   bool requiresPIE() const;
   bool needsUnwindTables() const;
   bool needsLTO() const;
+  bool linkRuntimes() const { return LinkRuntimes; }
   bool linkCXXRuntimes() const { return LinkCXXRuntimes; }
   bool hasCrossDsoCfi() const { return CfiCrossDso; }
   bool hasAnySanitizer() const { return !Sanitizers.empty(); }

Modified: cfe/trunk/lib/Driver/SanitizerArgs.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/SanitizerArgs.cpp?rev=367794=367793=367794=diff
==
--- cfe/trunk/lib/Driver/SanitizerArgs.cpp (original)
+++ cfe/trunk/lib/Driver/SanitizerArgs.cpp Sun Aug  4 15:24:14 2019
@@ -824,9 +824,15 @@ SanitizerArgs::SanitizerArgs(const ToolC
 SafeStackRuntime = !TC.getTriple().isOSFuchsia();
   }
 
+  LinkRuntimes =
+  Args.hasFlag(options::OPT_fsanitize_link_runtime,
+   options::OPT_fno_sanitize_link_runtime, LinkRuntimes);
+
   // Parse -link-cxx-sanitizer flag.
-  LinkCXXRuntimes =
-  Args.hasArg(options::OPT_fsanitize_link_cxx_runtime) || D.CCCIsCXX();
+  LinkCXXRuntimes = Args.hasArg(options::OPT_fsanitize_link_cxx_runtime,
+options::OPT_fno_sanitize_link_cxx_runtime,
+LinkCXXRuntimes) ||
+D.CCCIsCXX();
 
   // Finally, initialize the set of available and recoverable sanitizers.
   Sanitizers.Mask |= Kinds;

Modified: cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/ToolChains/CommonArgs.cpp?rev=367794=367793=367794=diff

[PATCH] D65029: [Driver] Support for disabling sanitizer runtime linking

2019-08-04 Thread Petr Hosek via Phabricator via cfe-commits
phosek updated this revision to Diff 213267.

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

https://reviews.llvm.org/D65029

Files:
  clang/include/clang/Driver/Options.td
  clang/include/clang/Driver/SanitizerArgs.h
  clang/lib/Driver/SanitizerArgs.cpp
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/sanitizer-ld.c

Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -16,6 +16,14 @@
 // CHECK-ASAN-LINUX: "-lrt"
 // CHECK-ASAN-LINUX: "-ldl"
 
+// RUN: %clang -fsanitize=address -fno-sanitize-link-runtime %s -### -o %t.o 2>&1 \
+// RUN: -target x86_64-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-ASAN-NO-LINK-RUNTIME-LINUX %s
+//
+// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan
+
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libsan \
 // RUN: -resource-dir=%S/Inputs/resource_dir \
@@ -239,6 +247,14 @@
 // CHECK-TSAN-LINUX-CXX: "-lrt"
 // CHECK-TSAN-LINUX-CXX: "-ldl"
 
+// RUN: %clang -fsanitize=thread -fno-sanitize-link-runtime %s -### -o %t.o 2>&1 \
+// RUN: -target x86_64-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-TSAN-NO-LINK-RUNTIME-LINUX %s
+//
+// CHECK-TSAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.tsan
+
 // RUN: %clangxx -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target x86_64-unknown-linux -fuse-ld=ld -stdlib=platform -lstdc++ \
 // RUN: -fsanitize=memory \
@@ -258,6 +274,14 @@
 // CHECK-MSAN-LINUX-CXX: "-lrt"
 // CHECK-MSAN-LINUX-CXX: "-ldl"
 
+// RUN: %clang -fsanitize=memory -fno-sanitize-link-runtime %s -### -o %t.o 2>&1 \
+// RUN: -target x86_64-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-MSAN-NO-LINK-RUNTIME-LINUX %s
+//
+// CHECK-MSAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.msan
+
 // RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld \
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
@@ -283,6 +307,14 @@
 // CHECK-UBSAN-LINUX-NOT: "-lstdc++"
 // CHECK-UBSAN-LINUX: "-lpthread"
 
+// RUN: %clang -fsanitize=undefined -fno-sanitize-link-runtime %s -### -o %t.o 2>&1 \
+// RUN: -target x86_64-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-UBSAN-NO-LINK-RUNTIME-LINUX %s
+//
+// CHECK-UBSAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.undefined
+
 // RUN: %clang -fsanitize=undefined %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld \
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
@@ -409,6 +441,14 @@
 // CHECK-LSAN-LINUX: "-lpthread"
 // CHECK-LSAN-LINUX: "-ldl"
 
+// RUN: %clang -fsanitize=leak -fno-sanitize-link-runtime %s -### -o %t.o 2>&1 \
+// RUN: -target x86_64-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-LSAN-NO-LINK-RUNTIME-LINUX %s
+//
+// CHECK-LSAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.lsan
+
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN:  -target x86_64-unknown-linux -fuse-ld=ld -fsanitize=leak -fsanitize-coverage=func \
 // RUN:  --sysroot=%S/Inputs/basic_linux_tree \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -605,29 +605,29 @@
   const SanitizerArgs  = TC.getSanitizerArgs();
   // Collect shared runtimes.
   if (SanArgs.needsSharedRt()) {
-if (SanArgs.needsAsanRt()) {
+if (SanArgs.needsAsanRt() && SanArgs.linkRuntimes()) {
   SharedRuntimes.push_back("asan");
   if (!Args.hasArg(options::OPT_shared) && !TC.getTriple().isAndroid())
 HelperStaticRuntimes.push_back("asan-preinit");
 }
-if (SanArgs.needsUbsanRt()) {
+if (SanArgs.needsUbsanRt() && SanArgs.linkRuntimes()) {
   if (SanArgs.requiresMinimalRuntime())
 SharedRuntimes.push_back("ubsan_minimal");
   else
 SharedRuntimes.push_back("ubsan_standalone");
 }
-if (SanArgs.needsScudoRt()) {
+if (SanArgs.needsScudoRt() && SanArgs.linkRuntimes()) {
   if (SanArgs.requiresMinimalRuntime())
 SharedRuntimes.push_back("scudo_minimal");
   else
 SharedRuntimes.push_back("scudo");
 }
-if (SanArgs.needsHwasanRt())

[PATCH] D65725: [analyzer] Mention whether an event is about a condition in a bug report part 2

2019-08-04 Thread Kristóf Umann via Phabricator via cfe-commits
Szelethus created this revision.
Szelethus added reviewers: NoQ, xazax.hun, baloghadamsoftware, Charusso, 
rnkovacs, dcoughlin.
Szelethus added a project: clang.
Herald added subscribers: cfe-commits, gamesh411, dkrupp, donat.nagy, 
mikhail.ramalho, a.sidorin, szepet, whisperity.
Szelethus added a parent revision: D65724: [analyzer] Don't make 
ConditionBRVisitor events prunable when the condition is an interesting field.

In D65724 , I do a pretty thorough explanation 
about how I'm solving this problem, I think that summary nails whats happening 
here ;)

The actual message is kinda dumb here, but I figured that we'd have a couple 
rounds on word smithing anyways, so I uploaded this as is. Its probably good 
enough to gather some analysis data with.

Also, with some luck, this should the final technical patch regarding the first 
part of my GSoC ;)


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D65725

Files:
  clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
  clang/test/Analysis/track-control-dependency-conditions.cpp

Index: clang/test/Analysis/track-control-dependency-conditions.cpp
===
--- clang/test/Analysis/track-control-dependency-conditions.cpp
+++ clang/test/Analysis/track-control-dependency-conditions.cpp
@@ -407,12 +407,37 @@
 }
 } // end of namespace condition_written_in_nested_stackframe_before_assignment
 
+namespace collapse_point_not_in_condition_bool {
+
+[[noreturn]] void halt();
+
+void check(bool b) {
+  if (!b) // tracking-note{{Assuming 'b' is true, which will be (a part of a) condition}}
+  // tracking-note@-1{{Taking false branch}}
+halt();
+}
+
+void f(bool flag) {
+  int *x = 0; // expected-note{{'x' initialized to a null pointer value}}
+
+  check(flag); // tracking-note{{Calling 'check'}}
+// tracking-note@-1{{Returning from 'check'}}
+
+  if (flag) // expected-note{{'flag' is true}}
+// expected-note@-1{{Taking true branch}}
+// debug-note@-2{{Tracking condition 'flag'}}
+*x = 5; // expected-warning{{Dereference of null pointer}}
+// expected-note@-1{{Dereference of null pointer}}
+}
+
+} // end of namespace collapse_point_not_in_condition_bool
+
 namespace collapse_point_not_in_condition {
 
 [[noreturn]] void halt();
 
 void assert(int b) {
-  if (!b) // tracking-note{{Assuming 'b' is not equal to 0}}
+  if (!b) // tracking-note{{Assuming 'b' is not equal to 0, which will be (a part of a) condition}}
   // tracking-note@-1{{Taking false branch}}
 halt();
 }
@@ -437,7 +462,7 @@
 [[noreturn]] void halt();
 
 void assert(int b) {
-  if (!b) // tracking-note{{Assuming 'b' is not equal to 0}}
+  if (!b) // tracking-note{{Assuming 'b' is not equal to 0, which will be (a part of a) condition}}
   // tracking-note@-1{{Taking false branch}}
 halt();
 }
@@ -459,6 +484,31 @@
 
 } // end of namespace unimportant_write_before_collapse_point
 
+namespace collapse_point_not_in_condition_binary_op {
+
+[[noreturn]] void halt();
+
+void check(int b) {
+  if (b == 1) // tracking-note{{Assuming 'b' is not equal to 1, which will be (a part of a) condition}}
+  // tracking-note@-1{{Taking false branch}}
+halt();
+}
+
+void f(int flag) {
+  int *x = 0; // expected-note{{'x' initialized to a null pointer value}}
+
+  check(flag); // tracking-note{{Calling 'check'}}
+   // tracking-note@-1{{Returning from 'check'}}
+
+  if (flag) // expected-note{{'flag' is not equal to 0}}
+// expected-note@-1{{Taking true branch}}
+// debug-note@-2{{Tracking condition 'flag'}}
+*x = 5; // expected-warning{{Dereference of null pointer}}
+// expected-note@-1{{Dereference of null pointer}}
+}
+
+} // end of namespace collapse_point_not_in_condition_binary_op
+
 namespace collapse_point_not_in_condition_as_field {
 
 [[noreturn]] void halt();
@@ -467,7 +517,7 @@
   IntWrapper();
 
   void check() {
-if (!b) // tracking-note{{Assuming field 'b' is not equal to 0}}
+if (!b) // tracking-note{{Assuming field 'b' is not equal to 0, which will be (a part of a) condition}}
 // tracking-note@-1{{Taking false branch}}
   halt();
 return;
@@ -488,6 +538,65 @@
 
 } // end of namespace collapse_point_not_in_condition_as_field
 
+namespace assignemnt_in_condition_in_nested_stackframe {
+int flag;
+
+bool coin();
+
+[[noreturn]] void halt();
+
+void foo() {
+  if ((flag = coin()))
+// tracking-note@-1{{Value assigned to 'flag', which will be (a part of a) condition}}
+// tracking-note@-2{{Assuming 'flag' is not equal to 0, which will be (a part of a) condition}}
+// tracking-note@-3{{Taking true branch}}
+return;
+  halt();
+  return;
+}
+
+void f() {
+  int *x = 0; // expected-note{{'x' initialized to a null pointer value}}
+
+  foo();// tracking-note{{Calling 'foo'}}
+// 

[PATCH] D65572: Fix static linking failure with --unwindlib=libunwind

2019-08-04 Thread Khem Raj via Phabricator via cfe-commits
raj.khem added a comment.

In D65572#1614003 , @compnerd wrote:

> `-ldl` doesn't work on all platforms (e.g. android, FreeBSD, etc).  
> `-lpthread` is wrong - if you want to add that, I think that we need to 
> improve the `-thread-model` flag in clang first (it currently just always 
> passes `posix`, which is ignored; but would identify the threading model).  
> `-lpthread` is wrong - consider building on Solaris with Solaris threads 
> rather than POSIX threads, or on Windows with the Win32 threading.  This 
> really is inline with the work that needs to be finished up with having 
> library link dependencies for static libraries (i.e. `#pragma comment(lib, 
> …)`).


we are assuming llvm libunwind to have no other dependencies, but thats not the 
case atleast not on linux, I understand this code is in common area and will 
impact all, maybe this should be moved to toolchain specific argument 
processing, where we can then override it specifically for linux environment.


Repository:
  rC Clang

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

https://reviews.llvm.org/D65572



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D65572: Fix static linking failure with --unwindlib=libunwind

2019-08-04 Thread Khem Raj via Phabricator via cfe-commits
raj.khem added a comment.

In D65572#1610169 , @rengolin wrote:

> This is a tricky one which may vary depending on the libraries available on 
> different systems. Which toolchain is this? Can you add more context?


@rengolin this is when building linux system with glibc ( clang+clang-runtime 
which means it uses llvm libunwind too) it works fine with -lunwindlib=libgcc 
but llvm libunwind does have calls into libpthread and uses dlopen as well. I 
did not build non-linux systems so can not say if
its same issue on them too but on linux its the case. I am building Yocto/OE 
using clang as cross compiler.


Repository:
  rC Clang

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

https://reviews.llvm.org/D65572



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D64666: [Sema] Enable -Wimplicit-int-float-conversion for integral to floating point precision loss

2019-08-04 Thread Ziang Wan via Phabricator via cfe-commits
ziangwan added a comment.

In D64666#1613356 , @mgorny wrote:

> In D64666#1613057 , @ziangwan wrote:
>
> > The warning is actually correct here. This implicit integral to float 
> > conversion loses precision. Is it the intended behavior of the code? If so, 
> > we can simply add an explicit type cast to silence the warning.
>
>
> I don't really know. Hence, I added author of the code and libc++ maintainers 
> as subscribers. Do you think I should open a bug for it too?


We can wait for libc++ maintainers to respond before we open a bug.

Here is more insight of this warning:

  float a = unsigned int::max() - unsigned int::min() + float(1);

The `max() - min()` expression evaluates to 2147483645 as type unsigned int. It 
then gets converted to float type, loses precision and becomes 2147483648f, 
where the significand is all 1. Then, 1f is added to 2147483648f. The final 
value is 2147483648f because 1 is too small compared to 2147483648f and has no 
effect.

I don't know if the above is the intended behavior. Eventually, the final value 
is a floating point type with significand all ones. I guess that's what the 
author wants after all.


Repository:
  rL LLVM

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

https://reviews.llvm.org/D64666



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D65724: [analyzer] Don't make ConditionBRVisitor events prunable when the condition is an interesting field

2019-08-04 Thread Kristóf Umann via Phabricator via cfe-commits
Szelethus created this revision.
Szelethus added reviewers: NoQ, xazax.hun, Charusso, baloghadamsoftware, 
rnkovacs, dcoughlin.
Szelethus added a project: clang.
Herald added subscribers: cfe-commits, gamesh411, dkrupp, donat.nagy, 
mikhail.ramalho, a.sidorin, szepet, whisperity.
Szelethus added a parent revision: D65723: [analyzer][NFC] Add different 
interestingness kinds.

Exactly what it says on the tin! Note that we're talking about interestingness 
in general, hence this isn't a control-dependency-tracking specific patch.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D65724

Files:
  clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h
  clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
  clang/test/Analysis/track-control-dependency-conditions.cpp

Index: clang/test/Analysis/track-control-dependency-conditions.cpp
===
--- clang/test/Analysis/track-control-dependency-conditions.cpp
+++ clang/test/Analysis/track-control-dependency-conditions.cpp
@@ -459,6 +459,35 @@
 
 } // end of namespace unimportant_write_before_collapse_point
 
+namespace collapse_point_not_in_condition_as_field {
+
+[[noreturn]] void halt();
+struct IntWrapper {
+  int b;
+  IntWrapper();
+
+  void check() {
+if (!b) // tracking-note{{Assuming field 'b' is not equal to 0}}
+// tracking-note@-1{{Taking false branch}}
+  halt();
+return;
+  }
+};
+
+void f(IntWrapper i) {
+  int *x = 0; // expected-note{{'x' initialized to a null pointer value}}
+
+  i.check(); // tracking-note{{Calling 'IntWrapper::check'}}
+ // tracking-note@-1{{Returning from 'IntWrapper::check'}}
+  if (i.b)   // expected-note{{Field 'b' is not equal to 0}}
+ // expected-note@-1{{Taking true branch}}
+ // debug-note@-2{{Tracking condition 'i.b'}}
+*x = 5;  // expected-warning{{Dereference of null pointer}}
+ // expected-note@-1{{Dereference of null pointer}}
+}
+
+} // end of namespace collapse_point_not_in_condition_as_field
+
 namespace dont_track_assertlike_conditions {
 
 extern void __assert_fail (__const char *__assertion, __const char *__file,
Index: clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
===
--- clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
+++ clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
@@ -180,21 +180,41 @@
 RLCV->getStore() == RightNode->getState()->getStore();
 }
 
-static Optional
-getConcreteIntegerValue(const Expr *CondVarExpr, const ExplodedNode *N) {
+static Optional getSValForVar(const Expr *CondVarExpr,
+const ExplodedNode *N) {
   ProgramStateRef State = N->getState();
   const LocationContext *LCtx = N->getLocationContext();
 
+  assert(CondVarExpr);
+  CondVarExpr = CondVarExpr->IgnoreImpCasts();
+
   // The declaration of the value may rely on a pointer so take its l-value.
-  if (const auto *DRE = dyn_cast_or_null(CondVarExpr)) {
-if (const auto *VD = dyn_cast_or_null(DRE->getDecl())) {
-  SVal DeclSVal = State->getSVal(State->getLValue(VD, LCtx));
-  if (auto DeclCI = DeclSVal.getAs())
-return >getValue();
-}
-  }
+  if (const auto *DRE = dyn_cast(CondVarExpr))
+if (const auto *VD = dyn_cast(DRE->getDecl()))
+  return State->getSVal(State->getLValue(VD, LCtx));
+
+  if (const auto *ME = dyn_cast(CondVarExpr))
+if (const auto *FD = dyn_cast(ME->getMemberDecl()))
+  if (auto FieldL = State->getSVal(ME, LCtx).getAs())
+return State->getRawSVal(*FieldL, FD->getType());
+
+  return None;
+}
+
+static Optional
+getConcreteIntegerValue(const Expr *CondVarExpr, const ExplodedNode *N) {
+
+  if (Optional V = getSValForVar(CondVarExpr, N))
+if (auto DeclCI = V->getAs())
+  return >getValue();
+  return None;
+}
 
-  return {};
+static bool isInterestingExpr(const Expr *E, const ExplodedNode *N,
+  const BugReport *B) {
+  if (Optional V = getSValForVar(E, N))
+return B->getInterestingnessKind(*V).hasValue();
+  return false;
 }
 
 /// \return name of the macro inside the location \p Loc.
@@ -2494,17 +2514,11 @@
 
   const LocationContext *LCtx = N->getLocationContext();
   PathDiagnosticLocation Loc(CondVarExpr, BRC.getSourceManager(), LCtx);
+
   auto event = std::make_shared(Loc, Out.str());
 
-  if (const auto *DR = dyn_cast(CondVarExpr)) {
-if (const auto *VD = dyn_cast(DR->getDecl())) {
-  const ProgramState *state = N->getState().get();
-  if (const MemRegion *R = state->getLValue(VD, LCtx).getAsRegion()) {
-if (report.isInteresting(R))
-  event->setPrunable(false);
-  }
-}
-  }
+  if (isInterestingExpr(CondVarExpr, N, ))
+event->setPrunable(false);
 
   return event;
 }
@@ -2532,16 +2546,10 @@
 return std::make_shared(Loc, Out.str());
 
   auto event = std::make_shared(Loc, Out.str());
-  const 

[PATCH] D65723: [analyzer][NFC] Add different interestingness kinds

2019-08-04 Thread Kristóf Umann via Phabricator via cfe-commits
Szelethus created this revision.
Szelethus added reviewers: NoQ, xazax.hun, Charusso, dcoughlin, 
baloghadamsoftware, rnkovacs.
Szelethus added a project: clang.
Herald added subscribers: cfe-commits, gamesh411, dkrupp, donat.nagy, 
mikhail.ramalho, a.sidorin, szepet, whisperity.
Szelethus added parent revisions: D65575: [analyzer] Mention whether an event 
is about a condition in a bug report part 1, D65578: [analyzer][NFC] Make sure 
that the BugReport is not modified during the construction of non-visitor 
pieces.

We defined (on the mailing list and here on phabricator) 2 different cases 
where retrieving information about a control dependency condition is very 
important:

1. When the condition's last write happened in a different stack frame
2. When the collapse point of the condition (when we can constrain it to be 
true/false) didn't happen in the actual condition.

It seems like we solved this problem with the help of expression value 
tracking, and have started working on better diagnostics notes about this 
process.

Expression value tracking is nothing more than registering a variety of 
visitors to construct reports about it. Each of the registered visitors 
(`ReturnVisitor`, `FindLastStoreVisitor`, `NoStoreFuncVisitor`, etc) have 
//something// to go by: a `MemRegion`, an `SVal`, an `ExplodedNode`, etc. For 
this reason, better explaining a last write is super simple, we can always just 
pass on some more information to the visitor in question (as seen in D65575 
).

`ConditionBRVisitor` is a different beast, as it was built for a different 
purpose. It is responsible for constructing events at, well, conditions, and is 
registered only once, and isn't a part of the "expression value tracking 
family". Unfortunately, it is also //the// visitor to tinker with for 
constructing better diagnostics about the collapse point problem.

This creates a need for alternative way to communicate with 
`ConditionBRVisitor` that a specific condition is being tracked for for the 
reason of being a control dependency. Since at almost all 
`PathDiagnosticEventPiece` construction the visitor checks interestingness, it 
makes sense to pair interestingness with a reason as to why we marked an entity 
as such.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D65723

Files:
  clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporter.h
  clang/include/clang/StaticAnalyzer/Core/BugReporter/BugReporterVisitors.h
  clang/lib/StaticAnalyzer/Core/BugReporter.cpp
  clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp

Index: clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
===
--- clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
+++ clang/lib/StaticAnalyzer/Core/BugReporterVisitors.cpp
@@ -1983,7 +1983,7 @@
   MacroNullReturnSuppressionVisitor::addMacroVisitorIfNecessary(
   LVNode, R, EnableNullFPSuppression, report, V);
 
-  report.markInteresting(V);
+  report.markInteresting(V, TKind);
   report.addVisitor(llvm::make_unique(R));
 
   // If the contents are symbolic, find out when they became null.
@@ -2045,7 +2045,7 @@
 
 const MemRegion *RegionRVal = RVal.getAsRegion();
 if (RegionRVal && isa(RegionRVal)) {
-  report.markInteresting(RegionRVal);
+  report.markInteresting(RegionRVal, TKind);
   report.addVisitor(llvm::make_unique(
 loc::MemRegionVal(RegionRVal), /*assumption=*/false));
 }
Index: clang/lib/StaticAnalyzer/Core/BugReporter.cpp
===
--- clang/lib/StaticAnalyzer/Core/BugReporter.cpp
+++ clang/lib/StaticAnalyzer/Core/BugReporter.cpp
@@ -2091,30 +2091,53 @@
   }
 }
 
-void BugReport::markInteresting(SymbolRef sym) {
+template 
+static void insertToInterestingnessMap(
+llvm::DenseMap , T Val,
+bugreporter::TrackingKind TKind) {
+  auto Result = InterestingnessMap.insert({Val, TKind});
+
+  static_assert(
+  static_cast(bugreporter::TrackingKind::NumTrackingKinds) == 2,
+  "BugReport::markInteresting currently can only handle 2 different "
+  "tracking kinds! Please define what tracking kind should this entitiy"
+  "have, if it was already marked as interesting with a different kind!");
+  // Even if this symbol/region was already marked as interesting as a
+  // condition, if we later mark it as interesting again but with
+  // thorough tracking, overwrite it. Entities marked with thorough
+  // interestiness are the most important (or most interesting, if you will),
+  // and we wouldn't like to downplay their importance.
+  if (!Result.second)
+if (TKind == bugreporter::TrackingKind::Thorough)
+  Result.first->getSecond() = bugreporter::TrackingKind::Thorough;
+}
+
+void BugReport::markInteresting(SymbolRef sym,
+bugreporter::TrackingKind TKind) {
   if (!sym)
 return;
 
-  

[PATCH] D65572: Fix static linking failure with --unwindlib=libunwind

2019-08-04 Thread Saleem Abdulrasool via Phabricator via cfe-commits
compnerd added a comment.

`-ldl` doesn't work on all platforms (e.g. android, FreeBSD, etc).  `-lpthread` 
is wrong - if you want to add that, I think that we need to improve the 
`-thread-model` flag in clang first (it currently just always passes `posix`, 
which is ignored; but would identify the threading model).  `-lpthread` is 
wrong - consider building on Solaris with Solaris threads rather than POSIX 
threads, or on Windows with the Win32 threading.  This really is inline with 
the work that needs to be finished up with having library link dependencies for 
static libraries (i.e. `#pragma comment(lib, …)`).


Repository:
  rC Clang

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

https://reviews.llvm.org/D65572



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D65695: Implements CWG 1601 in [over.ics.rank/4.2]

2019-08-04 Thread Mark de Wever via Phabricator via cfe-commits
Mordante marked an inline comment as done.
Mordante added inline comments.



Comment at: clang/www/cxx_dr_status.html:3
   "http://www.w3.org/TR/html4/strict.dtd;>
 
 

I'll properly update this file as explained in D65696.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D65695



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D65696: Implements CWG 2082 Referring to parameters in unevaluated operands of default arguments

2019-08-04 Thread Mark de Wever via Phabricator via cfe-commits
Mordante marked 2 inline comments as done.
Mordante added inline comments.



Comment at: clang/lib/Sema/SemaDeclCXX.cpp:103-105
+  //   A local variable cannot be odr-used (6.2) in a default argument.
+  if (DRE->isNonOdrUse() != NOUR_None)
+return false;

rsmith wrote:
> Please add tests for the distinction between "potentially-evaluated" and 
> "odr-used" here, for example:
> 
> ```
> void f() {
>   const int n = 123;
>   void g(int k = n); // ok, not an odr-use
> }
> ```
I added the test but unfortunately clang disagrees with you and considers `n` 
ODR used. 
I'll have look how to teach clang `n` is not ODR used.



Comment at: clang/www/cxx_dr_status.html:3
   "http://www.w3.org/TR/html4/strict.dtd;>
 
 

rsmith wrote:
> Note that this is an auto-generated file. To update it, you need to add a 
> test to the relevant file (`test/CXX/drs/dr20xx.cpp`) with a suitable comment 
> (`// dr2082: 10` to mark this implemented in Clang 10), grab a recent 
> `cwg_index.html` file, and run the `make_cxx_dr_status` script.
Thanks for the info, I'll have a look at it after I fix the ODR used part.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D65696



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D65562: Move LangStandard*, InputKind::Language to Basic

2019-08-04 Thread Rainer Orth via Phabricator via cfe-commits
ro added a comment.

I've now submitted the lldb patch  to reflect 
the `LangStandard.h` move.

It turns out the part of isl (included in polly) that uses `InputKind::C` isn't 
even compiled inside the llvm tree.  Nonetheless, I've submitted a patch 
upstream  
to allow for `Language::C` instead.  However, that part of the isl code didn't 
even compile before my patch, so acceptance of my patch won't have to block 
integrating this one.


Repository:
  rC Clang

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

https://reviews.llvm.org/D65562



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D65104: [clang-tidy] Add FixItHint for performance-noexcept-move-constructor

2019-08-04 Thread Zinovy Nis via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL367785: [clang-tidy] Add FixItHint for 
performance-noexcept-move-constructor (authored by zinovy.nis, committed by ).
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Changed prior to commit:
  https://reviews.llvm.org/D65104?vs=211429=213244#toc

Repository:
  rL LLVM

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

https://reviews.llvm.org/D65104

Files:
  
clang-tools-extra/trunk/clang-tidy/performance/NoexceptMoveConstructorCheck.cpp
  
clang-tools-extra/trunk/test/clang-tidy/performance-noexcept-move-constructor-fix.cpp

Index: clang-tools-extra/trunk/clang-tidy/performance/NoexceptMoveConstructorCheck.cpp
===
--- clang-tools-extra/trunk/clang-tidy/performance/NoexceptMoveConstructorCheck.cpp
+++ clang-tools-extra/trunk/clang-tidy/performance/NoexceptMoveConstructorCheck.cpp
@@ -9,6 +9,7 @@
 #include "NoexceptMoveConstructorCheck.h"
 #include "clang/AST/ASTContext.h"
 #include "clang/ASTMatchers/ASTMatchFinder.h"
+#include "clang/Tooling/FixIt.h"
 
 using namespace clang::ast_matchers;
 
@@ -47,9 +48,20 @@
   return;
 
 if (!isNoexceptExceptionSpec(ProtoType->getExceptionSpecType())) {
-  diag(Decl->getLocation(), "move %0s should be marked noexcept")
+  auto Diag =
+  diag(Decl->getLocation(), "move %0s should be marked noexcept")
   << MethodType;
-  // FIXME: Add a fixit.
+  // Add FixIt hints.
+  SourceManager  = *Result.SourceManager;
+  assert(Decl->getNumParams() > 0);
+  SourceLocation NoexceptLoc = Decl->getParamDecl(Decl->getNumParams() - 1)
+   ->getSourceRange()
+   .getEnd();
+  if (NoexceptLoc.isValid())
+NoexceptLoc = Lexer::findLocationAfterToken(
+NoexceptLoc, tok::r_paren, SM, Result.Context->getLangOpts(), true);
+  if (NoexceptLoc.isValid())
+Diag << FixItHint::CreateInsertion(NoexceptLoc, " noexcept ");
   return;
 }
 
Index: clang-tools-extra/trunk/test/clang-tidy/performance-noexcept-move-constructor-fix.cpp
===
--- clang-tools-extra/trunk/test/clang-tidy/performance-noexcept-move-constructor-fix.cpp
+++ clang-tools-extra/trunk/test/clang-tidy/performance-noexcept-move-constructor-fix.cpp
@@ -0,0 +1,67 @@
+// RUN: %check_clang_tidy %s performance-noexcept-move-constructor %t
+
+struct C_1 {
+ ~C_1() {}
+ C_1(int a) {}
+ C_1(C_1&& a) :C_1(5) {}
+ // CHECK-FIXES: ){{.*}}noexcept{{.*}}:
+ C_1& operator=(C_1&&) { return *this; }
+ // CHECK-FIXES: ){{.*}}noexcept{{.*}} {
+};
+
+struct C_2 {
+ ~C_2() {}
+ C_2(C_2&& a);
+// CHECK-FIXES: ){{.*}}noexcept{{.*}};
+ C_2& operator=(C_2&&);
+// CHECK-FIXES: ){{.*}}noexcept{{.*}};
+};
+
+C_2::C_2(C_2&& a) {}
+// CHECK-FIXES: ){{.*}}noexcept{{.*}} {}
+C_2& C_2::operator=(C_2&&) { return *this; }
+// CHECK-FIXES: ){{.*}}noexcept{{.*}} {
+
+struct C_3 {
+ ~C_3() {}
+ C_3(C_3&& a);
+// CHECK-FIXES: ){{.*}}noexcept{{.*}};
+ C_3& operator=(C_3&& a);
+// CHECK-FIXES: ){{.*}}noexcept{{.*}};
+};
+
+C_3::C_3(C_3&& a) = default;
+// CHECK-FIXES: ){{.*}}noexcept{{.*}} = default;
+C_3& C_3::operator=(C_3&& a) = default;
+// CHECK-FIXES: ){{.*}}noexcept{{.*}} = default;
+
+template 
+struct C_4 {
+ C_4(C_4&&) {}
+// CHECK-FIXES: ){{.*}}noexcept{{.*}} {}
+ ~C_4() {}
+ C_4& operator=(C_4&& a) = default;
+// CHECK-FIXES: ){{.*}}noexcept{{.*}} = default;
+};
+
+template 
+struct C_5 {
+ C_5(C_5&&) {}
+// CHECK-FIXES:){{.*}}noexcept{{.*}} {}
+ ~C_5() {}
+ auto operator=(C_5&& a)->C_5 = default;
+// CHECK-FIXES:){{.*}}noexcept{{.*}} = default;
+};
+
+template 
+struct C_6 {
+ C_6(C_6&&) {}
+// CHECK-FIXES:){{.*}}noexcept{{.*}} {}
+ ~C_6() {}
+ auto operator=(C_6&& a)->C_6;
+// CHECK-FIXES:){{.*}}noexcept{{.*}};
+};
+
+template 
+auto C_6::operator=(C_6&& a) -> C_6 {}
+// CHECK-FIXES: ){{.*}}noexcept{{.*}} {}
\ No newline at end of file
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang-tools-extra] r367785 - [clang-tidy] Add FixItHint for performance-noexcept-move-constructor

2019-08-04 Thread Zinovy Nis via cfe-commits
Author: zinovy.nis
Date: Sun Aug  4 06:32:39 2019
New Revision: 367785

URL: http://llvm.org/viewvc/llvm-project?rev=367785=rev
Log:
[clang-tidy] Add FixItHint for performance-noexcept-move-constructor

Differential Revision: https://reviews.llvm.org/D65104


Added:

clang-tools-extra/trunk/test/clang-tidy/performance-noexcept-move-constructor-fix.cpp
Modified:

clang-tools-extra/trunk/clang-tidy/performance/NoexceptMoveConstructorCheck.cpp

Modified: 
clang-tools-extra/trunk/clang-tidy/performance/NoexceptMoveConstructorCheck.cpp
URL: 
http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/clang-tidy/performance/NoexceptMoveConstructorCheck.cpp?rev=367785=367784=367785=diff
==
--- 
clang-tools-extra/trunk/clang-tidy/performance/NoexceptMoveConstructorCheck.cpp 
(original)
+++ 
clang-tools-extra/trunk/clang-tidy/performance/NoexceptMoveConstructorCheck.cpp 
Sun Aug  4 06:32:39 2019
@@ -9,6 +9,7 @@
 #include "NoexceptMoveConstructorCheck.h"
 #include "clang/AST/ASTContext.h"
 #include "clang/ASTMatchers/ASTMatchFinder.h"
+#include "clang/Tooling/FixIt.h"
 
 using namespace clang::ast_matchers;
 
@@ -47,9 +48,20 @@ void NoexceptMoveConstructorCheck::check
   return;
 
 if (!isNoexceptExceptionSpec(ProtoType->getExceptionSpecType())) {
-  diag(Decl->getLocation(), "move %0s should be marked noexcept")
+  auto Diag =
+  diag(Decl->getLocation(), "move %0s should be marked noexcept")
   << MethodType;
-  // FIXME: Add a fixit.
+  // Add FixIt hints.
+  SourceManager  = *Result.SourceManager;
+  assert(Decl->getNumParams() > 0);
+  SourceLocation NoexceptLoc = Decl->getParamDecl(Decl->getNumParams() - 1)
+   ->getSourceRange()
+   .getEnd();
+  if (NoexceptLoc.isValid())
+NoexceptLoc = Lexer::findLocationAfterToken(
+NoexceptLoc, tok::r_paren, SM, Result.Context->getLangOpts(), 
true);
+  if (NoexceptLoc.isValid())
+Diag << FixItHint::CreateInsertion(NoexceptLoc, " noexcept ");
   return;
 }
 

Added: 
clang-tools-extra/trunk/test/clang-tidy/performance-noexcept-move-constructor-fix.cpp
URL: 
http://llvm.org/viewvc/llvm-project/clang-tools-extra/trunk/test/clang-tidy/performance-noexcept-move-constructor-fix.cpp?rev=367785=auto
==
--- 
clang-tools-extra/trunk/test/clang-tidy/performance-noexcept-move-constructor-fix.cpp
 (added)
+++ 
clang-tools-extra/trunk/test/clang-tidy/performance-noexcept-move-constructor-fix.cpp
 Sun Aug  4 06:32:39 2019
@@ -0,0 +1,67 @@
+// RUN: %check_clang_tidy %s performance-noexcept-move-constructor %t
+
+struct C_1 {
+ ~C_1() {}
+ C_1(int a) {}
+ C_1(C_1&& a) :C_1(5) {}
+ // CHECK-FIXES: ){{.*}}noexcept{{.*}}:
+ C_1& operator=(C_1&&) { return *this; }
+ // CHECK-FIXES: ){{.*}}noexcept{{.*}} {
+};
+
+struct C_2 {
+ ~C_2() {}
+ C_2(C_2&& a);
+// CHECK-FIXES: ){{.*}}noexcept{{.*}};
+ C_2& operator=(C_2&&);
+// CHECK-FIXES: ){{.*}}noexcept{{.*}};
+};
+
+C_2::C_2(C_2&& a) {}
+// CHECK-FIXES: ){{.*}}noexcept{{.*}} {}
+C_2& C_2::operator=(C_2&&) { return *this; }
+// CHECK-FIXES: ){{.*}}noexcept{{.*}} {
+
+struct C_3 {
+ ~C_3() {}
+ C_3(C_3&& a);
+// CHECK-FIXES: ){{.*}}noexcept{{.*}};
+ C_3& operator=(C_3&& a);
+// CHECK-FIXES: ){{.*}}noexcept{{.*}};
+};
+
+C_3::C_3(C_3&& a) = default;
+// CHECK-FIXES: ){{.*}}noexcept{{.*}} = default;
+C_3& C_3::operator=(C_3&& a) = default;
+// CHECK-FIXES: ){{.*}}noexcept{{.*}} = default;
+
+template 
+struct C_4 {
+ C_4(C_4&&) {}
+// CHECK-FIXES: ){{.*}}noexcept{{.*}} {}
+ ~C_4() {}
+ C_4& operator=(C_4&& a) = default;
+// CHECK-FIXES: ){{.*}}noexcept{{.*}} = default;
+};
+
+template 
+struct C_5 {
+ C_5(C_5&&) {}
+// CHECK-FIXES:){{.*}}noexcept{{.*}} {}
+ ~C_5() {}
+ auto operator=(C_5&& a)->C_5 = default;
+// CHECK-FIXES:){{.*}}noexcept{{.*}} = default;
+};
+
+template 
+struct C_6 {
+ C_6(C_6&&) {}
+// CHECK-FIXES:){{.*}}noexcept{{.*}} {}
+ ~C_6() {}
+ auto operator=(C_6&& a)->C_6;
+// CHECK-FIXES:){{.*}}noexcept{{.*}};
+};
+
+template 
+auto C_6::operator=(C_6&& a) -> C_6 {}
+// CHECK-FIXES: ){{.*}}noexcept{{.*}} {}
\ No newline at end of file


___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D65562: Move LangStandard*, InputKind::Language to Basic

2019-08-04 Thread Rainer Orth via Phabricator via cfe-commits
ro updated this revision to Diff 213243.
ro marked 2 inline comments as done.
ro added a comment.

- Restrict enum class Languge to uint8_t to save space.
- Filter patch through clang-format-diff.py


Repository:
  rC Clang

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

https://reviews.llvm.org/D65562

Files:
  include/clang/Basic/LangStandard.h
  include/clang/Basic/LangStandards.def
  include/clang/Driver/Options.td
  include/clang/Frontend/CompilerInvocation.h
  include/clang/Frontend/FrontendOptions.h
  include/clang/Frontend/LangStandard.h
  include/clang/Frontend/LangStandards.def
  include/clang/module.modulemap
  lib/Basic/CMakeLists.txt
  lib/Basic/LangStandards.cpp
  lib/CodeGen/CodeGenAction.cpp
  lib/Frontend/ASTUnit.cpp
  lib/Frontend/CMakeLists.txt
  lib/Frontend/CompilerInstance.cpp
  lib/Frontend/CompilerInvocation.cpp
  lib/Frontend/FrontendAction.cpp
  lib/Frontend/FrontendActions.cpp
  lib/Frontend/FrontendOptions.cpp
  lib/Frontend/LangStandards.cpp
  lib/Frontend/PrecompiledPreamble.cpp
  lib/Frontend/Rewrite/FrontendActions.cpp
  lib/StaticAnalyzer/Frontend/ModelInjector.cpp
  lib/Tooling/InterpolatingCompilationDatabase.cpp
  unittests/Frontend/CodeGenActionTest.cpp
  unittests/Frontend/FrontendActionTest.cpp
  unittests/Frontend/OutputStreamTest.cpp

Index: unittests/Frontend/OutputStreamTest.cpp
===
--- unittests/Frontend/OutputStreamTest.cpp
+++ unittests/Frontend/OutputStreamTest.cpp
@@ -6,6 +6,7 @@
 //
 //===--===//
 
+#include "clang/Basic/LangStandard.h"
 #include "clang/CodeGen/BackendUtil.h"
 #include "clang/CodeGen/CodeGenAction.h"
 #include "clang/Frontend/CompilerInstance.h"
@@ -24,7 +25,7 @@
   Invocation->getPreprocessorOpts().addRemappedFile(
   "test.cc", MemoryBuffer::getMemBuffer("").release());
   Invocation->getFrontendOpts().Inputs.push_back(
-  FrontendInputFile("test.cc", InputKind::CXX));
+  FrontendInputFile("test.cc", Language::CXX));
   Invocation->getFrontendOpts().ProgramAction = EmitBC;
   Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu";
   CompilerInstance Compiler;
Index: unittests/Frontend/FrontendActionTest.cpp
===
--- unittests/Frontend/FrontendActionTest.cpp
+++ unittests/Frontend/FrontendActionTest.cpp
@@ -10,6 +10,7 @@
 #include "clang/AST/ASTConsumer.h"
 #include "clang/AST/ASTContext.h"
 #include "clang/AST/RecursiveASTVisitor.h"
+#include "clang/Basic/LangStandard.h"
 #include "clang/Frontend/CompilerInstance.h"
 #include "clang/Frontend/CompilerInvocation.h"
 #include "clang/Frontend/FrontendActions.h"
@@ -84,7 +85,7 @@
   "test.cc",
   MemoryBuffer::getMemBuffer("int main() { float x; }").release());
   invocation->getFrontendOpts().Inputs.push_back(
-  FrontendInputFile("test.cc", InputKind::CXX));
+  FrontendInputFile("test.cc", Language::CXX));
   invocation->getFrontendOpts().ProgramAction = frontend::ParseSyntaxOnly;
   invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu";
   CompilerInstance compiler;
@@ -104,7 +105,7 @@
   "test.cc",
   MemoryBuffer::getMemBuffer("int main() { float x; }").release());
   invocation->getFrontendOpts().Inputs.push_back(
-  FrontendInputFile("test.cc", InputKind::CXX));
+  FrontendInputFile("test.cc", Language::CXX));
   invocation->getFrontendOpts().ProgramAction = frontend::ParseSyntaxOnly;
   invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu";
   CompilerInstance compiler;
@@ -131,7 +132,7 @@
   "};\n"
   "B c() { return B(); }\n").release());
   invocation->getFrontendOpts().Inputs.push_back(
-  FrontendInputFile("test.cc", InputKind::CXX));
+  FrontendInputFile("test.cc", Language::CXX));
   invocation->getFrontendOpts().ProgramAction = frontend::ParseSyntaxOnly;
   invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu";
   CompilerInstance compiler;
@@ -177,7 +178,7 @@
   "test.cc",
   MemoryBuffer::getMemBuffer("int main() { float x; }").release());
   Invocation->getFrontendOpts().Inputs.push_back(
-  FrontendInputFile("test.cc", InputKind::CXX));
+  FrontendInputFile("test.cc", Language::CXX));
   Invocation->getFrontendOpts().ProgramAction = frontend::ParseSyntaxOnly;
   Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu";
   CompilerInstance Compiler;
@@ -238,7 +239,7 @@
 "int main() { foo(); }")
  .release());
   Invocation->getFrontendOpts().Inputs.push_back(
-  FrontendInputFile("test.cc", InputKind::CXX));
+  FrontendInputFile("test.cc", Language::CXX));
   Invocation->getFrontendOpts().ProgramAction = frontend::ParseSyntaxOnly;
   Invocation->getTargetOpts().Triple = "i386-unknown-linux-gnu";
   CompilerInstance Compiler;
@@ -270,7 +271,7 @@
 "test.h",
 

[PATCH] D65562: Move LangStandard*, InputKind::Language to Basic

2019-08-04 Thread Rainer Orth via Phabricator via cfe-commits
ro added inline comments.



Comment at: include/clang/Basic/LangStandard.h:19
+/// standard and possible actions.
+enum Language {
+  Unknown,

rnk wrote:
> ro wrote:
> > rnk wrote:
> > > Is it feasible to make this an `enum class`? I'm worried about namespace 
> > > clashes on these otherwise very short names, like C, CXX, HIP, etc. It 
> > > should be straightforward and mechanical to replace most existing 
> > > instances of `InputKind::` with `Language::`. It would also remove the 
> > > need to make an exception for `LF_OpenCL`.
> > That works perfectly indeed, and is way clearer than my hack
> > with LF_OpenCL.
> > 
> > There's only one downside: I had to change InputKind.Lang
> > from a 4-bit bitfield to Language, otherwise neither assignment
> > nor comparison would work.  No idea if that's really a problem.
> I don't think it matters, but I would like to keep InputKind 32-bits or less. 
> The easy way would be to use `enum class Language : uint8_t` here. The other 
> way would be to keep the bitfield and add a static cast in the constructor. I 
> see getLanguage() already performs one, so most of the uses shouldn't need a 
> change.
I decided to be lazy this time and went for the first alternative.


Repository:
  rC Clang

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

https://reviews.llvm.org/D65562



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D64793: [Driver] Properly use values-X[ca].o, values-xpg[46].o on Solaris

2019-08-04 Thread Rainer Orth via Phabricator via cfe-commits
ro added a comment.

In D64793#1613063 , @rnk wrote:

> lgtm
>
> If I interpret @jyknight correctly, having failed to dissuade you, he doesn't 
> feel strongly enough about this to block it, he just wants to reduce legacy 
> when feasible.


Fully understood: I tend to do the same in the Solaris GCC port as well, 
getting rid of old cruft every once in a while (like deprecating/removing 
support for old OS versions).  If we misunderstood, he can still object while 
I'm working to get the prerequisite lldb (and polly) patches in.


Repository:
  rC Clang

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

https://reviews.llvm.org/D64793



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


Re: [PATCH] D58418: [clang][DirectoryWatcher] Upstream DirectoryWatcher

2019-08-04 Thread Puyan Lotfi via cfe-commits
https://reviews.llvm.org/D65704
https://reviews.llvm.org/D65708

Thanks!

PL

On Thu, Aug 1, 2019 at 5:42 PM Jan Korous  wrote:

> Oh! Interesting! Thanks for investigating this.
>
> I'm happy to review the patch.
>
> On Aug 1, 2019, at 5:17 PM, Puyan Lotfi 
> wrote:
>
> Hi Jan, Thanks for the follow up!
>
> Me and Compnerd narrowed down the issue to the inotify file count limit
> being exceeded as the cause. DirectoryWatcherLinux::create() in
> DirectoryWatcher-linux.cpp also doesn't properly perror, I'll post a patch
> for this shortly to print perror info if the file count is exceeded.
>
>
> The cause of the inotify limit being exceeded was... drumroll... _Dropbox_
>
> PL
>
>
>
> On Thu, Aug 1, 2019 at 11:24 AM Jan Korous via Phabricator via
> llvm-commits  wrote:
>
>> jkorous added a comment.
>>
>> Hi Puyan,
>>
>> I failed to reproduce with llvm.org/master
>> (5faa533e47b0e54b04166b0257c5ebb48e6ffcaa <
>> https://reviews.llvm.org/rG5faa533e47b0e54b04166b0257c5ebb48e6ffcaa>) on
>> Ubuntu 18.04.1 LTS both in debug and release build.
>>
>> Since it sounds like you can reproduce "reliably" - can you please share
>> more info how to reproduce?
>>
>>
>> Repository:
>>   rL LLVM
>>
>> CHANGES SINCE LAST ACTION
>>   https://reviews.llvm.org/D58418/new/
>>
>> https://reviews.llvm.org/D58418
>>
>>
>>
>> ___
>> llvm-commits mailing list
>> llvm-comm...@lists.llvm.org
>> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
>
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D65582: IR: accept and print numbered %N names for function args

2019-08-04 Thread Tim Northover via Phabricator via cfe-commits
t.p.northover accepted this revision.
t.p.northover marked an inline comment as done.
t.p.northover added a comment.

Thanks Reid, committed as r367755.




Comment at: llvm/utils/add_argument_names.py:5
+def fix_string(s):
+TYPE = 
re.compile('\s*(i[0-9]+|float|double|x86_fp80|fp128|ppc_fp128|\[\[.*?\]\]|\[2 x 
\[\[[A-Z_0-9]+\]\]\]|<.*?>|{.*?}|\[[0-9]+ x 
.*?\]|%["a-z:A-Z0-9._]+({{.*?}})?|%{{.*?}}|{{.*?}}|\[\[.*?\]\])(\s*(\*|addrspace\(.*?\)|dereferenceable\(.*?\)|byval\(.*?\)|sret|zeroext|inreg|returned|signext|nocapture|align
 \d+|swiftself|swifterror|readonly|noalias|inalloca|nocapture))*\s*')
+

rnk wrote:
> Nice.
Incoming prize for the most egregious violation of the 70 column rule.


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

https://reviews.llvm.org/D65582



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


r367779 - [Parser] Emit descriptive diagnostic for misplaced pragma

2019-08-04 Thread Serge Pavlov via cfe-commits
Author: sepavloff
Date: Sun Aug  4 03:08:51 2019
New Revision: 367779

URL: http://llvm.org/viewvc/llvm-project?rev=367779=rev
Log:
[Parser] Emit descriptive diagnostic for misplaced pragma

If a class or struct or union declaration contains a pragma that
is not valid in this context, compiler issues generic error like
"expected member name or ';' after declaration specifiers". With this
change the error tells that this pragma cannot appear in this declaration.

Differential Revision: https://reviews.llvm.org/D64932

Added:
cfe/trunk/test/Parser/pragma-fp-contract.cpp
Modified:
cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
cfe/trunk/lib/Parse/ParseDecl.cpp
cfe/trunk/lib/Parse/ParseDeclCXX.cpp
cfe/trunk/test/Parser/pragma-attribute-context.cpp
cfe/trunk/test/Parser/pragma-fp-contract.c

Modified: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td?rev=367779=367778=367779=diff
==
--- cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td Sun Aug  4 03:08:51 
2019
@@ -974,6 +974,8 @@ def warn_pragma_missing_argument : Warni
 def warn_pragma_invalid_argument : Warning<
   "unexpected argument '%0' to '#pragma %1'%select{|; expected %3}2">, 
InGroup;
 
+def err_pragma_misplaced_in_decl : Error<"this pragma cannot appear in %0 
declaration">;
+
 // '#pragma clang section' related errors
 def err_pragma_expected_clang_section_name : Error<
   "expected one of [bss|data|rodata|text] section kind in '#pragma %0'">;

Modified: cfe/trunk/lib/Parse/ParseDecl.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDecl.cpp?rev=367779=367778=367779=diff
==
--- cfe/trunk/lib/Parse/ParseDecl.cpp (original)
+++ cfe/trunk/lib/Parse/ParseDecl.cpp Sun Aug  4 03:08:51 2019
@@ -4148,6 +4148,14 @@ void Parser::ParseStructUnionBody(Source
   continue;
 }
 
+if (tok::isPragmaAnnotation(Tok.getKind())) {
+  Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl)
+  << DeclSpec::getSpecifierName(
+ TagType, Actions.getASTContext().getPrintingPolicy());
+  ConsumeAnnotationToken();
+  continue;
+}
+
 if (!Tok.is(tok::at)) {
   auto CFieldCallback = [&](ParsingFieldDeclarator ) {
 // Install the declarator into the current TagDecl.

Modified: cfe/trunk/lib/Parse/ParseDeclCXX.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Parse/ParseDeclCXX.cpp?rev=367779=367778=367779=diff
==
--- cfe/trunk/lib/Parse/ParseDeclCXX.cpp (original)
+++ cfe/trunk/lib/Parse/ParseDeclCXX.cpp Sun Aug  4 03:08:51 2019
@@ -3134,6 +3134,13 @@ Parser::DeclGroupPtrTy Parser::ParseCXXC
   TagDecl);
 
   default:
+if (tok::isPragmaAnnotation(Tok.getKind())) {
+  Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl)
+  << DeclSpec::getSpecifierName(TagType,
+   
Actions.getASTContext().getPrintingPolicy());
+  ConsumeAnnotationToken();
+  return nullptr;
+}
 return ParseCXXClassMemberDeclaration(AS, AccessAttrs);
   }
 }

Modified: cfe/trunk/test/Parser/pragma-attribute-context.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/pragma-attribute-context.cpp?rev=367779=367778=367779=diff
==
--- cfe/trunk/test/Parser/pragma-attribute-context.cpp (original)
+++ cfe/trunk/test/Parser/pragma-attribute-context.cpp Sun Aug  4 03:08:51 2019
@@ -31,8 +31,7 @@ int c = my_ns::nested::h(); // expected-
 
 struct InStruct {
   // FIXME: This asserts in Objective-C++!
-  // FIXME: This is a horrible diagnostic!
 #ifndef __OBJC__
-  BEGIN_PRAGMA // expected-error {{expected member name or ';' after 
declaration specifiers}}
+  BEGIN_PRAGMA // expected-error {{this pragma cannot appear in struct 
declaration}}
 #endif
 };

Modified: cfe/trunk/test/Parser/pragma-fp-contract.c
URL: 
http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Parser/pragma-fp-contract.c?rev=367779=367778=367779=diff
==
--- cfe/trunk/test/Parser/pragma-fp-contract.c (original)
+++ cfe/trunk/test/Parser/pragma-fp-contract.c Sun Aug  4 03:08:51 2019
@@ -10,3 +10,16 @@ void f2(void) {
   #pragma STDC FP_CONTRACT OFF
   #pragma STDC FP_CONTRACT ON 
 }
+
+struct S1 {
+// expected-error@+1 {{this pragma cannot appear in struct declaration}}
+#pragma STDC FP_CONTRACT ON
+  float f1;
+};
+
+union U1 {
+  float f1;
+  float f2;
+// expected-error@+1 {{this pragma cannot appear in union declaration}}
+#pragma STDC 

[PATCH] D64932: [Parser] Emit descriptive diagnostic for misplaced pragma

2019-08-04 Thread Serge Pavlov via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
sepavloff marked an inline comment as done.
Closed by commit rL367779: [Parser] Emit descriptive diagnostic for misplaced 
pragma (authored by sepavloff, committed by ).
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Changed prior to commit:
  https://reviews.llvm.org/D64932?vs=213023=213239#toc

Repository:
  rL LLVM

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

https://reviews.llvm.org/D64932

Files:
  cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
  cfe/trunk/lib/Parse/ParseDecl.cpp
  cfe/trunk/lib/Parse/ParseDeclCXX.cpp
  cfe/trunk/test/Parser/pragma-attribute-context.cpp
  cfe/trunk/test/Parser/pragma-fp-contract.c
  cfe/trunk/test/Parser/pragma-fp-contract.cpp

Index: cfe/trunk/lib/Parse/ParseDeclCXX.cpp
===
--- cfe/trunk/lib/Parse/ParseDeclCXX.cpp
+++ cfe/trunk/lib/Parse/ParseDeclCXX.cpp
@@ -3134,6 +3134,13 @@
   TagDecl);
 
   default:
+if (tok::isPragmaAnnotation(Tok.getKind())) {
+  Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl)
+  << DeclSpec::getSpecifierName(TagType,
+   Actions.getASTContext().getPrintingPolicy());
+  ConsumeAnnotationToken();
+  return nullptr;
+}
 return ParseCXXClassMemberDeclaration(AS, AccessAttrs);
   }
 }
Index: cfe/trunk/lib/Parse/ParseDecl.cpp
===
--- cfe/trunk/lib/Parse/ParseDecl.cpp
+++ cfe/trunk/lib/Parse/ParseDecl.cpp
@@ -4148,6 +4148,14 @@
   continue;
 }
 
+if (tok::isPragmaAnnotation(Tok.getKind())) {
+  Diag(Tok.getLocation(), diag::err_pragma_misplaced_in_decl)
+  << DeclSpec::getSpecifierName(
+ TagType, Actions.getASTContext().getPrintingPolicy());
+  ConsumeAnnotationToken();
+  continue;
+}
+
 if (!Tok.is(tok::at)) {
   auto CFieldCallback = [&](ParsingFieldDeclarator ) {
 // Install the declarator into the current TagDecl.
Index: cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
===
--- cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
+++ cfe/trunk/include/clang/Basic/DiagnosticParseKinds.td
@@ -974,6 +974,8 @@
 def warn_pragma_invalid_argument : Warning<
   "unexpected argument '%0' to '#pragma %1'%select{|; expected %3}2">, InGroup;
 
+def err_pragma_misplaced_in_decl : Error<"this pragma cannot appear in %0 declaration">;
+
 // '#pragma clang section' related errors
 def err_pragma_expected_clang_section_name : Error<
   "expected one of [bss|data|rodata|text] section kind in '#pragma %0'">;
Index: cfe/trunk/test/Parser/pragma-fp-contract.c
===
--- cfe/trunk/test/Parser/pragma-fp-contract.c
+++ cfe/trunk/test/Parser/pragma-fp-contract.c
@@ -10,3 +10,16 @@
   #pragma STDC FP_CONTRACT OFF
   #pragma STDC FP_CONTRACT ON 
 }
+
+struct S1 {
+// expected-error@+1 {{this pragma cannot appear in struct declaration}}
+#pragma STDC FP_CONTRACT ON
+  float f1;
+};
+
+union U1 {
+  float f1;
+  float f2;
+// expected-error@+1 {{this pragma cannot appear in union declaration}}
+#pragma STDC FP_CONTRACT ON
+};
Index: cfe/trunk/test/Parser/pragma-fp-contract.cpp
===
--- cfe/trunk/test/Parser/pragma-fp-contract.cpp
+++ cfe/trunk/test/Parser/pragma-fp-contract.cpp
@@ -0,0 +1,32 @@
+// RUN: %clang_cc1 -fsyntax-only -verify %s
+
+void f1(void) {
+  int x = 0;
+/* expected-error@+1 {{'#pragma fp_contract' can only appear at file scope or at the start of a compound statement}} */
+#pragma STDC FP_CONTRACT ON
+}
+
+void f2(void) {
+  #pragma STDC FP_CONTRACT OFF
+  #pragma STDC FP_CONTRACT ON
+}
+
+struct S1 {
+// expected-error@+1 {{this pragma cannot appear in struct declaration}}
+#pragma STDC FP_CONTRACT ON
+  float f1;
+};
+
+union U1 {
+  float f1;
+  float f2;
+// expected-error@+1 {{this pragma cannot appear in union declaration}}
+#pragma STDC FP_CONTRACT ON
+};
+
+class C1 {
+  float f1;
+// expected-error@+1 {{this pragma cannot appear in class declaration}}
+#pragma STDC FP_CONTRACT ON
+  float f2;
+};
Index: cfe/trunk/test/Parser/pragma-attribute-context.cpp
===
--- cfe/trunk/test/Parser/pragma-attribute-context.cpp
+++ cfe/trunk/test/Parser/pragma-attribute-context.cpp
@@ -31,8 +31,7 @@
 
 struct InStruct {
   // FIXME: This asserts in Objective-C++!
-  // FIXME: This is a horrible diagnostic!
 #ifndef __OBJC__
-  BEGIN_PRAGMA // expected-error {{expected member name or ';' after declaration specifiers}}
+  BEGIN_PRAGMA // expected-error {{this pragma cannot appear in struct declaration}}
 #endif
 };
___

[PATCH] D65029: [Driver] Support for disabling sanitizer runtime linking

2019-08-04 Thread Petr Hosek via Phabricator via cfe-commits
phosek updated this revision to Diff 213237.

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

https://reviews.llvm.org/D65029

Files:
  clang/include/clang/Driver/Options.td
  clang/include/clang/Driver/SanitizerArgs.h
  clang/lib/Driver/SanitizerArgs.cpp
  clang/test/Driver/sanitizer-ld.c

Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -28,6 +28,14 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-SHARED-ASAN-LINUX %s
 
+// RUN: %clang -fsanitize=address -fno-sanitize-link-runtime %s -### -o %t.o 2>&1 \
+// RUN: -target x86_64-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-ASAN-NO-LINK-RUNTIME-LINUX %s
+//
+// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64.a"
+
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address \
 // RUN: -shared-libsan -static-libsan -shared-libasan \
Index: clang/lib/Driver/SanitizerArgs.cpp
===
--- clang/lib/Driver/SanitizerArgs.cpp
+++ clang/lib/Driver/SanitizerArgs.cpp
@@ -208,7 +208,7 @@
   // All of these include ubsan.
   if (needsAsanRt() || needsMsanRt() || needsHwasanRt() || needsTsanRt() ||
   needsDfsanRt() || needsLsanRt() || needsCfiDiagRt() ||
-  (needsScudoRt() && !requiresMinimalRuntime()))
+  (needsScudoRt() && !requiresMinimalRuntime()) || !LinkRuntimes)
 return false;
 
   return (Sanitizers.Mask & NeedsUbsanRt & ~TrapSanitizers.Mask) ||
@@ -217,12 +217,12 @@
 
 bool SanitizerArgs::needsCfiRt() const {
   return !(Sanitizers.Mask & SanitizerKind::CFI & ~TrapSanitizers.Mask) &&
- CfiCrossDso && !ImplicitCfiRuntime;
+ CfiCrossDso && !ImplicitCfiRuntime && LinkRuntimes;
 }
 
 bool SanitizerArgs::needsCfiDiagRt() const {
   return (Sanitizers.Mask & SanitizerKind::CFI & ~TrapSanitizers.Mask) &&
- CfiCrossDso && !ImplicitCfiRuntime;
+ CfiCrossDso && !ImplicitCfiRuntime && LinkRuntimes;
 }
 
 bool SanitizerArgs::requiresPIE() const {
@@ -265,6 +265,10 @@
   Args.hasFlag(options::OPT_fsanitize_minimal_runtime,
options::OPT_fno_sanitize_minimal_runtime, MinimalRuntime);
 
+  LinkRuntimes =
+  Args.hasFlag(options::OPT_fsanitize_link_runtime,
+   options::OPT_fno_sanitize_link_runtime, LinkRuntimes);
+
   // The object size sanitizer should not be enabled at -O0.
   Arg *OptLevel = Args.getLastArg(options::OPT_O_Group);
   bool RemoveObjectSizeAtO0 =
@@ -825,8 +829,10 @@
   }
 
   // Parse -link-cxx-sanitizer flag.
-  LinkCXXRuntimes =
-  Args.hasArg(options::OPT_fsanitize_link_cxx_runtime) || D.CCCIsCXX();
+  LinkCXXRuntimes = Args.hasArg(options::OPT_fsanitize_link_cxx_runtime,
+options::OPT_fno_sanitize_link_cxx_runtime,
+LinkCXXRuntimes) ||
+D.CCCIsCXX();
 
   // Finally, initialize the set of available and recoverable sanitizers.
   Sanitizers.Mask |= Kinds;
Index: clang/include/clang/Driver/SanitizerArgs.h
===
--- clang/include/clang/Driver/SanitizerArgs.h
+++ clang/include/clang/Driver/SanitizerArgs.h
@@ -41,6 +41,7 @@
   bool AsanInvalidPointerCmp = false;
   bool AsanInvalidPointerSub = false;
   std::string HwasanAbi;
+  bool LinkRuntimes = true;
   bool LinkCXXRuntimes = false;
   bool NeedPIE = false;
   bool SafeStackRuntime = false;
@@ -58,24 +59,38 @@
 
   bool needsSharedRt() const { return SharedRuntime; }
 
-  bool needsAsanRt() const { return Sanitizers.has(SanitizerKind::Address); }
-  bool needsHwasanRt() const { return Sanitizers.has(SanitizerKind::HWAddress); }
-  bool needsTsanRt() const { return Sanitizers.has(SanitizerKind::Thread); }
-  bool needsMsanRt() const { return Sanitizers.has(SanitizerKind::Memory); }
-  bool needsFuzzer() const { return Sanitizers.has(SanitizerKind::Fuzzer); }
+  bool needsAsanRt() const {
+return Sanitizers.has(SanitizerKind::Address) && LinkRuntimes;
+  }
+  bool needsHwasanRt() const {
+return Sanitizers.has(SanitizerKind::HWAddress) && LinkRuntimes;
+  }
+  bool needsTsanRt() const {
+return Sanitizers.has(SanitizerKind::Thread) && LinkRuntimes;
+  }
+  bool needsMsanRt() const {
+return Sanitizers.has(SanitizerKind::Memory) && LinkRuntimes;
+  }
+  bool needsFuzzer() const {
+return Sanitizers.has(SanitizerKind::Fuzzer) && LinkRuntimes;
+  }
   bool needsLsanRt() const {
 return Sanitizers.has(SanitizerKind::Leak) &&
!Sanitizers.has(SanitizerKind::Address) &&
-   !Sanitizers.has(SanitizerKind::HWAddress);
+   

[PATCH] D65715: [Driver] Don't disable -fsanitizer-coverage for safe-stack or shadow-call-stack

2019-08-04 Thread Fangrui Song via Phabricator via cfe-commits
MaskRay added a comment.

Does this change affect `test/Driver/fsanitize-coverage.c`?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D65715



___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D65715: [Driver] Don't disable -fsanitizer-coverage for safe-stack or shadow-call-stack

2019-08-04 Thread Roland McGrath via Phabricator via cfe-commits
mcgrathr created this revision.
mcgrathr added reviewers: phosek, MaskRay.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

These "sanitizers" are hardened ABIs that are wholly orthogonal
to the SanitizerCoverage instrumentation.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D65715

Files:
  clang/lib/Driver/SanitizerArgs.cpp


Index: clang/lib/Driver/SanitizerArgs.cpp
===
--- clang/lib/Driver/SanitizerArgs.cpp
+++ clang/lib/Driver/SanitizerArgs.cpp
@@ -46,7 +46,8 @@
 SanitizerKind::Undefined | SanitizerKind::Integer |
 SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |
 SanitizerKind::DataFlow | SanitizerKind::Fuzzer |
-SanitizerKind::FuzzerNoLink | SanitizerKind::FloatDivideByZero;
+SanitizerKind::FuzzerNoLink | SanitizerKind::FloatDivideByZero |
+SanitizerKind::SafeStack | SanitizerKind::ShadowCallStack;
 static const SanitizerMask RecoverableByDefault =
 SanitizerKind::Undefined | SanitizerKind::Integer |
 SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |


Index: clang/lib/Driver/SanitizerArgs.cpp
===
--- clang/lib/Driver/SanitizerArgs.cpp
+++ clang/lib/Driver/SanitizerArgs.cpp
@@ -46,7 +46,8 @@
 SanitizerKind::Undefined | SanitizerKind::Integer |
 SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |
 SanitizerKind::DataFlow | SanitizerKind::Fuzzer |
-SanitizerKind::FuzzerNoLink | SanitizerKind::FloatDivideByZero;
+SanitizerKind::FuzzerNoLink | SanitizerKind::FloatDivideByZero |
+SanitizerKind::SafeStack | SanitizerKind::ShadowCallStack;
 static const SanitizerMask RecoverableByDefault =
 SanitizerKind::Undefined | SanitizerKind::Integer |
 SanitizerKind::ImplicitConversion | SanitizerKind::Nullability |
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D65029: [Driver] Support for disabling sanitizer runtime linking

2019-08-04 Thread Petr Hosek via Phabricator via cfe-commits
phosek updated this revision to Diff 213235.
phosek added a comment.

One more change, I went with `-fsanitize-runtime` and `-fno-sanitize-runtime` 
in the end which seems like the best fit.


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

https://reviews.llvm.org/D65029

Files:
  clang/include/clang/Driver/Options.td
  clang/include/clang/Driver/SanitizerArgs.h
  clang/lib/Driver/SanitizerArgs.cpp
  clang/test/Driver/sanitizer-ld.c

Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -28,6 +28,14 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-SHARED-ASAN-LINUX %s
 
+// RUN: %clang -fsanitize=address -fno-sanitize-runtime %s -### -o %t.o 2>&1 \
+// RUN: -target x86_64-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-ASAN-NO-RUNTIME-LINUX %s
+//
+// CHECK-ASAN-NO-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64.a"
+
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address \
 // RUN: -shared-libsan -static-libsan -shared-libasan \
Index: clang/lib/Driver/SanitizerArgs.cpp
===
--- clang/lib/Driver/SanitizerArgs.cpp
+++ clang/lib/Driver/SanitizerArgs.cpp
@@ -208,7 +208,7 @@
   // All of these include ubsan.
   if (needsAsanRt() || needsMsanRt() || needsHwasanRt() || needsTsanRt() ||
   needsDfsanRt() || needsLsanRt() || needsCfiDiagRt() ||
-  (needsScudoRt() && !requiresMinimalRuntime()))
+  (needsScudoRt() && !requiresMinimalRuntime()) || !SanitizerRuntime)
 return false;
 
   return (Sanitizers.Mask & NeedsUbsanRt & ~TrapSanitizers.Mask) ||
@@ -217,12 +217,12 @@
 
 bool SanitizerArgs::needsCfiRt() const {
   return !(Sanitizers.Mask & SanitizerKind::CFI & ~TrapSanitizers.Mask) &&
- CfiCrossDso && !ImplicitCfiRuntime;
+ CfiCrossDso && !ImplicitCfiRuntime && SanitizerRuntime;
 }
 
 bool SanitizerArgs::needsCfiDiagRt() const {
   return (Sanitizers.Mask & SanitizerKind::CFI & ~TrapSanitizers.Mask) &&
- CfiCrossDso && !ImplicitCfiRuntime;
+ CfiCrossDso && !ImplicitCfiRuntime && SanitizerRuntime;
 }
 
 bool SanitizerArgs::requiresPIE() const {
@@ -265,6 +265,10 @@
   Args.hasFlag(options::OPT_fsanitize_minimal_runtime,
options::OPT_fno_sanitize_minimal_runtime, MinimalRuntime);
 
+  SanitizerRuntime =
+  Args.hasFlag(options::OPT_fsanitize_runtime,
+   options::OPT_fno_sanitize_runtime, SanitizerRuntime);
+
   // The object size sanitizer should not be enabled at -O0.
   Arg *OptLevel = Args.getLastArg(options::OPT_O_Group);
   bool RemoveObjectSizeAtO0 =
Index: clang/include/clang/Driver/SanitizerArgs.h
===
--- clang/include/clang/Driver/SanitizerArgs.h
+++ clang/include/clang/Driver/SanitizerArgs.h
@@ -49,6 +49,7 @@
   bool TsanFuncEntryExit = true;
   bool TsanAtomics = true;
   bool MinimalRuntime = false;
+  bool SanitizerRuntime = true;
   // True if cross-dso CFI support if provided by the system (i.e. Android).
   bool ImplicitCfiRuntime = false;
 
@@ -58,24 +59,40 @@
 
   bool needsSharedRt() const { return SharedRuntime; }
 
-  bool needsAsanRt() const { return Sanitizers.has(SanitizerKind::Address); }
-  bool needsHwasanRt() const { return Sanitizers.has(SanitizerKind::HWAddress); }
-  bool needsTsanRt() const { return Sanitizers.has(SanitizerKind::Thread); }
-  bool needsMsanRt() const { return Sanitizers.has(SanitizerKind::Memory); }
-  bool needsFuzzer() const { return Sanitizers.has(SanitizerKind::Fuzzer); }
+  bool needsAsanRt() const {
+return Sanitizers.has(SanitizerKind::Address) && SanitizerRuntime;
+  }
+  bool needsHwasanRt() const {
+return Sanitizers.has(SanitizerKind::HWAddress) && SanitizerRuntime;
+  }
+  bool needsTsanRt() const {
+return Sanitizers.has(SanitizerKind::Thread) && SanitizerRuntime;
+  }
+  bool needsMsanRt() const {
+return Sanitizers.has(SanitizerKind::Memory) && SanitizerRuntime;
+  }
+  bool needsFuzzer() const {
+return Sanitizers.has(SanitizerKind::Fuzzer) && SanitizerRuntime;
+  }
   bool needsLsanRt() const {
 return Sanitizers.has(SanitizerKind::Leak) &&
!Sanitizers.has(SanitizerKind::Address) &&
-   !Sanitizers.has(SanitizerKind::HWAddress);
+   !Sanitizers.has(SanitizerKind::HWAddress) && SanitizerRuntime;
   }
   bool needsUbsanRt() const;
-  bool requiresMinimalRuntime() const { return MinimalRuntime; }
-  bool needsDfsanRt() const { return Sanitizers.has(SanitizerKind::DataFlow); }
-  bool needsSafeStackRt() const { return SafeStackRuntime; }
+  bool requiresMinimalRuntime() 

[PATCH] D65029: [Driver] Support for disabling sanitizer runtime linking

2019-08-04 Thread Petr Hosek via Phabricator via cfe-commits
phosek updated this revision to Diff 213233.
phosek added a comment.

I've decided to go with the original `-f[no-]sanitize-link-deps`: 
`-fsanitize-minimal-runtime` is also a cc1 flag which affects codegen, 
`-fshared-libsan` and `-fstatic-libsan` are orthogonal, e.g. it's possible to 
have minimal shared or static runtime, so these really need to be different 
flags.


Repository:
  rC Clang

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

https://reviews.llvm.org/D65029

Files:
  clang/include/clang/Driver/Options.td
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/sanitizer-ld.c


Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -843,3 +843,19 @@
 // CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "-ldl"
 // CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "--export-dynamic"
 // CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "--dynamic-list"
+
+// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
+// RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address 
-fsanitize-link-deps \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-SANITIZE-LINK-DEPS %s
+//
+// CHECK-SANITIZE-LINK-DEPS: libclang_rt.asan-i386.a"
+
+// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
+// RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address 
-fno-sanitize-link-deps \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-NO-SANITIZE-LINK-DEPS %s
+//
+// CHECK-NO-SANITIZE-LINK-DEPS-NOT: libclang_rt.asan-i386.a"
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -701,6 +701,10 @@
 // C runtime, etc). Returns true if sanitizer system deps need to be linked in.
 bool tools::addSanitizerRuntimes(const ToolChain , const ArgList ,
  ArgStringList ) {
+  if (!Args.hasFlag(options::OPT_fsanitize_link_deps,
+options::OPT_fno_sanitize_link_deps, true))
+return false;
+
   SmallVector SharedRuntimes, StaticRuntimes,
   NonWholeStaticRuntimes, HelperStaticRuntimes, RequiredSymbols;
   collectSanitizerRuntimes(TC, Args, SharedRuntimes, StaticRuntimes,
Index: clang/include/clang/Driver/Options.td
===
--- clang/include/clang/Driver/Options.td
+++ clang/include/clang/Driver/Options.td
@@ -1088,6 +1088,15 @@
   HelpText<"Strip (or keep only, if negative) a given number of path 
components "
"when emitting check metadata.">;
 
+def fsanitize_link_deps : Flag<["-"], "fsanitize-link-deps">,
+  Group,
+  Flags<[CC1Option]>,
+  HelpText<"Enable linking of sanitizer dependencies">;
+def fno_sanitize_link_deps : Flag<["-"], "fno-sanitize-link-deps">,
+ Group,
+ Flags<[CC1Option]>,
+ HelpText<"Disable linking of sanitizer 
dependencies">;
+
 } // end -f[no-]sanitize* flags
 
 def funsafe_math_optimizations : Flag<["-"], "funsafe-math-optimizations">,


Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -843,3 +843,19 @@
 // CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "-ldl"
 // CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "--export-dynamic"
 // CHECK-DSO-SHARED-HWASAN-AARCH64-LINUX-NOT: "--dynamic-list"
+
+// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
+// RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -fsanitize-link-deps \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-SANITIZE-LINK-DEPS %s
+//
+// CHECK-SANITIZE-LINK-DEPS: libclang_rt.asan-i386.a"
+
+// RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
+// RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -fno-sanitize-link-deps \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-NO-SANITIZE-LINK-DEPS %s
+//
+// CHECK-NO-SANITIZE-LINK-DEPS-NOT: libclang_rt.asan-i386.a"
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -701,6 +701,10 @@
 // C runtime, etc). Returns true if sanitizer system deps need to be linked in.
 bool