r321588 - Reverted 321587: Enable configuration files in clang

Serge Pavlov via cfe-commits cfe-commits at lists.llvm.org
Sat Dec 30 10:38:44 PST 2017


Author: sepavloff
Date: Sat Dec 30 10:38:44 2017
New Revision: 321588

URL: http://llvm.org/viewvc/llvm-project?rev=321588&view=rev
Log:
Reverted 321587: Enable configuration files in clang

Need to check targets in tests more carefully.


Removed:
    cfe/trunk/test/Driver/Inputs/config/
    cfe/trunk/test/Driver/Inputs/config-1.cfg
    cfe/trunk/test/Driver/Inputs/config-2.cfg
    cfe/trunk/test/Driver/Inputs/config-2a.cfg
    cfe/trunk/test/Driver/Inputs/config-3.cfg
    cfe/trunk/test/Driver/Inputs/config-4.cfg
    cfe/trunk/test/Driver/Inputs/config-5.cfg
    cfe/trunk/test/Driver/Inputs/config-6.cfg
    cfe/trunk/test/Driver/Inputs/config2/
    cfe/trunk/test/Driver/config-file-errs.c
    cfe/trunk/test/Driver/config-file.c
    cfe/trunk/test/Driver/config-file2.c
    cfe/trunk/test/Driver/config-file3.c
Modified:
    cfe/trunk/docs/UsersManual.rst
    cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td
    cfe/trunk/include/clang/Config/config.h.cmake
    cfe/trunk/include/clang/Driver/Driver.h
    cfe/trunk/include/clang/Driver/Options.td
    cfe/trunk/lib/Driver/Driver.cpp

Modified: cfe/trunk/docs/UsersManual.rst
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/docs/UsersManual.rst?rev=321588&r1=321587&r2=321588&view=diff
==============================================================================
--- cfe/trunk/docs/UsersManual.rst (original)
+++ cfe/trunk/docs/UsersManual.rst Sat Dec 30 10:38:44 2017
@@ -694,77 +694,6 @@ a special character, which is the conven
 option tells Clang to put double-quotes around the entire filename, which
 is the convention used by NMake and Jom.
 
-Configuration files
--------------------
-
-Configuration files group command-line options and allow all of them to be
-specified just by referencing the configuration file. They may be used, for
-example, to collect options required to tune compilation for particular
-target, such as -L, -I, -l, --sysroot, codegen options, etc.
-
-The command line option `--config` can be used to specify configuration
-file in a Clang invocation. For example:
-
-::
-
-    clang --config /home/user/cfgs/testing.txt
-    clang --config debug.cfg
-
-If the provided argument contains a directory separator, it is considered as
-a file path, and options are read from that file. Otherwise the argument is
-treated as a file name and is searched for sequentially in the directories:
-    - user directory,
-    - system directory,
-    - the directory where Clang executable resides.
-Both user and system directories for configuration files are specified during
-clang build using CMake parameters, CLANG_CONFIG_FILE_USER_DIR and
-CLANG_CONFIG_FILE_SYSTEM_DIR respectively. The first file found is used. It is
-an error if the required file cannot be found.
-
-Another way to specify a configuration file is to encode it in executable name.
-For example, if the Clang executable is named `armv7l-clang` (it may be a
-symbolic link to `clang`), then Clang will search for file `armv7l.cfg` in the
-directory where Clang resides.
-
-If a driver mode is specified in invocation, Clang tries to find a file specific
-for the specified mode. For example, if the executable file is named
-`x86_64-clang-cl`, Clang first looks for `x86_64-cl.cfg` and if it is not found,
-looks for `x86_64.cfg'.
-
-If the command line contains options that effectively change target architecture
-(these are -m32, -EL, and some others) and the configuration file starts with an
-architecture name, Clang tries to load the configuration file for the effective
-architecture. For example, invocation:
-
-::
-
-    x86_64-clang -m32 abc.c
-
-causes Clang search for a file `i368.cfg` first, and if no such file is found,
-Clang looks for the file `x86_64.cfg`.
-
-The configuration file consists of command-line options specified on one or
-more lines. Lines composed of whitespace characters only are ignored as well as
-lines in which the first non-blank character is `#`. Long options may be split
-between several lines by a trailing backslash. Here is example of a
-configuration file:
-
-::
-
-    # Several options on line
-    -c --target=x86_64-unknown-linux-gnu
-
-    # Long option split between lines
-    -I/usr/lib/gcc/x86_64-linux-gnu/5.4.0/../../../../\
-    include/c++/5.4.0
-
-    # other config files may be included
-    @linux.options
-
-Files included by `@file` directives in configuration files are resolved
-relative to the including file. For example, if a configuration file
-`~/.llvm/target.cfg` contains the directive `@os/linux.opts`, the file
-`linux.opts` is searched for in the directory `~/.llvm/os`.
 
 Language and Target-Independent Features
 ========================================

Modified: cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td?rev=321588&r1=321587&r2=321588&view=diff
==============================================================================
--- cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td (original)
+++ cfe/trunk/include/clang/Basic/DiagnosticDriverKinds.td Sat Dec 30 10:38:44 2017
@@ -112,18 +112,6 @@ def err_drv_invalid_argument_to_fdebug_p
   "invalid argument '%0' to -fdebug-prefix-map">;
 def err_drv_malformed_sanitizer_blacklist : Error<
   "malformed sanitizer blacklist: '%0'">;
-def err_drv_duplicate_config : Error<
-  "no more than one option '--config' is allowed">;
-def err_drv_config_file_not_exist : Error<
-  "configuration file '%0' does not exist">;
-def err_drv_config_file_not_found : Error<
-  "configuration file '%0' cannot be found">;
-def note_drv_config_file_searched_in : Note<
-  "was searched for in the directory: %0">;
-def err_drv_cannot_read_config_file : Error<
-  "cannot read configuration file '%0'">;
-def err_drv_nested_config_file: Error<
-  "option '--config' is not allowed inside configuration file">;
 
 def err_target_unsupported_arch
   : Error<"the target architecture '%0' is not supported by the target '%1'">;

