]> granicus.if.org Git - clang/commitdiff
[CUDA] When compilation fails, print the compilation mode.
authorJustin Lebar <jlebar@google.com>
Thu, 7 Sep 2017 18:37:16 +0000 (18:37 +0000)
committerJustin Lebar <jlebar@google.com>
Thu, 7 Sep 2017 18:37:16 +0000 (18:37 +0000)
Summary:
That is, instead of "1 error generated", we now say "1 error generated
when compiling for sm_35".

This (partially) solves a usability foogtun wherein e.g. users call a
function that's only defined on sm_60 when compiling for sm_35, and they
get an unhelpful error message.

Reviewers: tra

Subscribers: sanjoy, cfe-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@312736 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Frontend/CompilerInstance.cpp
test/SemaCUDA/error-includes-mode.cu [new file with mode: 0644]

index 9a4bcc2722e4b828683ff72cee450eff6a89f75a..128de2840e417e465e71ad40dbf18c936049d20e 100644 (file)
@@ -1003,8 +1003,17 @@ bool CompilerInstance::ExecuteAction(FrontendAction &Act) {
       OS << " and ";
     if (NumErrors)
       OS << NumErrors << " error" << (NumErrors == 1 ? "" : "s");
-    if (NumWarnings || NumErrors)
-      OS << " generated.\n";
+    if (NumWarnings || NumErrors) {
+      OS << " generated";
+      if (getLangOpts().CUDA) {
+        if (!getLangOpts().CUDAIsDevice) {
+          OS << " when compiling for host";
+        } else {
+          OS << " when compiling for " << getTargetOpts().CPU;
+        }
+      }
+      OS << ".\n";
+    }
   }
 
   if (getFrontendOpts().ShowStats) {
diff --git a/test/SemaCUDA/error-includes-mode.cu b/test/SemaCUDA/error-includes-mode.cu
new file mode 100644 (file)
index 0000000..257fdec
--- /dev/null
@@ -0,0 +1,7 @@
+// RUN: not %clang_cc1 -fsyntax-only %s 2>&1 | FileCheck --check-prefix HOST %s
+// RUN: not %clang_cc1 -triple nvptx-unknown-unknown -target-cpu sm_35 \
+// RUN:   -fcuda-is-device -fsyntax-only %s 2>&1 | FileCheck --check-prefix SM35 %s
+
+// HOST: 1 error generated when compiling for host
+// SM35: 1 error generated when compiling for sm_35
+error;