summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2014-01-29 01:04:40 +0000
committerHans Wennborg <hans@hanshq.net>2014-01-29 01:04:40 +0000
commitcfdd8b54cfae20ff52d7409b423413b3ba4de817 (patch)
treee45ee0df4113a37676b8af41d14260e169f019c4
parent21bfc717520c6545823de224dd4c376ad2799ace (diff)
downloadbcm5719-llvm-cfdd8b54cfae20ff52d7409b423413b3ba4de817.tar.gz
bcm5719-llvm-cfdd8b54cfae20ff52d7409b423413b3ba4de817.zip
clang-cl: Better error message when trying to compile stdin (PR18640)
We should suggest using /Tc or /Tp to set the input type, instead of erroneously suggesting -x, which isn't a clang-cl flag. llvm-svn: 200362
-rw-r--r--clang/include/clang/Basic/DiagnosticDriverKinds.td2
-rw-r--r--clang/lib/Driver/Driver.cpp3
-rw-r--r--clang/test/Driver/cl-inputs.c8
3 files changed, 12 insertions, 1 deletions
diff --git a/clang/include/clang/Basic/DiagnosticDriverKinds.td b/clang/include/clang/Basic/DiagnosticDriverKinds.td
index 59805b59ba2..dbc5ce994c6 100644
--- a/clang/include/clang/Basic/DiagnosticDriverKinds.td
+++ b/clang/include/clang/Basic/DiagnosticDriverKinds.td
@@ -17,6 +17,8 @@ def err_drv_unsupported_option_argument : Error<
"unsupported argument '%1' to option '%0'">;
def err_drv_unknown_stdin_type : Error<
"-E or -x required when input is from standard input">;
+def err_drv_unknown_stdin_type_clang_cl : Error<
+ "use /Tc or /Tp to set input type for standard input">;
def err_drv_unknown_language : Error<"language not recognized: '%0'">;
def err_drv_invalid_arch_name : Error<
"invalid arch name '%0'">;
diff --git a/clang/lib/Driver/Driver.cpp b/clang/lib/Driver/Driver.cpp
index ca3e50fd535..bd43fbeec19 100644
--- a/clang/lib/Driver/Driver.cpp
+++ b/clang/lib/Driver/Driver.cpp
@@ -1030,7 +1030,8 @@ void Driver::BuildInputs(const ToolChain &TC, const DerivedArgList &Args,
// Otherwise emit an error but still use a valid type to avoid
// spurious errors (e.g., no inputs).
if (!Args.hasArgNoClaim(options::OPT_E) && !CCCIsCPP())
- Diag(clang::diag::err_drv_unknown_stdin_type);
+ Diag(IsCLMode() ? clang::diag::err_drv_unknown_stdin_type_clang_cl
+ : clang::diag::err_drv_unknown_stdin_type);
Ty = types::TY_C;
} else {
// Otherwise lookup by extension.
diff --git a/clang/test/Driver/cl-inputs.c b/clang/test/Driver/cl-inputs.c
index d6ee520257d..066e0e32d9f 100644
--- a/clang/test/Driver/cl-inputs.c
+++ b/clang/test/Driver/cl-inputs.c
@@ -33,3 +33,11 @@
// WARN: warning: overriding '/TC' option with '/TP'
// WARN: note: The last /TC or /TP option takes precedence over earlier instances
// WARN-NOT: note
+
+// RUN: not %clang_cl - 2>&1 | FileCheck -check-prefix=STDIN %s
+// STDIN: error: use /Tc or /Tp
+
+// RUN: %clang_cl -### /Tc - 2>&1 | FileCheck -check-prefix=STDINTc %s
+// STDINTc: "-x" "c"
+
+void f();
OpenPOWER on IntegriCloud