Modified: cfe/trunk/include/clang/Config/config.h.cmake
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Config/config.h.cmake?rev=321588&r1=321587&r2=321588&view=diff
==============================================================================
--- cfe/trunk/include/clang/Config/config.h.cmake (original)
+++ cfe/trunk/include/clang/Config/config.h.cmake Sat Dec 30 10:38:44 2017
@@ -35,10 +35,6 @@
 /* Directories clang will search for headers */
 #define C_INCLUDE_DIRS "${C_INCLUDE_DIRS}"
 
-/* Directories clang will search for configuration files */
-#cmakedefine CLANG_CONFIG_FILE_SYSTEM_DIR "${CLANG_CONFIG_FILE_SYSTEM_DIR}"
-#cmakedefine CLANG_CONFIG_FILE_USER_DIR "${CLANG_CONFIG_FILE_USER_DIR}"
-
 /* Default <path> to all compiler invocations for --sysroot=<path>. */
 #define DEFAULT_SYSROOT "${DEFAULT_SYSROOT}"
 

Modified: cfe/trunk/include/clang/Driver/Driver.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Driver.h?rev=321588&r1=321587&r2=321588&view=diff
==============================================================================
--- cfe/trunk/include/clang/Driver/Driver.h (original)
+++ cfe/trunk/include/clang/Driver/Driver.h Sat Dec 30 10:38:44 2017
@@ -19,8 +19,6 @@
 #include "clang/Driver/Util.h"
 #include "llvm/ADT/StringMap.h"
 #include "llvm/ADT/StringRef.h"
-#include "llvm/Option/ArgList.h"
-#include "llvm/Support/StringSaver.h"
 
 #include <list>
 #include <map>
