Subversion Repositories QNX 8.QNX8 LLVM/Clang compiler suite

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. //===--- TestClangConfig.h ------------------------------------------------===//
  2. //
  3. // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
  4. // See https://llvm.org/LICENSE.txt for license information.
  5. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
  6. //
  7. //===----------------------------------------------------------------------===//
  8.  
  9. #ifndef LLVM_CLANG_TESTING_TESTCLANGCONFIG_H
  10. #define LLVM_CLANG_TESTING_TESTCLANGCONFIG_H
  11.  
  12. #include "clang/Testing/CommandLineArgs.h"
  13. #include "llvm/Support/raw_ostream.h"
  14. #include <string>
  15. #include <vector>
  16.  
  17. namespace clang {
  18.  
  19. /// A Clang configuration for end-to-end tests that can be converted to
  20. /// command line arguments for the driver.
  21. ///
  22. /// The configuration is represented as typed, named values, making it easier
  23. /// and safer to work with compared to an array of string command line flags.
  24. struct TestClangConfig {
  25.   TestLanguage Language;
  26.  
  27.   /// The argument of the `-target` command line flag.
  28.   std::string Target;
  29.  
  30.   bool isC() const { return Language == Lang_C89 || Language == Lang_C99; }
  31.  
  32.   bool isC99OrLater() const { return Language == Lang_C99; }
  33.  
  34.   bool isCXX() const {
  35.     return Language == Lang_CXX03 || Language == Lang_CXX11 ||
  36.            Language == Lang_CXX14 || Language == Lang_CXX17 ||
  37.            Language == Lang_CXX20;
  38.   }
  39.  
  40.   bool isCXX11OrLater() const {
  41.     return Language == Lang_CXX11 || Language == Lang_CXX14 ||
  42.            Language == Lang_CXX17 || Language == Lang_CXX20;
  43.   }
  44.  
  45.   bool isCXX14OrLater() const {
  46.     return Language == Lang_CXX14 || Language == Lang_CXX17 ||
  47.            Language == Lang_CXX20;
  48.   }
  49.  
  50.   bool isCXX17OrLater() const {
  51.     return Language == Lang_CXX17 || Language == Lang_CXX20;
  52.   }
  53.  
  54.   bool isCXX20OrLater() const { return Language == Lang_CXX20; }
  55.  
  56.   bool supportsCXXDynamicExceptionSpecification() const {
  57.     return Language == Lang_CXX03 || Language == Lang_CXX11 ||
  58.            Language == Lang_CXX14;
  59.   }
  60.  
  61.   bool hasDelayedTemplateParsing() const {
  62.     return Target == "x86_64-pc-win32-msvc";
  63.   }
  64.  
  65.   std::vector<std::string> getCommandLineArgs() const {
  66.     std::vector<std::string> Result = getCommandLineArgsForTesting(Language);
  67.     Result.push_back("-target");
  68.     Result.push_back(Target);
  69.     return Result;
  70.   }
  71.  
  72.   std::string toString() const {
  73.     std::string Result;
  74.     llvm::raw_string_ostream OS(Result);
  75.     OS << "{ Language=" << Language << ", Target=" << Target << " }";
  76.     return Result;
  77.   }
  78.  
  79.   friend std::ostream &operator<<(std::ostream &OS,
  80.                                   const TestClangConfig &ClangConfig) {
  81.     return OS << ClangConfig.toString();
  82.   }
  83. };
  84.  
  85. } // end namespace clang
  86.  
  87. #endif
  88.