[clang] [NFC][AMDGPU][Driver] Move 'shouldSkipSanitizeOption' utility to AMDGPU. (PR #107997)

2024-09-10 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 created 
https://github.com/llvm/llvm-project/pull/107997

HIPAMDToolChain and AMDGPUToolChain both depends on the 
"shouldSkipSanitizeOption" api to sanitize/not sanitize device code.

>From 4a9c7b7412f4f8f03d69b255ce1e7b46877db4fd Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Tue, 10 Sep 2024 15:53:28 +0530
Subject: [PATCH] [NFC][AMDGPU][Driver] Move 'shouldSkipSanitizeOption' utility
 to AMDGPU.

HIPAMDToolChain and AMDGPUToolChain both depends on the
"shouldSkipSanitizeOption" api to sanitize/not sanitize device code.
---
 clang/lib/Driver/ToolChains/AMDGPU.cpp | 36 +
 clang/lib/Driver/ToolChains/AMDGPU.h   |  6 +
 clang/lib/Driver/ToolChains/HIPAMD.cpp | 37 --
 3 files changed, 42 insertions(+), 37 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index a788aba57546c8..74f70573c5feb8 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -1054,3 +1054,39 @@ ROCMToolChain::getCommonDeviceLibNames(const 
llvm::opt::ArgList &DriverArgs,
   DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt,
   FastRelaxedMath, CorrectSqrt, ABIVer, isOpenMP);
 }
+
+bool AMDGPUToolChain::shouldSkipSanitizeOption(
+const ToolChain &TC, const llvm::opt::ArgList &DriverArgs,
+StringRef TargetID, const llvm::opt::Arg *A) const {
+  // For actions without targetID, do nothing.
+  if (TargetID.empty())
+return false;
+  Option O = A->getOption();
+  if (!O.matches(options::OPT_fsanitize_EQ))
+return false;
+
+  if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
+  options::OPT_fno_gpu_sanitize, true))
+return true;
+
+  auto &Diags = TC.getDriver().getDiags();
+
+  // For simplicity, we only allow -fsanitize=address
+  SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false);
+  if (K != SanitizerKind::Address)
+return true;
+
+  llvm::StringMap FeatureMap;
+  auto OptionalGpuArch = parseTargetID(TC.getTriple(), TargetID, &FeatureMap);
+
+  assert(OptionalGpuArch && "Invalid Target ID");
+  (void)OptionalGpuArch;
+  auto Loc = FeatureMap.find("xnack");
+  if (Loc == FeatureMap.end() || !Loc->second) {
+Diags.Report(
+clang::diag::warn_drv_unsupported_option_for_offload_arch_req_feature)
+<< A->getAsString(DriverArgs) << TargetID << "xnack+";
+return true;
+  }
+  return false;
+}
\ No newline at end of file
diff --git a/clang/lib/Driver/ToolChains/AMDGPU.h 
b/clang/lib/Driver/ToolChains/AMDGPU.h
index 7e70dae8ce152e..a9b4552a1f91a4 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.h
+++ b/clang/lib/Driver/ToolChains/AMDGPU.h
@@ -97,6 +97,12 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUToolChain : public 
Generic_ELF {
   /// Needed for translating LTO options.
   const char *getDefaultLinker() const override { return "ld.lld"; }
 
+  /// Should skip sanitize options.
+  bool shouldSkipSanitizeOption(const ToolChain &TC,
+const llvm::opt::ArgList &DriverArgs,
+StringRef TargetID,
+const llvm::opt::Arg *A) const;
+
   /// Uses amdgpu-arch tool to get arch of the system GPU. Will return error
   /// if unable to find one.
   virtual Expected>
diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp 
b/clang/lib/Driver/ToolChains/HIPAMD.cpp
index cbb8fab69a316d..bae05cc0bb7353 100644
--- a/clang/lib/Driver/ToolChains/HIPAMD.cpp
+++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp
@@ -36,43 +36,6 @@ using namespace llvm::opt;
 #define NULL_FILE "/dev/null"
 #endif
 
-static bool shouldSkipSanitizeOption(const ToolChain &TC,
- const llvm::opt::ArgList &DriverArgs,
- StringRef TargetID,
- const llvm::opt::Arg *A) {
-  // For actions without targetID, do nothing.
-  if (TargetID.empty())
-return false;
-  Option O = A->getOption();
-  if (!O.matches(options::OPT_fsanitize_EQ))
-return false;
-
-  if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
-  options::OPT_fno_gpu_sanitize, true))
-return true;
-
-  auto &Diags = TC.getDriver().getDiags();
-
-  // For simplicity, we only allow -fsanitize=address
-  SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false);
-  if (K != SanitizerKind::Address)
-return true;
-
-  llvm::StringMap FeatureMap;
-  auto OptionalGpuArch = parseTargetID(TC.getTriple(), TargetID, &FeatureMap);
-
-  assert(OptionalGpuArch && "Invalid Target ID");
-  (void)OptionalGpuArch;
-  auto Loc = FeatureMap.find("xnack");
-  if (Loc == FeatureMap.end() || !Loc->second) {
-Diags.Report(
-clang::diag::warn_drv_unsupported_option_for_offload_arch_req_feature)
-<< A->getAsString(DriverArgs) << TargetID << "xnack+";
-return true;
-  }
-  return false;
-}
-
 void

[clang] [NFC][AMDGPU][Driver] Move 'shouldSkipSanitizeOption' utility to AMDGPU. (PR #107997)

2024-09-10 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/107997

>From 01e86b92efbb311ddc1a4383d0c63c23f757e33f Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Tue, 10 Sep 2024 15:53:28 +0530
Subject: [PATCH] [NFC][AMDGPU][Driver] Move 'shouldSkipSanitizeOption' API to
 AMDGPU.

HIPAMDToolChain and AMDGPUOpenMPToolChain both depends on the
"shouldSkipSanitizeOption" api to sanitize/not sanitize device code.
---
 clang/lib/Driver/ToolChains/AMDGPU.cpp | 36 +
 clang/lib/Driver/ToolChains/AMDGPU.h   |  6 +
 clang/lib/Driver/ToolChains/HIPAMD.cpp | 37 --
 3 files changed, 42 insertions(+), 37 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index a788aba57546c8..74f70573c5feb8 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -1054,3 +1054,39 @@ ROCMToolChain::getCommonDeviceLibNames(const 
llvm::opt::ArgList &DriverArgs,
   DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt,
   FastRelaxedMath, CorrectSqrt, ABIVer, isOpenMP);
 }