@@ -28,6 +26,14 @@
 
 namespace llvm {
 class Triple;
+
+namespace opt {
+  class Arg;
+  class ArgList;
+  class DerivedArgList;
+  class InputArgList;
+  class OptTable;
+}
 }
 
 namespace clang {
@@ -132,12 +138,6 @@ public:
   /// The path to the compiler resource directory.
   std::string ResourceDir;
 
-  /// System directory for config files.
-  std::string SystemConfigDir;
-
-  /// User directory for config files.
-  std::string UserConfigDir;
-
   /// A prefix directory used to emulate a limited subset of GCC's '-Bprefix'
   /// functionality.
   /// FIXME: This type of customization should be removed in favor of the
@@ -208,21 +208,6 @@ private:
   /// Name to use when invoking gcc/g++.
   std::string CCCGenericGCCName;
 
-  /// Name of configuration file if used.
-  std::string ConfigFile;
-
-  /// Allocator for string saver.
-  llvm::BumpPtrAllocator Alloc;
-
-  /// Object that stores strings read from configuration file.
-  llvm::StringSaver Saver;
-
-  /// Arguments originated from configuration file.
-  std::unique_ptr<llvm::opt::InputArgList> CfgOptions;
-
-  /// Arguments originated from command line.
-  std::unique_ptr<llvm::opt::InputArgList> CLOptions;
-
   /// Whether to check that input files exist when constructing compilation
   /// jobs.
   unsigned CheckInputsExist : 1;
@@ -292,8 +277,6 @@ public:
   /// Name to use when invoking gcc/g++.
   const std::string &getCCCGenericGCCName() const { return CCCGenericGCCName; }
 
-  const std::string &getConfigFile() const { return ConfigFile; }
-
   const llvm::opt::OptTable &getOpts() const { return *Opts; }
 
   const DiagnosticsEngine &getDiags() const { return Diags; }
@@ -510,18 +493,6 @@ public:
   LTOKind getLTOMode() const { return LTOMode; }
 
 private:
-
-  /// Tries to load options from configuration file.
-  ///
-  /// \returns true if error occurred.
-  bool loadConfigFile();
-
-  /// Read options from the specified file.
-  ///
-  /// \param [in] FileName File to read.
-  /// \returns true, if error occurred while reading.
-  bool readConfigFile(StringRef FileName);
-
   /// Set the driver mode (cl, gcc, etc) from an option string of the form
   /// --driver-mode=<mode>.
   void setDriverModeFromOption(StringRef Opt);

Modified: cfe/trunk/include/clang/Driver/Options.td
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Driver/Options.td?rev=321588&r1=321587&r2=321588&view=diff
==============================================================================
--- cfe/trunk/include/clang/Driver/Options.td (original)
+++ cfe/trunk/include/clang/Driver/Options.td Sat Dec 30 10:38:44 2017
@@ -519,12 +519,6 @@ def cl_fp32_correctly_rounded_divide_sqr
 def client__name : JoinedOrSeparate<["-"], "client_name">;
 def combine : Flag<["-", "--"], "combine">, Flags<[DriverOption, Unsupported]>;
 def compatibility__version : JoinedOrSeparate<["-"], "compatibility_version">;
-def config : Separate<["--"], "config">, Flags<[DriverOption]>,
-  HelpText<"Specifies configuration file">;
-def config_system_dir_EQ : Joined<["--"], "config-system-dir=">, Flags<[DriverOption, HelpHidden]>,
-  HelpText<"System directory for configuration files">;
-def config_user_dir_EQ : Joined<["--"], "config-user-dir=">, Flags<[DriverOption, HelpHidden]>,
-  HelpText<"User directory for configuration files">;
 def coverage : Flag<["-", "--"], "coverage">, Flags<[CoreOption]>;
 def cpp_precomp : Flag<["-"], "cpp-precomp">, Group<clang_ignored_f_Group>;
 def current__version : JoinedOrSeparate<["-"], "current_version">;

Modified: cfe/trunk/lib/Driver/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Driver/Driver.cpp?rev=321588&r1=321587&r2=321588&view=diff
==============================================================================
--- cfe/trunk/lib/Driver/Driver.cpp (original)
+++ cfe/trunk/lib/Driver/Driver.cpp Sat Dec 30 10:38:44 2017
@@ -62,7 +62,6 @@
 #include "llvm/Option/OptSpecifier.h"
 #include "llvm/Option/OptTable.h"
 #include "llvm/Option/Option.h"
-#include "llvm/Support/CommandLine.h"
 #include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/FileSystem.h"
 #include "llvm/Support/Path.h"
@@ -71,7 +70,6 @@
 #include "llvm/Support/Program.h"
 #include "llvm/Support/TargetRegistry.h"
 #include "llvm/Support/raw_ostream.h"
-#include "llvm/Support/StringSaver.h"
 #include <map>
 #include <memory>
 #include <utility>
@@ -94,8 +92,7 @@ Driver::Driver(StringRef ClangExecutable
       CCPrintHeadersFilename(nullptr), CCLogDiagnosticsFilename(nullptr),
       CCCPrintBindings(false), CCPrintHeaders(false), CCLogDiagnostics(false),
       CCGenDiagnostics(false), DefaultTargetTriple(DefaultTargetTriple),
-      CCCGenericGCCName(""), Saver(Alloc),
-      CheckInputsExist(true), CCCUsePCH(true),
+      CCCGenericGCCName(""), CheckInputsExist(true), CCCUsePCH(true),
       GenReproducer(false), SuppressMissingInputWarning(false) {
 
   // Provide a sane fallback if no VFS is specified.
@@ -106,13 +103,6 @@ Driver::Driver(StringRef ClangExecutable
   Dir = llvm::sys::path::parent_path(ClangExecutable);
   InstalledDir = Dir; // Provide a sensible default installed dir.
 
-#if defined(CLANG_CONFIG_FILE_SYSTEM_DIR)
-  SystemConfigDir = CLANG_CONFIG_FILE_SYSTEM_DIR;
-#endif
-#if defined(CLANG_CONFIG_FILE_USER_DIR)
-  UserConfigDir = CLANG_CONFIG_FILE_USER_DIR;
-#endif
-
   // Compute the path to the resource directory.
   StringRef ClangResourceDir(CLANG_RESOURCE_DIR);
   SmallString<128> P(Dir);
@@ -610,216 +600,6 @@ void Driver::CreateOffloadingDeviceToolC
   //
 }
 
-/// Looks the given directories for the specified file.
-///
-/// \param[out] FilePath File path, if the file was found.
-/// \param[in]  Dirs Directories used for the search.
-/// \param[in]  FileName Name of the file to search for.
-/// \return True if file was found.
-///
-/// Looks for file specified by FileName sequentially in directories specified
-/// by Dirs.
-///
-static bool searchForFile(SmallVectorImpl<char> &FilePath,
-                          ArrayRef<std::string> Dirs,
-                          StringRef FileName) {
-  SmallString<128> WPath;
-  for (const StringRef &Dir : Dirs) {
-    if (Dir.empty())
-      continue;
-    WPath.clear();
-    llvm::sys::path::append(WPath, Dir, FileName);
-    llvm::sys::path::native(WPath);
-    if (llvm::sys::fs::is_regular_file(WPath)) {
-      FilePath = std::move(WPath);
-      return true;
-    }
-  }
-  return false;
-}
-
-bool Driver::readConfigFile(StringRef FileName) {
-  // Try reading the given file.
-  SmallVector<const char *, 32> NewCfgArgs;
-  if (!llvm::cl::readConfigFile(FileName, Saver, NewCfgArgs)) {
-    Diag(diag::err_drv_cannot_read_config_file) << FileName;
-    return true;
-  }
-
-  // Read options from config file.
-  llvm::SmallString<128> CfgFileName(FileName);
-  llvm::sys::path::native(CfgFileName);
-  ConfigFile = CfgFileName.str();
-  bool ContainErrors;
-  CfgOptions = llvm::make_unique<InputArgList>(
-      ParseArgStrings(NewCfgArgs, ContainErrors));
-  if (ContainErrors) {
-    CfgOptions.reset();
-    return true;
-  }
-
-  if (CfgOptions->hasArg(options::OPT_config)) {
-    CfgOptions.reset();
-    Diag(diag::err_drv_nested_config_file);
-    return true;
-  }
-
-  // Claim all arguments that come from a configuration file so that the driver
-  // does not warn on any that is unused.
-  for (Arg *A : *CfgOptions)
-    A->claim();
-  return false;
-}
-
-bool Driver::loadConfigFile() {
-  std::string CfgFileName;
-  bool FileSpecifiedExplicitly = false;
-
-  // Process options that change search path for config files.
-  if (CLOptions) {
-    if (CLOptions->hasArg(options::OPT_config_system_dir_EQ)) {
-      SmallString<128> CfgDir;
-      CfgDir.append(
-          CLOptions->getLastArgValue(options::OPT_config_system_dir_EQ));
-      if (!CfgDir.empty()) {
-        if (std::error_code EC = llvm::sys::fs::make_absolute(CfgDir))
-          SystemConfigDir.clear();
-        else
-          SystemConfigDir = std::string(CfgDir.begin(), CfgDir.end());
-      }
-    }
-    if (CLOptions->hasArg(options::OPT_config_user_dir_EQ)) {
-      SmallString<128> CfgDir;
-      CfgDir.append(
-          CLOptions->getLastArgValue(options::OPT_config_user_dir_EQ));
-      if (!CfgDir.empty()) {
-        if (std::error_code EC = llvm::sys::fs::make_absolute(CfgDir))
-          UserConfigDir.clear();
-        else
-          UserConfigDir = std::string(CfgDir.begin(), CfgDir.end());
-      }
-    }
-  }
-
-  // First try to find config file specified in command line.
-  if (CLOptions) {
-    std::vector<std::string> ConfigFiles =
-        CLOptions->getAllArgValues(options::OPT_config);
-    if (ConfigFiles.size() > 1) {
-      Diag(diag::err_drv_duplicate_config);
-      return true;
-    }
-
-    if (!ConfigFiles.empty()) {
-      CfgFileName = ConfigFiles.front();
-      assert(!CfgFileName.empty());
-
-      // If argument contains directory separator, treat it as a path to
-      // configuration file.
-      if (llvm::sys::path::has_parent_path(CfgFileName)) {
-        SmallString<128> CfgFilePath;
-        if (llvm::sys::path::is_relative(CfgFileName))
-          llvm::sys::fs::current_path(CfgFilePath);
-        llvm::sys::path::append(CfgFilePath, CfgFileName);
-        if (!llvm::sys::fs::is_regular_file(CfgFilePath)) {
-          Diag(diag::err_drv_config_file_not_exist) << CfgFilePath;
-          return true;
-        }
-        return readConfigFile(CfgFilePath);
-      }
-
-      FileSpecifiedExplicitly = true;
-    }
-  }
-
-  // If config file is not specified explicitly, try to deduce configuration
-  // from executable name. For instance, an executable 'armv7l-clang' will
-  // search for config file 'armv7l-clang.cfg'.
-  if (CfgFileName.empty() && !ClangNameParts.TargetPrefix.empty())
-    CfgFileName = ClangNameParts.TargetPrefix + '-' + ClangNameParts.ModeSuffix;
-
-  if (CfgFileName.empty())
-    return false;
-
-  // Determine architecture part of the file name, if it is present.
-  StringRef CfgFileArch = CfgFileName;
-  size_t ArchPrefixLen = CfgFileArch.find('-');
-  if (ArchPrefixLen == StringRef::npos)
-    ArchPrefixLen = CfgFileArch.size();
-  llvm::Triple CfgTriple;
-  CfgFileArch.take_front(ArchPrefixLen);
-  CfgTriple = llvm::Triple(llvm::Triple::normalize(CfgFileArch));
-  if (CfgTriple.getArch() == llvm::Triple::ArchType::UnknownArch)
-    ArchPrefixLen = 0;
-
-  if (!StringRef(CfgFileName).endswith(".cfg"))
-    CfgFileName += ".cfg";
-
-  // If config file starts with architecture name and command line options
-  // redefine architecture (with options like -m32 -LE etc), try finding new
-  // config file with that architecture.
-  SmallString<128> FixedConfigFile;
-  size_t FixedArchPrefixLen = 0;
-  if (ArchPrefixLen) {
-    // Get architecture name from config file name like 'i386.cfg' or
-    // 'armv7l-clang.cfg'.
-    // Check if command line options changes effective triple.
-    llvm::Triple EffectiveTriple = computeTargetTriple(*this,
-                                             CfgTriple.getTriple(), *CLOptions);
-    if (CfgTriple.getArch() != EffectiveTriple.getArch()) {
-      FixedConfigFile = EffectiveTriple.getArchName();
-      FixedArchPrefixLen = FixedConfigFile.size();
-      // Append the rest of original file name so that file name transforms
-      // like: i386-clang.cfg -> x86_64-clang.cfg.
-      if (ArchPrefixLen < CfgFileName.size())
-        FixedConfigFile += CfgFileName.substr(ArchPrefixLen);
-    }
-  }
-
-  // Prepare list of directories where config file is searched for.
-  SmallVector<std::string, 3> CfgFileSearchDirs;
-  CfgFileSearchDirs.push_back(UserConfigDir);
-  CfgFileSearchDirs.push_back(SystemConfigDir);
-  CfgFileSearchDirs.push_back(Dir);
-
-  // Try to find config file. First try file with corrected architecture.
-  llvm::SmallString<128> CfgFilePath;
-  if (!FixedConfigFile.empty()) {
-    if (searchForFile(CfgFilePath, CfgFileSearchDirs, FixedConfigFile))
-      return readConfigFile(CfgFilePath);
-    // If 'x86_64-clang.cfg' was not found, try 'x86_64.cfg'.
-    FixedConfigFile.resize(FixedArchPrefixLen);
-    FixedConfigFile.append(".cfg");
-    if (searchForFile(CfgFilePath, CfgFileSearchDirs, FixedConfigFile))
-      return readConfigFile(CfgFilePath);
-  }
-
-  // Then try original file name.
-  if (searchForFile(CfgFilePath, CfgFileSearchDirs, CfgFileName))
-    return readConfigFile(CfgFilePath);
-
-  // Finally try removing driver mode part: 'x86_64-clang.cfg' -> 'x86_64.cfg'.
-  if (!ClangNameParts.ModeSuffix.empty() &&
-      !ClangNameParts.TargetPrefix.empty()) {
-    CfgFileName.assign(ClangNameParts.TargetPrefix);
-    CfgFileName.append(".cfg");
-    if (searchForFile(CfgFilePath, CfgFileSearchDirs, CfgFileName))
-      return readConfigFile(CfgFilePath);
-  }
-
-  // Report error but only if config file was specified explicitly, by option
-  // --config. If it was deduced from executable name, it is not an error.
-  if (FileSpecifiedExplicitly) {
-    Diag(diag::err_drv_config_file_not_found) << CfgFileName;
-    for (const std::string &SearchDir : CfgFileSearchDirs)
-      if (!SearchDir.empty())
-        Diag(diag::note_drv_config_file_searched_in) << SearchDir;
-    return true;
-  }
-
-  return false;
-}
-
 Compilation *Driver::BuildCompilation(ArrayRef<const char *> ArgList) {
   llvm::PrettyStackTraceString CrashInfo("Compilation construction");
 
@@ -843,35 +623,12 @@ Compilation *Driver::BuildCompilation(Ar
 
   // FIXME: What are we going to do with -V and -b?
 
-  // Arguments specified in command line.
-  bool ContainsError;
-  CLOptions = llvm::make_unique<InputArgList>(
-      ParseArgStrings(ArgList.slice(1), ContainsError));
-
-  // Try parsing configuration file.
-  if (!ContainsError)
-    ContainsError = loadConfigFile();
-  bool HasConfigFile = !ContainsError && (CfgOptions.get() != nullptr);
-
-  // All arguments, from both config file and command line.
-  InputArgList Args = std::move(HasConfigFile ? std::move(*CfgOptions)
-                                              : std::move(*CLOptions));
-  if (HasConfigFile)
-    for (auto *Opt : *CLOptions) {
-      const Arg *BaseArg = &Opt->getBaseArg();
-      if (BaseArg == Opt)
-        BaseArg = nullptr;
-      Arg *Copy = new llvm::opt::Arg(Opt->getOption(), Opt->getSpelling(),
-                                     Args.size(), BaseArg);
-      Copy->getValues() = Opt->getValues();
-      if (Opt->isClaimed())
-        Copy->claim();
-      Args.append(Copy);
-    }
-
   // FIXME: This stuff needs to go into the Compilation, not the driver.
   bool CCCPrintPhases;
 
+  bool ContainsError;
+  InputArgList Args = ParseArgStrings(ArgList.slice(1), ContainsError);
+
   // Silence driver warnings if requested
   Diags.setIgnoreAllWarnings(Args.hasArg(options::OPT_w));
 
@@ -1387,10 +1144,6 @@ void Driver::PrintVersion(const Compilat
 
   // Print out the install directory.
   OS << "InstalledDir: " << InstalledDir << '\n';
-
-  // If configuration file was used, print its path.
-  if (!ConfigFile.empty())
-    OS << "Configuration file: " << ConfigFile << '\n';
 }
 
 /// PrintDiagnosticCategories - Implement the --print-diagnostic-categories
@@ -1497,15 +1250,6 @@ bool Driver::HandleImmediateArgs(const C
     SuppressMissingInputWarning = true;
   }
 
-  if (C.getArgs().hasArg(options::OPT_v)) {
-    if (!SystemConfigDir.empty())
-      llvm::errs() << "System configuration file directory: "
-                   << SystemConfigDir << "\n";
-    if (!UserConfigDir.empty())
-      llvm::errs() << "User configuration file directory: "
-                   << UserConfigDir << "\n";
-  }
-
   const ToolChain &TC = C.getDefaultToolChain();
 
   if (C.getArgs().hasArg(options::OPT_v))

Removed: cfe/trunk/test/Driver/Inputs/config-1.cfg
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/config-1.cfg?rev=321587&view=auto
==============================================================================
--- cfe/trunk/test/Driver/Inputs/config-1.cfg (original)
+++ cfe/trunk/test/Driver/Inputs/config-1.cfg (removed)
@@ -1,6 +0,0 @@
-
-# Empty lines and line started with # are ignored
--Werror
-
-    # Language
-    -std=c99

Removed: cfe/trunk/test/Driver/Inputs/config-2.cfg
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/config-2.cfg?rev=321587&view=auto
==============================================================================
--- cfe/trunk/test/Driver/Inputs/config-2.cfg (original)
+++ cfe/trunk/test/Driver/Inputs/config-2.cfg (removed)
@@ -1,2 +0,0 @@
-# nested inclusion
- at config-3.cfg

Removed: cfe/trunk/test/Driver/Inputs/config-2a.cfg
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/config-2a.cfg?rev=321587&view=auto
==============================================================================
--- cfe/trunk/test/Driver/Inputs/config-2a.cfg (original)
+++ cfe/trunk/test/Driver/Inputs/config-2a.cfg (removed)
@@ -1,2 +0,0 @@
-# nested inclusion
- at config/config-4.cfg

Removed: cfe/trunk/test/Driver/Inputs/config-3.cfg
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/config-3.cfg?rev=321587&view=auto
==============================================================================
--- cfe/trunk/test/Driver/Inputs/config-3.cfg (original)
+++ cfe/trunk/test/Driver/Inputs/config-3.cfg (removed)
@@ -1 +0,0 @@
--Wundefined-func-template

Removed: cfe/trunk/test/Driver/Inputs/config-4.cfg
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/config-4.cfg?rev=321587&view=auto
==============================================================================
--- cfe/trunk/test/Driver/Inputs/config-4.cfg (original)
+++ cfe/trunk/test/Driver/Inputs/config-4.cfg (removed)
@@ -1,2 +0,0 @@
--L/usr/local/lib
--stdlib=libc++
\ No newline at end of file

Removed: cfe/trunk/test/Driver/Inputs/config-5.cfg
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/config-5.cfg?rev=321587&view=auto
==============================================================================
--- cfe/trunk/test/Driver/Inputs/config-5.cfg (original)
+++ cfe/trunk/test/Driver/Inputs/config-5.cfg (removed)
@@ -1,2 +0,0 @@
---serialize-diagnostics diag.ser
--target

Removed: cfe/trunk/test/Driver/Inputs/config-6.cfg
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/Inputs/config-6.cfg?rev=321587&view=auto
==============================================================================
--- cfe/trunk/test/Driver/Inputs/config-6.cfg (original)
+++ cfe/trunk/test/Driver/Inputs/config-6.cfg (removed)
@@ -1 +0,0 @@
---config config-5

Removed: cfe/trunk/test/Driver/config-file-errs.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/config-file-errs.c?rev=321587&view=auto
==============================================================================
--- cfe/trunk/test/Driver/config-file-errs.c (original)
+++ cfe/trunk/test/Driver/config-file-errs.c (removed)
@@ -1,54 +0,0 @@
-//--- No more than one '--config' may be specified.
-//
-// RUN: not %clang --config 1.cfg --config 2.cfg 2>&1 | FileCheck %s -check-prefix CHECK-DUPLICATE
-// CHECK-DUPLICATE: no more than one option '--config' is allowed
-
-
-//--- '--config' must be followed by config file name.
-//
-// RUN: not %clang --config 2>&1 | FileCheck %s -check-prefix CHECK-MISSING-FILE
-// CHECK-MISSING-FILE: argument to '--config' is missing (expected 1 value)
-
-
-//--- '--config' must not be found in config files.
-//
-// RUN: not %clang --config %S/Inputs/config-6.cfg 2>&1 | FileCheck %s -check-prefix CHECK-NESTED
-// CHECK-NESTED: option '--config' is not allowed inside configuration file
-
-
-//--- Argument of '--config' must be existing file, if it is specified by path.
-//
-// RUN: not %clang --config somewhere/nonexistent-config-file 2>&1 | FileCheck %s -check-prefix CHECK-NONEXISTENT
-// CHECK-NONEXISTENT: configuration file '{{.*}}somewhere/nonexistent-config-file' does not exist
-
-
-//--- Argument of '--config' must exist somewhere in well-known directories, if it is specified by bare name.
-//
-// RUN: not %clang --config-system-dir= --config-user-dir= --config nonexistent-config-file 2>&1 | FileCheck %s -check-prefix CHECK-NOTFOUND0
-// CHECK-NOTFOUND0: configuration file 'nonexistent-config-file.cfg' cannot be found
-// CHECK-NOTFOUND0-NEXT: was searched for in the directory:
-// CHECK-NOTFOUND0-NOT: was searched for in the directory:
-//
-// RUN: not %clang --config-system-dir= --config-user-dir=%S/Inputs/config2 --config nonexistent-config-file 2>&1 | FileCheck %s -check-prefix CHECK-NOTFOUND1
-// CHECK-NOTFOUND1: configuration file 'nonexistent-config-file.cfg' cannot be found
-// CHECK-NOTFOUND1-NEXT: was searched for in the directory: {{.*}}/Inputs/config2
-// CHECK-NOTFOUND1-NEXT: was searched for in the directory:
-// CHECK-NOTFOUND1-NOT: was searched for in the directory:
-//
-// RUN: not %clang --config-system-dir=%S/Inputs/config --config-user-dir= --config nonexistent-config-file 2>&1 | FileCheck %s -check-prefix CHECK-NOTFOUND2
-// CHECK-NOTFOUND2: configuration file 'nonexistent-config-file.cfg' cannot be found
-// CHECK-NOTFOUND2-NEXT: was searched for in the directory: {{.*}}/Inputs/config
-// CHECK-NOTFOUND2-NEXT: was searched for in the directory:
-// CHECK-NOTFOUND2-NOT: was searched for in the directory:
-//
-// RUN: not %clang --config-system-dir=%S/Inputs/config --config-user-dir=%S/Inputs/config2 --config nonexistent-config-file 2>&1 | FileCheck %s -check-prefix CHECK-NOTFOUND3
-// CHECK-NOTFOUND3: configuration file 'nonexistent-config-file.cfg' cannot be found
-// CHECK-NOTFOUND3-NEXT: was searched for in the directory: {{.*}}/Inputs/config2
-// CHECK-NOTFOUND3-NEXT: was searched for in the directory: {{.*}}/Inputs/config
-// CHECK-NOTFOUND3-NEXT: was searched for in the directory:
-
-
-//--- Argument in config file cannot cross the file boundary
-//
-// RUN: not %clang --config %S/Inputs/config-5.cfg x86_64-unknown-linux-gnu -c %s 2>&1 | FileCheck %s -check-prefix CHECK-CROSS
-// CHECK-CROSS: error: argument to '-target' is missing

Removed: cfe/trunk/test/Driver/config-file.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/config-file.c?rev=321587&view=auto
==============================================================================
--- cfe/trunk/test/Driver/config-file.c (original)
+++ cfe/trunk/test/Driver/config-file.c (removed)
@@ -1,72 +0,0 @@
-//--- Config file search directories
-//
-// RUN: %clang --config-system-dir=%S/Inputs/config --config-user-dir=%S/Inputs/config2 -v 2>&1 | FileCheck %s -check-prefix CHECK-DIRS
-// CHECK-DIRS: System configuration file directory: {{.*}}/Inputs/config
-// CHECK-DIRS: User configuration file directory: {{.*}}/Inputs/config2
-
-
-//--- Config file (full path) in output of -###
-//
-// RUN: %clang --config %S/Inputs/config-1.cfg -c %s -### 2>&1 | FileCheck %s -check-prefix CHECK-HHH
-// CHECK-HHH: Configuration file: {{.*}}Inputs{{.}}config-1.cfg
-// CHECK-HHH: -Werror
-// CHECK-HHH: -std=c99
-
-
-//--- Config file (full path) in output of -v
-//
-// RUN: %clang --config %S/Inputs/config-1.cfg -c %s -v 2>&1 | FileCheck %s -check-prefix CHECK-V
-// CHECK-V: Configuration file: {{.*}}Inputs{{.}}config-1.cfg
-// CHECK-V: -Werror
-// CHECK-V: -std=c99
-
-
-//--- Config file in output of -###
-//
-// RUN: %clang --config-system-dir=%S/Inputs --config-user-dir= --config config-1.cfg -c %s -### 2>&1 | FileCheck %s -check-prefix CHECK-HHH2
-// CHECK-HHH2: Configuration file: {{.*}}Inputs{{.}}config-1.cfg
-// CHECK-HHH2: -Werror
-// CHECK-HHH2: -std=c99
-
-
-//--- Config file in output of -v
-//
-// RUN: %clang --config-system-dir=%S/Inputs --config-user-dir= --config config-1.cfg -c %s -v 2>&1 | FileCheck %s -check-prefix CHECK-V2
-// CHECK-V2: Configuration file: {{.*}}Inputs{{.}}config-1.cfg
-// CHECK-V2: -Werror
-// CHECK-V2: -std=c99
-
-
-//--- Nested config files
-//
-// RUN: %clang --config-system-dir=%S/Inputs --config-user-dir= --config config-2.cfg -c %s -### 2>&1 | FileCheck %s -check-prefix CHECK-NESTED
-// CHECK-NESTED: Configuration file: {{.*}}Inputs{{.}}config-2.cfg
-// CHECK-NESTED: -Wundefined-func-template
-
-// RUN: %clang --config-system-dir=%S/Inputs --config-user-dir= --config config-2.cfg -c %s -### 2>&1 | FileCheck %s -check-prefix CHECK-NESTED2
-// CHECK-NESTED2: Configuration file: {{.*}}Inputs{{.}}config-2.cfg
-// CHECK-NESTED2: -Wundefined-func-template
-
-
-// RUN: %clang --config %S/Inputs/config-2a.cfg -c %s -### 2>&1 | FileCheck %s -check-prefix CHECK-NESTEDa
-// CHECK-NESTEDa: Configuration file: {{.*}}Inputs{{.}}config-2a.cfg
-// CHECK-NESTEDa: -isysroot
-// CHECK-NESTEDa-SAME: /opt/data
-
-// RUN: %clang --config-system-dir=%S/Inputs --config-user-dir= --config config-2a.cfg -c %s -### 2>&1 | FileCheck %s -check-prefix CHECK-NESTED2a
-// CHECK-NESTED2a: Configuration file: {{.*}}Inputs{{.}}config-2a.cfg
-// CHECK-NESTED2a: -isysroot
-// CHECK-NESTED2a-SAME: /opt/data
-
-
-//--- Unused options in config file do not produce warnings
-//
-// RUN: %clang --config %S/Inputs/config-4.cfg -c %s -v 2>&1 | FileCheck %s -check-prefix CHECK-UNUSED
-// CHECK-UNUSED-NOT: argument unused during compilation:
-
-
-//--- User directory is searched first.
-//
-// RUN: %clang --config-system-dir=%S/Inputs/config --config-user-dir=%S/Inputs/config2 --config config-4 -c %s -v 2>&1 | FileCheck %s -check-prefix CHECK-PRECEDENCE
-// CHECK-PRECEDENCE: Configuration file: {{.*}}Inputs{{.}}config2{{.}}config-4.cfg
-// CHECK-PRECEDENCE: -Wall

Removed: cfe/trunk/test/Driver/config-file2.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/config-file2.c?rev=321587&view=auto
==============================================================================
--- cfe/trunk/test/Driver/config-file2.c (original)
+++ cfe/trunk/test/Driver/config-file2.c (removed)
@@ -1,51 +0,0 @@
-// REQUIRES: x86-registered-target
-
-//--- Invocation `clang --config x86_64-qqq -m32` loads `i386-qqq.cfg` if the latter exists.
-//
-// RUN: %clang --config-system-dir=%S/Inputs/config --config-user-dir= --config x86_64-qqq -m32 -c %s -### 2>&1 | FileCheck %s -check-prefix CHECK-RELOAD
-// CHECK-RELOAD: Target: i386-unknown-linux
-// CHECK-RELOAD: Configuration file: {{.*}}Inputs{{.}}config{{.}}i386-qqq.cfg
-
-
-//--- Invocation `clang --config x86_64-qqq2 -m32` loads `i386.cfg` if the latter exists in another search directory.
-//
-// RUN: %clang --config-system-dir=%S/Inputs/config --config-user-dir=%S/Inputs/config2 --config x86_64-qqq2 -m32 -c %s -### 2>&1 | FileCheck %s -check-prefix CHECK-RELOAD1
-// CHECK-RELOAD1: Target: i386-unknown-linux
-// CHECK-RELOAD1: Configuration file: {{.*}}Inputs{{.}}config2{{.}}i386.cfg
-
-
-//--- Invocation `clang --config x86_64-qqq2 -m32` loads `x86_64-qqq2.cfg` if `i386-qqq2.cfg` and `i386.cfg` do not exist.
-//
-// RUN: %clang --config-system-dir=%S/Inputs/config --config-user-dir= --config x86_64-qqq2 -m32 -c %s -### 2>&1 | FileCheck %s -check-prefix CHECK-RELOAD2
-// note: target is overriden due to -m32
-// CHECK-RELOAD2: Target: i386-unknown-linux
-// CHECK-RELOAD2: Configuration file: {{.*}}Inputs{{.}}config{{.}}x86_64-qqq2.cfg
-
-
-//--- Invocation `clang --config i386-qqq3 -m64` loads `x86_64.cfg` if `x86_64-qqq3.cfg` does not exist.
-//
-// RUN: %clang --config-system-dir=%S/Inputs/config --config-user-dir= --config i386-qqq3 -m64 -c %s -### 2>&1 | FileCheck %s -check-prefix CHECK-RELOAD3
-// CHECK-RELOAD3: Target: x86_64-unknown-linux
-// CHECK-RELOAD3: Configuration file: {{.*}}Inputs{{.}}config{{.}}x86_64.cfg
-
-
-//--- Invocation `clang --config x86_64-qqq -target i386` loads `i386-qqq.cfg` if the latter exists.
-//
-// RUN: %clang --config-system-dir=%S/Inputs/config --config-user-dir= --config x86_64-qqq -target i386 -c %s -### 2>&1 | FileCheck %s -check-prefix CHECK-RELOAD4
-// CHECK-RELOAD4: Target: i386
-// CHECK-RELOAD4: Configuration file: {{.*}}Inputs{{.}}config{{.}}i386-qqq.cfg
-
-
-//--- Invocation `clang --config x86_64-qqq2 -target i386` loads `x86_64-qqq2.cfg` if `i386-qqq2.cfg` and `i386.cfg` do not exist.
-//
-// RUN: %clang --config-system-dir=%S/Inputs/config --config-user-dir= --config x86_64-qqq2 -target i386 -c %s -### 2>&1 | FileCheck %s -check-prefix CHECK-RELOAD5
-// note: target is overriden due to -target i386
-// CHECK-RELOAD5: Target: i386
-// CHECK-RELOAD5: Configuration file: {{.*}}Inputs{{.}}config{{.}}x86_64-qqq2.cfg
-
-
-//--- Invocation `clang --config x86_64-qqq -target i386 -m64` loads `x86_64-qqq.cfg`.
-//
-// RUN: %clang --config-system-dir=%S/Inputs/config --config-user-dir= --config x86_64-qqq -target i386 -m64 -c %s -### 2>&1 | FileCheck %s -check-prefix CHECK-RELOAD6
-// CHECK-RELOAD6: Target: x86_64
-// CHECK-RELOAD6: Configuration file: {{.*}}Inputs{{.}}config{{.}}x86_64-qqq.cfg

Removed: cfe/trunk/test/Driver/config-file3.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Driver/config-file3.c?rev=321587&view=auto
==============================================================================
--- cfe/trunk/test/Driver/config-file3.c (original)
+++ cfe/trunk/test/Driver/config-file3.c (removed)
@@ -1,98 +0,0 @@
-// REQUIRES: shell
-// REQUIRES: x86-registered-target
-
-//--- If config file is specified by relative path (workdir/cfg-s2), it is searched for by that path.
-//
-// RUN: mkdir -p %T/workdir
-// RUN: echo "@subdir/cfg-s2" > %T/workdir/cfg-1
-// RUN: mkdir -p %T/workdir/subdir
-// RUN: echo "-Wundefined-var-template" > %T/workdir/subdir/cfg-s2
-//
-// RUN: ( cd %T && %clang --config workdir/cfg-1 -c %s -### 2>&1 | FileCheck %s -check-prefix CHECK-REL )
-//
-// CHECK-REL: Configuration file: {{.*}}/workdir/cfg-1
-// CHECK-REL: -Wundefined-var-template
-
-
-//--- Invocation qqq-clang-g++ tries to find config file qqq-clang-g++.cfg first.
-//
-// RUN: mkdir -p %T/testdmode
-// RUN: [ ! -s %T/testdmode/qqq-clang-g++ ] || rm %T/testdmode/qqq-clang-g++
-// RUN: ln -s %clang %T/testdmode/qqq-clang-g++
-// RUN: echo "-Wundefined-func-template" > %T/testdmode/qqq-clang-g++.cfg
-// RUN: echo "-Werror" > %T/testdmode/qqq.cfg
-// RUN: %T/testdmode/qqq-clang-g++ --config-system-dir= --config-user-dir= -c -no-canonical-prefixes %s -### 2>&1 | FileCheck %s -check-prefix FULL-NAME
-//
-// FULL-NAME: Configuration file: {{.*}}/testdmode/qqq-clang-g++.cfg
-// FULL-NAME: -Wundefined-func-template
-// FULL-NAME-NOT: -Werror
-//
-//--- File specified by --config overrides config inferred from clang executable.
-//
-// RUN: %T/testdmode/qqq-clang-g++ --config-system-dir=%S/Inputs/config --config-user-dir= --config i386-qqq -c -no-canonical-prefixes %s -### 2>&1 | FileCheck %s -check-prefix CHECK-EXPLICIT
-//
-// CHECK-EXPLICIT: Configuration file: {{.*}}/Inputs/config/i386-qqq.cfg
-//
-//--- Invocation qqq-clang-g++ tries to find config file qqq.cfg if qqq-clang-g++.cfg is not found.
-//
-// RUN: rm %T/testdmode/qqq-clang-g++.cfg
-// RUN: %T/testdmode/qqq-clang-g++ --config-system-dir= --config-user-dir= -c -no-canonical-prefixes %s -### 2>&1 | FileCheck %s -check-prefix SHORT-NAME
-//
-// SHORT-NAME: Configuration file: {{.*}}/testdmode/qqq.cfg
-// SHORT-NAME: -Werror
-// SHORT-NAME-NOT: -Wundefined-func-template
-
-
-//--- Config files are searched for in binary directory as well.
-//
-// RUN: mkdir -p %T/testbin
-// RUN: [ ! -s %T/testbin/clang ] || rm %T/testbin/clang
-// RUN: ln -s %clang %T/testbin/clang
-// RUN: echo "-Werror" > %T/testbin/aaa.cfg
-// RUN: %T/testbin/clang --config-system-dir= --config-user-dir= --config aaa.cfg -c -no-canonical-prefixes %s -### 2>&1 | FileCheck %s -check-prefix CHECK-BIN
-//
-// CHECK-BIN: Configuration file: {{.*}}/testbin/aaa.cfg
-// CHECK-BIN: -Werror
-
-
-//--- If command line contains options that change triple (for instance, -m32), clang tries
-//    reloading config file.
-
-//--- When reloading config file, x86_64-clang-g++ tries to find config i386-clang-g++.cfg first.
-//
-// RUN: mkdir -p %T/testreload
-// RUN: [ ! -s %T/testreload/x86_64-clang-g++ ] || rm %T/testreload/x86_64-clang-g++
-// RUN: ln -s %clang %T/testreload/x86_64-clang-g++
-// RUN: echo "-Wundefined-func-template" > %T/testreload/i386-clang-g++.cfg
-// RUN: echo "-Werror" > %T/testreload/i386.cfg
-// RUN: %T/testreload/x86_64-clang-g++ --config-system-dir= --config-user-dir= -c -m32 -no-canonical-prefixes %s -### 2>&1 | FileCheck %s -check-prefix CHECK-RELOAD
-//
-// CHECK-RELOAD: Configuration file: {{.*}}/testreload/i386-clang-g++.cfg
-// CHECK-RELOAD: -Wundefined-func-template
-// CHECK-RELOAD-NOT: -Werror
-
-//--- If config file is specified by --config and its name does not start with architecture, it is used without reloading.
-//
-// RUN: %T/testreload/x86_64-clang-g++ --config-system-dir=%S/Inputs --config-user-dir= --config config-3 -c -m32 -no-canonical-prefixes %s -### 2>&1 | FileCheck %s -check-prefix CHECK-RELOAD1a
-//
-// CHECK-RELOAD1a: Configuration file: {{.*}}/Inputs/config-3.cfg
-//
-// RUN: %T/testreload/x86_64-clang-g++ --config-system-dir=%S/Inputs --config-user-dir= --config config-3 -c -target i386 -no-canonical-prefixes %s -### 2>&1 | FileCheck %s -check-prefix CHECK-RELOAD1b
-//
-// CHECK-RELOAD1b: Configuration file: {{.*}}/Inputs/config-3.cfg
-
-//--- If config file is specified by --config and its name starts with architecture, it is reloaded.
-//
-// RUN: %T/testreload/x86_64-clang-g++ --config-system-dir=%S/Inputs/config --config-user-dir= --config x86_64-qqq -c -m32 -no-canonical-prefixes %s -### 2>&1 | FileCheck %s -check-prefix CHECK-RELOAD1c
-//
-// CHECK-RELOAD1c: Configuration file: {{.*}}/Inputs/config/i386-qqq.cfg
-
-//--- x86_64-clang-g++ tries to find config i386.cfg if i386-clang-g++.cfg is not found.
-//
-// RUN: rm %T/testreload/i386-clang-g++.cfg
-// RUN: %T/testreload/x86_64-clang-g++ --config-system-dir= --config-user-dir= -c -m32 -no-canonical-prefixes %s -### 2>&1 | FileCheck %s -check-prefix CHECK-RELOAD1d
-//
-// CHECK-RELOAD1d: Configuration file: {{.*}}/testreload/i386.cfg
-// CHECK-RELOAD1d: -Werror
-// CHECK-RELOAD1d-NOT: -Wundefined-func-template
-




More information about the cfe-commits mailing list