From 45d7f73d7d1138ad47a4f0392f8852605e1b6ac4 Mon Sep 17 00:00:00 2001 From: hchilama Date: Tue, 31 Mar 2020 10:06:29 -0700 Subject: [PATCH 1/4] [Driver][SYCL]Emit an error if c compilation is forced using -x c or -x c-header when -fsycl mode is used Signed-off-by: hchilama --- clang/include/clang/Basic/DiagnosticDriverKinds.td | 2 ++ clang/lib/Driver/Driver.cpp | 7 +++++++ clang/test/Driver/sycl-offload.c | 5 +++++ 3 files changed, 14 insertions(+) diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index 58f7c07fb18ad..c5f50d363cc42 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -255,6 +255,8 @@ def err_drv_expecting_fopenmp_with_fopenmp_targets : Error< "The option -fopenmp-targets must be used in conjunction with a -fopenmp option compatible with offloading, please use -fopenmp=libomp or -fopenmp=libiomp5.">; def err_drv_expecting_fsycl_with_sycl_opt : Error< "The option %0 must be used in conjunction with -fsycl to enable offloading.">; +def err_drv_fsycl_with_c_type : Error< + "The option %0%1 must not be used in conjunction with -fsycl which expects C++ source.">; def warn_drv_omp_offload_target_duplicate : Warning< "The OpenMP offloading target '%0' is similar to target '%1' already specified - will be ignored.">, InGroup; diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 8f6005173494a..36eafb170993a 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -4057,6 +4057,13 @@ class OffloadingActionBuilder final { SYCLTripleList.push_back( C.getDriver().MakeSYCLDeviceTriple(SYCLTargetArch)); } + // Emit an error if c-compilation is forced in -fsycl mode + if (HasValidSYCLRuntime && Args.hasArg(options::OPT_x)) + for (StringRef XValue : Args.getAllArgValues(options::OPT_x)) { + if (XValue == "c" || XValue == "c-header") + C.getDriver().Diag(clang::diag::err_drv_fsycl_with_c_type) + << "-x " << XValue; + } // Set the FPGA output type based on command line (-fsycl-link). if (auto * A = C.getInputArgs().getLastArg(options::OPT_fsycl_link_EQ)) diff --git a/clang/test/Driver/sycl-offload.c b/clang/test/Driver/sycl-offload.c index 8e4d8a403faea..5609870235283 100644 --- a/clang/test/Driver/sycl-offload.c +++ b/clang/test/Driver/sycl-offload.c @@ -795,5 +795,10 @@ // LIB-NODEVICE: 1: linker, {0}, image, (host-sycl) // LIB-NODEVICE-NOT: linker, {{.*}}, spirv, (device-sycl) +// Checking for an error if c-compilation is forced +// RUN: %clangxx -### -c -fsycl -xc %s 2>&1 | FileCheck -check-prefixes=CHECK_XC_FSYCL %s +// RUN: %clangxx -### -c -fsycl -xc-header %s 2>&1 | FileCheck -check-prefixes=CHECK_XC_FSYCL %s +// CHECK_XC_FSYCL: The option -x c{{.*}} must not be used in conjunction with -fsycl{{.*}} + // TODO: SYCL specific fail - analyze and enable // XFAIL: windows-msvc From 008eaf467eb74b9be86793fc8bc93069ab569c7a Mon Sep 17 00:00:00 2001 From: hchilama Date: Tue, 31 Mar 2020 10:06:29 -0700 Subject: [PATCH 2/4] [Driver][SYCL]Emit an error if c compilation is forced using -x c or -x c-header when -fsycl mode is used Signed-off-by: hchilama Signed-off-by: Harini Chilamantula --- .../include/clang/Basic/DiagnosticDriverKinds.td | 2 ++ clang/lib/Driver/Driver.cpp | 16 ++++++++++++++++ clang/test/Driver/sycl-offload.c | 5 +++++ 3 files changed, 23 insertions(+) diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td index 58f7c07fb18ad..c5f50d363cc42 100644 --- a/clang/include/clang/Basic/DiagnosticDriverKinds.td +++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td @@ -255,6 +255,8 @@ def err_drv_expecting_fopenmp_with_fopenmp_targets : Error< "The option -fopenmp-targets must be used in conjunction with a -fopenmp option compatible with offloading, please use -fopenmp=libomp or -fopenmp=libiomp5.">; def err_drv_expecting_fsycl_with_sycl_opt : Error< "The option %0 must be used in conjunction with -fsycl to enable offloading.">; +def err_drv_fsycl_with_c_type : Error< + "The option %0%1 must not be used in conjunction with -fsycl which expects C++ source.">; def warn_drv_omp_offload_target_duplicate : Warning< "The OpenMP offloading target '%0' is similar to target '%1' already specified - will be ignored.">, InGroup; diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 8f6005173494a..7bf1e88bbdbcb 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -769,6 +769,15 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C, } return SYCLArg; }; + //hchilama + // Emit an error if c-compilation is forced in -fsycl mode + if (HasValidSYCLRuntime && C.getInputArgs().hasArg(options::OPT_x)) + for (StringRef XValue : C.getInputArgs().getAllArgValues(options::OPT_x)) { + if (XValue == "c" || XValue == "c-header") + C.getDriver().Diag(clang::diag::err_drv_fsycl_with_c_type) + << "-x " << XValue; + } + Arg *SYCLTargets = getArgRequiringSYCLRuntime(options::OPT_fsycl_targets_EQ); Arg *SYCLLinkTargets = getArgRequiringSYCLRuntime(options::OPT_fsycl_link_targets_EQ); @@ -4057,6 +4066,13 @@ class OffloadingActionBuilder final { SYCLTripleList.push_back( C.getDriver().MakeSYCLDeviceTriple(SYCLTargetArch)); } + // Emit an error if c-compilation is forced in -fsycl mode + if (HasValidSYCLRuntime && Args.hasArg(options::OPT_x)) + for (StringRef XValue : Args.getAllArgValues(options::OPT_x)) { + if (XValue == "c" || XValue == "c-header") + C.getDriver().Diag(clang::diag::err_drv_fsycl_with_c_type) + << "-x " << XValue; + } // Set the FPGA output type based on command line (-fsycl-link). if (auto * A = C.getInputArgs().getLastArg(options::OPT_fsycl_link_EQ)) diff --git a/clang/test/Driver/sycl-offload.c b/clang/test/Driver/sycl-offload.c index 8e4d8a403faea..5609870235283 100644 --- a/clang/test/Driver/sycl-offload.c +++ b/clang/test/Driver/sycl-offload.c @@ -795,5 +795,10 @@ // LIB-NODEVICE: 1: linker, {0}, image, (host-sycl) // LIB-NODEVICE-NOT: linker, {{.*}}, spirv, (device-sycl) +// Checking for an error if c-compilation is forced +// RUN: %clangxx -### -c -fsycl -xc %s 2>&1 | FileCheck -check-prefixes=CHECK_XC_FSYCL %s +// RUN: %clangxx -### -c -fsycl -xc-header %s 2>&1 | FileCheck -check-prefixes=CHECK_XC_FSYCL %s +// CHECK_XC_FSYCL: The option -x c{{.*}} must not be used in conjunction with -fsycl{{.*}} + // TODO: SYCL specific fail - analyze and enable // XFAIL: windows-msvc From 1cdbaeca55a75840c227597ea6cb398c1c030c61 Mon Sep 17 00:00:00 2001 From: Harini Chilamantula Date: Wed, 1 Apr 2020 21:30:43 -0700 Subject: [PATCH 3/4] [Driver][SYCL]Emit an error if c compilation is forced using -x c -x c-header, with -fsycl mode enabled Signed-off-by: Harini Chilamantula --- clang/lib/Driver/Driver.cpp | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 7bf1e88bbdbcb..cad99e69fe7c1 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -769,7 +769,7 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C, } return SYCLArg; }; - //hchilama + // Emit an error if c-compilation is forced in -fsycl mode if (HasValidSYCLRuntime && C.getInputArgs().hasArg(options::OPT_x)) for (StringRef XValue : C.getInputArgs().getAllArgValues(options::OPT_x)) { @@ -4066,13 +4066,6 @@ class OffloadingActionBuilder final { SYCLTripleList.push_back( C.getDriver().MakeSYCLDeviceTriple(SYCLTargetArch)); } - // Emit an error if c-compilation is forced in -fsycl mode - if (HasValidSYCLRuntime && Args.hasArg(options::OPT_x)) - for (StringRef XValue : Args.getAllArgValues(options::OPT_x)) { - if (XValue == "c" || XValue == "c-header") - C.getDriver().Diag(clang::diag::err_drv_fsycl_with_c_type) - << "-x " << XValue; - } // Set the FPGA output type based on command line (-fsycl-link). if (auto * A = C.getInputArgs().getLastArg(options::OPT_fsycl_link_EQ)) From fc24378ec658fe53af2a3623698f9f69ea32cc80 Mon Sep 17 00:00:00 2001 From: Harini Chilamantula Date: Wed, 1 Apr 2020 21:30:43 -0700 Subject: [PATCH 4/4] [Driver][SYCL]Emit an error if c compilation is forced using -x c -x c-header, with -fsycl mode enabled Signed-off-by: Harini Chilamantula --- clang/lib/Driver/Driver.cpp | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp index 7bf1e88bbdbcb..31115e51dea16 100644 --- a/clang/lib/Driver/Driver.cpp +++ b/clang/lib/Driver/Driver.cpp @@ -769,9 +769,9 @@ void Driver::CreateOffloadingDeviceToolChains(Compilation &C, } return SYCLArg; }; - //hchilama + // Emit an error if c-compilation is forced in -fsycl mode - if (HasValidSYCLRuntime && C.getInputArgs().hasArg(options::OPT_x)) + if (HasValidSYCLRuntime) for (StringRef XValue : C.getInputArgs().getAllArgValues(options::OPT_x)) { if (XValue == "c" || XValue == "c-header") C.getDriver().Diag(clang::diag::err_drv_fsycl_with_c_type) @@ -4066,13 +4066,6 @@ class OffloadingActionBuilder final { SYCLTripleList.push_back( C.getDriver().MakeSYCLDeviceTriple(SYCLTargetArch)); } - // Emit an error if c-compilation is forced in -fsycl mode - if (HasValidSYCLRuntime && Args.hasArg(options::OPT_x)) - for (StringRef XValue : Args.getAllArgValues(options::OPT_x)) { - if (XValue == "c" || XValue == "c-header") - C.getDriver().Diag(clang::diag::err_drv_fsycl_with_c_type) - << "-x " << XValue; - } // Set the FPGA output type based on command line (-fsycl-link). if (auto * A = C.getInputArgs().getLastArg(options::OPT_fsycl_link_EQ))