+
+bool AMDGPUToolChain::shouldSkipSanitizeOption(
+const ToolChain &TC, const llvm::opt::ArgList &DriverArgs,
+StringRef TargetID, const llvm::opt::Arg *A) const {
+  // For actions without targetID, do nothing.
+  if (TargetID.empty())
+return false;
+  Option O = A->getOption();
+  if (!O.matches(options::OPT_fsanitize_EQ))
+return false;
+
+  if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
+  options::OPT_fno_gpu_sanitize, true))
+return true;
+
+  auto &Diags = TC.getDriver().getDiags();
+
+  // For simplicity, we only allow -fsanitize=address
+  SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false);
+  if (K != SanitizerKind::Address)
+return true;
+
+  llvm::StringMap FeatureMap;
+  auto OptionalGpuArch = parseTargetID(TC.getTriple(), TargetID, &FeatureMap);
+
+  assert(OptionalGpuArch && "Invalid Target ID");
+  (void)OptionalGpuArch;
+  auto Loc = FeatureMap.find("xnack");
+  if (Loc == FeatureMap.end() || !Loc->second) {
+Diags.Report(
+clang::diag::warn_drv_unsupported_option_for_offload_arch_req_feature)
+<< A->getAsString(DriverArgs) << TargetID << "xnack+";
+return true;
+  }
+  return false;
+}
\ No newline at end of file
diff --git a/clang/lib/Driver/ToolChains/AMDGPU.h 
b/clang/lib/Driver/ToolChains/AMDGPU.h
index 7e70dae8ce152e..a9b4552a1f91a4 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.h
+++ b/clang/lib/Driver/ToolChains/AMDGPU.h
@@ -97,6 +97,12 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUToolChain : public 
Generic_ELF {
   /// Needed for translating LTO options.
   const char *getDefaultLinker() const override { return "ld.lld"; }
 
+  /// Should skip sanitize options.
+  bool shouldSkipSanitizeOption(const ToolChain &TC,
+const llvm::opt::ArgList &DriverArgs,
+StringRef TargetID,
+const llvm::opt::Arg *A) const;
+
   /// Uses amdgpu-arch tool to get arch of the system GPU. Will return error
   /// if unable to find one.
   virtual Expected>
diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp 
b/clang/lib/Driver/ToolChains/HIPAMD.cpp
index cbb8fab69a316d..bae05cc0bb7353 100644
--- a/clang/lib/Driver/ToolChains/HIPAMD.cpp
+++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp
@@ -36,43 +36,6 @@ using namespace llvm::opt;
 #define NULL_FILE "/dev/null"
 #endif
 
-static bool shouldSkipSanitizeOption(const ToolChain &TC,
- const llvm::opt::ArgList &DriverArgs,
- StringRef TargetID,
- const llvm::opt::Arg *A) {
-  // For actions without targetID, do nothing.
-  if (TargetID.empty())
-return false;
-  Option O = A->getOption();
-  if (!O.matches(options::OPT_fsanitize_EQ))
-return false;
-
-  if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
-  options::OPT_fno_gpu_sanitize, true))
-return true;
-
-  auto &Diags = TC.getDriver().getDiags();
-
-  // For simplicity, we only allow -fsanitize=address
-  SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false);
-  if (K != SanitizerKind::Address)
-return true;
-
-  llvm::StringMap FeatureMap;
-  auto OptionalGpuArch = parseTargetID(TC.getTriple(), TargetID, &FeatureMap);
-
-  assert(OptionalGpuArch && "Invalid Target ID");
-  (void)OptionalGpuArch;
-  auto Loc = FeatureMap.find("xnack");
-  if (Loc == FeatureMap.end() || !Loc->second) {
-Diags.Report(
-clang::diag::warn_drv_unsupported_option_for_offload_arch_req_feature)
-<< A->getAsString(DriverArgs) << TargetID << "xnack+";
-return true;
-  }
-  return false;
-}
-
 void AMDGCN::Linker::constructLlvmLinkCommand(Compilation &C,
  const JobAction &JA,

[clang] [NFC][AMDGPU][Driver] Move 'shouldSkipSanitizeOption' utility to AMDGPU. (PR #107997)

2024-09-10 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/107997

>From 4c6b015445e5820d8b09db0d3b4dba23f1413c77 Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Tue, 10 Sep 2024 15:53:28 +0530
Subject: [PATCH] [NFC][AMDGPU][Driver] Move 'shouldSkipSanitizeOption' utility
 to AMDGPU.

HIPAMDToolChain and AMDGPUOpenMPToolChain both depends on the
"shouldSkipSanitizeOption" api to sanitize/not sanitize device code.
---
 clang/lib/Driver/ToolChains/AMDGPU.cpp | 36 +
 clang/lib/Driver/ToolChains/AMDGPU.h   |  6 +
 clang/lib/Driver/ToolChains/HIPAMD.cpp | 37 --
 3 files changed, 42 insertions(+), 37 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index a788aba57546c8..74f70573c5feb8 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -1054,3 +1054,39 @@ ROCMToolChain::getCommonDeviceLibNames(const 
llvm::opt::ArgList &DriverArgs,
   DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt,
   FastRelaxedMath, CorrectSqrt, ABIVer, isOpenMP);
 }
+
+bool AMDGPUToolChain::shouldSkipSanitizeOption(
+const ToolChain &TC, const llvm::opt::ArgList &DriverArgs,
+StringRef TargetID, const llvm::opt::Arg *A) const {
+  // For actions without targetID, do nothing.
+  if (TargetID.empty())
+return false;
+  Option O = A->getOption();
+  if (!O.matches(options::OPT_fsanitize_EQ))
+return false;
+
+  if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
+  options::OPT_fno_gpu_sanitize, true))
+return true;
+
+  auto &Diags = TC.getDriver().getDiags();
+
+  // For simplicity, we only allow -fsanitize=address
+  SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false);
+  if (K != SanitizerKind::Address)
+return true;
+
+  llvm::StringMap FeatureMap;
+  auto OptionalGpuArch = parseTargetID(TC.getTriple(), TargetID, &FeatureMap);
+
+  assert(OptionalGpuArch && "Invalid Target ID");
+  (void)OptionalGpuArch;
+  auto Loc = FeatureMap.find("xnack");
+  if (Loc == FeatureMap.end() || !Loc->second) {
+Diags.Report(
+clang::diag::warn_drv_unsupported_option_for_offload_arch_req_feature)
+<< A->getAsString(DriverArgs) << TargetID << "xnack+";
+return true;
+  }
+  return false;
+}
\ No newline at end of file
diff --git a/clang/lib/Driver/ToolChains/AMDGPU.h 
b/clang/lib/Driver/ToolChains/AMDGPU.h
index 7e70dae8ce152e..a9b4552a1f91a4 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.h
+++ b/clang/lib/Driver/ToolChains/AMDGPU.h
@@ -97,6 +97,12 @@ class LLVM_LIBRARY_VISIBILITY AMDGPUToolChain : public 
Generic_ELF {
   /// Needed for translating LTO options.
   const char *getDefaultLinker() const override { return "ld.lld"; }
 
+  /// Should skip sanitize options.
+  bool shouldSkipSanitizeOption(const ToolChain &TC,
+const llvm::opt::ArgList &DriverArgs,
+StringRef TargetID,
+const llvm::opt::Arg *A) const;
+
   /// Uses amdgpu-arch tool to get arch of the system GPU. Will return error
   /// if unable to find one.
   virtual Expected>
diff --git a/clang/lib/Driver/ToolChains/HIPAMD.cpp 
b/clang/lib/Driver/ToolChains/HIPAMD.cpp
index cbb8fab69a316d..bae05cc0bb7353 100644
--- a/clang/lib/Driver/ToolChains/HIPAMD.cpp
+++ b/clang/lib/Driver/ToolChains/HIPAMD.cpp
@@ -36,43 +36,6 @@ using namespace llvm::opt;
 #define NULL_FILE "/dev/null"
 #endif
 
-static bool shouldSkipSanitizeOption(const ToolChain &TC,
- const llvm::opt::ArgList &DriverArgs,
- StringRef TargetID,
- const llvm::opt::Arg *A) {
-  // For actions without targetID, do nothing.
-  if (TargetID.empty())
-return false;
-  Option O = A->getOption();
-  if (!O.matches(options::OPT_fsanitize_EQ))
-return false;
-
-  if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
-  options::OPT_fno_gpu_sanitize, true))
-return true;
-
-  auto &Diags = TC.getDriver().getDiags();
-
-  // For simplicity, we only allow -fsanitize=address
-  SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false);
-  if (K != SanitizerKind::Address)
-return true;
-
-  llvm::StringMap FeatureMap;
-  auto OptionalGpuArch = parseTargetID(TC.getTriple(), TargetID, &FeatureMap);
-
-  assert(OptionalGpuArch && "Invalid Target ID");
-  (void)OptionalGpuArch;
-  auto Loc = FeatureMap.find("xnack");
-  if (Loc == FeatureMap.end() || !Loc->second) {
-Diags.Report(
-clang::diag::warn_drv_unsupported_option_for_offload_arch_req_feature)
-<< A->getAsString(DriverArgs) << TargetID << "xnack+";
-return true;
-  }
-  return false;
-}
-
 void AMDGCN::Linker::constructLlvmLinkCommand(Compilation &C,
  const JobAction &JA,

[clang] [NFC][AMDGPU][Driver] Move 'shouldSkipSanitizeOption' utility to AMDGPU. (PR #107997)

2024-09-10 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 edited 
https://github.com/llvm/llvm-project/pull/107997
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [NFC][AMDGPU][Driver] Move 'shouldSkipSanitizeOption' utility to AMDGPU. (PR #107997)

2024-09-10 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 closed 
https://github.com/llvm/llvm-project/pull/107997
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-02-03 Thread Amit Kumar Pandey via cfe-commits

ampandey-1995 wrote:

ping

https://github.com/llvm/llvm-project/pull/124754
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-01-31 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/124754

>From 741fcf90830c6a30be851c43924e9ab95c40b8a7 Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Tue, 28 Jan 2025 15:15:01 +0530
Subject: [PATCH 1/3] [OpenMP][ASan] Enable ASan Instrumentation for
 AMDGPUOpenMPToolChain.

Enable device code ASan instrumentation for openmp offload applications
using option '-fsanitize=address'.
---
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp  | 16 -
 .../Driver/amdgpu-openmp-sanitize-options.c   | 58 +++
 2 files changed, 72 insertions(+), 2 deletions(-)
 create mode 100644 clang/test/Driver/amdgpu-openmp-sanitize-options.c

diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp 
b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
index 2b8917106afc14..243d9aac019498 100644
--- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
@@ -37,6 +37,16 @@ AMDGPUOpenMPToolChain::AMDGPUOpenMPToolChain(const Driver &D,
   // Lookup binaries into the driver directory, this is used to
   // discover the 'amdgpu-arch' executable.
   getProgramPaths().push_back(getDriver().Dir);
+  // Diagnose unsupported sanitizer options only once.
+  if (!Args.hasFlag(options::OPT_fgpu_sanitize, options::OPT_fno_gpu_sanitize,
+true))
+return;
+  for (auto *A : Args.filtered(options::OPT_fsanitize_EQ)) {
+SanitizerMask K = parseSanitizerValue(A->getValue(), 
/*AllowGroups=*/false);
+if (K != SanitizerKind::Address)
+  D.getDiags().Report(clang::diag::warn_drv_unsupported_option_for_target)
+  << A->getAsString(Args) << getTriple().str();
+  }
 }
 
 void AMDGPUOpenMPToolChain::addClangTargetOptions(
@@ -72,9 +82,11 @@ llvm::opt::DerivedArgList 
*AMDGPUOpenMPToolChain::TranslateArgs(
   const OptTable &Opts = getDriver().getOpts();
 
   if (DeviceOffloadKind == Action::OFK_OpenMP) {
-for (Arg *A : Args)
-  if (!llvm::is_contained(*DAL, A))
+for (Arg *A : Args) {
+  if (!shouldSkipSanitizeOption(*this, Args, BoundArch, A) &&
+  !llvm::is_contained(*DAL, A))
 DAL->append(A);
+}
 
 if (!DAL->hasArg(options::OPT_march_EQ)) {
   StringRef Arch = BoundArch;
diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c 
b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
new file mode 100644
index 00..03adeb8e6a7833
--- /dev/null
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -0,0 +1,58 @@
+// REQUIRES: x86-registered-target, amdgpu-registered-target
+
+// Fail on invalid ROCm Path.
+// RUN:   not %clang -### -fopenmp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
+// RUN:   | FileCheck --check-prefix=FAIL %s
+
+// Enable multiple sanitizer's apart from ASan with invalid rocm-path.
+// RUN:   not %clang -### -fopenmp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fsanitize=leak -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm-invalid -nogpuinc  %s 2>&1 \
+// RUN:   | FileCheck --check-prefixes=UNSUPPORTED,FAIL %s
+
+// Memory, Leak, UndefinedBehaviour and Thread Sanitizer are not supported.
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address 
-fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm -nogpuinc  %s 2>&1 \
+// RUN:   | FileCheck --check-prefix=UNSUPPORTED %s
+
+
+// ASan Enabled Test Cases
+// ASan enabled for amdgpu-arch [gfx908]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address 
-fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=NOXNACK,GPUSAN %s
+
+// ASan enabled for amdgpu-arch [gfx908:xnack-]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack- -fsanitize=address 
-fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=XNACKNEG,GPUSAN %s
+
+// ASan enabled for amdgpu-arch [gfx908:xnack+]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address 
-fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=GPUSAN %s
+
+// ASan Disabled Test Cases
+// ASan disabled for amdgpu-arch [gfx908]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address 
-fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=NOGPUSAN %s
+
+// ASan disabled for amdgpu-arch [gfx908:xnack-]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack- -fsanitize=address 
-fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=NOGPUSAN %s
+
+// ASan disabled for amdgpu-arch [gfx908:xnack+]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address 
-fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=NOGPUSAN %s
+
+// FAIL-DAG: error: cannot find ROCm device library for ABI version 5; provide 
its path via '--rocm-path' or '--rocm-device-lib-path', o

[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-02-04 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 edited 
https://github.com/llvm/llvm-project/pull/124754
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-02-04 Thread Amit Kumar Pandey via cfe-commits


@@ -1106,8 +1106,12 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption(
 
   // For simplicity, we only allow -fsanitize=address
   SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false);
-  if (K != SanitizerKind::Address)
+  if (K != SanitizerKind::Address) {

ampandey-1995 wrote:

Hi @Joseph , 

Does this patch resolves the above issue 
https://github.com/llvm/llvm-project/pull/125095. 

https://github.com/llvm/llvm-project/pull/124754
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-02-04 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 deleted 
https://github.com/llvm/llvm-project/pull/124754
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-02-04 Thread Amit Kumar Pandey via cfe-commits


@@ -1106,8 +1106,12 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption(
 
   // For simplicity, we only allow -fsanitize=address
   SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false);
-  if (K != SanitizerKind::Address)
+  if (K != SanitizerKind::Address) {

ampandey-1995 wrote:

Hi @Joseph , 

Does this patch resolves the above issue 
https://github.com/llvm/llvm-project/pull/125095. 

https://github.com/llvm/llvm-project/pull/124754
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-02-05 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 closed 
https://github.com/llvm/llvm-project/pull/124754
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-02-04 Thread Amit Kumar Pandey via cfe-commits


@@ -1106,8 +1106,12 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption(
 
   // For simplicity, we only allow -fsanitize=address
   SanitizerMask K = parseSanitizerValue(A->getValue(), /*AllowGroups=*/false);
-  if (K != SanitizerKind::Address)
+  if (K != SanitizerKind::Address) {

ampandey-1995 wrote:

Done.

Hi @yxsamliu & @jhuber6 , there is one complication with respect to OpenMP 
toolchain i.e ```AMDGPUOpenMPToolchain```.

I am seeing diagnoseUnsupportedSanitizers is getting called twice for 
AMDGPUOpenMP toolchain.

In ```Driver.cpp```  AMDGPUOpenMPToolchain objects are created twice.

**1. At line number 988.**
`#0  clang::driver::toolchains::ROCMToolChain::diagnoseUnsupportedSanitizers 
(this=0x7e1ff5c21900, Args=...) at 
/home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/ToolChains/AMDGPU.h:154
#1  0x5c2e0b53 in 
clang::driver::toolchains::AMDGPUOpenMPToolChain::AMDGPUOpenMPToolChain 
(this=0x7e1ff5c21900, D=..., Triple=..., HostTC=..., Args=...) at 
/home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp:41


  #2  0x5c22489b in 
std::make_unique (__parameter_pack#0=..., 
__parameter_pack#1=..., __parameter_pack#2=..., __parameter_pack#3=...) at 
/usr/include/c++/12/bits/unique_ptr.h:1065  
 #3  0x5c1fa1ca in 
clang::driver::Driver::CreateOffloadingDeviceToolChains (this=0x7fff8420, 
C=..., Inputs=...) at 
/home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/Driver.cpp:988
#4  0x5c2006d6 in clang::driver::Driver::BuildCompilation 
(this=0x7fff8420, ArgList=...) at 
/home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/Driver.cpp:1780
#5  0x59685f47 in clang_main(int, char**, llvm::ToolContext const&) ()
#6  0x5969a83a in main ()`

**2. At line number 1058**
`#0  clang::driver::toolchains::ROCMToolChain::diagnoseUnsupportedSanitizers 
(this=0x7e1ff5c23100, Args=...) at 
/home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/ToolChains/AMDGPU.h:154
#1  0x5c2e0b53 in 
clang::driver::toolchains::AMDGPUOpenMPToolChain::AMDGPUOpenMPToolChain 
(this=0x7e1ff5c23100, D=..., Triple=..., HostTC=..., Args=...) at 
/home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp:41


  #2  0x5c22489b in 
std::make_unique (__parameter_pack#0=..., 
__parameter_pack#1=..., __parameter_pack#2=..., __parameter_pack#3=...) at 
/usr/include/c++/12/bits/unique_ptr.h:1065  
 #3  0x5c1fad00 in 
clang::driver::Driver::CreateOffloadingDeviceToolChains (this=0x7fff8420, 
C=..., Inputs=...) at 
/home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/Driver.cpp:1058
#4  0x5c2006d6 in clang::driver::Driver::BuildCompilation 
(this=0x7fff8420, ArgList=...) at 
/home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/Driver.cpp:1780
#5  0x59685f47 in clang_main(int, char**, llvm::ToolContext const&) ()
#6  0x5969a83a in main ()`

With Hip there is only one  HIPAMD toolchain.

`#0  clang::driver::toolchains::ROCMToolChain::diagnoseUnsupportedSanitizers 
(this=0x7e1ff5c21900, Args=...) at 
/home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/ToolChains/AMDGPU.h:154
#1  0x5c3e4727 in 
clang::driver::toolchains::HIPAMDToolChain::HIPAMDToolChain 
(this=0x7e1ff5c21900, D=..., Triple=..., HostTC=..., Args=...) at 
/home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/ToolChains/HIPAMD.cpp:220
#2  0x5c23278a in 
std::make_unique (__parameter_pack#0=..., 
__parameter_pack#1=..., __parameter_pack#2=..., __parameter_pack#3=...) at 
/usr/include/c++/12/bits/unique_ptr.h:1065
#3  0x5c21df4c in clang::driver::Driver::getOffloadingDeviceToolChain 
(this=0x7fff8400, Args=..., Target=..., HostTC=..., 
TargetDeviceOffloadKind=@0x7fff78f0: clang::driver::Action::OFK_HIP) at 
/home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/Driver.cpp:6817
#4  0x5c1f9b47 in 
clang::driver::Driver::CreateOffloadingDeviceToolChains (this=0x7fff8400, 
C=..., Inputs=...) at 
/home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/Driver.cpp:922
#5  0x5c2006d6 in clang::driver::Driver::BuildCompilation 
(this=0x7fff8400, ArgList=...) at 
/home/ampandey/trunk-toolchain/src-home/llvm-project/clang/lib/Driver/Driver.cpp:1780
#6  0x59685f47 in clang_main(

[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-02-04 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 edited 
https://github.com/llvm/llvm-project/pull/124754
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-02-04 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 edited 
https://github.com/llvm/llvm-project/pull/124754
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-02-04 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 edited 
https://github.com/llvm/llvm-project/pull/124754
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-02-04 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 edited 
https://github.com/llvm/llvm-project/pull/124754
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-02-04 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 edited 
https://github.com/llvm/llvm-project/pull/124754
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-02-04 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 edited 
https://github.com/llvm/llvm-project/pull/124754
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-02-04 Thread Amit Kumar Pandey via cfe-commits


@@ -71,10 +71,10 @@ llvm::opt::DerivedArgList 
*AMDGPUOpenMPToolChain::TranslateArgs(
 
   const OptTable &Opts = getDriver().getOpts();
 
-  for (Arg *A : Args) {
-if (!llvm::is_contained(*DAL, A))
+  for (Arg *A : Args)
+if (!shouldSkipSanitizeOption(*this, Args, BoundArch, A) &&

ampandey-1995 wrote:

Currently I think the  scope of ```shouldSkipSanitizeOption``` is limited to 
AMDGPU Derived Toolchains only. 

https://github.com/llvm/llvm-project/pull/124754
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP. (PR #126186)

2025-02-09 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/126186

>From 666f907b6b1c37d515a72d0bb1278399575db817 Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Fri, 7 Feb 2025 12:11:23 +0530
Subject: [PATCH] [Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP.

ASan gpu runtime (asanrtl.bc) linking is dependent on 'ockl.bc'. Link
'ockl.bc' only when ASan is enabled for openmp amdgpu offloading
application.
---
 clang/lib/Driver/ToolChains/AMDGPU.cpp| 15 +++--
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp  |  2 +-
 .../Driver/amdgpu-openmp-sanitize-options.c   | 55 +--
 clang/test/Driver/hip-sanitize-options.hip|  2 +-
 4 files changed, 37 insertions(+), 37 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index e66e5a32e58acdc..202198e96c01278 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -1014,7 +1014,12 @@ RocmInstallationDetector::getCommonBitcodeLibs(
 bool isOpenMP = false) const {
   llvm::SmallVector BCLibs;
 
-  auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); };
+  // GPU Sanitizer currently only supports ASan and is enabled through host
+  // ASan.
+  auto GPUSanEnabled = [GPUSan]() {
+return std::get(GPUSan) &&
+   std::get(GPUSan).needsAsanRt();
+  };
   auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib,
   bool Internalize = true) {
 BCLib.ShouldInternalize = Internalize;
@@ -1022,9 +1027,7 @@ RocmInstallationDetector::getCommonBitcodeLibs(
   };
   auto AddSanBCLibs = [&]() {
 if (GPUSanEnabled()) {
-  auto SanArgs = std::get(GPUSan);
-  if (SanArgs.needsAsanRt())
-AddBCLib(getAsanRTLPath(), false);
+  AddBCLib(getAsanRTLPath(), false);
 }
   };
 
@@ -1066,7 +1069,7 @@ ROCMToolChain::getCommonDeviceLibNames(const 
llvm::opt::ArgList &DriverArgs,
   // them all?
   std::tuple GPUSan(
   DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
- options::OPT_fno_gpu_sanitize, false),
+ options::OPT_fno_gpu_sanitize, true),
   getSanitizerArgs(DriverArgs));
   bool DAZ = DriverArgs.hasFlag(options::OPT_fgpu_flush_denormals_to_zero,
 options::OPT_fno_gpu_flush_denormals_to_zero,
@@ -1099,7 +1102,7 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption(
 return false;
 
   if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
-  options::OPT_fno_gpu_sanitize, false))
+  options::OPT_fno_gpu_sanitize, true))
 return true;
 
   auto &Diags = TC.getDriver().getDiags();
diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp 
b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
index 00bf9c7338edd11..aba79f5fa6fa7b3 100644
--- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
@@ -68,7 +68,7 @@ llvm::opt::DerivedArgList 
*AMDGPUOpenMPToolChain::TranslateArgs(
 Action::OffloadKind DeviceOffloadKind) const {
   DerivedArgList *DAL =
   HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind);
-  if (!DAL)
+  if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ))
 DAL = new DerivedArgList(Args.getBaseArgs());
 
   const OptTable &Opts = getDriver().getOpts();
diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c 
b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
index c28a758bfc0c5e8..3fb864152766674 100644
--- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -1,5 +1,3 @@
-// REQUIRES: x86-registered-target, amdgpu-registered-target
-
 // Fail on invalid ROCm Path.
 // RUN:   not %clang -no-canonical-prefixes -### 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
 // RUN:   | FileCheck --check-prefix=FAIL %s
@@ -13,38 +11,40 @@
 // RUN:   | FileCheck --check-prefix=NOTSUPPORTED %s
 
 // GPU ASan Enabled Test Cases
-// ASan enabled for amdgpu-arch [gfx908]
-// RUN:   %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu 
-fopenmp=libomp --offload-arch=gfx908 -fsanitize=address -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm %s 2>&1 \
-// RUN:   | FileCheck -check-prefixes=NOXNACK,GPUSAN %s
-
-// GPU ASan enabled for amdgpu-arch [gfx908:xnack-]
-// RUN:   %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu 
-fopenmp=libomp --offload-arch=gfx908:xnack- -fsanitize=address -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm %s 2>&1 \
-// RUN:   | FileCheck -check-prefixes=XNACKNEG,GPUSAN %s
 
 // GPU ASan enabled for amdgpu-arch [gfx908:xnack+]
 // RUN:   %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu 
-fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm %s 2>&1 \
-// RUN:   | FileCheck -ch

[clang] [Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP. (PR #126186)

2025-02-10 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 closed 
https://github.com/llvm/llvm-project/pull/126186
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)

2025-02-06 Thread Amit Kumar Pandey via cfe-commits


@@ -950,6 +950,11 @@ void ROCMToolChain::addClangTargetOptions(
 ABIVer))
 return;
 
+  std::tuple GPUSan(
+  DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
+ options::OPT_fno_gpu_sanitize, true),

ampandey-1995 wrote:

Yes , sorry one misstep is here is that GPUSan object created while not 
checking that ```-fsanitize=address```  available. This GPUSan should be a 
pointer and should be initialized when ```-fsanitize=address``` is detected on 
Args.

https://github.com/llvm/llvm-project/pull/123922
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)

2025-02-06 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 edited 
https://github.com/llvm/llvm-project/pull/123922
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [AMDGPU] Do not enable GPU sanitizers by default (PR #126090)

2025-02-06 Thread Amit Kumar Pandey via cfe-commits

ampandey-1995 wrote:

Accepting this PR right now , will come with fix 
https://github.com/llvm/llvm-project/pull/123922/files#r1945159951 soon

https://github.com/llvm/llvm-project/pull/126090
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [NFC] Fix Lit test 'amdgpu-openmp-sanitize-options.c'. (PR #125857)

2025-02-05 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 edited 
https://github.com/llvm/llvm-project/pull/125857
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [NFC] Fix Lit test 'amdgpu-openmp-sanitize-options.c'. (PR #125857)

2025-02-05 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 closed 
https://github.com/llvm/llvm-project/pull/125857
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP. (PR #126186)

2025-02-07 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/126186

>From 030e486cbd0cff569ea17028ab22dbd42edf8e5a Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Fri, 7 Feb 2025 12:11:23 +0530
Subject: [PATCH] [Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP.

ASan gpu runtime (asanrtl.bc) linking is dependent on 'ockl.bc'. Link
'ockl.bc' only when ASan is enabled for openmp amdgpu offloading
application.
---
 clang/lib/Driver/ToolChains/AMDGPU.cpp | 13 -
 clang/test/Driver/amdgpu-openmp-sanitize-options.c |  5 +
 clang/test/Driver/hip-sanitize-options.hip |  2 +-
 3 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index e66e5a32e58acdc..efa6c83538f34e2 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -1014,7 +1014,12 @@ RocmInstallationDetector::getCommonBitcodeLibs(
 bool isOpenMP = false) const {
   llvm::SmallVector BCLibs;
 
-  auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); };
+  // GPU Sanitizer currently only supports ASan and is enabled through host
+  // ASan.
+  auto GPUSanEnabled = [GPUSan]() {
+return std::get(GPUSan) &&
+   std::get(GPUSan).needsAsanRt();
+  };
   auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib,
   bool Internalize = true) {
 BCLib.ShouldInternalize = Internalize;
@@ -1022,8 +1027,6 @@ RocmInstallationDetector::getCommonBitcodeLibs(
   };
   auto AddSanBCLibs = [&]() {
 if (GPUSanEnabled()) {
-  auto SanArgs = std::get(GPUSan);
-  if (SanArgs.needsAsanRt())
 AddBCLib(getAsanRTLPath(), false);
 }
   };
@@ -1066,7 +1069,7 @@ ROCMToolChain::getCommonDeviceLibNames(const 
llvm::opt::ArgList &DriverArgs,
   // them all?
   std::tuple GPUSan(
   DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
- options::OPT_fno_gpu_sanitize, false),
+ options::OPT_fno_gpu_sanitize, true),
   getSanitizerArgs(DriverArgs));
   bool DAZ = DriverArgs.hasFlag(options::OPT_fgpu_flush_denormals_to_zero,
 options::OPT_fno_gpu_flush_denormals_to_zero,
@@ -1099,7 +1102,7 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption(
 return false;
 
   if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
-  options::OPT_fno_gpu_sanitize, false))
+  options::OPT_fno_gpu_sanitize, true))
 return true;
 
   auto &Diags = TC.getDriver().getDiags();
diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c 
b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
index c28a758bfc0c5e8..50fae71f369bbf2 100644
--- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -13,6 +13,11 @@
 // RUN:   | FileCheck --check-prefix=NOTSUPPORTED %s
 
 // GPU ASan Enabled Test Cases
+
+// GPU ASan enabled through -fsanitize=address flag for amdgpu-arch [gfx908]
+// RUN:   %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu 
-fopenmp=libomp --offload-arch=gfx908 -fsanitize=address 
--rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=NOXNACK,GPUSAN %s
+
 // ASan enabled for amdgpu-arch [gfx908]
 // RUN:   %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu 
-fopenmp=libomp --offload-arch=gfx908 -fsanitize=address -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm %s 2>&1 \
 // RUN:   | FileCheck -check-prefixes=NOXNACK,GPUSAN %s
diff --git a/clang/test/Driver/hip-sanitize-options.hip 
b/clang/test/Driver/hip-sanitize-options.hip
index 8a852867f5b3b34..8de0ee9e18426b6 100644
--- a/clang/test/Driver/hip-sanitize-options.hip
+++ b/clang/test/Driver/hip-sanitize-options.hip
@@ -1,5 +1,5 @@
 // RUN: %clang -### --target=x86_64-unknown-linux-gnu 
--offload-arch=gfx900:xnack+ \
-// RUN:   -fsanitize=address -fgpu-sanitize \
+// RUN:   -fsanitize=address \
 // RUN:   -nogpuinc --rocm-path=%S/Inputs/rocm \
 // RUN:   %s 2>&1 | FileCheck -check-prefixes=NORDC %s
 

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


[clang] [Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP. (PR #126186)

2025-02-06 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 created 
https://github.com/llvm/llvm-project/pull/126186

ASan gpu runtime (asanrtl.bc) linking is dependent on 'ockl.bc'. Link 'ockl.bc' 
only when ASan is enabled for openmp amdgpu offloading application.

>From a1a255fa2d14549deb9ebe780355f0adef00aff7 Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Fri, 7 Feb 2025 12:11:23 +0530
Subject: [PATCH] [Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP.

ASan gpu runtime (asanrtl.bc) linking is dependent on 'ockl.bc'. Link
'ockl.bc' only when ASan is enabled for openmp amdgpu offloading
application.
---
 clang/lib/Driver/ToolChains/AMDGPU.cpp | 11 ---
 clang/test/Driver/amdgpu-openmp-sanitize-options.c |  5 +
 clang/test/Driver/hip-sanitize-options.hip |  2 +-
 3 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index e66e5a32e58acdc..62247842bcdfa5a 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -1014,7 +1014,12 @@ RocmInstallationDetector::getCommonBitcodeLibs(
 bool isOpenMP = false) const {
   llvm::SmallVector BCLibs;
 
-  auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); };
+  // GPU Sanitizer currently only supports ASan and is enabled through host
+  // ASan.
+  auto GPUSanEnabled = [GPUSan]() {
+return std::get(GPUSan) &&
+   std::get(GPUSan).needsAsanRt();
+  };
   auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib,
   bool Internalize = true) {
 BCLib.ShouldInternalize = Internalize;
@@ -1066,7 +1071,7 @@ ROCMToolChain::getCommonDeviceLibNames(const 
llvm::opt::ArgList &DriverArgs,
   // them all?
   std::tuple GPUSan(
   DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
- options::OPT_fno_gpu_sanitize, false),
+ options::OPT_fno_gpu_sanitize, true),
   getSanitizerArgs(DriverArgs));
   bool DAZ = DriverArgs.hasFlag(options::OPT_fgpu_flush_denormals_to_zero,
 options::OPT_fno_gpu_flush_denormals_to_zero,
@@ -1099,7 +1104,7 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption(
 return false;
 
   if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
-  options::OPT_fno_gpu_sanitize, false))
+  options::OPT_fno_gpu_sanitize, true))
 return true;
 
   auto &Diags = TC.getDriver().getDiags();
diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c 
b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
index c28a758bfc0c5e8..50fae71f369bbf2 100644
--- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -13,6 +13,11 @@
 // RUN:   | FileCheck --check-prefix=NOTSUPPORTED %s
 
 // GPU ASan Enabled Test Cases
+
+// GPU ASan enabled through -fsanitize=address flag for amdgpu-arch [gfx908]
+// RUN:   %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu 
-fopenmp=libomp --offload-arch=gfx908 -fsanitize=address 
--rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=NOXNACK,GPUSAN %s
+
 // ASan enabled for amdgpu-arch [gfx908]
 // RUN:   %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu 
-fopenmp=libomp --offload-arch=gfx908 -fsanitize=address -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm %s 2>&1 \
 // RUN:   | FileCheck -check-prefixes=NOXNACK,GPUSAN %s
diff --git a/clang/test/Driver/hip-sanitize-options.hip 
b/clang/test/Driver/hip-sanitize-options.hip
index 8a852867f5b3b34..8de0ee9e18426b6 100644
--- a/clang/test/Driver/hip-sanitize-options.hip
+++ b/clang/test/Driver/hip-sanitize-options.hip
@@ -1,5 +1,5 @@
 // RUN: %clang -### --target=x86_64-unknown-linux-gnu 
--offload-arch=gfx900:xnack+ \
-// RUN:   -fsanitize=address -fgpu-sanitize \
+// RUN:   -fsanitize=address \
 // RUN:   -nogpuinc --rocm-path=%S/Inputs/rocm \
 // RUN:   %s 2>&1 | FileCheck -check-prefixes=NORDC %s
 

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


[clang] [Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP. (PR #126186)

2025-02-07 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/126186

>From 43433affa692b2690bc3dbb738ab5c76811e68e8 Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Fri, 7 Feb 2025 12:11:23 +0530
Subject: [PATCH] [Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP.

ASan gpu runtime (asanrtl.bc) linking is dependent on 'ockl.bc'. Link
'ockl.bc' only when ASan is enabled for openmp amdgpu offloading
application.
---
 clang/lib/Driver/ToolChains/AMDGPU.cpp| 15 +--
 .../test/Driver/amdgpu-openmp-sanitize-options.c  |  5 +
 clang/test/Driver/hip-sanitize-options.hip|  2 +-
 3 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index e66e5a32e58acdc..202198e96c01278 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -1014,7 +1014,12 @@ RocmInstallationDetector::getCommonBitcodeLibs(
 bool isOpenMP = false) const {
   llvm::SmallVector BCLibs;
 
-  auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); };
+  // GPU Sanitizer currently only supports ASan and is enabled through host
+  // ASan.
+  auto GPUSanEnabled = [GPUSan]() {
+return std::get(GPUSan) &&
+   std::get(GPUSan).needsAsanRt();
+  };
   auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib,
   bool Internalize = true) {
 BCLib.ShouldInternalize = Internalize;
@@ -1022,9 +1027,7 @@ RocmInstallationDetector::getCommonBitcodeLibs(
   };
   auto AddSanBCLibs = [&]() {
 if (GPUSanEnabled()) {
-  auto SanArgs = std::get(GPUSan);
-  if (SanArgs.needsAsanRt())
-AddBCLib(getAsanRTLPath(), false);
+  AddBCLib(getAsanRTLPath(), false);
 }
   };
 
@@ -1066,7 +1069,7 @@ ROCMToolChain::getCommonDeviceLibNames(const 
llvm::opt::ArgList &DriverArgs,
   // them all?
   std::tuple GPUSan(
   DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
- options::OPT_fno_gpu_sanitize, false),
+ options::OPT_fno_gpu_sanitize, true),
   getSanitizerArgs(DriverArgs));
   bool DAZ = DriverArgs.hasFlag(options::OPT_fgpu_flush_denormals_to_zero,
 options::OPT_fno_gpu_flush_denormals_to_zero,
@@ -1099,7 +1102,7 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption(
 return false;
 
   if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
-  options::OPT_fno_gpu_sanitize, false))
+  options::OPT_fno_gpu_sanitize, true))
 return true;
 
   auto &Diags = TC.getDriver().getDiags();
diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c 
b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
index c28a758bfc0c5e8..50fae71f369bbf2 100644
--- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -13,6 +13,11 @@
 // RUN:   | FileCheck --check-prefix=NOTSUPPORTED %s
 
 // GPU ASan Enabled Test Cases
+
+// GPU ASan enabled through -fsanitize=address flag for amdgpu-arch [gfx908]
+// RUN:   %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu 
-fopenmp=libomp --offload-arch=gfx908 -fsanitize=address 
--rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=NOXNACK,GPUSAN %s
+
 // ASan enabled for amdgpu-arch [gfx908]
 // RUN:   %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu 
-fopenmp=libomp --offload-arch=gfx908 -fsanitize=address -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm %s 2>&1 \
 // RUN:   | FileCheck -check-prefixes=NOXNACK,GPUSAN %s
diff --git a/clang/test/Driver/hip-sanitize-options.hip 
b/clang/test/Driver/hip-sanitize-options.hip
index 8a852867f5b3b34..8de0ee9e18426b6 100644
--- a/clang/test/Driver/hip-sanitize-options.hip
+++ b/clang/test/Driver/hip-sanitize-options.hip
@@ -1,5 +1,5 @@
 // RUN: %clang -### --target=x86_64-unknown-linux-gnu 
--offload-arch=gfx900:xnack+ \
-// RUN:   -fsanitize=address -fgpu-sanitize \
+// RUN:   -fsanitize=address \
 // RUN:   -nogpuinc --rocm-path=%S/Inputs/rocm \
 // RUN:   %s 2>&1 | FileCheck -check-prefixes=NORDC %s
 

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


[clang] [NFC] Fix Lit test 'amdgpu-openmp-sanitize-options.c'. (PR #125857)

2025-02-05 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 created 
https://github.com/llvm/llvm-project/pull/125857

Using 'compiler-rt' in 'LLVM_ENABLE_PROJECTS' causes the clang runtime 
libraries to be build and installed with arch suffix names i.e '*-.a' and 
'*-.so'.

>From 0fcf9f91a38d4f2131eefe6af6444aaf83328ba8 Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Wed, 5 Feb 2025 19:12:00 +0530
Subject: [PATCH] [NFC] Fix Lit test 'amdgpu-openmp-sanitize-options.c'.

Using 'compiler-rt' in 'LLVM_ENABLE_PROJECTS' causes the clang runtime
libraries to be build and installed with arch suffix names i.e
'*-.a' and '*-.so'.
---
 clang/test/Driver/amdgpu-openmp-sanitize-options.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c 
b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
index ac25d7fd802e1fb..49aae8bd42d3aae 100644
--- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -56,10 +56,10 @@
 // GPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "amdgcn-amd-amdhsa" 
"-aux-triple" "x86_64-unknown-linux-gnu".* "-emit-llvm-bc".* "-target-cpu" 
"(gfx908|gfx900)".* "-fopenmp".* "-fsanitize=address".* "-x" "c".*}}
 // GPUSAN: {{"[^"]*clang-offload-packager[^"]*" "-o".* 
"--image=file=.*.bc,triple=amdgcn-amd-amdhsa,arch=gfx908(:xnack\-|:xnack\+)?,kind=openmp(,feature=(\-xnack|\+xnack))?"}}
 // GPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* 
"-fopenmp".* "-fsanitize=address".* "-fopenmp-targets=amdgcn-amd-amdhsa".* "-x" 
"ir".*}}
-// GPUSAN: {{"[^"]*clang-linker-wrapper[^"]*" 
"--host-triple=x86_64-unknown-linux-gnu" "--linker-path=[^"]*".* 
"--whole-archive" "[^"]*libclang_rt.asan_static.a".* "--whole-archive" 
"[^"]*libclang_rt.asan.a".*}}
+// GPUSAN: {{"[^"]*clang-linker-wrapper[^"]*" 
"--host-triple=x86_64-unknown-linux-gnu" "--linker-path=[^"]*".* 
"--whole-archive" 
"[^"]*(libclang_rt.asan_static.a|libclang_rt.asan_static-x86_64.a)".* 
"--whole-archive" "[^"]*(libclang_rt.asan.a|libclang_rt.asan-x86_64.a)".*}}
 
 // NOGPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* 
"-fopenmp".* "-fsanitize=address".* "-fopenmp-targets=amdgcn-amd-amdhsa".* "-x" 
"c".*}}
 // NOGPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "amdgcn-amd-amdhsa" 
"-aux-triple" "x86_64-unknown-linux-gnu".* "-emit-llvm-bc".* "-target-cpu" 
"(gfx908|gfx900)".* "-fopenmp".* "-x" "c".*}}
 // NOGPUSAN: {{"[^"]*clang-offload-packager[^"]*" "-o".* 
"--image=file=.*.bc,triple=amdgcn-amd-amdhsa,arch=gfx908(:xnack\-|:xnack\+)?,kind=openmp(,feature=(\-xnack|\+xnack))?"}}
 // NOGPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* 
"-fopenmp".* "-fsanitize=address".* "-fopenmp-targets=amdgcn-amd-amdhsa".* "-x" 
"ir".*}}
-// NOGPUSAN: {{"[^"]*clang-linker-wrapper[^"]*" 
"--host-triple=x86_64-unknown-linux-gnu" "--linker-path=[^"]*".* 
"--whole-archive" "[^"]*libclang_rt.asan_static.a".* "--whole-archive" 
"[^"]*libclang_rt.asan.a".*}}
+// NOGPUSAN: {{"[^"]*clang-linker-wrapper[^"]*" 
"--host-triple=x86_64-unknown-linux-gnu" "--linker-path=[^"]*".* 
"--whole-archive" 
"[^"]*(libclang_rt.asan_static.a|libclang_rt.asan_static-x86_64.a)".* 
"--whole-archive" "[^"]*(libclang_rt.asan.a|libclang_rt.asan-x86_64.a)".*}}

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


[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-02-05 Thread Amit Kumar Pandey via cfe-commits

ampandey-1995 wrote:

Fixes https://github.com/llvm/llvm-project/pull/125857

https://github.com/llvm/llvm-project/pull/124754
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/126671

>From 8367c38f7f04273e3ab2451351b6db8d3f7dbc0c Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Tue, 11 Feb 2025 08:06:21 +0530
Subject: [PATCH 1/2] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking
 for OpenMP." (#126628)

  - This reverts commit 0c6c4a99936d4d39015c8d2332483f8db78f69cf.
  - Add '-mcode-object-version=5' as to explicitly use code object
version 5 to match with 'FAIL' diagnostic.
  - Add Requires directive to support lit test run on platforms
registered with x86_64 and amdgpu.
---
 clang/lib/Driver/ToolChains/AMDGPU.cpp| 15 +++--
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp  |  2 +-
 .../Driver/amdgpu-openmp-sanitize-options.c   | 57 +--
 clang/test/Driver/hip-sanitize-options.hip|  2 +-
 4 files changed, 39 insertions(+), 37 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index e66e5a32e58acdc..202198e96c01278 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -1014,7 +1014,12 @@ RocmInstallationDetector::getCommonBitcodeLibs(
 bool isOpenMP = false) const {
   llvm::SmallVector BCLibs;
 
-  auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); };
+  // GPU Sanitizer currently only supports ASan and is enabled through host
+  // ASan.
+  auto GPUSanEnabled = [GPUSan]() {
+return std::get(GPUSan) &&
+   std::get(GPUSan).needsAsanRt();
+  };
   auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib,
   bool Internalize = true) {
 BCLib.ShouldInternalize = Internalize;
@@ -1022,9 +1027,7 @@ RocmInstallationDetector::getCommonBitcodeLibs(
   };
   auto AddSanBCLibs = [&]() {
 if (GPUSanEnabled()) {
-  auto SanArgs = std::get(GPUSan);
-  if (SanArgs.needsAsanRt())
-AddBCLib(getAsanRTLPath(), false);
+  AddBCLib(getAsanRTLPath(), false);
 }
   };
 
@@ -1066,7 +1069,7 @@ ROCMToolChain::getCommonDeviceLibNames(const 
llvm::opt::ArgList &DriverArgs,
   // them all?
   std::tuple GPUSan(
   DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
- options::OPT_fno_gpu_sanitize, false),
+ options::OPT_fno_gpu_sanitize, true),
   getSanitizerArgs(DriverArgs));
   bool DAZ = DriverArgs.hasFlag(options::OPT_fgpu_flush_denormals_to_zero,
 options::OPT_fno_gpu_flush_denormals_to_zero,
@@ -1099,7 +1102,7 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption(
 return false;
 
   if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
-  options::OPT_fno_gpu_sanitize, false))
+  options::OPT_fno_gpu_sanitize, true))
 return true;
 
   auto &Diags = TC.getDriver().getDiags();
diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp 
b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
index 00bf9c7338edd11..aba79f5fa6fa7b3 100644
--- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
@@ -68,7 +68,7 @@ llvm::opt::DerivedArgList 
*AMDGPUOpenMPToolChain::TranslateArgs(
 Action::OffloadKind DeviceOffloadKind) const {
   DerivedArgList *DAL =
   HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind);
-  if (!DAL)
+  if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ))
 DAL = new DerivedArgList(Args.getBaseArgs());
 
   const OptTable &Opts = getDriver().getOpts();
diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c 
b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
index c28a758bfc0c5e8..f6a8a7dc57cccd9 100644
--- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -1,11 +1,11 @@
 // REQUIRES: x86-registered-target, amdgpu-registered-target
 
 // Fail on invalid ROCm Path.
-// RUN:   not %clang -no-canonical-prefixes -### 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
+// RUN:   not %clang -no-canonical-prefixes -### -mcode-object-version=5 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
 // RUN:   | FileCheck --check-prefix=FAIL %s
 
 // Enable multiple sanitizer's apart from ASan with invalid rocm-path.
-// RUN:   not %clang -no-canonical-prefixes -### 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fsanitize=leak -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm-invalid -nogpuinc  %s 2>&1 \
+// RUN:   not %clang -no-canonical-prefixes -### -mcode-object-version=5 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fsanitize=leak -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm-invalid -nogpuinc  %s 2>&1 \
 // R

[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/126671

>From 8367c38f7f04273e3ab2451351b6db8d3f7dbc0c Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Tue, 11 Feb 2025 08:06:21 +0530
Subject: [PATCH 1/2] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking
 for OpenMP." (#126628)

  - This reverts commit 0c6c4a99936d4d39015c8d2332483f8db78f69cf.
  - Add '-mcode-object-version=5' as to explicitly use code object
version 5 to match with 'FAIL' diagnostic.
  - Add Requires directive to support lit test run on platforms
registered with x86_64 and amdgpu.
---
 clang/lib/Driver/ToolChains/AMDGPU.cpp| 15 +++--
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp  |  2 +-
 .../Driver/amdgpu-openmp-sanitize-options.c   | 57 +--
 clang/test/Driver/hip-sanitize-options.hip|  2 +-
 4 files changed, 39 insertions(+), 37 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index e66e5a32e58acd..202198e96c0127 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -1014,7 +1014,12 @@ RocmInstallationDetector::getCommonBitcodeLibs(
 bool isOpenMP = false) const {
   llvm::SmallVector BCLibs;
 
-  auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); };
+  // GPU Sanitizer currently only supports ASan and is enabled through host
+  // ASan.
+  auto GPUSanEnabled = [GPUSan]() {
+return std::get(GPUSan) &&
+   std::get(GPUSan).needsAsanRt();
+  };
   auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib,
   bool Internalize = true) {
 BCLib.ShouldInternalize = Internalize;
@@ -1022,9 +1027,7 @@ RocmInstallationDetector::getCommonBitcodeLibs(
   };
   auto AddSanBCLibs = [&]() {
 if (GPUSanEnabled()) {
-  auto SanArgs = std::get(GPUSan);
-  if (SanArgs.needsAsanRt())
-AddBCLib(getAsanRTLPath(), false);
+  AddBCLib(getAsanRTLPath(), false);
 }
   };
 
@@ -1066,7 +1069,7 @@ ROCMToolChain::getCommonDeviceLibNames(const 
llvm::opt::ArgList &DriverArgs,
   // them all?
   std::tuple GPUSan(
   DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
- options::OPT_fno_gpu_sanitize, false),
+ options::OPT_fno_gpu_sanitize, true),
   getSanitizerArgs(DriverArgs));
   bool DAZ = DriverArgs.hasFlag(options::OPT_fgpu_flush_denormals_to_zero,
 options::OPT_fno_gpu_flush_denormals_to_zero,
@@ -1099,7 +1102,7 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption(
 return false;
 
   if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
-  options::OPT_fno_gpu_sanitize, false))
+  options::OPT_fno_gpu_sanitize, true))
 return true;
 
   auto &Diags = TC.getDriver().getDiags();
diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp 
b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
index 00bf9c7338edd1..aba79f5fa6fa7b 100644
--- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
@@ -68,7 +68,7 @@ llvm::opt::DerivedArgList 
*AMDGPUOpenMPToolChain::TranslateArgs(
 Action::OffloadKind DeviceOffloadKind) const {
   DerivedArgList *DAL =
   HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind);
-  if (!DAL)
+  if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ))
 DAL = new DerivedArgList(Args.getBaseArgs());
 
   const OptTable &Opts = getDriver().getOpts();
diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c 
b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
index c28a758bfc0c5e..f6a8a7dc57cccd 100644
--- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -1,11 +1,11 @@
 // REQUIRES: x86-registered-target, amdgpu-registered-target
 
 // Fail on invalid ROCm Path.
-// RUN:   not %clang -no-canonical-prefixes -### 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
+// RUN:   not %clang -no-canonical-prefixes -### -mcode-object-version=5 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
 // RUN:   | FileCheck --check-prefix=FAIL %s
 
 // Enable multiple sanitizer's apart from ASan with invalid rocm-path.
-// RUN:   not %clang -no-canonical-prefixes -### 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fsanitize=leak -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm-invalid -nogpuinc  %s 2>&1 \
+// RUN:   not %clang -no-canonical-prefixes -### -mcode-object-version=5 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fsanitize=leak -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm-invalid -nogpuinc  %s 2>&1 \
 // RUN:   

[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/126671

>From 8367c38f7f04273e3ab2451351b6db8d3f7dbc0c Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Tue, 11 Feb 2025 08:06:21 +0530
Subject: [PATCH] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for
 OpenMP." (#126628)

  - This reverts commit 0c6c4a99936d4d39015c8d2332483f8db78f69cf.
  - Add '-mcode-object-version=5' as to explicitly use code object
version 5 to match with 'FAIL' diagnostic.
  - Add Requires directive to support lit test run on platforms
registered with x86_64 and amdgpu.
---
 clang/lib/Driver/ToolChains/AMDGPU.cpp| 15 +++--
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp  |  2 +-
 .../Driver/amdgpu-openmp-sanitize-options.c   | 57 +--
 clang/test/Driver/hip-sanitize-options.hip|  2 +-
 4 files changed, 39 insertions(+), 37 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index e66e5a32e58acdc..202198e96c01278 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -1014,7 +1014,12 @@ RocmInstallationDetector::getCommonBitcodeLibs(
 bool isOpenMP = false) const {
   llvm::SmallVector BCLibs;
 
-  auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); };
+  // GPU Sanitizer currently only supports ASan and is enabled through host
+  // ASan.
+  auto GPUSanEnabled = [GPUSan]() {
+return std::get(GPUSan) &&
+   std::get(GPUSan).needsAsanRt();
+  };
   auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib,
   bool Internalize = true) {
 BCLib.ShouldInternalize = Internalize;
@@ -1022,9 +1027,7 @@ RocmInstallationDetector::getCommonBitcodeLibs(
   };
   auto AddSanBCLibs = [&]() {
 if (GPUSanEnabled()) {
-  auto SanArgs = std::get(GPUSan);
-  if (SanArgs.needsAsanRt())
-AddBCLib(getAsanRTLPath(), false);
+  AddBCLib(getAsanRTLPath(), false);
 }
   };
 
@@ -1066,7 +1069,7 @@ ROCMToolChain::getCommonDeviceLibNames(const 
llvm::opt::ArgList &DriverArgs,
   // them all?
   std::tuple GPUSan(
   DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
- options::OPT_fno_gpu_sanitize, false),
+ options::OPT_fno_gpu_sanitize, true),
   getSanitizerArgs(DriverArgs));
   bool DAZ = DriverArgs.hasFlag(options::OPT_fgpu_flush_denormals_to_zero,
 options::OPT_fno_gpu_flush_denormals_to_zero,
@@ -1099,7 +1102,7 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption(
 return false;
 
   if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
-  options::OPT_fno_gpu_sanitize, false))
+  options::OPT_fno_gpu_sanitize, true))
 return true;
 
   auto &Diags = TC.getDriver().getDiags();
diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp 
b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
index 00bf9c7338edd11..aba79f5fa6fa7b3 100644
--- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
@@ -68,7 +68,7 @@ llvm::opt::DerivedArgList 
*AMDGPUOpenMPToolChain::TranslateArgs(
 Action::OffloadKind DeviceOffloadKind) const {
   DerivedArgList *DAL =
   HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind);
-  if (!DAL)
+  if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ))
 DAL = new DerivedArgList(Args.getBaseArgs());
 
   const OptTable &Opts = getDriver().getOpts();
diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c 
b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
index c28a758bfc0c5e8..f6a8a7dc57cccd9 100644
--- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -1,11 +1,11 @@
 // REQUIRES: x86-registered-target, amdgpu-registered-target
 
 // Fail on invalid ROCm Path.
-// RUN:   not %clang -no-canonical-prefixes -### 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
+// RUN:   not %clang -no-canonical-prefixes -### -mcode-object-version=5 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
 // RUN:   | FileCheck --check-prefix=FAIL %s
 
 // Enable multiple sanitizer's apart from ASan with invalid rocm-path.
-// RUN:   not %clang -no-canonical-prefixes -### 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fsanitize=leak -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm-invalid -nogpuinc  %s 2>&1 \
+// RUN:   not %clang -no-canonical-prefixes -### -mcode-object-version=5 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fsanitize=leak -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm-invalid -nogpuinc  %s 2>&1 \
 // RUN: 

[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits


@@ -68,7 +68,9 @@ llvm::opt::DerivedArgList 
*AMDGPUOpenMPToolChain::TranslateArgs(
 Action::OffloadKind DeviceOffloadKind) const {
   DerivedArgList *DAL =
   HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind);
-  if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ))
+  // Skip sanitize options passed from the HostTC. The decision to instrument
+  // device code is computed only by 'shouldSkipSanitizeOption'.
+  if (!DAL && DAL->hasArg(options::OPT_fsanitize_EQ))

ampandey-1995 wrote:

Sorry, actually here the DAL computed from the HostTC picks up the sanitize 
option like ```-fsanitize=address``` and pass forward to ```DAL``` of device 
toolchain. The ```shouldSkipSanitizeOption ```  runs over each argument of 
```Args [The user provided arguments which are not derived]``` and checks if 
the ```-fsanitize=address``` is there it early returns false which then avoids 
checking the :xnack+ capability. 

So,  assume the  case where when we pass ```-fsanitize=address 
--offload-arch=gfx90a``` . This should avoid appending  
```-fsanitize=address``` in the DAL for device toolchain but it dosen't since 
the DAL already has -fsanitize=address from host toolchain and due to early 
return from ```shouldSkipSanitizeOption``` where it checks for the 
```:xnack+``` capability is skipped. 

https://github.com/llvm/llvm-project/pull/126671
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 edited 
https://github.com/llvm/llvm-project/pull/126671
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits


@@ -68,7 +68,9 @@ llvm::opt::DerivedArgList 
*AMDGPUOpenMPToolChain::TranslateArgs(
 Action::OffloadKind DeviceOffloadKind) const {
   DerivedArgList *DAL =
   HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind);
-  if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ))
+  // Skip sanitize options passed from the HostTC. The decision to instrument
+  // device code is computed only by 'shouldSkipSanitizeOption'.
+  if (!DAL && DAL->hasArg(options::OPT_fsanitize_EQ))

ampandey-1995 wrote:

What I have seen for HIPAMDToolChain , the DAL is always constructed every time 
dynamically allocated every time.

https://github.com/llvm/llvm-project/pull/126671
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 edited 
https://github.com/llvm/llvm-project/pull/126671
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits


@@ -68,7 +68,9 @@ llvm::opt::DerivedArgList 
*AMDGPUOpenMPToolChain::TranslateArgs(
 Action::OffloadKind DeviceOffloadKind) const {
   DerivedArgList *DAL =
   HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind);
-  if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ))
+  // Skip sanitize options passed from the HostTC. The decision to instrument
+  // device code is computed only by 'shouldSkipSanitizeOption'.
+  if (!DAL && DAL->hasArg(options::OPT_fsanitize_EQ))

ampandey-1995 wrote:

 Should The ```shouldSkipSanitizeOption``` consider an extra parameter 
```DAL``` allocated by the host and resolve that issue ? @jhuber6  and 
@yxsamliu  is that the correct way ,anything I am missing @yxsamliu ?

https://github.com/llvm/llvm-project/pull/126671
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits


@@ -68,7 +68,9 @@ llvm::opt::DerivedArgList 
*AMDGPUOpenMPToolChain::TranslateArgs(
 Action::OffloadKind DeviceOffloadKind) const {
   DerivedArgList *DAL =
   HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind);
-  if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ))
+  // Skip sanitize options passed from the HostTC. The decision to instrument
+  // device code is computed only by 'shouldSkipSanitizeOption'.
+  if (!DAL && DAL->hasArg(options::OPT_fsanitize_EQ))

ampandey-1995 wrote:

> Sorry I'm still confused. If the user cannot enable `-fsanitize=address` if 
> the GPU target doesn't support `xnack` then that should be separate driver 
> check / error. Unless we're just silently ignoring that?

Yes we are silently ignoring that and that ```-fsanitize=address``` is there 
for the host only, but for device it is skipped.



https://github.com/llvm/llvm-project/pull/126671
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 edited 
https://github.com/llvm/llvm-project/pull/126671
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits


@@ -68,7 +68,9 @@ llvm::opt::DerivedArgList 
*AMDGPUOpenMPToolChain::TranslateArgs(
 Action::OffloadKind DeviceOffloadKind) const {
   DerivedArgList *DAL =
   HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind);
-  if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ))
+  // Skip sanitize options passed from the HostTC. The decision to instrument
+  // device code is computed only by 'shouldSkipSanitizeOption'.
+  if (!DAL && DAL->hasArg(options::OPT_fsanitize_EQ))

ampandey-1995 wrote:

> if it's not legal for some case, then emit an error. If the user doesn't want 
> it then they can do `-Xarch-host -fsanitize=address`.

We actually emit the warning not error, since it's legal for the host to be 
asan instrumented but for device it depends based on ```--offload-arch=``` 
containing :xnack+. If :xnack+ then allow it otherwise emit warning silently 
skip it.

https://github.com/llvm/llvm-project/pull/126671
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits


@@ -68,7 +68,9 @@ llvm::opt::DerivedArgList 
*AMDGPUOpenMPToolChain::TranslateArgs(
 Action::OffloadKind DeviceOffloadKind) const {
   DerivedArgList *DAL =
   HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind);
-  if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ))
+  // Skip sanitize options passed from the HostTC. The decision to instrument
+  // device code is computed only by 'shouldSkipSanitizeOption'.
+  if (!DAL && DAL->hasArg(options::OPT_fsanitize_EQ))

ampandey-1995 wrote:

We actually in check it in this part of code 
https://github.com/llvm/llvm-project/blob/752ebec054f8b0bf7c221813724984f10096355a/clang/lib/Driver/ToolChains/AMDGPU.cpp#L1118

https://github.com/llvm/llvm-project/pull/126671
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 edited 
https://github.com/llvm/llvm-project/pull/126671
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 edited 
https://github.com/llvm/llvm-project/pull/126671
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-10 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 created 
https://github.com/llvm/llvm-project/pull/126671

… (#126628)

This reverts commit 0c6c4a99936d4d39015c8d2332483f8db78f69cf.

>From 3ddcfd96fac0ee0cc11dae494435a2aca7bcd7e5 Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Tue, 11 Feb 2025 08:06:21 +0530
Subject: [PATCH] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for
 OpenMP." (#126628)

This reverts commit 0c6c4a99936d4d39015c8d2332483f8db78f69cf.
---
 clang/lib/Driver/ToolChains/AMDGPU.cpp| 15 +++--
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp  |  2 +-
 .../Driver/amdgpu-openmp-sanitize-options.c   | 55 +--
 clang/test/Driver/hip-sanitize-options.hip|  2 +-
 4 files changed, 38 insertions(+), 36 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index e66e5a32e58acdc..202198e96c01278 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -1014,7 +1014,12 @@ RocmInstallationDetector::getCommonBitcodeLibs(
 bool isOpenMP = false) const {
   llvm::SmallVector BCLibs;
 
-  auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); };
+  // GPU Sanitizer currently only supports ASan and is enabled through host
+  // ASan.
+  auto GPUSanEnabled = [GPUSan]() {
+return std::get(GPUSan) &&
+   std::get(GPUSan).needsAsanRt();
+  };
   auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib,
   bool Internalize = true) {
 BCLib.ShouldInternalize = Internalize;
@@ -1022,9 +1027,7 @@ RocmInstallationDetector::getCommonBitcodeLibs(
   };
   auto AddSanBCLibs = [&]() {
 if (GPUSanEnabled()) {
-  auto SanArgs = std::get(GPUSan);
-  if (SanArgs.needsAsanRt())
-AddBCLib(getAsanRTLPath(), false);
+  AddBCLib(getAsanRTLPath(), false);
 }
   };
 
@@ -1066,7 +1069,7 @@ ROCMToolChain::getCommonDeviceLibNames(const 
llvm::opt::ArgList &DriverArgs,
   // them all?
   std::tuple GPUSan(
   DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
- options::OPT_fno_gpu_sanitize, false),
+ options::OPT_fno_gpu_sanitize, true),
   getSanitizerArgs(DriverArgs));
   bool DAZ = DriverArgs.hasFlag(options::OPT_fgpu_flush_denormals_to_zero,
 options::OPT_fno_gpu_flush_denormals_to_zero,
@@ -1099,7 +1102,7 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption(
 return false;
 
   if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
-  options::OPT_fno_gpu_sanitize, false))
+  options::OPT_fno_gpu_sanitize, true))
 return true;
 
   auto &Diags = TC.getDriver().getDiags();
diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp 
b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
index 00bf9c7338edd11..aba79f5fa6fa7b3 100644
--- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
@@ -68,7 +68,7 @@ llvm::opt::DerivedArgList 
*AMDGPUOpenMPToolChain::TranslateArgs(
 Action::OffloadKind DeviceOffloadKind) const {
   DerivedArgList *DAL =
   HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind);
-  if (!DAL)
+  if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ))
 DAL = new DerivedArgList(Args.getBaseArgs());
 
   const OptTable &Opts = getDriver().getOpts();
diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c 
b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
index c28a758bfc0c5e8..6b315672eb7ef8b 100644
--- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -1,7 +1,7 @@
 // REQUIRES: x86-registered-target, amdgpu-registered-target
 
 // Fail on invalid ROCm Path.
-// RUN:   not %clang -no-canonical-prefixes -### 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
+// RUN:   not %clang -no-canonical-prefixes -### -mcode-object-version=5 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
 // RUN:   | FileCheck --check-prefix=FAIL %s
 
 // Enable multiple sanitizer's apart from ASan with invalid rocm-path.
@@ -13,38 +13,40 @@
 // RUN:   | FileCheck --check-prefix=NOTSUPPORTED %s
 
 // GPU ASan Enabled Test Cases
-// ASan enabled for amdgpu-arch [gfx908]
-// RUN:   %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu 
-fopenmp=libomp --offload-arch=gfx908 -fsanitize=address -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm %s 2>&1 \
-// RUN:   | FileCheck -check-prefixes=NOXNACK,GPUSAN %s
-
-// GPU ASan enabled for amdgpu-arch [gfx908:xnack-]
-// RUN:   %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu 
-fopenmp=libomp --offload-arch=gfx908:xnack- -fsanitize=address -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm %s 2>&1 \
-// R

[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 edited 
https://github.com/llvm/llvm-project/pull/126671
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 edited 
https://github.com/llvm/llvm-project/pull/126671
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/126671

>From e735ed1d3a577dcb66336515c1a6e9955b397dd3 Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Tue, 11 Feb 2025 08:06:21 +0530
Subject: [PATCH] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for
 OpenMP." (#126628)

  - This reverts commit 0c6c4a99936d4d39015c8d2332483f8db78f69cf.
  - Add '-mcode-object-version=5' as to explicitly use code object
version 5 to match with 'FAIL' diagnostic.
  - Add Requires directive to support lit test run on platforms
registered with x86_64 and amdgpu.
---
 clang/lib/Driver/ToolChains/AMDGPU.cpp| 15 +++--
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp  |  2 +-
 .../Driver/amdgpu-openmp-sanitize-options.c   | 55 +--
 clang/test/Driver/hip-sanitize-options.hip|  2 +-
 4 files changed, 38 insertions(+), 36 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index e66e5a32e58acdc..202198e96c01278 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -1014,7 +1014,12 @@ RocmInstallationDetector::getCommonBitcodeLibs(
 bool isOpenMP = false) const {
   llvm::SmallVector BCLibs;
 
-  auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); };
+  // GPU Sanitizer currently only supports ASan and is enabled through host
+  // ASan.
+  auto GPUSanEnabled = [GPUSan]() {
+return std::get(GPUSan) &&
+   std::get(GPUSan).needsAsanRt();
+  };
   auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib,
   bool Internalize = true) {
 BCLib.ShouldInternalize = Internalize;
@@ -1022,9 +1027,7 @@ RocmInstallationDetector::getCommonBitcodeLibs(
   };
   auto AddSanBCLibs = [&]() {
 if (GPUSanEnabled()) {
-  auto SanArgs = std::get(GPUSan);
-  if (SanArgs.needsAsanRt())
-AddBCLib(getAsanRTLPath(), false);
+  AddBCLib(getAsanRTLPath(), false);
 }
   };
 
@@ -1066,7 +1069,7 @@ ROCMToolChain::getCommonDeviceLibNames(const 
llvm::opt::ArgList &DriverArgs,
   // them all?
   std::tuple GPUSan(
   DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
- options::OPT_fno_gpu_sanitize, false),
+ options::OPT_fno_gpu_sanitize, true),
   getSanitizerArgs(DriverArgs));
   bool DAZ = DriverArgs.hasFlag(options::OPT_fgpu_flush_denormals_to_zero,
 options::OPT_fno_gpu_flush_denormals_to_zero,
@@ -1099,7 +1102,7 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption(
 return false;
 
   if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
-  options::OPT_fno_gpu_sanitize, false))
+  options::OPT_fno_gpu_sanitize, true))
 return true;
 
   auto &Diags = TC.getDriver().getDiags();
diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp 
b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
index 00bf9c7338edd11..aba79f5fa6fa7b3 100644
--- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
@@ -68,7 +68,7 @@ llvm::opt::DerivedArgList 
*AMDGPUOpenMPToolChain::TranslateArgs(
 Action::OffloadKind DeviceOffloadKind) const {
   DerivedArgList *DAL =
   HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind);
-  if (!DAL)
+  if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ))
 DAL = new DerivedArgList(Args.getBaseArgs());
 
   const OptTable &Opts = getDriver().getOpts();
diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c 
b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
index c28a758bfc0c5e8..6b315672eb7ef8b 100644
--- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -1,7 +1,7 @@
 // REQUIRES: x86-registered-target, amdgpu-registered-target
 
 // Fail on invalid ROCm Path.
-// RUN:   not %clang -no-canonical-prefixes -### 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
+// RUN:   not %clang -no-canonical-prefixes -### -mcode-object-version=5 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
 // RUN:   | FileCheck --check-prefix=FAIL %s
 
 // Enable multiple sanitizer's apart from ASan with invalid rocm-path.
@@ -13,38 +13,40 @@
 // RUN:   | FileCheck --check-prefix=NOTSUPPORTED %s
 
 // GPU ASan Enabled Test Cases
-// ASan enabled for amdgpu-arch [gfx908]
-// RUN:   %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu 
-fopenmp=libomp --offload-arch=gfx908 -fsanitize=address -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm %s 2>&1 \
-// RUN:   | FileCheck -check-prefixes=NOXNACK,GPUSAN %s
-
-// GPU ASan enabled for amdgpu-arch [gfx908:xnack-]
-// RUN:   %clang -no-canonical-prefixes -### --target=x86

[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/126671

>From 8367c38f7f04273e3ab2451351b6db8d3f7dbc0c Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Tue, 11 Feb 2025 08:06:21 +0530
Subject: [PATCH 1/3] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking
 for OpenMP." (#126628)

  - This reverts commit 0c6c4a99936d4d39015c8d2332483f8db78f69cf.
  - Add '-mcode-object-version=5' as to explicitly use code object
version 5 to match with 'FAIL' diagnostic.
  - Add Requires directive to support lit test run on platforms
registered with x86_64 and amdgpu.
---
 clang/lib/Driver/ToolChains/AMDGPU.cpp| 15 +++--
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp  |  2 +-
 .../Driver/amdgpu-openmp-sanitize-options.c   | 57 +--
 clang/test/Driver/hip-sanitize-options.hip|  2 +-
 4 files changed, 39 insertions(+), 37 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index e66e5a32e58ac..202198e96c012 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -1014,7 +1014,12 @@ RocmInstallationDetector::getCommonBitcodeLibs(
 bool isOpenMP = false) const {
   llvm::SmallVector BCLibs;
 
-  auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); };
+  // GPU Sanitizer currently only supports ASan and is enabled through host
+  // ASan.
+  auto GPUSanEnabled = [GPUSan]() {
+return std::get(GPUSan) &&
+   std::get(GPUSan).needsAsanRt();
+  };
   auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib,
   bool Internalize = true) {
 BCLib.ShouldInternalize = Internalize;
@@ -1022,9 +1027,7 @@ RocmInstallationDetector::getCommonBitcodeLibs(
   };
   auto AddSanBCLibs = [&]() {
 if (GPUSanEnabled()) {
-  auto SanArgs = std::get(GPUSan);
-  if (SanArgs.needsAsanRt())
-AddBCLib(getAsanRTLPath(), false);
+  AddBCLib(getAsanRTLPath(), false);
 }
   };
 
@@ -1066,7 +1069,7 @@ ROCMToolChain::getCommonDeviceLibNames(const 
llvm::opt::ArgList &DriverArgs,
   // them all?
   std::tuple GPUSan(
   DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
- options::OPT_fno_gpu_sanitize, false),
+ options::OPT_fno_gpu_sanitize, true),
   getSanitizerArgs(DriverArgs));
   bool DAZ = DriverArgs.hasFlag(options::OPT_fgpu_flush_denormals_to_zero,
 options::OPT_fno_gpu_flush_denormals_to_zero,
@@ -1099,7 +1102,7 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption(
 return false;
 
   if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
-  options::OPT_fno_gpu_sanitize, false))
+  options::OPT_fno_gpu_sanitize, true))
 return true;
 
   auto &Diags = TC.getDriver().getDiags();
diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp 
b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
index 00bf9c7338edd..aba79f5fa6fa7 100644
--- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
@@ -68,7 +68,7 @@ llvm::opt::DerivedArgList 
*AMDGPUOpenMPToolChain::TranslateArgs(
 Action::OffloadKind DeviceOffloadKind) const {
   DerivedArgList *DAL =
   HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind);
-  if (!DAL)
+  if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ))
 DAL = new DerivedArgList(Args.getBaseArgs());
 
   const OptTable &Opts = getDriver().getOpts();
diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c 
b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
index c28a758bfc0c5..f6a8a7dc57ccc 100644
--- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -1,11 +1,11 @@
 // REQUIRES: x86-registered-target, amdgpu-registered-target
 
 // Fail on invalid ROCm Path.
-// RUN:   not %clang -no-canonical-prefixes -### 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
+// RUN:   not %clang -no-canonical-prefixes -### -mcode-object-version=5 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
 // RUN:   | FileCheck --check-prefix=FAIL %s
 
 // Enable multiple sanitizer's apart from ASan with invalid rocm-path.
-// RUN:   not %clang -no-canonical-prefixes -### 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fsanitize=leak -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm-invalid -nogpuinc  %s 2>&1 \
+// RUN:   not %clang -no-canonical-prefixes -### -mcode-object-version=5 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fsanitize=leak -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm-invalid -nogpuinc  %s 2>&1 \
 // RUN:   | File

[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits


@@ -1014,17 +1014,20 @@ RocmInstallationDetector::getCommonBitcodeLibs(
 bool isOpenMP = false) const {
   llvm::SmallVector BCLibs;
 
-  auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); };
+  // GPU Sanitizer currently only supports ASan and is enabled through host
+  // ASan.
+  auto GPUSanEnabled = [GPUSan]() {
+return std::get(GPUSan) &&
+   std::get(GPUSan).needsAsanRt();
+  };

ampandey-1995 wrote:

> Why is this using a lambda and capture for a simple and?
If we have other sanitizers apart from asan such as msan for GPU. Then , what I 
think we would be having another msanrtl.bc linked so that future code would be 
something like below for easy readability and maintainability purpose. Note: we 
cannot enable both ASan and MSan simultaneously at compile time.  

```
auto GPUSanEnabled = [GPUSan](){
auto SanArgs = std::get(GPUSan);
return std::get(GPUSan) &&
   (SanArgs.needsAsanRt() || SanArgs.needsMsanRt()) ;
};
```

> I'm also surprised `get` works instead of `get<0>`
Yes, since the  tuple contents are of unique types it works. Should I change it?







https://github.com/llvm/llvm-project/pull/126671
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 edited 
https://github.com/llvm/llvm-project/pull/126671
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/126671

>From 8367c38f7f04273e3ab2451351b6db8d3f7dbc0c Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Tue, 11 Feb 2025 08:06:21 +0530
Subject: [PATCH 1/3] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking
 for OpenMP." (#126628)

  - This reverts commit 0c6c4a99936d4d39015c8d2332483f8db78f69cf.
  - Add '-mcode-object-version=5' as to explicitly use code object
version 5 to match with 'FAIL' diagnostic.
  - Add Requires directive to support lit test run on platforms
registered with x86_64 and amdgpu.
---
 clang/lib/Driver/ToolChains/AMDGPU.cpp| 15 +++--
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp  |  2 +-
 .../Driver/amdgpu-openmp-sanitize-options.c   | 57 +--
 clang/test/Driver/hip-sanitize-options.hip|  2 +-
 4 files changed, 39 insertions(+), 37 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index e66e5a32e58acd..202198e96c0127 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -1014,7 +1014,12 @@ RocmInstallationDetector::getCommonBitcodeLibs(
 bool isOpenMP = false) const {
   llvm::SmallVector BCLibs;
 
-  auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); };
+  // GPU Sanitizer currently only supports ASan and is enabled through host
+  // ASan.
+  auto GPUSanEnabled = [GPUSan]() {
+return std::get(GPUSan) &&
+   std::get(GPUSan).needsAsanRt();
+  };
   auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib,
   bool Internalize = true) {
 BCLib.ShouldInternalize = Internalize;
@@ -1022,9 +1027,7 @@ RocmInstallationDetector::getCommonBitcodeLibs(
   };
   auto AddSanBCLibs = [&]() {
 if (GPUSanEnabled()) {
-  auto SanArgs = std::get(GPUSan);
-  if (SanArgs.needsAsanRt())
-AddBCLib(getAsanRTLPath(), false);
+  AddBCLib(getAsanRTLPath(), false);
 }
   };
 
@@ -1066,7 +1069,7 @@ ROCMToolChain::getCommonDeviceLibNames(const 
llvm::opt::ArgList &DriverArgs,
   // them all?
   std::tuple GPUSan(
   DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
- options::OPT_fno_gpu_sanitize, false),
+ options::OPT_fno_gpu_sanitize, true),
   getSanitizerArgs(DriverArgs));
   bool DAZ = DriverArgs.hasFlag(options::OPT_fgpu_flush_denormals_to_zero,
 options::OPT_fno_gpu_flush_denormals_to_zero,
@@ -1099,7 +1102,7 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption(
 return false;
 
   if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
-  options::OPT_fno_gpu_sanitize, false))
+  options::OPT_fno_gpu_sanitize, true))
 return true;
 
   auto &Diags = TC.getDriver().getDiags();
diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp 
b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
index 00bf9c7338edd1..aba79f5fa6fa7b 100644
--- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
@@ -68,7 +68,7 @@ llvm::opt::DerivedArgList 
*AMDGPUOpenMPToolChain::TranslateArgs(
 Action::OffloadKind DeviceOffloadKind) const {
   DerivedArgList *DAL =
   HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind);
-  if (!DAL)
+  if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ))
 DAL = new DerivedArgList(Args.getBaseArgs());
 
   const OptTable &Opts = getDriver().getOpts();
diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c 
b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
index c28a758bfc0c5e..f6a8a7dc57cccd 100644
--- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -1,11 +1,11 @@
 // REQUIRES: x86-registered-target, amdgpu-registered-target
 
 // Fail on invalid ROCm Path.
-// RUN:   not %clang -no-canonical-prefixes -### 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
+// RUN:   not %clang -no-canonical-prefixes -### -mcode-object-version=5 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
 // RUN:   | FileCheck --check-prefix=FAIL %s
 
 // Enable multiple sanitizer's apart from ASan with invalid rocm-path.
-// RUN:   not %clang -no-canonical-prefixes -### 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fsanitize=leak -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm-invalid -nogpuinc  %s 2>&1 \
+// RUN:   not %clang -no-canonical-prefixes -### -mcode-object-version=5 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fsanitize=leak -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm-invalid -nogpuinc  %s 2>&1 \
 // RUN:   

[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits


@@ -1014,25 +1014,27 @@ RocmInstallationDetector::getCommonBitcodeLibs(
 bool isOpenMP = false) const {
   llvm::SmallVector BCLibs;
 
-  auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); };
+  // GPU Sanitizer currently only supports ASan and is enabled through host
+  // ASan.
+  bool GPUSanEnabled = std::get(GPUSan) &&
+   std::get(GPUSan).needsAsanRt();
+
   auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib,
   bool Internalize = true) {
 BCLib.ShouldInternalize = Internalize;
 BCLibs.emplace_back(BCLib);
   };
   auto AddSanBCLibs = [&]() {
-if (GPUSanEnabled()) {
-  auto SanArgs = std::get(GPUSan);
-  if (SanArgs.needsAsanRt())
-AddBCLib(getAsanRTLPath(), false);
+if (GPUSanEnabled) {
+  AddBCLib(getAsanRTLPath(), false);
 }

ampandey-1995 wrote:

Done.

https://github.com/llvm/llvm-project/pull/126671
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver][ROCm][ASan] Skip checking ':xnack+' feature for gfx12. (PR #126885)

2025-02-12 Thread Amit Kumar Pandey via cfe-commits


@@ -1112,6 +1112,11 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption(
 
   assert(OptionalGpuArch && "Invalid Target ID");
   (void)OptionalGpuArch;
+
+  // Skip checking 'xnack+' feature availability for gfx12 family.

ampandey-1995 wrote:

Sorry,  but I didn't understand , could you please elaborate?

https://github.com/llvm/llvm-project/pull/126885
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver][ROCm][ASan] Skip checking ':xnack+' feature for gfx12. (PR #126885)

2025-02-12 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/126885

>From cfa9342304a03671ed261a4f0b0cbe0297bb050b Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Wed, 12 Feb 2025 15:47:33 +0530
Subject: [PATCH] [Driver][ROCm][ASan] Skip checking ':xnack+' feature for
 gfx12.

Enable ASan instrumentation for 'gfx12' family targets.The GPU
features like ':xnack+ or :sramecc+' are implicitly handled in the
hardware for gfx12 family.
---
 clang/lib/Driver/ToolChains/AMDGPU.cpp   |  5 +
 .../rocm/amdgcn/bitcode/oclc_isa_version_1200.bc |  0
 clang/test/Driver/amdgpu-openmp-sanitize-options.c   | 12 +++-
 clang/test/Driver/hip-sanitize-options.hip   |  5 +
 clang/test/Driver/rocm-device-libs.cl|  6 ++
 5 files changed, 23 insertions(+), 5 deletions(-)
 create mode 100644 
clang/test/Driver/Inputs/rocm/amdgcn/bitcode/oclc_isa_version_1200.bc

diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index 8d5cb91ebad9a..3edd9f37897f1 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -1112,6 +1112,11 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption(
 
   assert(OptionalGpuArch && "Invalid Target ID");
   (void)OptionalGpuArch;
+
+  // Skip checking 'xnack+' feature availability for gfx12 family.
+  if (llvm::AMDGPU::getIsaVersion(TargetID).Major == 12)
+return false;
+
   auto Loc = FeatureMap.find("xnack");
   if (Loc == FeatureMap.end() || !Loc->second) {
 Diags.Report(
diff --git 
a/clang/test/Driver/Inputs/rocm/amdgcn/bitcode/oclc_isa_version_1200.bc 
b/clang/test/Driver/Inputs/rocm/amdgcn/bitcode/oclc_isa_version_1200.bc
new file mode 100644
index 0..e69de29bb2d1d
diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c 
b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
index f6a8a7dc57ccc..bd3250a73f5b2 100644
--- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -13,7 +13,6 @@
 // RUN:   | FileCheck --check-prefix=NOTSUPPORTED %s
 
 // GPU ASan Enabled Test Cases
-
 // GPU ASan enabled for amdgpu-arch [gfx908:xnack+]
 // RUN:   %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu 
-fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm %s 2>&1 \
 // RUN:   | FileCheck -check-prefixes=HOSTSAN,GPUSAN,SAN %s
@@ -22,12 +21,15 @@
 // RUN:   %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu 
-fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address 
--rocm-path=%S/Inputs/rocm %s 2>&1 \
 // RUN:   | FileCheck -check-prefixes=HOSTSAN,GPUSAN,SAN %s
 
-// ASan enabled for multiple amdgpu-arch [gfx908:xnack+,gfx900:xnack+]
+// GPU ASan enabled for multiple amdgpu-arch [gfx908:xnack+,gfx900:xnack+]
 // RUN:   %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu 
-fopenmp=libomp --offload-arch=gfx908:xnack+ --offload-arch=gfx900:xnack+ 
-fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
 // RUN:   | FileCheck -check-prefixes=HOSTSAN,GPUSAN,SAN %s
 
-// GPU ASan Disabled Test Cases
+// GPU ASan enabled for amdgpu-arch [gfx1200]
+// RUN:   %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu 
-fopenmp=libomp --offload-arch=gfx1200 -fsanitize=address -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=HOSTSAN,GPUSAN,SAN %s
 
+// GPU ASan Disabled Test Cases
 // GPU ASan disabled through '-fsanitize=address' without '-fgpu-sanitize' 
flag for amdgpu-arch [gfx908]
 // RUN:   %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu 
-fopenmp=libomp --offload-arch=gfx908 -fsanitize=address 
--rocm-path=%S/Inputs/rocm %s 2>&1 \
 // RUN:   | FileCheck -check-prefixes=NOXNACK,HOSTSAN,NOGPUSAN,SAN %s
@@ -56,9 +58,9 @@
 
 // HOSTSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* 
"-fopenmp".* "-fsanitize=address".* "-fopenmp-targets=amdgcn-amd-amdhsa".* "-x" 
"c".*}}
 
-// GPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "amdgcn-amd-amdhsa" 
"-aux-triple" "x86_64-unknown-linux-gnu".* "-emit-llvm-bc".* 
"-mlink-bitcode-file" "[^"]*asanrtl.bc".* "-mlink-bitcode-file" 
"[^"]*ockl.bc".* "-target-cpu" "(gfx908|gfx900)".* "-fopenmp".* 
"-fsanitize=address".* "-x" "c".*}}
+// GPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "amdgcn-amd-amdhsa" 
"-aux-triple" "x86_64-unknown-linux-gnu".* "-emit-llvm-bc".* 
"-mlink-bitcode-file" "[^"]*asanrtl.bc".* "-mlink-bitcode-file" 
"[^"]*ockl.bc".* "-target-cpu" "(gfx1200|gfx908|gfx900)".* "-fopenmp".* 
"-fsanitize=address".* "-x" "c".*}}
 // NOGPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "amdgcn-amd-amdhsa" 
"-aux-triple" "x86_64-unknown-linux-gnu".* "-emit-llvm-bc".* "-target-cpu" 
"(gfx908|gfx900)".* "-fopenmp".* "-x" "c".*}}
 
-// SAN: {{"[^"]*clang-offload-packager[^"]*" "-o".* 
"--image=file=.*.bc,triple=amdgcn-amd-amdhsa,arch=g

[clang] [Driver][ROCm][ASan] Skip checking ':xnack+' feature for gfx12. (PR #126885)

2025-02-12 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 edited 
https://github.com/llvm/llvm-project/pull/126885
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver][ROCm][ASan] Skip checking ':xnack+' feature for gfx12. (PR #126885)

2025-02-12 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/126885

>From 1917d82e52350d8c65781cfc6694a6d1e12b8eb7 Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Wed, 12 Feb 2025 15:47:33 +0530
Subject: [PATCH] [Driver][ROCm][ASan] Skip checking ':xnack+' feature for
 gfx12.

Enable GPU ASan instrumentation for 'gfx12' family targets.The GPU
features like ':xnack+ or :sramecc+' are implicitly handled in the
hardware for gfx12 family.
---
 clang/lib/Driver/ToolChains/AMDGPU.cpp   |  5 +
 .../rocm/amdgcn/bitcode/oclc_isa_version_1200.bc |  0
 clang/test/Driver/amdgpu-openmp-sanitize-options.c   | 12 +++-
 clang/test/Driver/hip-sanitize-options.hip   |  5 +
 clang/test/Driver/rocm-device-libs.cl|  6 ++
 5 files changed, 23 insertions(+), 5 deletions(-)
 create mode 100644 
clang/test/Driver/Inputs/rocm/amdgcn/bitcode/oclc_isa_version_1200.bc

diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index 8d5cb91ebad9a..3edd9f37897f1 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -1112,6 +1112,11 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption(
 
   assert(OptionalGpuArch && "Invalid Target ID");
   (void)OptionalGpuArch;
+
+  // Skip checking 'xnack+' feature availability for gfx12 family.
+  if (llvm::AMDGPU::getIsaVersion(TargetID).Major == 12)
+return false;
+
   auto Loc = FeatureMap.find("xnack");
   if (Loc == FeatureMap.end() || !Loc->second) {
 Diags.Report(
diff --git 
a/clang/test/Driver/Inputs/rocm/amdgcn/bitcode/oclc_isa_version_1200.bc 
b/clang/test/Driver/Inputs/rocm/amdgcn/bitcode/oclc_isa_version_1200.bc
new file mode 100644
index 0..e69de29bb2d1d
diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c 
b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
index f6a8a7dc57ccc..bd3250a73f5b2 100644
--- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -13,7 +13,6 @@
 // RUN:   | FileCheck --check-prefix=NOTSUPPORTED %s
 
 // GPU ASan Enabled Test Cases
-
 // GPU ASan enabled for amdgpu-arch [gfx908:xnack+]
 // RUN:   %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu 
-fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm %s 2>&1 \
 // RUN:   | FileCheck -check-prefixes=HOSTSAN,GPUSAN,SAN %s
@@ -22,12 +21,15 @@
 // RUN:   %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu 
-fopenmp=libomp --offload-arch=gfx908:xnack+ -fsanitize=address 
--rocm-path=%S/Inputs/rocm %s 2>&1 \
 // RUN:   | FileCheck -check-prefixes=HOSTSAN,GPUSAN,SAN %s
 
-// ASan enabled for multiple amdgpu-arch [gfx908:xnack+,gfx900:xnack+]
+// GPU ASan enabled for multiple amdgpu-arch [gfx908:xnack+,gfx900:xnack+]
 // RUN:   %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu 
-fopenmp=libomp --offload-arch=gfx908:xnack+ --offload-arch=gfx900:xnack+ 
-fsanitize=address -fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
 // RUN:   | FileCheck -check-prefixes=HOSTSAN,GPUSAN,SAN %s
 
-// GPU ASan Disabled Test Cases
+// GPU ASan enabled for amdgpu-arch [gfx1200]
+// RUN:   %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu 
-fopenmp=libomp --offload-arch=gfx1200 -fsanitize=address -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=HOSTSAN,GPUSAN,SAN %s
 
+// GPU ASan Disabled Test Cases
 // GPU ASan disabled through '-fsanitize=address' without '-fgpu-sanitize' 
flag for amdgpu-arch [gfx908]
 // RUN:   %clang -no-canonical-prefixes -### --target=x86_64-unknown-linux-gnu 
-fopenmp=libomp --offload-arch=gfx908 -fsanitize=address 
--rocm-path=%S/Inputs/rocm %s 2>&1 \
 // RUN:   | FileCheck -check-prefixes=NOXNACK,HOSTSAN,NOGPUSAN,SAN %s
@@ -56,9 +58,9 @@
 
 // HOSTSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "x86_64-unknown-linux-gnu".* 
"-fopenmp".* "-fsanitize=address".* "-fopenmp-targets=amdgcn-amd-amdhsa".* "-x" 
"c".*}}
 
-// GPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "amdgcn-amd-amdhsa" 
"-aux-triple" "x86_64-unknown-linux-gnu".* "-emit-llvm-bc".* 
"-mlink-bitcode-file" "[^"]*asanrtl.bc".* "-mlink-bitcode-file" 
"[^"]*ockl.bc".* "-target-cpu" "(gfx908|gfx900)".* "-fopenmp".* 
"-fsanitize=address".* "-x" "c".*}}
+// GPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "amdgcn-amd-amdhsa" 
"-aux-triple" "x86_64-unknown-linux-gnu".* "-emit-llvm-bc".* 
"-mlink-bitcode-file" "[^"]*asanrtl.bc".* "-mlink-bitcode-file" 
"[^"]*ockl.bc".* "-target-cpu" "(gfx1200|gfx908|gfx900)".* "-fopenmp".* 
"-fsanitize=address".* "-x" "c".*}}
 // NOGPUSAN: {{"[^"]*clang[^"]*" "-cc1" "-triple" "amdgcn-amd-amdhsa" 
"-aux-triple" "x86_64-unknown-linux-gnu".* "-emit-llvm-bc".* "-target-cpu" 
"(gfx908|gfx900)".* "-fopenmp".* "-x" "c".*}}
 
-// SAN: {{"[^"]*clang-offload-packager[^"]*" "-o".* 
"--image=file=.*.bc,triple=amdgcn-amd-amdhsa,ar

[clang] [Driver][ROCm][ASan] Skip checking ':xnack+' feature for gfx12. (PR #126885)

2025-02-12 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 closed 
https://github.com/llvm/llvm-project/pull/126885
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-02-02 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/124754

>From 960eb5de4abcf21dec34e8932c94621733b9d11b Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Mon, 3 Feb 2025 10:57:17 +0530
Subject: [PATCH 1/4] [OpenMP][ASan] Enable ASan Instrumentation for
 AMDGPUOpenMPToolChain.

Enable device code ASan instrumentation for openmp offload applications using
option '-fsanitize=address'.
---
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp  | 37 
 .../Driver/amdgpu-openmp-sanitize-options.c   | 58 +++
 2 files changed, 95 insertions(+)
 create mode 100644 clang/test/Driver/amdgpu-openmp-sanitize-options.c

diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp 
b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
index 24d244ba6f0e18b..01f84a4e4bc5637 100644
--- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
@@ -37,6 +37,16 @@ AMDGPUOpenMPToolChain::AMDGPUOpenMPToolChain(const Driver &D,
   // Lookup binaries into the driver directory, this is used to
   // discover the 'amdgpu-arch' executable.
   getProgramPaths().push_back(getDriver().Dir);
+  // Diagnose unsupported sanitizer options only once.
+  if (!Args.hasFlag(options::OPT_fgpu_sanitize, options::OPT_fno_gpu_sanitize,
+true))
+return;
+  for (auto *A : Args.filtered(options::OPT_fsanitize_EQ)) {
+SanitizerMask K = parseSanitizerValue(A->getValue(), 
/*AllowGroups=*/false);
+if (K != SanitizerKind::Address)
+  D.getDiags().Report(clang::diag::warn_drv_unsupported_option_for_target)
+  << A->getAsString(Args) << getTriple().str();
+  }
 }
 
 void AMDGPUOpenMPToolChain::addClangTargetOptions(
@@ -71,6 +81,33 @@ llvm::opt::DerivedArgList 
*AMDGPUOpenMPToolChain::TranslateArgs(
 
   const OptTable &Opts = getDriver().getOpts();
 
+  if (DeviceOffloadKind == Action::OFK_OpenMP) {
+for (Arg *A : Args) {
+  if (!shouldSkipSanitizeOption(*this, Args, BoundArch, A) &&
+  !llvm::is_contained(*DAL, A))
+DAL->append(A);
+}
+
+if (!DAL->hasArg(options::OPT_march_EQ)) {
+  StringRef Arch = BoundArch;
+  if (Arch.empty()) {
+auto ArchsOrErr = getSystemGPUArchs(Args);
+if (!ArchsOrErr) {
+  std::string ErrMsg =
+  llvm::formatv("{0}", llvm::fmt_consume(ArchsOrErr.takeError()));
+  getDriver().Diag(diag::err_drv_undetermined_gpu_arch)
+  << llvm::Triple::getArchTypeName(getArch()) << ErrMsg << 
"-march";
+  Arch = OffloadArchToString(OffloadArch::HIPDefault);
+} else {
+  Arch = Args.MakeArgString(ArchsOrErr->front());
+}
+  }
+  DAL->AddJoinedArg(nullptr, Opts.getOption(options::OPT_march_EQ), Arch);
+}
+
+return DAL;
+  }
+
   for (Arg *A : Args) {
 if (!llvm::is_contained(*DAL, A))
   DAL->append(A);
diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c 
b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
new file mode 100644
index 000..03adeb8e6a7833c
--- /dev/null
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -0,0 +1,58 @@
+// REQUIRES: x86-registered-target, amdgpu-registered-target
+
+// Fail on invalid ROCm Path.
+// RUN:   not %clang -### -fopenmp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
+// RUN:   | FileCheck --check-prefix=FAIL %s
+
+// Enable multiple sanitizer's apart from ASan with invalid rocm-path.
+// RUN:   not %clang -### -fopenmp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fsanitize=leak -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm-invalid -nogpuinc  %s 2>&1 \
+// RUN:   | FileCheck --check-prefixes=UNSUPPORTED,FAIL %s
+
+// Memory, Leak, UndefinedBehaviour and Thread Sanitizer are not supported.
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address 
-fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm -nogpuinc  %s 2>&1 \
+// RUN:   | FileCheck --check-prefix=UNSUPPORTED %s
+
+
+// ASan Enabled Test Cases
+// ASan enabled for amdgpu-arch [gfx908]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address 
-fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=NOXNACK,GPUSAN %s
+
+// ASan enabled for amdgpu-arch [gfx908:xnack-]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack- -fsanitize=address 
-fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=XNACKNEG,GPUSAN %s
+
+// ASan enabled for amdgpu-arch [gfx908:xnack+]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address 
-fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=GPUSAN %s
+
+// ASan Disabled Test Cases
+// ASan disabled for amdgpu-arch [gfx908]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address 
-fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   

[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-02-02 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/124754

>From 960eb5de4abcf21dec34e8932c94621733b9d11b Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Mon, 3 Feb 2025 10:57:17 +0530
Subject: [PATCH 1/4] [OpenMP][ASan] Enable ASan Instrumentation for
 AMDGPUOpenMPToolChain.

Enable device code ASan instrumentation for openmp offload applications using
option '-fsanitize=address'.
---
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp  | 37 
 .../Driver/amdgpu-openmp-sanitize-options.c   | 58 +++
 2 files changed, 95 insertions(+)
 create mode 100644 clang/test/Driver/amdgpu-openmp-sanitize-options.c

diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp 
b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
index 24d244ba6f0e18b..01f84a4e4bc5637 100644
--- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
@@ -37,6 +37,16 @@ AMDGPUOpenMPToolChain::AMDGPUOpenMPToolChain(const Driver &D,
   // Lookup binaries into the driver directory, this is used to
   // discover the 'amdgpu-arch' executable.
   getProgramPaths().push_back(getDriver().Dir);
+  // Diagnose unsupported sanitizer options only once.
+  if (!Args.hasFlag(options::OPT_fgpu_sanitize, options::OPT_fno_gpu_sanitize,
+true))
+return;
+  for (auto *A : Args.filtered(options::OPT_fsanitize_EQ)) {
+SanitizerMask K = parseSanitizerValue(A->getValue(), 
/*AllowGroups=*/false);
+if (K != SanitizerKind::Address)
+  D.getDiags().Report(clang::diag::warn_drv_unsupported_option_for_target)
+  << A->getAsString(Args) << getTriple().str();
+  }
 }
 
 void AMDGPUOpenMPToolChain::addClangTargetOptions(
@@ -71,6 +81,33 @@ llvm::opt::DerivedArgList 
*AMDGPUOpenMPToolChain::TranslateArgs(
 
   const OptTable &Opts = getDriver().getOpts();
 
+  if (DeviceOffloadKind == Action::OFK_OpenMP) {
+for (Arg *A : Args) {
+  if (!shouldSkipSanitizeOption(*this, Args, BoundArch, A) &&
+  !llvm::is_contained(*DAL, A))
+DAL->append(A);
+}
+
+if (!DAL->hasArg(options::OPT_march_EQ)) {
+  StringRef Arch = BoundArch;
+  if (Arch.empty()) {
+auto ArchsOrErr = getSystemGPUArchs(Args);
+if (!ArchsOrErr) {
+  std::string ErrMsg =
+  llvm::formatv("{0}", llvm::fmt_consume(ArchsOrErr.takeError()));
+  getDriver().Diag(diag::err_drv_undetermined_gpu_arch)
+  << llvm::Triple::getArchTypeName(getArch()) << ErrMsg << 
"-march";
+  Arch = OffloadArchToString(OffloadArch::HIPDefault);
+} else {
+  Arch = Args.MakeArgString(ArchsOrErr->front());
+}
+  }
+  DAL->AddJoinedArg(nullptr, Opts.getOption(options::OPT_march_EQ), Arch);
+}
+
+return DAL;
+  }
+
   for (Arg *A : Args) {
 if (!llvm::is_contained(*DAL, A))
   DAL->append(A);
diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c 
b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
new file mode 100644
index 000..03adeb8e6a7833c
--- /dev/null
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -0,0 +1,58 @@
+// REQUIRES: x86-registered-target, amdgpu-registered-target
+
+// Fail on invalid ROCm Path.
+// RUN:   not %clang -### -fopenmp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
+// RUN:   | FileCheck --check-prefix=FAIL %s
+
+// Enable multiple sanitizer's apart from ASan with invalid rocm-path.
+// RUN:   not %clang -### -fopenmp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fsanitize=leak -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm-invalid -nogpuinc  %s 2>&1 \
+// RUN:   | FileCheck --check-prefixes=UNSUPPORTED,FAIL %s
+
+// Memory, Leak, UndefinedBehaviour and Thread Sanitizer are not supported.
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address 
-fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm -nogpuinc  %s 2>&1 \
+// RUN:   | FileCheck --check-prefix=UNSUPPORTED %s
+
+
+// ASan Enabled Test Cases
+// ASan enabled for amdgpu-arch [gfx908]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address 
-fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=NOXNACK,GPUSAN %s
+
+// ASan enabled for amdgpu-arch [gfx908:xnack-]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack- -fsanitize=address 
-fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=XNACKNEG,GPUSAN %s
+
+// ASan enabled for amdgpu-arch [gfx908:xnack+]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address 
-fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=GPUSAN %s
+
+// ASan Disabled Test Cases
+// ASan disabled for amdgpu-arch [gfx908]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address 
-fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   

[clang] [Driver] Refactor option '-mlink-bitcode-file'. (PR #125322)

2025-01-31 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 closed 
https://github.com/llvm/llvm-project/pull/125322
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-01-30 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/124754

>From 741fcf90830c6a30be851c43924e9ab95c40b8a7 Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Tue, 28 Jan 2025 15:15:01 +0530
Subject: [PATCH 1/2] [OpenMP][ASan] Enable ASan Instrumentation for
 AMDGPUOpenMPToolChain.

Enable device code ASan instrumentation for openmp offload applications
using option '-fsanitize=address'.
---
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp  | 16 -
 .../Driver/amdgpu-openmp-sanitize-options.c   | 58 +++
 2 files changed, 72 insertions(+), 2 deletions(-)
 create mode 100644 clang/test/Driver/amdgpu-openmp-sanitize-options.c

diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp 
b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
index 2b8917106afc14..243d9aac019498 100644
--- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
@@ -37,6 +37,16 @@ AMDGPUOpenMPToolChain::AMDGPUOpenMPToolChain(const Driver &D,
   // Lookup binaries into the driver directory, this is used to
   // discover the 'amdgpu-arch' executable.
   getProgramPaths().push_back(getDriver().Dir);
+  // Diagnose unsupported sanitizer options only once.
+  if (!Args.hasFlag(options::OPT_fgpu_sanitize, options::OPT_fno_gpu_sanitize,
+true))
+return;
+  for (auto *A : Args.filtered(options::OPT_fsanitize_EQ)) {
+SanitizerMask K = parseSanitizerValue(A->getValue(), 
/*AllowGroups=*/false);
+if (K != SanitizerKind::Address)
+  D.getDiags().Report(clang::diag::warn_drv_unsupported_option_for_target)
+  << A->getAsString(Args) << getTriple().str();
+  }
 }
 
 void AMDGPUOpenMPToolChain::addClangTargetOptions(
@@ -72,9 +82,11 @@ llvm::opt::DerivedArgList 
*AMDGPUOpenMPToolChain::TranslateArgs(
   const OptTable &Opts = getDriver().getOpts();
 
   if (DeviceOffloadKind == Action::OFK_OpenMP) {
-for (Arg *A : Args)
-  if (!llvm::is_contained(*DAL, A))
+for (Arg *A : Args) {
+  if (!shouldSkipSanitizeOption(*this, Args, BoundArch, A) &&
+  !llvm::is_contained(*DAL, A))
 DAL->append(A);
+}
 
 if (!DAL->hasArg(options::OPT_march_EQ)) {
   StringRef Arch = BoundArch;
diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c 
b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
new file mode 100644
index 00..03adeb8e6a7833
--- /dev/null
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -0,0 +1,58 @@
+// REQUIRES: x86-registered-target, amdgpu-registered-target
+
+// Fail on invalid ROCm Path.
+// RUN:   not %clang -### -fopenmp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
+// RUN:   | FileCheck --check-prefix=FAIL %s
+
+// Enable multiple sanitizer's apart from ASan with invalid rocm-path.
+// RUN:   not %clang -### -fopenmp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fsanitize=leak -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm-invalid -nogpuinc  %s 2>&1 \
+// RUN:   | FileCheck --check-prefixes=UNSUPPORTED,FAIL %s
+
+// Memory, Leak, UndefinedBehaviour and Thread Sanitizer are not supported.
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address 
-fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm -nogpuinc  %s 2>&1 \
+// RUN:   | FileCheck --check-prefix=UNSUPPORTED %s
+
+
+// ASan Enabled Test Cases
+// ASan enabled for amdgpu-arch [gfx908]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address 
-fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=NOXNACK,GPUSAN %s
+
+// ASan enabled for amdgpu-arch [gfx908:xnack-]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack- -fsanitize=address 
-fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=XNACKNEG,GPUSAN %s
+
+// ASan enabled for amdgpu-arch [gfx908:xnack+]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address 
-fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=GPUSAN %s
+
+// ASan Disabled Test Cases
+// ASan disabled for amdgpu-arch [gfx908]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address 
-fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=NOGPUSAN %s
+
+// ASan disabled for amdgpu-arch [gfx908:xnack-]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack- -fsanitize=address 
-fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=NOGPUSAN %s
+
+// ASan disabled for amdgpu-arch [gfx908:xnack+]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address 
-fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=NOGPUSAN %s
+
+// FAIL-DAG: error: cannot find ROCm device library for ABI version 5; provide 
its path via '--rocm-path' or '--rocm-device-lib-path', o

[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-01-30 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 edited 
https://github.com/llvm/llvm-project/pull/124754
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Refactor option '-mlink-bitcode-file'. (PR #125322)

2025-01-31 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 created 
https://github.com/llvm/llvm-project/pull/125322

Associate '-mlink-bitcode-file' as both CC1 and FC1 option.  Fixes 
https://gitlab.e4s.io/uo-public/llvm-openmp-offloading-v2/-/jobs/360327

>From c0eed4a42d294aac3237915ab83b4482936f206a Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Sat, 1 Feb 2025 07:02:52 +0530
Subject: [PATCH] [Driver] Refactor option '-mlink-bitcode-file'.

Associate '-mlink-bitcode-file' as both CC1 and FC1 option.  Fixes
https://gitlab.e4s.io/uo-public/llvm-openmp-offloading-v2/-/jobs/360327
---
 clang/include/clang/Driver/Options.td | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index d8123cc39fdc951..e602e9ba9cceb97 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -7302,6 +7302,8 @@ let Visibility = [CC1Option, FC1Option] in {
 def mlink_builtin_bitcode : Separate<["-"], "mlink-builtin-bitcode">,
   HelpText<"Link and internalize needed symbols from the given bitcode file "
"before performing optimizations.">;
+def mlink_bitcode_file : Separate<["-"], "mlink-bitcode-file">,
+  HelpText<"Link the given bitcode file before performing optimizations.">;
 } // let Visibility = [CC1Option, FC1Option]
 
 let Visibility = [CC1Option] in {
@@ -7411,8 +7413,6 @@ defm constructor_aliases : 
BoolMOption<"constructor-aliases",
   NegFlag,
   BothFlags<[], [ClangOption, CC1Option],
   " emitting complete constructors and destructors as aliases when 
possible">>;
-def mlink_bitcode_file : Separate<["-"], "mlink-bitcode-file">,
-  HelpText<"Link the given bitcode file before performing optimizations.">;
 defm link_builtin_bitcode_postopt: BoolMOption<"link-builtin-bitcode-postopt",
   CodeGenOpts<"LinkBitcodePostopt">, DefaultFalse,
   PosFlaghttps://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)

2025-01-31 Thread Amit Kumar Pandey via cfe-commits

ampandey-1995 wrote:

PR https://github.com/llvm/llvm-project/pull/125322 is up for fixes.

https://github.com/llvm/llvm-project/pull/123922
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver] Refactor option '-mlink-bitcode-file'. (PR #125322)

2025-01-31 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/125322

>From c1c3563865977cd4bd5878f3b81992637fbded5b Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Sat, 1 Feb 2025 07:02:52 +0530
Subject: [PATCH] [Driver] Refactor option '-mlink-bitcode-file'.

Associate '-mlink-bitcode-file' as both CC1 and FC1 option.  Fixes
https://gitlab.e4s.io/uo-public/llvm-openmp-offloading-v2/-/jobs/360327
---
 clang/include/clang/Driver/Options.td | 18 ++
 1 file changed, 10 insertions(+), 8 deletions(-)

diff --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index d8123cc39fdc95..0ab923fcdd5838 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -7302,6 +7302,9 @@ let Visibility = [CC1Option, FC1Option] in {
 def mlink_builtin_bitcode : Separate<["-"], "mlink-builtin-bitcode">,
   HelpText<"Link and internalize needed symbols from the given bitcode file "
"before performing optimizations.">;
+def mlink_bitcode_file
+: Separate<["-"], "mlink-bitcode-file">,
+  HelpText<"Link the given bitcode file before performing optimizations.">;
 } // let Visibility = [CC1Option, FC1Option]
 
 let Visibility = [CC1Option] in {
@@ -7405,14 +7408,13 @@ def msmall_data_limit : Separate<["-"], 
"msmall-data-limit">,
 def funwind_tables_EQ : Joined<["-"], "funwind-tables=">,
   HelpText<"Generate unwinding tables for all functions">,
   MarshallingInfoInt>;
-defm constructor_aliases : BoolMOption<"constructor-aliases",
-  CodeGenOpts<"CXXCtorDtorAliases">, DefaultFalse,
-  PosFlag,
-  NegFlag,
-  BothFlags<[], [ClangOption, CC1Option],
-  " emitting complete constructors and destructors as aliases when 
possible">>;
-def mlink_bitcode_file : Separate<["-"], "mlink-bitcode-file">,
-  HelpText<"Link the given bitcode file before performing optimizations.">;
+defm constructor_aliases
+: BoolMOption<"constructor-aliases", CodeGenOpts<"CXXCtorDtorAliases">,
+  DefaultFalse, PosFlag,
+  NegFlag,
+  BothFlags<[], [ClangOption, CC1Option],
+" emitting complete constructors and destructors "
+"as aliases when possible">>;
 defm link_builtin_bitcode_postopt: BoolMOption<"link-builtin-bitcode-postopt",
   CodeGenOpts<"LinkBitcodePostopt">, DefaultFalse,
   PosFlaghttps://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)

2025-01-22 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/123922

>From bb518655127ad49e527bbc2a57a5fd8a3f9f0495 Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Wed, 22 Jan 2025 15:41:41 +0530
Subject: [PATCH] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode"
 linking.

ASan bitcode linking is currently available for HIPAMD,OpenMP and
OpenCL. Moving sanitizer specific common parts of logic to appropriate
API's so as to reduce code redundancy and maintainability.
---
 .../clang/Basic/DiagnosticDriverKinds.td  |  4 ++
 clang/lib/Driver/ToolChains/AMDGPU.cpp| 71 +--
 clang/lib/Driver/ToolChains/AMDGPU.h  |  2 +-
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp  |  7 +-
 clang/lib/Driver/ToolChains/HIPAMD.cpp| 25 ++-
 clang/lib/Driver/ToolChains/ROCm.h| 18 ++---
 clang/test/Driver/hip-sanitize-options.hip|  6 +-
 clang/test/Driver/rocm-device-libs.cl |  2 +-
 8 files changed, 74 insertions(+), 61 deletions(-)

diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td 
b/clang/include/clang/Basic/DiagnosticDriverKinds.td
index 42c39ac6606c7f..90859e62582101 100644
--- a/clang/include/clang/Basic/DiagnosticDriverKinds.td
+++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td
@@ -70,6 +70,10 @@ def err_drv_no_rocm_device_lib : Error<
   "cannot find ROCm device library%select{| for %1| for ABI version %1}0; 
provide its path via "
   "'--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build "
   "without ROCm device library">;
+def err_drv_no_asan_rt_lib
+: Error<"AMDGPU address sanitizer runtime library (asanrtl) is not found. "
+"Please install ROCm device library which supports address "
+"sanitizer">;
 def err_drv_no_hip_runtime : Error<
   "cannot find HIP runtime; provide its path via '--rocm-path', or pass "
   "'-nogpuinc' to build without HIP runtime">;
diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index a8061ffd9321f5..7a6b38f13c102f 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -946,8 +946,12 @@ void ROCMToolChain::addClangTargetOptions(
   StringRef LibDeviceFile = RocmInstallation->getLibDeviceFile(CanonArch);
   auto ABIVer = DeviceLibABIVersion::fromCodeObjectVersion(
   getAMDGPUCodeObjectVersion(getDriver(), DriverArgs));
+  std::tuple GPUSan(
+  DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
+ options::OPT_fno_gpu_sanitize, true),
+  getSanitizerArgs(DriverArgs));
   if (!RocmInstallation->checkCommonBitcodeLibs(CanonArch, LibDeviceFile,
-ABIVer))
+ABIVer, GPUSan))
 return;
 
   bool Wave64 = isWave64(DriverArgs, Kind);
@@ -965,28 +969,32 @@ void ROCMToolChain::addClangTargetOptions(
   DriverArgs.hasArg(options::OPT_cl_fp32_correctly_rounded_divide_sqrt);
 
   // Add the OpenCL specific bitcode library.
-  llvm::SmallVector BCLibs;
-  BCLibs.push_back(RocmInstallation->getOpenCLPath().str());
+  llvm::SmallVector BCLibs;
+  BCLibs.emplace_back(RocmInstallation->getOpenCLPath().str());
 
   // Add the generic set of libraries.
   BCLibs.append(RocmInstallation->getCommonBitcodeLibs(
   DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt,
-  FastRelaxedMath, CorrectSqrt, ABIVer, false));
+  FastRelaxedMath, CorrectSqrt, ABIVer, GPUSan, false));
 
-  if (getSanitizerArgs(DriverArgs).needsAsanRt()) {
-CC1Args.push_back("-mlink-bitcode-file");
-CC1Args.push_back(
-DriverArgs.MakeArgString(RocmInstallation->getAsanRTLPath()));
-  }
-  for (StringRef BCFile : BCLibs) {
-CC1Args.push_back("-mlink-builtin-bitcode");
+  for (auto [BCFile, Internalize] : BCLibs) {
+if (Internalize)
+  CC1Args.push_back("-mlink-builtin-bitcode");
+else
+  CC1Args.push_back("-mlink-bitcode-file");
 CC1Args.push_back(DriverArgs.MakeArgString(BCFile));
   }
 }
 
 bool RocmInstallationDetector::checkCommonBitcodeLibs(
-StringRef GPUArch, StringRef LibDeviceFile,
-DeviceLibABIVersion ABIVer) const {
+StringRef GPUArch, StringRef LibDeviceFile, DeviceLibABIVersion ABIVer,
+std::tuple &GPUSan) const {
+  if (std::get(GPUSan))
+if (std::get(GPUSan).needsAsanRt() &&
+getAsanRTLPath().empty()) {
+  D.Diag(diag::err_drv_no_asan_rt_lib);
+  return false;
+}
   if (!hasDeviceLibrary()) {
 D.Diag(diag::err_drv_no_rocm_device_lib) << 0;
 return false;
@@ -1002,18 +1010,35 @@ bool RocmInstallationDetector::checkCommonBitcodeLibs(
   return true;
 }
 
-llvm::SmallVector
+llvm::SmallVector
 RocmInstallationDetector::getCommonBitcodeLibs(
 const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile, bool Wave64,
 bool DAZ, bool FiniteOnly, bool UnsafeMathOpt, bool FastRelaxedMath,
-bool CorrectSqrt, DeviceLibABIVersion ABIVer

[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)

2025-01-22 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 created 
https://github.com/llvm/llvm-project/pull/123922

ASan bitcode linking is currently available for HIPAMD,OpenMP and OpenCL. 
Moving sanitizer specific common parts of logic to appropriate API's so as to 
reduce code redundancy and maintainability.

>From f6e05b8327ac12ad80ac0f4fabc3c66526d1a4f4 Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Wed, 22 Jan 2025 15:41:41 +0530
Subject: [PATCH] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode"
 linking.

ASan bitcode linking is currently available for HIPAMD,OpenMP and
OpenCL. Moving sanitizer specific common parts of logic to appropriate
API's so as to reduce code redundancy and maintainability.
---
 .../clang/Basic/DiagnosticDriverKinds.td  |  3 +
 clang/lib/Driver/ToolChains/AMDGPU.cpp| 55 ---
 clang/lib/Driver/ToolChains/AMDGPU.h  |  2 +-
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp  |  7 +--
 clang/lib/Driver/ToolChains/HIPAMD.cpp| 19 +--
 clang/lib/Driver/ToolChains/ROCm.h|  7 ++-
 clang/test/Driver/hip-sanitize-options.hip|  6 +-
 clang/test/Driver/rocm-device-libs.cl |  2 +-
 8 files changed, 49 insertions(+), 52 deletions(-)

diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td 
b/clang/include/clang/Basic/DiagnosticDriverKinds.td
index 42c39ac6606c7f..14125ecff5a114 100644
--- a/clang/include/clang/Basic/DiagnosticDriverKinds.td
+++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td
@@ -70,6 +70,9 @@ def err_drv_no_rocm_device_lib : Error<
   "cannot find ROCm device library%select{| for %1| for ABI version %1}0; 
provide its path via "
   "'--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build "
   "without ROCm device library">;
+def err_drv_no_asan_rt_lib : Error<
+  "AMDGPU address sanitizer runtime library (asanrtl) is not found. "
+  "Please install ROCm device library which supports address sanitizer">;
 def err_drv_no_hip_runtime : Error<
   "cannot find HIP runtime; provide its path via '--rocm-path', or pass "
   "'-nogpuinc' to build without HIP runtime">;
diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index a8061ffd9321f5..bdbd9c6351078a 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -946,8 +946,9 @@ void ROCMToolChain::addClangTargetOptions(
   StringRef LibDeviceFile = RocmInstallation->getLibDeviceFile(CanonArch);
   auto ABIVer = DeviceLibABIVersion::fromCodeObjectVersion(
   getAMDGPUCodeObjectVersion(getDriver(), DriverArgs));
+  std::tuple 
GPUSan(DriverArgs.hasFlag(options::OPT_fgpu_sanitize,options::OPT_fno_gpu_sanitize,true),getSanitizerArgs(DriverArgs));
   if (!RocmInstallation->checkCommonBitcodeLibs(CanonArch, LibDeviceFile,
-ABIVer))
+ABIVer,GPUSan))
 return;
 
   bool Wave64 = isWave64(DriverArgs, Kind);
@@ -965,28 +966,31 @@ void ROCMToolChain::addClangTargetOptions(
   DriverArgs.hasArg(options::OPT_cl_fp32_correctly_rounded_divide_sqrt);
 
   // Add the OpenCL specific bitcode library.
-  llvm::SmallVector BCLibs;
-  BCLibs.push_back(RocmInstallation->getOpenCLPath().str());
+  llvm::SmallVector BCLibs;
+  BCLibs.emplace_back(RocmInstallation->getOpenCLPath().str());
 
   // Add the generic set of libraries.
   BCLibs.append(RocmInstallation->getCommonBitcodeLibs(
   DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt,
-  FastRelaxedMath, CorrectSqrt, ABIVer, false));
+  FastRelaxedMath, CorrectSqrt, ABIVer, GPUSan, false));
 
-  if (getSanitizerArgs(DriverArgs).needsAsanRt()) {
-CC1Args.push_back("-mlink-bitcode-file");
-CC1Args.push_back(
-DriverArgs.MakeArgString(RocmInstallation->getAsanRTLPath()));
-  }
-  for (StringRef BCFile : BCLibs) {
+  for (auto [BCFile,Internalize] : BCLibs) {
+   if(Internalize)
 CC1Args.push_back("-mlink-builtin-bitcode");
+   else
+   CC1Args.push_back("-mlink-bitcode-file");
 CC1Args.push_back(DriverArgs.MakeArgString(BCFile));
   }
 }
 
 bool RocmInstallationDetector::checkCommonBitcodeLibs(
 StringRef GPUArch, StringRef LibDeviceFile,
-DeviceLibABIVersion ABIVer) const {
+DeviceLibABIVersion ABIVer,std::tuple &GPUSan) 
const {
+   if(std::get(GPUSan))
+   if(std::get(GPUSan).needsAsanRt() && 
getAsanRTLPath().empty()){
+   D.Diag(diag::err_drv_no_asan_rt_lib);
+   return false;
+   }
   if (!hasDeviceLibrary()) {
 D.Diag(diag::err_drv_no_rocm_device_lib) << 0;
 return false;
@@ -1002,18 +1006,28 @@ bool RocmInstallationDetector::checkCommonBitcodeLibs(
   return true;
 }
 
-llvm::SmallVector
+llvm::SmallVector
 RocmInstallationDetector::getCommonBitcodeLibs(
 const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile, bool Wave64,
 bool DAZ, bool F

[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)

2025-01-22 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/123922

>From 0c62a289551a2b867448cb3f04ef901ad93799a3 Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Wed, 22 Jan 2025 15:41:41 +0530
Subject: [PATCH] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode"
 linking.

ASan bitcode linking is currently available for HIPAMD,OpenMP and
OpenCL. Moving sanitizer specific common parts of logic to appropriate
API's so as to reduce code redundancy and maintainability.
---
 .../clang/Basic/DiagnosticDriverKinds.td  |  4 ++
 clang/lib/Driver/ToolChains/AMDGPU.cpp| 71 +--
 clang/lib/Driver/ToolChains/AMDGPU.h  |  2 +-
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp  |  7 +-
 clang/lib/Driver/ToolChains/HIPAMD.cpp| 19 +
 clang/lib/Driver/ToolChains/ROCm.h| 18 ++---
 clang/test/Driver/hip-sanitize-options.hip|  6 +-
 clang/test/Driver/rocm-device-libs.cl |  2 +-
 8 files changed, 71 insertions(+), 58 deletions(-)

diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td 
b/clang/include/clang/Basic/DiagnosticDriverKinds.td
index 42c39ac6606c7f..90859e62582101 100644
--- a/clang/include/clang/Basic/DiagnosticDriverKinds.td
+++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td
@@ -70,6 +70,10 @@ def err_drv_no_rocm_device_lib : Error<
   "cannot find ROCm device library%select{| for %1| for ABI version %1}0; 
provide its path via "
   "'--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build "
   "without ROCm device library">;
+def err_drv_no_asan_rt_lib
+: Error<"AMDGPU address sanitizer runtime library (asanrtl) is not found. "
+"Please install ROCm device library which supports address "
+"sanitizer">;
 def err_drv_no_hip_runtime : Error<
   "cannot find HIP runtime; provide its path via '--rocm-path', or pass "
   "'-nogpuinc' to build without HIP runtime">;
diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index a8061ffd9321f5..7a6b38f13c102f 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -946,8 +946,12 @@ void ROCMToolChain::addClangTargetOptions(
   StringRef LibDeviceFile = RocmInstallation->getLibDeviceFile(CanonArch);
   auto ABIVer = DeviceLibABIVersion::fromCodeObjectVersion(
   getAMDGPUCodeObjectVersion(getDriver(), DriverArgs));
+  std::tuple GPUSan(
+  DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
+ options::OPT_fno_gpu_sanitize, true),
+  getSanitizerArgs(DriverArgs));
   if (!RocmInstallation->checkCommonBitcodeLibs(CanonArch, LibDeviceFile,
-ABIVer))
+ABIVer, GPUSan))
 return;
 
   bool Wave64 = isWave64(DriverArgs, Kind);
@@ -965,28 +969,32 @@ void ROCMToolChain::addClangTargetOptions(
   DriverArgs.hasArg(options::OPT_cl_fp32_correctly_rounded_divide_sqrt);
 
   // Add the OpenCL specific bitcode library.
-  llvm::SmallVector BCLibs;
-  BCLibs.push_back(RocmInstallation->getOpenCLPath().str());
+  llvm::SmallVector BCLibs;
+  BCLibs.emplace_back(RocmInstallation->getOpenCLPath().str());
 
   // Add the generic set of libraries.
   BCLibs.append(RocmInstallation->getCommonBitcodeLibs(
   DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt,
-  FastRelaxedMath, CorrectSqrt, ABIVer, false));
+  FastRelaxedMath, CorrectSqrt, ABIVer, GPUSan, false));
 
-  if (getSanitizerArgs(DriverArgs).needsAsanRt()) {
-CC1Args.push_back("-mlink-bitcode-file");
-CC1Args.push_back(
-DriverArgs.MakeArgString(RocmInstallation->getAsanRTLPath()));
-  }
-  for (StringRef BCFile : BCLibs) {
-CC1Args.push_back("-mlink-builtin-bitcode");
+  for (auto [BCFile, Internalize] : BCLibs) {
+if (Internalize)
+  CC1Args.push_back("-mlink-builtin-bitcode");
+else
+  CC1Args.push_back("-mlink-bitcode-file");
 CC1Args.push_back(DriverArgs.MakeArgString(BCFile));
   }
 }
 
 bool RocmInstallationDetector::checkCommonBitcodeLibs(
-StringRef GPUArch, StringRef LibDeviceFile,
-DeviceLibABIVersion ABIVer) const {
+StringRef GPUArch, StringRef LibDeviceFile, DeviceLibABIVersion ABIVer,
+std::tuple &GPUSan) const {
+  if (std::get(GPUSan))
+if (std::get(GPUSan).needsAsanRt() &&
+getAsanRTLPath().empty()) {
+  D.Diag(diag::err_drv_no_asan_rt_lib);
+  return false;
+}
   if (!hasDeviceLibrary()) {
 D.Diag(diag::err_drv_no_rocm_device_lib) << 0;
 return false;
@@ -1002,18 +1010,35 @@ bool RocmInstallationDetector::checkCommonBitcodeLibs(
   return true;
 }
 
-llvm::SmallVector
+llvm::SmallVector
 RocmInstallationDetector::getCommonBitcodeLibs(
 const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile, bool Wave64,
 bool DAZ, bool FiniteOnly, bool UnsafeMathOpt, bool FastRelaxedMath,
-bool CorrectSqrt, DeviceLibABIVersion ABIVer, 

[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)

2025-01-23 Thread Amit Kumar Pandey via cfe-commits


@@ -70,6 +70,10 @@ def err_drv_no_rocm_device_lib : Error<
   "cannot find ROCm device library%select{| for %1| for ABI version %1}0; 
provide its path via "
   "'--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build "
   "without ROCm device library">;
+def err_drv_no_asan_rt_lib
+: Error<"AMDGPU address sanitizer runtime library (asanrtl) is not found. "
+"Please install ROCm device library which supports address "
+"sanitizer">;

ampandey-1995 wrote:

Thanks, @arsenm . We discussed internally and now removing the ```asanrtl 
bitcode is not found``` diagnostic. 

Hi @arsenm, @yxsamliu, @b-sumner , should I edit the lit 
test(https://github.com/llvm/llvm-project/blob/bb518655127ad49e527bbc2a57a5fd8a3f9f0495/clang/test/Driver/hip-sanitize-options.hip#L63)
 with generic diagnostic or remove it also?

https://github.com/llvm/llvm-project/pull/123922
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)

2025-01-23 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 edited 
https://github.com/llvm/llvm-project/pull/123922
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)

2025-01-26 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/123922

>From 341fa64bf30585dea8193565142d713f11e008eb Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Wed, 22 Jan 2025 15:41:41 +0530
Subject: [PATCH] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode"
 linking.

ASan bitcode linking is currently available for HIPAMD,OpenMP and
OpenCL. Moving sanitizer specific common parts of logic to appropriate
API's so as to reduce code redundancy and maintainability.
---
 .../clang/Basic/DiagnosticDriverKinds.td  |  4 ++
 clang/lib/Driver/ToolChains/AMDGPU.cpp| 60 +--
 clang/lib/Driver/ToolChains/AMDGPU.h  |  2 +-
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp  |  7 +--
 clang/lib/Driver/ToolChains/HIPAMD.cpp| 25 ++--
 clang/lib/Driver/ToolChains/ROCm.h| 17 +++---
 clang/test/Driver/hip-sanitize-options.hip|  8 +--
 clang/test/Driver/rocm-device-libs.cl |  2 +-
 8 files changed, 65 insertions(+), 60 deletions(-)

diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td 
b/clang/include/clang/Basic/DiagnosticDriverKinds.td
index 42c39ac6606c7f..90859e62582101 100644
--- a/clang/include/clang/Basic/DiagnosticDriverKinds.td
+++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td
@@ -70,6 +70,10 @@ def err_drv_no_rocm_device_lib : Error<
   "cannot find ROCm device library%select{| for %1| for ABI version %1}0; 
provide its path via "
   "'--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build "
   "without ROCm device library">;
+def err_drv_no_asan_rt_lib
+: Error<"AMDGPU address sanitizer runtime library (asanrtl) is not found. "
+"Please install ROCm device library which supports address "
+"sanitizer">;
 def err_drv_no_hip_runtime : Error<
   "cannot find HIP runtime; provide its path via '--rocm-path', or pass "
   "'-nogpuinc' to build without HIP runtime">;
diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index a8061ffd9321f5..0448d1b7e71013 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -946,6 +946,10 @@ void ROCMToolChain::addClangTargetOptions(
   StringRef LibDeviceFile = RocmInstallation->getLibDeviceFile(CanonArch);
   auto ABIVer = DeviceLibABIVersion::fromCodeObjectVersion(
   getAMDGPUCodeObjectVersion(getDriver(), DriverArgs));
+  std::tuple GPUSan(
+  DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
+ options::OPT_fno_gpu_sanitize, true),
+  getSanitizerArgs(DriverArgs));
   if (!RocmInstallation->checkCommonBitcodeLibs(CanonArch, LibDeviceFile,
 ABIVer))
 return;
@@ -965,28 +969,25 @@ void ROCMToolChain::addClangTargetOptions(
   DriverArgs.hasArg(options::OPT_cl_fp32_correctly_rounded_divide_sqrt);
 
   // Add the OpenCL specific bitcode library.
-  llvm::SmallVector BCLibs;
-  BCLibs.push_back(RocmInstallation->getOpenCLPath().str());
+  llvm::SmallVector BCLibs;
+  BCLibs.emplace_back(RocmInstallation->getOpenCLPath().str());
 
   // Add the generic set of libraries.
   BCLibs.append(RocmInstallation->getCommonBitcodeLibs(
   DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt,
-  FastRelaxedMath, CorrectSqrt, ABIVer, false));
+  FastRelaxedMath, CorrectSqrt, ABIVer, GPUSan, false));
 
-  if (getSanitizerArgs(DriverArgs).needsAsanRt()) {
-CC1Args.push_back("-mlink-bitcode-file");
-CC1Args.push_back(
-DriverArgs.MakeArgString(RocmInstallation->getAsanRTLPath()));
-  }
-  for (StringRef BCFile : BCLibs) {
-CC1Args.push_back("-mlink-builtin-bitcode");
+  for (auto [BCFile, Internalize] : BCLibs) {
+if (Internalize)
+  CC1Args.push_back("-mlink-builtin-bitcode");
+else
+  CC1Args.push_back("-mlink-bitcode-file");
 CC1Args.push_back(DriverArgs.MakeArgString(BCFile));
   }
 }
 
 bool RocmInstallationDetector::checkCommonBitcodeLibs(
-StringRef GPUArch, StringRef LibDeviceFile,
-DeviceLibABIVersion ABIVer) const {
+StringRef GPUArch, StringRef LibDeviceFile, DeviceLibABIVersion ABIVer) 
const {
   if (!hasDeviceLibrary()) {
 D.Diag(diag::err_drv_no_rocm_device_lib) << 0;
 return false;
@@ -1002,18 +1003,35 @@ bool RocmInstallationDetector::checkCommonBitcodeLibs(
   return true;
 }
 
-llvm::SmallVector
+llvm::SmallVector
 RocmInstallationDetector::getCommonBitcodeLibs(
 const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile, bool Wave64,
 bool DAZ, bool FiniteOnly, bool UnsafeMathOpt, bool FastRelaxedMath,
-bool CorrectSqrt, DeviceLibABIVersion ABIVer, bool isOpenMP = false) const 
{
-  llvm::SmallVector BCLibs;
-
-  auto AddBCLib = [&](StringRef BCFile) { BCLibs.push_back(BCFile.str()); };
+bool CorrectSqrt, DeviceLibABIVersion ABIVer,
+const std::tuple &GPUSan,
+bool isOpenMP = false) const {
+  llvm::SmallVector BCLibs;
+
+  auto GPUSanEnabl

[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)

2025-01-26 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/123922

>From 5a800480f205497f9f22e833e41f4bb0065b768b Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Wed, 22 Jan 2025 15:41:41 +0530
Subject: [PATCH] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode"
 linking.

ASan bitcode linking is currently available for HIPAMD,OpenMP and
OpenCL. Moving sanitizer specific common parts of logic to appropriate
API's so as to reduce code redundancy and maintainability.
---
 .../clang/Basic/DiagnosticDriverKinds.td  |  4 ++
 clang/lib/Driver/ToolChains/AMDGPU.cpp| 57 +--
 clang/lib/Driver/ToolChains/AMDGPU.h  |  2 +-
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp  |  7 +--
 clang/lib/Driver/ToolChains/HIPAMD.cpp| 25 ++--
 clang/lib/Driver/ToolChains/ROCm.h| 12 ++--
 clang/test/Driver/hip-sanitize-options.hip|  8 +--
 clang/test/Driver/rocm-device-libs.cl |  2 +-
 8 files changed, 61 insertions(+), 56 deletions(-)

diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td 
b/clang/include/clang/Basic/DiagnosticDriverKinds.td
index 42c39ac6606c7f..90859e62582101 100644
--- a/clang/include/clang/Basic/DiagnosticDriverKinds.td
+++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td
@@ -70,6 +70,10 @@ def err_drv_no_rocm_device_lib : Error<
   "cannot find ROCm device library%select{| for %1| for ABI version %1}0; 
provide its path via "
   "'--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build "
   "without ROCm device library">;
+def err_drv_no_asan_rt_lib
+: Error<"AMDGPU address sanitizer runtime library (asanrtl) is not found. "
+"Please install ROCm device library which supports address "
+"sanitizer">;
 def err_drv_no_hip_runtime : Error<
   "cannot find HIP runtime; provide its path via '--rocm-path', or pass "
   "'-nogpuinc' to build without HIP runtime">;
diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index a8061ffd9321f5..4fb77ecedaf4a5 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -946,6 +946,10 @@ void ROCMToolChain::addClangTargetOptions(
   StringRef LibDeviceFile = RocmInstallation->getLibDeviceFile(CanonArch);
   auto ABIVer = DeviceLibABIVersion::fromCodeObjectVersion(
   getAMDGPUCodeObjectVersion(getDriver(), DriverArgs));
+  std::tuple GPUSan(
+  DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
+ options::OPT_fno_gpu_sanitize, true),
+  getSanitizerArgs(DriverArgs));
   if (!RocmInstallation->checkCommonBitcodeLibs(CanonArch, LibDeviceFile,
 ABIVer))
 return;
@@ -965,21 +969,19 @@ void ROCMToolChain::addClangTargetOptions(
   DriverArgs.hasArg(options::OPT_cl_fp32_correctly_rounded_divide_sqrt);
 
   // Add the OpenCL specific bitcode library.
-  llvm::SmallVector BCLibs;
-  BCLibs.push_back(RocmInstallation->getOpenCLPath().str());
+  llvm::SmallVector BCLibs;
+  BCLibs.emplace_back(RocmInstallation->getOpenCLPath().str());
 
   // Add the generic set of libraries.
   BCLibs.append(RocmInstallation->getCommonBitcodeLibs(
   DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt,
-  FastRelaxedMath, CorrectSqrt, ABIVer, false));
+  FastRelaxedMath, CorrectSqrt, ABIVer, GPUSan, false));
 
-  if (getSanitizerArgs(DriverArgs).needsAsanRt()) {
-CC1Args.push_back("-mlink-bitcode-file");
-CC1Args.push_back(
-DriverArgs.MakeArgString(RocmInstallation->getAsanRTLPath()));
-  }
-  for (StringRef BCFile : BCLibs) {
-CC1Args.push_back("-mlink-builtin-bitcode");
+  for (auto [BCFile, Internalize] : BCLibs) {
+if (Internalize)
+  CC1Args.push_back("-mlink-builtin-bitcode");
+else
+  CC1Args.push_back("-mlink-bitcode-file");
 CC1Args.push_back(DriverArgs.MakeArgString(BCFile));
   }
 }
@@ -1002,18 +1004,35 @@ bool RocmInstallationDetector::checkCommonBitcodeLibs(
   return true;
 }
 
-llvm::SmallVector
+llvm::SmallVector
 RocmInstallationDetector::getCommonBitcodeLibs(
 const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile, bool Wave64,
 bool DAZ, bool FiniteOnly, bool UnsafeMathOpt, bool FastRelaxedMath,
-bool CorrectSqrt, DeviceLibABIVersion ABIVer, bool isOpenMP = false) const 
{
-  llvm::SmallVector BCLibs;
-
-  auto AddBCLib = [&](StringRef BCFile) { BCLibs.push_back(BCFile.str()); };
+bool CorrectSqrt, DeviceLibABIVersion ABIVer,
+const std::tuple &GPUSan,
+bool isOpenMP = false) const {
+  llvm::SmallVector BCLibs;
+
+  auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); };
+  auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib,
+  bool Internalize = true) {
+BCLib.ShouldInternalize = Internalize;
+BCLibs.emplace_back(BCLib);
+  };
+  auto AddSanBCLibs = [&]() {
+auto SanArgs = std::get(GPUSan);
+if (GPUSanEnabled()) {
+

[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)

2025-01-26 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/123922

>From 55582eeada535b101ec43dadbad3922021951343 Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Wed, 22 Jan 2025 15:41:41 +0530
Subject: [PATCH] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode"
 linking.

ASan bitcode linking is currently available for HIPAMD,OpenMP and
OpenCL. Moving sanitizer specific common parts of logic to appropriate
API's so as to reduce code redundancy and maintainability.
---
 clang/lib/Driver/ToolChains/AMDGPU.cpp   | 57 ++--
 clang/lib/Driver/ToolChains/AMDGPU.h |  2 +-
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp |  7 +--
 clang/lib/Driver/ToolChains/HIPAMD.cpp   | 25 ++---
 clang/lib/Driver/ToolChains/ROCm.h   | 12 ++---
 clang/test/Driver/hip-sanitize-options.hip   |  8 +--
 clang/test/Driver/rocm-device-libs.cl|  2 +-
 7 files changed, 57 insertions(+), 56 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index a8061ffd9321f5..4fb77ecedaf4a5 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -946,6 +946,10 @@ void ROCMToolChain::addClangTargetOptions(
   StringRef LibDeviceFile = RocmInstallation->getLibDeviceFile(CanonArch);
   auto ABIVer = DeviceLibABIVersion::fromCodeObjectVersion(
   getAMDGPUCodeObjectVersion(getDriver(), DriverArgs));
+  std::tuple GPUSan(
+  DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
+ options::OPT_fno_gpu_sanitize, true),
+  getSanitizerArgs(DriverArgs));
   if (!RocmInstallation->checkCommonBitcodeLibs(CanonArch, LibDeviceFile,
 ABIVer))
 return;
@@ -965,21 +969,19 @@ void ROCMToolChain::addClangTargetOptions(
   DriverArgs.hasArg(options::OPT_cl_fp32_correctly_rounded_divide_sqrt);
 
   // Add the OpenCL specific bitcode library.
-  llvm::SmallVector BCLibs;
-  BCLibs.push_back(RocmInstallation->getOpenCLPath().str());
+  llvm::SmallVector BCLibs;
+  BCLibs.emplace_back(RocmInstallation->getOpenCLPath().str());
 
   // Add the generic set of libraries.
   BCLibs.append(RocmInstallation->getCommonBitcodeLibs(
   DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt,
-  FastRelaxedMath, CorrectSqrt, ABIVer, false));
+  FastRelaxedMath, CorrectSqrt, ABIVer, GPUSan, false));
 
-  if (getSanitizerArgs(DriverArgs).needsAsanRt()) {
-CC1Args.push_back("-mlink-bitcode-file");
-CC1Args.push_back(
-DriverArgs.MakeArgString(RocmInstallation->getAsanRTLPath()));
-  }
-  for (StringRef BCFile : BCLibs) {
-CC1Args.push_back("-mlink-builtin-bitcode");
+  for (auto [BCFile, Internalize] : BCLibs) {
+if (Internalize)
+  CC1Args.push_back("-mlink-builtin-bitcode");
+else
+  CC1Args.push_back("-mlink-bitcode-file");
 CC1Args.push_back(DriverArgs.MakeArgString(BCFile));
   }
 }
@@ -1002,18 +1004,35 @@ bool RocmInstallationDetector::checkCommonBitcodeLibs(
   return true;
 }
 
-llvm::SmallVector
+llvm::SmallVector
 RocmInstallationDetector::getCommonBitcodeLibs(
 const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile, bool Wave64,
 bool DAZ, bool FiniteOnly, bool UnsafeMathOpt, bool FastRelaxedMath,
-bool CorrectSqrt, DeviceLibABIVersion ABIVer, bool isOpenMP = false) const 
{
-  llvm::SmallVector BCLibs;
-
-  auto AddBCLib = [&](StringRef BCFile) { BCLibs.push_back(BCFile.str()); };
+bool CorrectSqrt, DeviceLibABIVersion ABIVer,
+const std::tuple &GPUSan,
+bool isOpenMP = false) const {
+  llvm::SmallVector BCLibs;
+
+  auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); };
+  auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib,
+  bool Internalize = true) {
+BCLib.ShouldInternalize = Internalize;
+BCLibs.emplace_back(BCLib);
+  };
+  auto AddSanBCLibs = [&]() {
+auto SanArgs = std::get(GPUSan);
+if (GPUSanEnabled()) {
+  if (SanArgs.needsAsanRt())
+AddBCLib(getAsanRTLPath(), false);
+}
+  };
 
+  AddSanBCLibs();
   AddBCLib(getOCMLPath());
   if (!isOpenMP)
 AddBCLib(getOCKLPath());
+  else if (GPUSanEnabled() && isOpenMP)
+AddBCLib(getOCKLPath(), false);
   AddBCLib(getDenormalsAreZeroPath(DAZ));
   AddBCLib(getUnsafeMathPath(UnsafeMathOpt || FastRelaxedMath));
   AddBCLib(getFiniteOnlyPath(FiniteOnly || FastRelaxedMath));
@@ -1027,7 +1046,7 @@ RocmInstallationDetector::getCommonBitcodeLibs(
   return BCLibs;
 }
 
-llvm::SmallVector
+llvm::SmallVector
 ROCMToolChain::getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs,
const std::string &GPUArch,
bool isOpenMP) const {
@@ -1037,6 +1056,10 @@ ROCMToolChain::getCommonDeviceLibNames(const 
llvm::opt::ArgList &DriverArgs,
   StringRef LibDeviceFile = RocmInstallation->getLibDeviceFile(CanonArch);
   auto ABIVer = Devic

[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)

2025-01-27 Thread Amit Kumar Pandey via cfe-commits


@@ -70,6 +70,10 @@ def err_drv_no_rocm_device_lib : Error<
   "cannot find ROCm device library%select{| for %1| for ABI version %1}0; 
provide its path via "
   "'--rocm-path' or '--rocm-device-lib-path', or pass '-nogpulib' to build "
   "without ROCm device library">;
+def err_drv_no_asan_rt_lib
+: Error<"AMDGPU address sanitizer runtime library (asanrtl) is not found. "
+"Please install ROCm device library which supports address "
+"sanitizer">;

ampandey-1995 wrote:

Done.

https://github.com/llvm/llvm-project/pull/123922
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)

2025-01-27 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/123922

>From 5ec4303eb089038db1965b844b8b3bec136207bf Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Wed, 22 Jan 2025 15:41:41 +0530
Subject: [PATCH] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode"
 linking.

ASan bitcode linking is currently available for HIPAMD,OpenMP and
OpenCL. Moving sanitizer specific common parts of logic to appropriate
API's so as to reduce code redundancy and maintainability.
---
 clang/lib/Driver/ToolChains/AMDGPU.cpp   | 58 ++--
 clang/lib/Driver/ToolChains/AMDGPU.h |  2 +-
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp |  7 +--
 clang/lib/Driver/ToolChains/HIPAMD.cpp   | 25 ++---
 clang/lib/Driver/ToolChains/ROCm.h   | 12 ++--
 clang/test/Driver/hip-sanitize-options.hip   |  8 +--
 clang/test/Driver/rocm-device-libs.cl|  2 +-
 7 files changed, 58 insertions(+), 56 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index a8061ffd9321f58..83f486611bc9466 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -950,6 +950,11 @@ void ROCMToolChain::addClangTargetOptions(
 ABIVer))
 return;
 
+  std::tuple GPUSan(
+  DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
+ options::OPT_fno_gpu_sanitize, true),
+  getSanitizerArgs(DriverArgs));
+
   bool Wave64 = isWave64(DriverArgs, Kind);
 
   // TODO: There are way too many flags that change this. Do we need to check
@@ -965,21 +970,19 @@ void ROCMToolChain::addClangTargetOptions(
   DriverArgs.hasArg(options::OPT_cl_fp32_correctly_rounded_divide_sqrt);
 
   // Add the OpenCL specific bitcode library.
-  llvm::SmallVector BCLibs;
-  BCLibs.push_back(RocmInstallation->getOpenCLPath().str());
+  llvm::SmallVector BCLibs;
+  BCLibs.emplace_back(RocmInstallation->getOpenCLPath().str());
 
   // Add the generic set of libraries.
   BCLibs.append(RocmInstallation->getCommonBitcodeLibs(
   DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt,
-  FastRelaxedMath, CorrectSqrt, ABIVer, false));
+  FastRelaxedMath, CorrectSqrt, ABIVer, GPUSan, false));
 
-  if (getSanitizerArgs(DriverArgs).needsAsanRt()) {
-CC1Args.push_back("-mlink-bitcode-file");
-CC1Args.push_back(
-DriverArgs.MakeArgString(RocmInstallation->getAsanRTLPath()));
-  }
-  for (StringRef BCFile : BCLibs) {
-CC1Args.push_back("-mlink-builtin-bitcode");
+  for (auto [BCFile, Internalize] : BCLibs) {
+if (Internalize)
+  CC1Args.push_back("-mlink-builtin-bitcode");
+else
+  CC1Args.push_back("-mlink-bitcode-file");
 CC1Args.push_back(DriverArgs.MakeArgString(BCFile));
   }
 }
@@ -1002,18 +1005,35 @@ bool RocmInstallationDetector::checkCommonBitcodeLibs(
   return true;
 }
 
-llvm::SmallVector
+llvm::SmallVector
 RocmInstallationDetector::getCommonBitcodeLibs(
 const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile, bool Wave64,
 bool DAZ, bool FiniteOnly, bool UnsafeMathOpt, bool FastRelaxedMath,
-bool CorrectSqrt, DeviceLibABIVersion ABIVer, bool isOpenMP = false) const 
{
-  llvm::SmallVector BCLibs;
-
-  auto AddBCLib = [&](StringRef BCFile) { BCLibs.push_back(BCFile.str()); };
+bool CorrectSqrt, DeviceLibABIVersion ABIVer,
+const std::tuple &GPUSan,
+bool isOpenMP = false) const {
+  llvm::SmallVector BCLibs;
+
+  auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); };
+  auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib,
+  bool Internalize = true) {
+BCLib.ShouldInternalize = Internalize;
+BCLibs.emplace_back(BCLib);
+  };
+  auto AddSanBCLibs = [&]() {
+if (GPUSanEnabled()) {
+  auto SanArgs = std::get(GPUSan);
+  if (SanArgs.needsAsanRt())
+AddBCLib(getAsanRTLPath(), false);
+}
+  };
 
+  AddSanBCLibs();
   AddBCLib(getOCMLPath());
   if (!isOpenMP)
 AddBCLib(getOCKLPath());
+  else if (GPUSanEnabled() && isOpenMP)
+AddBCLib(getOCKLPath(), false);
   AddBCLib(getDenormalsAreZeroPath(DAZ));
   AddBCLib(getUnsafeMathPath(UnsafeMathOpt || FastRelaxedMath));
   AddBCLib(getFiniteOnlyPath(FiniteOnly || FastRelaxedMath));
@@ -1027,7 +1047,7 @@ RocmInstallationDetector::getCommonBitcodeLibs(
   return BCLibs;
 }
 
-llvm::SmallVector
+llvm::SmallVector
 ROCMToolChain::getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs,
const std::string &GPUArch,
bool isOpenMP) const {
@@ -1044,6 +1064,10 @@ ROCMToolChain::getCommonDeviceLibNames(const 
llvm::opt::ArgList &DriverArgs,
   // If --hip-device-lib is not set, add the default bitcode libraries.
   // TODO: There are way too many flags that change this. Do we need to check
   // them all?
+  std::tuple GPUSan(
+  DriverArgs.hasFlag(options::OPT_fgpu_sani

[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)

2025-01-28 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/123922

>From 5ec4303eb089038db1965b844b8b3bec136207bf Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Wed, 22 Jan 2025 15:41:41 +0530
Subject: [PATCH 1/3] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode"
 linking.

ASan bitcode linking is currently available for HIPAMD,OpenMP and
OpenCL. Moving sanitizer specific common parts of logic to appropriate
API's so as to reduce code redundancy and maintainability.
---
 clang/lib/Driver/ToolChains/AMDGPU.cpp   | 58 ++--
 clang/lib/Driver/ToolChains/AMDGPU.h |  2 +-
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp |  7 +--
 clang/lib/Driver/ToolChains/HIPAMD.cpp   | 25 ++---
 clang/lib/Driver/ToolChains/ROCm.h   | 12 ++--
 clang/test/Driver/hip-sanitize-options.hip   |  8 +--
 clang/test/Driver/rocm-device-libs.cl|  2 +-
 7 files changed, 58 insertions(+), 56 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index a8061ffd9321f5..83f486611bc946 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -950,6 +950,11 @@ void ROCMToolChain::addClangTargetOptions(
 ABIVer))
 return;
 
+  std::tuple GPUSan(
+  DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
+ options::OPT_fno_gpu_sanitize, true),
+  getSanitizerArgs(DriverArgs));
+
   bool Wave64 = isWave64(DriverArgs, Kind);
 
   // TODO: There are way too many flags that change this. Do we need to check
@@ -965,21 +970,19 @@ void ROCMToolChain::addClangTargetOptions(
   DriverArgs.hasArg(options::OPT_cl_fp32_correctly_rounded_divide_sqrt);
 
   // Add the OpenCL specific bitcode library.
-  llvm::SmallVector BCLibs;
-  BCLibs.push_back(RocmInstallation->getOpenCLPath().str());
+  llvm::SmallVector BCLibs;
+  BCLibs.emplace_back(RocmInstallation->getOpenCLPath().str());
 
   // Add the generic set of libraries.
   BCLibs.append(RocmInstallation->getCommonBitcodeLibs(
   DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt,
-  FastRelaxedMath, CorrectSqrt, ABIVer, false));
+  FastRelaxedMath, CorrectSqrt, ABIVer, GPUSan, false));
 
-  if (getSanitizerArgs(DriverArgs).needsAsanRt()) {
-CC1Args.push_back("-mlink-bitcode-file");
-CC1Args.push_back(
-DriverArgs.MakeArgString(RocmInstallation->getAsanRTLPath()));
-  }
-  for (StringRef BCFile : BCLibs) {
-CC1Args.push_back("-mlink-builtin-bitcode");
+  for (auto [BCFile, Internalize] : BCLibs) {
+if (Internalize)
+  CC1Args.push_back("-mlink-builtin-bitcode");
+else
+  CC1Args.push_back("-mlink-bitcode-file");
 CC1Args.push_back(DriverArgs.MakeArgString(BCFile));
   }
 }
@@ -1002,18 +1005,35 @@ bool RocmInstallationDetector::checkCommonBitcodeLibs(
   return true;
 }
 
-llvm::SmallVector
+llvm::SmallVector
 RocmInstallationDetector::getCommonBitcodeLibs(
 const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile, bool Wave64,
 bool DAZ, bool FiniteOnly, bool UnsafeMathOpt, bool FastRelaxedMath,
-bool CorrectSqrt, DeviceLibABIVersion ABIVer, bool isOpenMP = false) const 
{
-  llvm::SmallVector BCLibs;
-
-  auto AddBCLib = [&](StringRef BCFile) { BCLibs.push_back(BCFile.str()); };
+bool CorrectSqrt, DeviceLibABIVersion ABIVer,
+const std::tuple &GPUSan,
+bool isOpenMP = false) const {
+  llvm::SmallVector BCLibs;
+
+  auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); };
+  auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib,
+  bool Internalize = true) {
+BCLib.ShouldInternalize = Internalize;
+BCLibs.emplace_back(BCLib);
+  };
+  auto AddSanBCLibs = [&]() {
+if (GPUSanEnabled()) {
+  auto SanArgs = std::get(GPUSan);
+  if (SanArgs.needsAsanRt())
+AddBCLib(getAsanRTLPath(), false);
+}
+  };
 
+  AddSanBCLibs();
   AddBCLib(getOCMLPath());
   if (!isOpenMP)
 AddBCLib(getOCKLPath());
+  else if (GPUSanEnabled() && isOpenMP)
+AddBCLib(getOCKLPath(), false);
   AddBCLib(getDenormalsAreZeroPath(DAZ));
   AddBCLib(getUnsafeMathPath(UnsafeMathOpt || FastRelaxedMath));
   AddBCLib(getFiniteOnlyPath(FiniteOnly || FastRelaxedMath));
@@ -1027,7 +1047,7 @@ RocmInstallationDetector::getCommonBitcodeLibs(
   return BCLibs;
 }
 
-llvm::SmallVector
+llvm::SmallVector
 ROCMToolChain::getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs,
const std::string &GPUArch,
bool isOpenMP) const {
@@ -1044,6 +1064,10 @@ ROCMToolChain::getCommonDeviceLibNames(const 
llvm::opt::ArgList &DriverArgs,
   // If --hip-device-lib is not set, add the default bitcode libraries.
   // TODO: There are way too many flags that change this. Do we need to check
   // them all?
+  std::tuple GPUSan(
+  DriverArgs.hasFlag(options::OPT_fgpu_sa

[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-01-28 Thread Amit Kumar Pandey via cfe-commits


@@ -37,6 +37,16 @@ AMDGPUOpenMPToolChain::AMDGPUOpenMPToolChain(const Driver &D,
   // Lookup binaries into the driver directory, this is used to
   // discover the 'amdgpu-arch' executable.
   getProgramPaths().push_back(getDriver().Dir);
+  // Diagnose unsupported sanitizer options only once.
+  if (!Args.hasFlag(options::OPT_fgpu_sanitize, options::OPT_fno_gpu_sanitize,

ampandey-1995 wrote:

Yes. We actually had a flag ```**-fgpu-sanitize**```  from the beginning of 
ASan project which actually used by every toolchain(hip,openmp,opencl) to 
enable device code instrumentation.

Using ```**-fsanitize=address**```  enables asan instrumentation for host code 
, now for device when ```**-fgpu-sanitize**[Default always on]``` can be used 
alongwith ```**-fsanitize=address**``` but since it value is by default on so 
using ```-fgpu-sanitize``` only(without -fsanitize=address) would be  a no-op 
effect for both host and device code.

We only use the negative ```-fno-gpu-sanitize``` to disable device code asan 
instrumentation leaving only the host code asan instrumented.

BTW,  other checks are also done in progression i.e in  
```shouldSkipSanitizeFunction``` which checks for ```:xnack+```  feature also 
in ```--offload-arch=``` option.
 
In short asan instrumentation for both host and device is done using 
```-fsanitize=address```  , there are inbuilt clang-driver checks for 
hip,openmp,opencl which if successful allows -fsanitize=address to pass forward 
to device toolchain cmd line job invocation otherwise it is skipped.

If any  edge tests cases missing please let me know @b-sumner  , @yxsamliu , 
@jhuber6 ?


https://github.com/llvm/llvm-project/pull/124754
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-01-28 Thread Amit Kumar Pandey via cfe-commits

ampandey-1995 wrote:

Hi all , the lit test is failing because it is dependent on PR 
**https://github.com/llvm/llvm-project/pull/123922** . 

Requesting @b-sumner , @yxsamliu , @jhuber6  to rereview again. Sorry in 
advance!

https://github.com/llvm/llvm-project/pull/124754
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-01-28 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 created 
https://github.com/llvm/llvm-project/pull/124754

Enable device code ASan instrumentation for openmp offload applications using 
option '-fsanitize=address'.

>From 913db08256a8ee3077067d55667e37628d9ebd7c Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Tue, 28 Jan 2025 15:15:01 +0530
Subject: [PATCH] [OpenMP][ASan] Enable ASan Instrumentation for
 AMDGPUOpenMPToolChain.

Enable device code ASan instrumentation for openmp offload applications
using option '-fsanitize=address'.
---
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp  | 16 -
 .../Driver/amdgpu-openmp-sanitize-options.c   | 58 +++
 2 files changed, 72 insertions(+), 2 deletions(-)
 create mode 100644 clang/test/Driver/amdgpu-openmp-sanitize-options.c

diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp 
b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
index 3f0b3f2d86b3ed..9e9ee7ed26f501 100644
--- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
@@ -37,6 +37,16 @@ AMDGPUOpenMPToolChain::AMDGPUOpenMPToolChain(const Driver &D,
   // Lookup binaries into the driver directory, this is used to
   // discover the 'amdgpu-arch' executable.
   getProgramPaths().push_back(getDriver().Dir);
+  // Diagnose unsupported sanitizer options only once.
+  if (!Args.hasFlag(options::OPT_fgpu_sanitize, options::OPT_fno_gpu_sanitize,
+true))
+return;
+  for (auto *A : Args.filtered(options::OPT_fsanitize_EQ)) {
+SanitizerMask K = parseSanitizerValue(A->getValue(), 
/*AllowGroups=*/false);
+if (K != SanitizerKind::Address)
+  D.getDiags().Report(clang::diag::warn_drv_unsupported_option_for_target)
+  << A->getAsString(Args) << getTriple().str();
+  }
 }
 
 void AMDGPUOpenMPToolChain::addClangTargetOptions(
@@ -72,9 +82,11 @@ llvm::opt::DerivedArgList 
*AMDGPUOpenMPToolChain::TranslateArgs(
   const OptTable &Opts = getDriver().getOpts();
 
   if (DeviceOffloadKind == Action::OFK_OpenMP) {
-for (Arg *A : Args)
-  if (!llvm::is_contained(*DAL, A))
+for (Arg *A : Args) {
+  if (!shouldSkipSanitizeOption(*this, Args, BoundArch, A) &&
+  !llvm::is_contained(*DAL, A))
 DAL->append(A);
+}
 
 if (!DAL->hasArg(options::OPT_march_EQ)) {
   StringRef Arch = BoundArch;
diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c 
b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
new file mode 100644
index 00..03adeb8e6a7833
--- /dev/null
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -0,0 +1,58 @@
+// REQUIRES: x86-registered-target, amdgpu-registered-target
+
+// Fail on invalid ROCm Path.
+// RUN:   not %clang -### -fopenmp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
+// RUN:   | FileCheck --check-prefix=FAIL %s
+
+// Enable multiple sanitizer's apart from ASan with invalid rocm-path.
+// RUN:   not %clang -### -fopenmp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fsanitize=leak -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm-invalid -nogpuinc  %s 2>&1 \
+// RUN:   | FileCheck --check-prefixes=UNSUPPORTED,FAIL %s
+
+// Memory, Leak, UndefinedBehaviour and Thread Sanitizer are not supported.
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address 
-fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm -nogpuinc  %s 2>&1 \
+// RUN:   | FileCheck --check-prefix=UNSUPPORTED %s
+
+
+// ASan Enabled Test Cases
+// ASan enabled for amdgpu-arch [gfx908]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address 
-fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=NOXNACK,GPUSAN %s
+
+// ASan enabled for amdgpu-arch [gfx908:xnack-]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack- -fsanitize=address 
-fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=XNACKNEG,GPUSAN %s
+
+// ASan enabled for amdgpu-arch [gfx908:xnack+]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address 
-fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=GPUSAN %s
+
+// ASan Disabled Test Cases
+// ASan disabled for amdgpu-arch [gfx908]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address 
-fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=NOGPUSAN %s
+
+// ASan disabled for amdgpu-arch [gfx908:xnack-]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack- -fsanitize=address 
-fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=NOGPUSAN %s
+
+// ASan disabled for amdgpu-arch [gfx908:xnack+]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address 
-fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=NOGPUSAN %s
+
+// FAIL-DAG: error: cannot find 

[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)

2025-01-28 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/123922

>From 5ec4303eb089038db1965b844b8b3bec136207bf Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Wed, 22 Jan 2025 15:41:41 +0530
Subject: [PATCH 1/2] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode"
 linking.

ASan bitcode linking is currently available for HIPAMD,OpenMP and
OpenCL. Moving sanitizer specific common parts of logic to appropriate
API's so as to reduce code redundancy and maintainability.
---
 clang/lib/Driver/ToolChains/AMDGPU.cpp   | 58 ++--
 clang/lib/Driver/ToolChains/AMDGPU.h |  2 +-
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp |  7 +--
 clang/lib/Driver/ToolChains/HIPAMD.cpp   | 25 ++---
 clang/lib/Driver/ToolChains/ROCm.h   | 12 ++--
 clang/test/Driver/hip-sanitize-options.hip   |  8 +--
 clang/test/Driver/rocm-device-libs.cl|  2 +-
 7 files changed, 58 insertions(+), 56 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index a8061ffd9321f5..83f486611bc946 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -950,6 +950,11 @@ void ROCMToolChain::addClangTargetOptions(
 ABIVer))
 return;
 
+  std::tuple GPUSan(
+  DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
+ options::OPT_fno_gpu_sanitize, true),
+  getSanitizerArgs(DriverArgs));
+
   bool Wave64 = isWave64(DriverArgs, Kind);
 
   // TODO: There are way too many flags that change this. Do we need to check
@@ -965,21 +970,19 @@ void ROCMToolChain::addClangTargetOptions(
   DriverArgs.hasArg(options::OPT_cl_fp32_correctly_rounded_divide_sqrt);
 
   // Add the OpenCL specific bitcode library.
-  llvm::SmallVector BCLibs;
-  BCLibs.push_back(RocmInstallation->getOpenCLPath().str());
+  llvm::SmallVector BCLibs;
+  BCLibs.emplace_back(RocmInstallation->getOpenCLPath().str());
 
   // Add the generic set of libraries.
   BCLibs.append(RocmInstallation->getCommonBitcodeLibs(
   DriverArgs, LibDeviceFile, Wave64, DAZ, FiniteOnly, UnsafeMathOpt,
-  FastRelaxedMath, CorrectSqrt, ABIVer, false));
+  FastRelaxedMath, CorrectSqrt, ABIVer, GPUSan, false));
 
-  if (getSanitizerArgs(DriverArgs).needsAsanRt()) {
-CC1Args.push_back("-mlink-bitcode-file");
-CC1Args.push_back(
-DriverArgs.MakeArgString(RocmInstallation->getAsanRTLPath()));
-  }
-  for (StringRef BCFile : BCLibs) {
-CC1Args.push_back("-mlink-builtin-bitcode");
+  for (auto [BCFile, Internalize] : BCLibs) {
+if (Internalize)
+  CC1Args.push_back("-mlink-builtin-bitcode");
+else
+  CC1Args.push_back("-mlink-bitcode-file");
 CC1Args.push_back(DriverArgs.MakeArgString(BCFile));
   }
 }
@@ -1002,18 +1005,35 @@ bool RocmInstallationDetector::checkCommonBitcodeLibs(
   return true;
 }
 
-llvm::SmallVector
+llvm::SmallVector
 RocmInstallationDetector::getCommonBitcodeLibs(
 const llvm::opt::ArgList &DriverArgs, StringRef LibDeviceFile, bool Wave64,
 bool DAZ, bool FiniteOnly, bool UnsafeMathOpt, bool FastRelaxedMath,
-bool CorrectSqrt, DeviceLibABIVersion ABIVer, bool isOpenMP = false) const 
{
-  llvm::SmallVector BCLibs;
-
-  auto AddBCLib = [&](StringRef BCFile) { BCLibs.push_back(BCFile.str()); };
+bool CorrectSqrt, DeviceLibABIVersion ABIVer,
+const std::tuple &GPUSan,
+bool isOpenMP = false) const {
+  llvm::SmallVector BCLibs;
+
+  auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); };
+  auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib,
+  bool Internalize = true) {
+BCLib.ShouldInternalize = Internalize;
+BCLibs.emplace_back(BCLib);
+  };
+  auto AddSanBCLibs = [&]() {
+if (GPUSanEnabled()) {
+  auto SanArgs = std::get(GPUSan);
+  if (SanArgs.needsAsanRt())
+AddBCLib(getAsanRTLPath(), false);
+}
+  };
 
+  AddSanBCLibs();
   AddBCLib(getOCMLPath());
   if (!isOpenMP)
 AddBCLib(getOCKLPath());
+  else if (GPUSanEnabled() && isOpenMP)
+AddBCLib(getOCKLPath(), false);
   AddBCLib(getDenormalsAreZeroPath(DAZ));
   AddBCLib(getUnsafeMathPath(UnsafeMathOpt || FastRelaxedMath));
   AddBCLib(getFiniteOnlyPath(FiniteOnly || FastRelaxedMath));
@@ -1027,7 +1047,7 @@ RocmInstallationDetector::getCommonBitcodeLibs(
   return BCLibs;
 }
 
-llvm::SmallVector
+llvm::SmallVector
 ROCMToolChain::getCommonDeviceLibNames(const llvm::opt::ArgList &DriverArgs,
const std::string &GPUArch,
bool isOpenMP) const {
@@ -1044,6 +1064,10 @@ ROCMToolChain::getCommonDeviceLibNames(const 
llvm::opt::ArgList &DriverArgs,
   // If --hip-device-lib is not set, add the default bitcode libraries.
   // TODO: There are way too many flags that change this. Do we need to check
   // them all?
+  std::tuple GPUSan(
+  DriverArgs.hasFlag(options::OPT_fgpu_sa

[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-01-30 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/124754

>From 913db08256a8ee3077067d55667e37628d9ebd7c Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Tue, 28 Jan 2025 15:15:01 +0530
Subject: [PATCH 1/2] [OpenMP][ASan] Enable ASan Instrumentation for
 AMDGPUOpenMPToolChain.

Enable device code ASan instrumentation for openmp offload applications
using option '-fsanitize=address'.
---
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp  | 16 -
 .../Driver/amdgpu-openmp-sanitize-options.c   | 58 +++
 2 files changed, 72 insertions(+), 2 deletions(-)
 create mode 100644 clang/test/Driver/amdgpu-openmp-sanitize-options.c

diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp 
b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
index 3f0b3f2d86b3ede..9e9ee7ed26f5018 100644
--- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
@@ -37,6 +37,16 @@ AMDGPUOpenMPToolChain::AMDGPUOpenMPToolChain(const Driver &D,
   // Lookup binaries into the driver directory, this is used to
   // discover the 'amdgpu-arch' executable.
   getProgramPaths().push_back(getDriver().Dir);
+  // Diagnose unsupported sanitizer options only once.
+  if (!Args.hasFlag(options::OPT_fgpu_sanitize, options::OPT_fno_gpu_sanitize,
+true))
+return;
+  for (auto *A : Args.filtered(options::OPT_fsanitize_EQ)) {
+SanitizerMask K = parseSanitizerValue(A->getValue(), 
/*AllowGroups=*/false);
+if (K != SanitizerKind::Address)
+  D.getDiags().Report(clang::diag::warn_drv_unsupported_option_for_target)
+  << A->getAsString(Args) << getTriple().str();
+  }
 }
 
 void AMDGPUOpenMPToolChain::addClangTargetOptions(
@@ -72,9 +82,11 @@ llvm::opt::DerivedArgList 
*AMDGPUOpenMPToolChain::TranslateArgs(
   const OptTable &Opts = getDriver().getOpts();
 
   if (DeviceOffloadKind == Action::OFK_OpenMP) {
-for (Arg *A : Args)
-  if (!llvm::is_contained(*DAL, A))
+for (Arg *A : Args) {
+  if (!shouldSkipSanitizeOption(*this, Args, BoundArch, A) &&
+  !llvm::is_contained(*DAL, A))
 DAL->append(A);
+}
 
 if (!DAL->hasArg(options::OPT_march_EQ)) {
   StringRef Arch = BoundArch;
diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c 
b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
new file mode 100644
index 000..03adeb8e6a7833c
--- /dev/null
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -0,0 +1,58 @@
+// REQUIRES: x86-registered-target, amdgpu-registered-target
+
+// Fail on invalid ROCm Path.
+// RUN:   not %clang -### -fopenmp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
+// RUN:   | FileCheck --check-prefix=FAIL %s
+
+// Enable multiple sanitizer's apart from ASan with invalid rocm-path.
+// RUN:   not %clang -### -fopenmp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fsanitize=leak -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm-invalid -nogpuinc  %s 2>&1 \
+// RUN:   | FileCheck --check-prefixes=UNSUPPORTED,FAIL %s
+
+// Memory, Leak, UndefinedBehaviour and Thread Sanitizer are not supported.
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address 
-fsanitize=leak -fgpu-sanitize --rocm-path=%S/Inputs/rocm -nogpuinc  %s 2>&1 \
+// RUN:   | FileCheck --check-prefix=UNSUPPORTED %s
+
+
+// ASan Enabled Test Cases
+// ASan enabled for amdgpu-arch [gfx908]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address 
-fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=NOXNACK,GPUSAN %s
+
+// ASan enabled for amdgpu-arch [gfx908:xnack-]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack- -fsanitize=address 
-fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=XNACKNEG,GPUSAN %s
+
+// ASan enabled for amdgpu-arch [gfx908:xnack+]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address 
-fgpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=GPUSAN %s
+
+// ASan Disabled Test Cases
+// ASan disabled for amdgpu-arch [gfx908]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908 -fsanitize=address 
-fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=NOGPUSAN %s
+
+// ASan disabled for amdgpu-arch [gfx908:xnack-]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack- -fsanitize=address 
-fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=NOGPUSAN %s
+
+// ASan disabled for amdgpu-arch [gfx908:xnack+]
+// RUN:   %clang -### -fopenmp --offload-arch=gfx908:xnack+ -fsanitize=address 
-fno-gpu-sanitize --rocm-path=%S/Inputs/rocm %s 2>&1 \
+// RUN:   | FileCheck -check-prefixes=NOGPUSAN %s
+
+// FAIL-DAG: error: cannot find ROCm device library for ABI version 5; provide 
its path via '--rocm-path' or '--rocm-device-lib-path

[clang] [OpenMP][ASan] Enable ASan Instrumentation for AMDGPUOpenMPToolChain. (PR #124754)

2025-01-30 Thread Amit Kumar Pandey via cfe-commits


@@ -37,6 +37,16 @@ AMDGPUOpenMPToolChain::AMDGPUOpenMPToolChain(const Driver &D,
   // Lookup binaries into the driver directory, this is used to
   // discover the 'amdgpu-arch' executable.
   getProgramPaths().push_back(getDriver().Dir);
+  // Diagnose unsupported sanitizer options only once.
+  if (!Args.hasFlag(options::OPT_fgpu_sanitize, options::OPT_fno_gpu_sanitize,
+true))
+return;
+  for (auto *A : Args.filtered(options::OPT_fsanitize_EQ)) {
+SanitizerMask K = parseSanitizerValue(A->getValue(), 
/*AllowGroups=*/false);
+if (K != SanitizerKind::Address)
+  D.getDiags().Report(clang::diag::warn_drv_unsupported_option_for_target)
+  << A->getAsString(Args) << getTriple().str();
+  }

ampandey-1995 wrote:

Yes Thanks for reviewing.

https://github.com/llvm/llvm-project/pull/124754
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Driver][ASan] Refactor Clang-Driver "Sanitizer Bitcode" linking. (PR #123922)

2025-01-30 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 closed 
https://github.com/llvm/llvm-project/pull/123922
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/126671

>From 8367c38f7f04273e3ab2451351b6db8d3f7dbc0c Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Tue, 11 Feb 2025 08:06:21 +0530
Subject: [PATCH 1/4] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking
 for OpenMP." (#126628)

  - This reverts commit 0c6c4a99936d4d39015c8d2332483f8db78f69cf.
  - Add '-mcode-object-version=5' as to explicitly use code object
version 5 to match with 'FAIL' diagnostic.
  - Add Requires directive to support lit test run on platforms
registered with x86_64 and amdgpu.
---
 clang/lib/Driver/ToolChains/AMDGPU.cpp| 15 +++--
 clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp  |  2 +-
 .../Driver/amdgpu-openmp-sanitize-options.c   | 57 +--
 clang/test/Driver/hip-sanitize-options.hip|  2 +-
 4 files changed, 39 insertions(+), 37 deletions(-)

diff --git a/clang/lib/Driver/ToolChains/AMDGPU.cpp 
b/clang/lib/Driver/ToolChains/AMDGPU.cpp
index e66e5a32e58ac..202198e96c012 100644
--- a/clang/lib/Driver/ToolChains/AMDGPU.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPU.cpp
@@ -1014,7 +1014,12 @@ RocmInstallationDetector::getCommonBitcodeLibs(
 bool isOpenMP = false) const {
   llvm::SmallVector BCLibs;
 
-  auto GPUSanEnabled = [GPUSan]() { return std::get(GPUSan); };
+  // GPU Sanitizer currently only supports ASan and is enabled through host
+  // ASan.
+  auto GPUSanEnabled = [GPUSan]() {
+return std::get(GPUSan) &&
+   std::get(GPUSan).needsAsanRt();
+  };
   auto AddBCLib = [&](ToolChain::BitCodeLibraryInfo BCLib,
   bool Internalize = true) {
 BCLib.ShouldInternalize = Internalize;
@@ -1022,9 +1027,7 @@ RocmInstallationDetector::getCommonBitcodeLibs(
   };
   auto AddSanBCLibs = [&]() {
 if (GPUSanEnabled()) {
-  auto SanArgs = std::get(GPUSan);
-  if (SanArgs.needsAsanRt())
-AddBCLib(getAsanRTLPath(), false);
+  AddBCLib(getAsanRTLPath(), false);
 }
   };
 
@@ -1066,7 +1069,7 @@ ROCMToolChain::getCommonDeviceLibNames(const 
llvm::opt::ArgList &DriverArgs,
   // them all?
   std::tuple GPUSan(
   DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
- options::OPT_fno_gpu_sanitize, false),
+ options::OPT_fno_gpu_sanitize, true),
   getSanitizerArgs(DriverArgs));
   bool DAZ = DriverArgs.hasFlag(options::OPT_fgpu_flush_denormals_to_zero,
 options::OPT_fno_gpu_flush_denormals_to_zero,
@@ -1099,7 +1102,7 @@ bool AMDGPUToolChain::shouldSkipSanitizeOption(
 return false;
 
   if (!DriverArgs.hasFlag(options::OPT_fgpu_sanitize,
-  options::OPT_fno_gpu_sanitize, false))
+  options::OPT_fno_gpu_sanitize, true))
 return true;
 
   auto &Diags = TC.getDriver().getDiags();
diff --git a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp 
b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
index 00bf9c7338edd..aba79f5fa6fa7 100644
--- a/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
+++ b/clang/lib/Driver/ToolChains/AMDGPUOpenMP.cpp
@@ -68,7 +68,7 @@ llvm::opt::DerivedArgList 
*AMDGPUOpenMPToolChain::TranslateArgs(
 Action::OffloadKind DeviceOffloadKind) const {
   DerivedArgList *DAL =
   HostTC.TranslateArgs(Args, BoundArch, DeviceOffloadKind);
-  if (!DAL)
+  if (!DAL || Args.hasArg(options::OPT_fsanitize_EQ))
 DAL = new DerivedArgList(Args.getBaseArgs());
 
   const OptTable &Opts = getDriver().getOpts();
diff --git a/clang/test/Driver/amdgpu-openmp-sanitize-options.c 
b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
index c28a758bfc0c5..f6a8a7dc57ccc 100644
--- a/clang/test/Driver/amdgpu-openmp-sanitize-options.c
+++ b/clang/test/Driver/amdgpu-openmp-sanitize-options.c
@@ -1,11 +1,11 @@
 // REQUIRES: x86-registered-target, amdgpu-registered-target
 
 // Fail on invalid ROCm Path.
-// RUN:   not %clang -no-canonical-prefixes -### 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
+// RUN:   not %clang -no-canonical-prefixes -### -mcode-object-version=5 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fgpu-sanitize -nogpuinc --rocm-path=%S/Inputs/rocm-invalid  
%s 2>&1 \
 // RUN:   | FileCheck --check-prefix=FAIL %s
 
 // Enable multiple sanitizer's apart from ASan with invalid rocm-path.
-// RUN:   not %clang -no-canonical-prefixes -### 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fsanitize=leak -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm-invalid -nogpuinc  %s 2>&1 \
+// RUN:   not %clang -no-canonical-prefixes -### -mcode-object-version=5 
--target=x86_64-unknown-linux-gnu -fopenmp=libomp --offload-arch=gfx908:xnack+ 
-fsanitize=address -fsanitize=leak -fgpu-sanitize 
--rocm-path=%S/Inputs/rocm-invalid -nogpuinc  %s 2>&1 \
 // RUN:   | File

[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-11 Thread Amit Kumar Pandey via cfe-commits

ampandey-1995 wrote:

Hi @arsenm & @jhuber6  , I removed the usage of ```std::tuple``` in the last commit 
f738420 so as to simplify it much further.

https://github.com/llvm/llvm-project/pull/126671
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] Reapply "[Driver][ROCm][OpenMP] Fix default ockl linking for OpenMP."… (PR #126671)

2025-02-12 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 closed 
https://github.com/llvm/llvm-project/pull/126671
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Flang][Sanitizer] Support sanitizer flag for Flang Driver. (PR #137759)

2025-05-01 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/137759



  



Rate limit · GitHub


  body {
background-color: #f6f8fa;
color: #24292e;
font-family: -apple-system,BlinkMacSystemFont,Segoe 
UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;
font-size: 14px;
line-height: 1.5;
margin: 0;
  }

  .container { margin: 50px auto; max-width: 600px; text-align: center; 
padding: 0 24px; }

  a { color: #0366d6; text-decoration: none; }
  a:hover { text-decoration: underline; }

  h1 { line-height: 60px; font-size: 48px; font-weight: 300; margin: 0px; 
text-shadow: 0 1px 0 #fff; }
  p { color: rgba(0, 0, 0, 0.5); margin: 20px 0 40px; }

  ul { list-style: none; margin: 25px 0; padding: 0; }
  li { display: table-cell; font-weight: bold; width: 1%; }

  .logo { display: inline-block; margin-top: 35px; }
  .logo-img-2x { display: none; }
  @media
  only screen and (-webkit-min-device-pixel-ratio: 2),
  only screen and (   min--moz-device-pixel-ratio: 2),
  only screen and ( -o-min-device-pixel-ratio: 2/1),
  only screen and (min-device-pixel-ratio: 2),
  only screen and (min-resolution: 192dpi),
  only screen and (min-resolution: 2dppx) {
.logo-img-1x { display: none; }
.logo-img-2x { display: inline-block; }
  }

  #suggestions {
margin-top: 35px;
color: #ccc;
  }
  #suggestions a {
color: #66;
font-weight: 200;
font-size: 14px;
margin: 0 10px;
  }


  
  



  Whoa there!
  You have exceeded a secondary rate limit.
Please wait a few minutes before you try again;
in some cases this may take up to an hour.
  
  
https://support.github.com/contact";>Contact Support —
https://githubstatus.com";>GitHub Status —
https://twitter.com/githubstatus";>@githubstatus
  

  

  

  

  

  


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


[clang] [HIP][Clang][Driver] Move BC preference logic into ROCm detection (PR #149294)

2025-07-17 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 approved this pull request.


https://github.com/llvm/llvm-project/pull/149294
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[clang] [Flang][Sanitizer] Support sanitizer flag for Flang Driver. (PR #137759)

2025-05-15 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/137759



  



Rate limit · GitHub


  body {
background-color: #f6f8fa;
color: #24292e;
font-family: -apple-system,BlinkMacSystemFont,Segoe 
UI,Helvetica,Arial,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol;
font-size: 14px;
line-height: 1.5;
margin: 0;
  }

  .container { margin: 50px auto; max-width: 600px; text-align: center; 
padding: 0 24px; }

  a { color: #0366d6; text-decoration: none; }
  a:hover { text-decoration: underline; }

  h1 { line-height: 60px; font-size: 48px; font-weight: 300; margin: 0px; 
text-shadow: 0 1px 0 #fff; }
  p { color: rgba(0, 0, 0, 0.5); margin: 20px 0 40px; }

  ul { list-style: none; margin: 25px 0; padding: 0; }
  li { display: table-cell; font-weight: bold; width: 1%; }

  .logo { display: inline-block; margin-top: 35px; }
  .logo-img-2x { display: none; }
  @media
  only screen and (-webkit-min-device-pixel-ratio: 2),
  only screen and (   min--moz-device-pixel-ratio: 2),
  only screen and ( -o-min-device-pixel-ratio: 2/1),
  only screen and (min-device-pixel-ratio: 2),
  only screen and (min-resolution: 192dpi),
  only screen and (min-resolution: 2dppx) {
.logo-img-1x { display: none; }
.logo-img-2x { display: inline-block; }
  }

  #suggestions {
margin-top: 35px;
color: #ccc;
  }
  #suggestions a {
color: #66;
font-weight: 200;
font-size: 14px;
margin: 0 10px;
  }


  
  



  Whoa there!
  You have exceeded a secondary rate limit.
Please wait a few minutes before you try again;
in some cases this may take up to an hour.
  
  
https://support.github.com/contact";>Contact Support —
https://githubstatus.com";>GitHub Status —
https://twitter.com/githubstatus";>@githubstatus
  

  

  

  

  

  


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


[clang] [flang] [Flang][Sanitizer] Support sanitizer flag for Flang Driver. (PR #137759)

2025-05-15 Thread Amit Kumar Pandey via cfe-commits

https://github.com/ampandey-1995 updated 
https://github.com/llvm/llvm-project/pull/137759

>From aa3caaeaa72ab2f0de8beac416875dc466ac1051 Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Thu, 1 May 2025 13:51:12 +0530
Subject: [PATCH 1/2] [Flang][Sanitizer] Support sanitizer flag for Flang
 Driver.

Flang Driver currently dosen't support option sanitizer flags such as
'-fsanitize='. This patch currently supports enabling sanitizer flags
for the flang driver apart from clang independently.
---
 clang/include/clang/Driver/Options.td | 10 +++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index e69cd6b833c3a..32cd93f9a5e36 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -1555,11 +1555,15 @@ defm xl_pragma_pack : BoolFOption<"xl-pragma-pack",
   "Enable IBM XL #pragma pack handling">,
   NegFlag>;
 def shared_libsan : Flag<["-"], "shared-libsan">,
+  Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>,
   HelpText<"Dynamically link the sanitizer runtime">;
 def static_libsan : Flag<["-"], "static-libsan">,
+  Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>,
   HelpText<"Statically link the sanitizer runtime (Not supported for ASan, 
TSan or UBSan on darwin)">;
-def : Flag<["-"], "shared-libasan">, Alias;
-def : Flag<["-"], "static-libasan">, Alias;
+def : Flag<["-"], "shared-libasan">, Alias,
+  Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>;
+def : Flag<["-"], "static-libasan">, Alias,
+  Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>;
 def fasm : Flag<["-"], "fasm">, Group;
 
 defm assume_unique_vtables : BoolFOption<"assume-unique-vtables",
@@ -2309,7 +2313,7 @@ def fmemory_profile_use_EQ : Joined<["-"], 
"fmemory-profile-use=">,
 
 // Begin sanitizer flags. These should all be core options exposed in all 
driver
 // modes.
-let Visibility = [ClangOption, CC1Option, CLOption] in {
+let Visibility = [ClangOption, CC1Option, CLOption, FlangOption, FC1Option] in 
{
 
 def fsanitize_EQ : CommaJoined<["-"], "fsanitize=">, Group,
MetaVarName<"">,

>From f938acc7557bd37edac3b7a38ecb32e069a13a97 Mon Sep 17 00:00:00 2001
From: Amit Pandey 
Date: Wed, 14 May 2025 21:44:15 +0530
Subject: [PATCH 2/2] Support ASan in LLVM Flang.

---
 clang/include/clang/Driver/Options.td | 92 +--
 clang/lib/Driver/ToolChains/Flang.cpp | 13 +++
 clang/lib/Driver/ToolChains/Flang.h   |  9 ++
 .../include/flang/Frontend/CodeGenOptions.def | 67 ++
 flang/include/flang/Frontend/CodeGenOptions.h | 47 ++
 flang/include/flang/Support/LangOptions.def   |  1 +
 flang/include/flang/Support/LangOptions.h | 11 ++-
 flang/lib/Frontend/CodeGenOptions.cpp | 29 ++
 flang/lib/Frontend/CompilerInvocation.cpp | 82 +
 flang/lib/Frontend/FrontendActions.cpp| 37 
 10 files changed, 341 insertions(+), 47 deletions(-)

diff --git a/clang/include/clang/Driver/Options.td 
b/clang/include/clang/Driver/Options.td
index f4307f02d9175..3e89a1f7b28aa 100644
--- a/clang/include/clang/Driver/Options.td
+++ b/clang/include/clang/Driver/Options.td
@@ -2339,7 +2339,7 @@ def fsanitize_EQ : CommaJoined<["-"], "fsanitize=">, 
Group,
HelpText<"Turn on runtime checks for various forms of 
undefined "
 "or suspicious behavior. See user manual for 
available checks">;
 def fno_sanitize_EQ : CommaJoined<["-"], "fno-sanitize=">, 
Group,
-  Visibility<[ClangOption, CLOption]>;
+  Visibility<[ClangOption, CLOption, FlangOption]>;
 
 def fsanitize_ignorelist_EQ : Joined<["-"], "fsanitize-ignorelist=">,
   Group, HelpText<"Path to ignorelist file for sanitizers">;
@@ -2349,7 +2349,7 @@ def : Joined<["-"], "fsanitize-blacklist=">,
 
 def fsanitize_system_ignorelist_EQ : Joined<["-"], 
"fsanitize-system-ignorelist=">,
   HelpText<"Path to system ignorelist file for sanitizers">,
-  Visibility<[ClangOption, CC1Option]>;
+  Visibility<[ClangOption, CC1Option, FlangOption, FC1Option]>;
 
 def fno_sanitize_ignorelist : Flag<["-"], "fno-sanitize-ignorelist">,
   Group, HelpText<"Don't use ignorelist file for sanitizers">;
@@ -2360,17 +2360,17 @@ def fsanitize_coverage : CommaJoined<["-"], 
"fsanitize-coverage=">,
   Group,
   HelpText<"Specify the type of coverage instrumentation for Sanitizers">;
 def fno_sanitize_coverage : CommaJoined<["-"], "fno-sanitize-coverage=">,
-  Group, Visibility<[ClangOption, CLOption]>,
+  Group, Visibility<[ClangOption, CLOption, FlangOption]>,
   HelpText<"Disable features of coverage instrumentation for Sanitizers">,
   Values<"func,bb,edge,indirect-calls,trace-bb,trace-cmp,trace-div,trace-gep,"
  "8bit-counters,trace-pc,trace-pc-guard,no-prune,inline-8bit-counters,"
  "inline-bool-flag">;
 def fsanitize_coverage_allo