//===--- DiagnosticsFrontend.def - Diagnostics Text -------------*- C++ -*-===//
//
// This source file is part of the Swift.org open source project
//
// Copyright (c) 2014 - 2017 Apple Inc. and the Swift project authors
// Licensed under Apache License v2.0 with Runtime Library Exception
//
// See https://swift.org/LICENSE.txt for license information
// See https://swift.org/CONTRIBUTORS.txt for the list of Swift project authors
//
//===----------------------------------------------------------------------===//
//
//  This file defines diagnostics emitted in processing command-line arguments
//  and setting up compilation.
//  Each diagnostic is described using one of three kinds (error, warning, or
//  note) along with a unique identifier, category, options, and text, and is
//  followed by a signature describing the diagnostic argument kinds.
//
//===----------------------------------------------------------------------===//

#if !(defined(DIAG) || (defined(ERROR) && defined(WARNING) && defined(NOTE)))
#  error Must define either DIAG or the set {ERROR,WARNING,NOTE}
#endif

#ifndef ERROR
#  define ERROR(ID,Options,Text,Signature)   \
  DIAG(ERROR,ID,Options,Text,Signature)
#endif

#ifndef WARNING
#  define WARNING(ID,Options,Text,Signature) \
  DIAG(WARNING,ID,Options,Text,Signature)
#endif

#ifndef NOTE
#  define NOTE(ID,Options,Text,Signature) \
  DIAG(NOTE,ID,Options,Text,Signature)
#endif

WARNING(warning_no_such_sdk,none,
  "no such SDK: '%0'", (StringRef))

ERROR(error_no_frontend_args, none,
  "no arguments provided to '-frontend'", ())

ERROR(error_no_such_file_or_directory,none,
  "no such file or directory: '%0'", (StringRef))

ERROR(error_unsupported_target_os, none,
  "unsupported target OS: '%0'", (StringRef))

ERROR(error_unsupported_target_arch, none,
  "unsupported target architecture: '%0'", (StringRef))

ERROR(error_unsupported_opt_for_target, none,
  "unsupported option '%0' for target '%1'", (StringRef, StringRef))

ERROR(error_argument_not_allowed_with, none,
  "argument '%0' is not allowed with '%1'", (StringRef, StringRef))

WARNING(warning_argument_not_supported_with_optimization, none,
  "argument '%0' is not supported with optimization", (StringRef))

ERROR(error_option_requires_sanitizer, none,
  "option '%0' requires a sanitizer to be enabled. Use -sanitize= to enable a"
  " sanitizer", (StringRef))

ERROR(error_option_missing_required_argument, none,
  "option '%0' is missing a required argument (%1)", (StringRef, StringRef))

ERROR(cannot_open_file,none,
  "cannot open file '%0' (%1)", (StringRef, StringRef))
ERROR(cannot_open_serialized_file,none,
  "cannot open file '%0' for diagnostics emission (%1)", (StringRef, StringRef))
ERROR(error_open_input_file,none,
  "error opening input file '%0' (%1)", (StringRef, StringRef))
ERROR(error_clang_importer_create_fail,none,
  "clang importer creation failed", ())
ERROR(error_missing_arg_value,none,
  "missing argument value for '%0', expected %1 argument(s)",
  (StringRef, unsigned))
ERROR(error_unknown_arg,none,
  "unknown argument: '%0'", (StringRef))
ERROR(error_invalid_arg_value,none,
  "invalid value '%1' in '%0'", (StringRef, StringRef))
WARNING(warning_cannot_multithread_batch_mode,none,
  "ignoring -num-threads argument; cannot multithread batch mode", ())
ERROR(error_unsupported_option_argument,none,
  "unsupported argument '%1' to option '%0'", (StringRef, StringRef))
ERROR(error_immediate_mode_missing_stdlib,none,
  "could not load the swift standard library", ())
ERROR(error_immediate_mode_missing_library,none,
  "could not load %select{shared library|framework}0 '%1'",
  (unsigned, StringRef))
ERROR(error_immediate_mode_primary_file,none,
  "immediate mode is incompatible with -primary-file", ())
ERROR(error_missing_frontend_action,none,
  "no frontend action was selected", ())
ERROR(error_invalid_source_location_str,none,
  "invalid source location string '%0'", (StringRef))
ERROR(error_no_source_location_scope_map,none,
  "-dump-scope-maps argument must be 'expanded' or a list of source locations",
  ())

NOTE(note_swift_version_major, none,
     "use major version, as in '-swift-version %0'", (unsigned))
NOTE(note_valid_swift_versions, none,
     "valid arguments to '-swift-version' are %0", (StringRef))

ERROR(error_mode_cannot_emit_dependencies,none,
      "this mode does not support emitting dependency files", ())
ERROR(error_mode_cannot_emit_reference_dependencies,none,
      "this mode does not support emitting reference dependency files", ())
ERROR(error_mode_cannot_emit_header,none,
      "this mode does not support emitting Objective-C headers", ())
ERROR(error_mode_cannot_emit_loaded_module_trace,none,
      "this mode does not support emitting the loaded module trace", ())
ERROR(error_mode_cannot_emit_module,none,
      "this mode does not support emitting modules", ())
ERROR(error_mode_cannot_emit_module_doc,none,
      "this mode does not support emitting module documentation files", ())
