Coverage Report

Created: 2024-01-17 10:31

/src/llvm-project/clang/lib/Basic/LangStandards.cpp
Line
Count
Source (jump to first uncovered line)
1
//===--- LangStandards.cpp - Language Standard Definitions ----------------===//
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
#include "clang/Basic/LangStandard.h"
10
#include "clang/Config/config.h"
11
#include "llvm/ADT/StringSwitch.h"
12
#include "llvm/Support/ErrorHandling.h"
13
#include "llvm/TargetParser/Triple.h"
14
using namespace clang;
15
16
0
StringRef clang::languageToString(Language L) {
17
0
  switch (L) {
18
0
  case Language::Unknown:
19
0
    return "Unknown";
20
0
  case Language::Asm:
21
0
    return "Asm";
22
0
  case Language::LLVM_IR:
23
0
    return "LLVM IR";
24
0
  case Language::C:
25
0
    return "C";
26
0
  case Language::CXX:
27
0
    return "C++";
28
0
  case Language::ObjC:
29
0
    return "Objective-C";
30
0
  case Language::ObjCXX:
31
0
    return "Objective-C++";
32
0
  case Language::OpenCL:
33
0
    return "OpenCL";
34
0
  case Language::OpenCLCXX:
35
0
    return "OpenCLC++";
36
0
  case Language::CUDA:
37
0
    return "CUDA";
38
0
  case Language::RenderScript:
39
0
    return "RenderScript";
40
0
  case Language::HIP:
41
0
    return "HIP";
42
0
  case Language::HLSL:
43
0
    return "HLSL";
44
0
  }
45
46
0
  llvm_unreachable("unhandled language kind");
47
0
}
48
49
#define LANGSTANDARD(id, name, lang, desc, features)                           \
50
  static const LangStandard Lang_##id = {name, desc, features, Language::lang};
51
#include "clang/Basic/LangStandards.def"
52
53
600
const LangStandard &LangStandard::getLangStandardForKind(Kind K) {
54
600
  switch (K) {
55
0
  case lang_unspecified:
56
0
    llvm::report_fatal_error("getLangStandardForKind() on unspecified kind");
57
0
#define LANGSTANDARD(id, name, lang, desc, features) \
58
600
    case lang_##id: return Lang_##id;
59
600
#include "clang/Basic/LangStandards.def"
60
600
  }
61
0
  llvm_unreachable("Invalid language kind!");
62
0
}
63
64
46
LangStandard::Kind LangStandard::getLangKind(StringRef Name) {
65
46
  return llvm::StringSwitch<Kind>(Name)
66
1.79k
#define LANGSTANDARD(id, name, lang, desc, features) .Case(name, lang_##id)
67
1.88k
#define LANGSTANDARD_ALIAS(id, alias) .Case(alias, lang_##id)
68
46
#include "clang/Basic/LangStandards.def"
69
46
      .Default(lang_unspecified);
70
46
}
71
72
0
const LangStandard *LangStandard::getLangStandardForName(StringRef Name) {
73
0
  Kind K = getLangKind(Name);
74
0
  if (K == lang_unspecified)
75
0
    return nullptr;
76
77
0
  return &getLangStandardForKind(K);
78
0
}
79
80
LangStandard::Kind clang::getDefaultLanguageStandard(clang::Language Lang,
81
48
                                                     const llvm::Triple &T) {
82
48
  switch (Lang) {
83
0
  case Language::Unknown:
84
0
  case Language::LLVM_IR:
85
0
    llvm_unreachable("Invalid input kind!");
86
0
  case Language::OpenCL:
87
0
    return LangStandard::lang_opencl12;
88
0
  case Language::OpenCLCXX:
89
0
    return LangStandard::lang_openclcpp10;
90
0
  case Language::Asm:
91
0
  case Language::C:
92
    // The PS4 uses C99 as the default C standard.
93
0
    if (T.isPS4())
94
0
      return LangStandard::lang_gnu99;
95
0
    return LangStandard::lang_gnu17;
96
23
  case Language::ObjC:
97
23
    return LangStandard::lang_gnu11;
98
25
  case Language::CXX:
99
25
  case Language::ObjCXX:
100
25
  case Language::CUDA:
101
25
  case Language::HIP:
102
25
    return LangStandard::lang_gnucxx17;
103
0
  case Language::RenderScript:
104
0
    return LangStandard::lang_c99;
105
0
  case Language::HLSL:
106
0
    return LangStandard::lang_hlsl2021;
107
48
  }
108
0
  llvm_unreachable("unhandled Language kind!");
109
0
}