diff --git a/include/swift/AST/DiagnosticsFrontend.def b/include/swift/AST/DiagnosticsFrontend.def index d2b19423778..421c4c54a73 100644 --- a/include/swift/AST/DiagnosticsFrontend.def +++ b/include/swift/AST/DiagnosticsFrontend.def @@ -209,6 +209,10 @@ ERROR(symbol_in_ir_not_in_tbd,none, "symbol '%0' (%1) is in generated IR file, but not in TBD file", (StringRef, StringRef)) +ERROR(redundant_prefix_compilation_flag,none, + "invalid argument '-D%0'; did you provide a redundant '-D' in your build settings?", + (StringRef)) + ERROR(invalid_conditional_compilation_flag,none, "conditional compilation flags must be valid Swift identifiers (rather than '%0')", (StringRef)) diff --git a/lib/Driver/Driver.cpp b/lib/Driver/Driver.cpp index c4186b8100b..e5068b8824b 100644 --- a/lib/Driver/Driver.cpp +++ b/lib/Driver/Driver.cpp @@ -192,6 +192,9 @@ static void validateArgs(DiagnosticEngine &diags, const ArgList &Args) { diags.diagnose(SourceLoc(), diag::cannot_assign_value_to_conditional_compilation_flag, name); + else if (name.startswith("-D")) + diags.diagnose(SourceLoc(), diag::redundant_prefix_compilation_flag, + name); else if (!Lexer::isIdentifier(name)) diags.diagnose(SourceLoc(), diag::invalid_conditional_compilation_flag, name); diff --git a/test/Frontend/unknown-arguments.swift b/test/Frontend/unknown-arguments.swift index e8f8553771e..c857177de76 100644 --- a/test/Frontend/unknown-arguments.swift +++ b/test/Frontend/unknown-arguments.swift @@ -10,5 +10,5 @@ // RUN: not %swiftc_driver -D Correct -DAlsoCorrect -D@#%! -D Swift=Cool -D-D -c %s -o %t.o 2>&1 | %FileCheck -check-prefix=INVALID-COND %s // INVALID-COND: :0: error: conditional compilation flags must be valid Swift identifiers (rather than '@#%!') // INVALID-COND-NEXT: :0: warning: conditional compilation flags do not have values in Swift; they are either present or absent (rather than 'Swift=Cool') -// INVALID-COND-NEXT: :0: error: conditional compilation flags must be valid Swift identifiers (rather than '-D') +// INVALID-COND-NEXT: :0: error: invalid argument '-D-D'; did you provide a redundant '-D' in your build settings?