ERROR(error_mode_cannot_emit_interface,none,
      "this mode does not support emitting textual interface files", ())

WARNING(emit_reference_dependencies_without_primary_file,none,
  "ignoring -emit-reference-dependencies (requires -primary-file)", ())

ERROR(error_bad_module_name,none,
      "module name \"%0\" is not a valid identifier"
      "%select{|; use -module-name flag to specify an alternate name}1",
      (StringRef, bool))
ERROR(error_stdlib_module_name,none,
      "module name \"%0\" is reserved for the standard library"
      "%select{|; use -module-name flag to specify an alternate name}1",
      (StringRef, bool))

ERROR(error_stdlib_not_found,Fatal,
      "unable to load standard library for target '%0'", (StringRef))
ERROR(error_underlying_module_not_found,none,
      "underlying Objective-C module %0 not found", (Identifier))

ERROR(error_unable_to_load_supplementary_output_file_map, none,
      "unable to load supplementary output file map '%0': %1", (StringRef, StringRef))

ERROR(error_missing_entry_in_supplementary_output_file_map, none,
      "supplementary output file map '%0' is missing an entry for '%1' (this likely indicates a compiler issue; please file a bug report)", (StringRef, StringRef))

ERROR(error_repl_requires_no_input_files,none,
  "REPL mode requires no input files", ())
ERROR(error_mode_requires_one_input_file,none,
  "this mode requires a single input file", ())
ERROR(error_mode_requires_an_input_file,none,
  "this mode requires at least one input file", ())
ERROR(error_mode_requires_one_sil_multi_sib,none,
  "this mode requires .sil for primary-file and only .sib for other inputs", ())

ERROR(error_no_output_filename_specified,none,
  "an output filename was not specified for a mode which requires an output "
  "filename", ())

ERROR(error_implicit_output_file_is_directory,none,
  "the implicit output file '%0' is a directory; explicitly specify a filename "
  "using -o", (StringRef))

ERROR(error_if_any_output_files_are_specified_they_all_must_be,none,
  "if any output files are specified, they all must be", ())

ERROR(error_primary_file_not_found,none,
      "primary file '%0' was not found in file list '%1'",
      (StringRef, StringRef))

ERROR(error_cannot_have_input_files_with_file_list,none,
"cannot have input files with file list", ())

ERROR(error_cannot_have_primary_files_with_primary_file_list,none,
"cannot have primary input files with primary file list", ())

ERROR(error_cannot_have_supplementary_outputs,none,
"cannot have '%0' with '%1'", (StringRef, StringRef))

ERROR(error_duplicate_input_file,none,
"duplicate input file '%0'", (StringRef))

ERROR(repl_must_be_initialized,none,
      "variables currently must have an initial value when entered at the "
      "top level of the REPL", ())

ERROR(error_doing_code_completion,none,
      "compiler is in code completion mode (benign diagnostic)", ())

ERROR(verify_encountered_fatal,none,
      "fatal error encountered while in -verify mode", ())

ERROR(error_parse_input_file,none,
  "error parsing input file '%0' (%1)", (StringRef, StringRef))

ERROR(error_write_index_unit,none,
  "writing index unit file: %0", (StringRef))
ERROR(error_create_index_dir,none,
  "creating index directory: %0", (StringRef))
ERROR(error_write_index_record,none,
  "writing index record file: %0", (StringRef))
ERROR(error_index_failed_status_check,none,
  "failed file status check: %0", (StringRef))
ERROR(error_index_inputs_more_than_outputs,none,
  "index output filenames do not match input source files", ())

ERROR(error_wrong_number_of_arguments,none,
"wrong number of '%0' arguments (expected %1, got %2)", (StringRef, int, int))

ERROR(error_formatting_multiple_file_ranges,none,
  "file ranges don't support multiple input files", ())

ERROR(error_formatting_invalid_range,none,
  "file range is invalid", ())

WARNING(stats_disabled,none,
  "compiler was not built with support for collecting statistics", ())

WARNING(tbd_only_supported_in_whole_module,none,
  "TBD generation is only supported when the whole module can be seen", ())

ERROR(symbol_in_tbd_not_in_ir,none,
      "symbol '%0' (%1) is in TBD file, but not in generated IR",
      (StringRef, StringRef))
ERROR(symbol_in_ir_not_in_tbd,none,
      "symbol '%0' (%1) is in generated IR file, but not in TBD file",
      (StringRef, StringRef))

ERROR(tbd_validation_failure,none,
      "please file a radar or open a bug on bugs.swift.org with this code, and "
      "add -Xfrontend -validate-tbd-against-ir=none to squash the errors", ())

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))

WARNING(cannot_assign_value_to_conditional_compilation_flag,none,
        "conditional compilation flags do not have values in Swift; they are "
        "either present or absent (rather than '%0')", (StringRef))

ERROR(error_optimization_remark_pattern, none, "%0 in '%1'",
      (StringRef, StringRef))

ERROR(error_invalid_debug_prefix_map, none,
      "invalid argument '%0' to -debug-prefix-map; it must be of the form "
      "'original=remapped'", (StringRef))

#ifndef DIAG_NO_UNDEF
# if defined(DIAG)
#  undef DIAG
# endif
# undef NOTE
# undef WARNING
# undef ERROR
#endif
