13fdcc6fb12d7cf38d2a3111736f80f0dd55447b4Nick Lewycky//===--- Types.cpp - Driver input & temporary type information ------------===//
2e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar//
3e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar//                     The LLVM Compiler Infrastructure
4e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar//
5e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar// This file is distributed under the University of Illinois Open Source
6e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar// License. See LICENSE.TXT for details.
7e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar//
8e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar//===----------------------------------------------------------------------===//
9e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar
10e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar#include "clang/Driver/Types.h"
1155d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor#include "llvm/ADT/StringSwitch.h"
12e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar#include <cassert>
1355fc873017f10f6f566b182b70f6fc22aefa3464Chandler Carruth#include <string.h>
14e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar
15e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbarusing namespace clang::driver;
16e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbarusing namespace clang::driver::types;
17e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar
18d8e0e4530bbfd7ee346f9e7447db61110bbc9e77Daniel Dunbarstruct TypeInfo {
19e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar  const char *Name;
20e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar  const char *Flags;
21e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar  const char *TempSuffix;
22e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar  ID PreprocessedType;
23e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar};
24e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar
2568f7a2426227476bcfa33ada70b708c82419dfdcNuno Lopesstatic const TypeInfo TypeInfos[] = {
26e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar#define TYPE(NAME, ID, PP_TYPE, TEMP_SUFFIX, FLAGS) \
27e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar  { NAME, FLAGS, TEMP_SUFFIX, TY_##PP_TYPE, },
28e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar#include "clang/Driver/Types.def"
29e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar#undef TYPE
30e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar};
31e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbarstatic const unsigned numTypes = sizeof(TypeInfos) / sizeof(TypeInfos[0]);
32e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar
3368f7a2426227476bcfa33ada70b708c82419dfdcNuno Lopesstatic const TypeInfo &getInfo(unsigned id) {
34e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar  assert(id > 0 && id - 1 < numTypes && "Invalid Type ID.");
35e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar  return TypeInfos[id - 1];
36e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar}
37e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar
381eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpconst char *types::getTypeName(ID Id) {
391eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  return getInfo(Id).Name;
40e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar}
41e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar
421eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumptypes::ID types::getPreprocessedType(ID Id) {
431eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  return getInfo(Id).PreprocessedType;
44e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar}
45e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar
461eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpconst char *types::getTypeTempSuffix(ID Id) {
471eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  return getInfo(Id).TempSuffix;
48e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar}
49e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar
501eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpbool types::onlyAssembleType(ID Id) {
511eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  return strchr(getInfo(Id).Flags, 'a');
52e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar}
53e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar
541eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpbool types::onlyPrecompileType(ID Id) {
551eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  return strchr(getInfo(Id).Flags, 'p');
56e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar}
57e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar
581eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpbool types::canTypeBeUserSpecified(ID Id) {
591eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  return strchr(getInfo(Id).Flags, 'u');
60e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar}
61e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar
621eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpbool types::appendSuffixForType(ID Id) {
631eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump  return strchr(getInfo(Id).Flags, 'A');
64e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar}
65e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar
661eb4433ac451dc16f4133a88af2d002ac26c58efMike Stumpbool types::canLipoType(ID Id) {
679f5ef9426fee383cb42b72cee1d6dc949c8c0189Daniel Dunbar  return (Id == TY_Nothing ||
689f5ef9426fee383cb42b72cee1d6dc949c8c0189Daniel Dunbar          Id == TY_Image ||
69d6261a96cd470c148c474c8ebeacabc40e0ebb37Chad Rosier          Id == TY_Object ||
70d6261a96cd470c148c474c8ebeacabc40e0ebb37Chad Rosier          Id == TY_LTO_BC);
719f5ef9426fee383cb42b72cee1d6dc949c8c0189Daniel Dunbar}
729f5ef9426fee383cb42b72cee1d6dc949c8c0189Daniel Dunbar
735bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewyckybool types::isAcceptedByClang(ID Id) {
745bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewycky  switch (Id) {
755bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewycky  default:
765bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewycky    return false;
775bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewycky
785bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewycky  case TY_Asm:
795bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewycky  case TY_C: case TY_PP_C:
805bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewycky  case TY_CL:
815bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewycky  case TY_CUDA:
825bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewycky  case TY_ObjC: case TY_PP_ObjC: case TY_PP_ObjC_Alias:
835bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewycky  case TY_CXX: case TY_PP_CXX:
845bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewycky  case TY_ObjCXX: case TY_PP_ObjCXX: case TY_PP_ObjCXX_Alias:
855bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewycky  case TY_CHeader: case TY_PP_CHeader:
865bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewycky  case TY_CLHeader:
875bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewycky  case TY_ObjCHeader: case TY_PP_ObjCHeader:
885bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewycky  case TY_CXXHeader: case TY_PP_CXXHeader:
895bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewycky  case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader:
905bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewycky  case TY_AST:
915bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewycky  case TY_LLVM_IR: case TY_LLVM_BC:
925bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewycky    return true;
935bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewycky  }
945bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewycky}
955bab9ae87c41148ee2f92d312945c1e9303222e8Nick Lewycky
9677544fde702fdab2a6150ba812ecf04eb1e6eab6Daniel Dunbarbool types::isObjC(ID Id) {
9777544fde702fdab2a6150ba812ecf04eb1e6eab6Daniel Dunbar  switch (Id) {
9877544fde702fdab2a6150ba812ecf04eb1e6eab6Daniel Dunbar  default:
9977544fde702fdab2a6150ba812ecf04eb1e6eab6Daniel Dunbar    return false;
10077544fde702fdab2a6150ba812ecf04eb1e6eab6Daniel Dunbar
101cc52a0688f46cd04dd6b4670b304cbe82e3018c0Nico Weber  case TY_ObjC: case TY_PP_ObjC: case TY_PP_ObjC_Alias:
10277544fde702fdab2a6150ba812ecf04eb1e6eab6Daniel Dunbar  case TY_ObjCXX: case TY_PP_ObjCXX:
10377544fde702fdab2a6150ba812ecf04eb1e6eab6Daniel Dunbar  case TY_ObjCHeader: case TY_PP_ObjCHeader:
104cc52a0688f46cd04dd6b4670b304cbe82e3018c0Nico Weber  case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader: case TY_PP_ObjCXX_Alias:
10577544fde702fdab2a6150ba812ecf04eb1e6eab6Daniel Dunbar    return true;
10677544fde702fdab2a6150ba812ecf04eb1e6eab6Daniel Dunbar  }
10777544fde702fdab2a6150ba812ecf04eb1e6eab6Daniel Dunbar}
10877544fde702fdab2a6150ba812ecf04eb1e6eab6Daniel Dunbar
1094db938ceb72dbaa5f7b50f6420a72629acbf29ebDaniel Dunbarbool types::isCXX(ID Id) {
1104db938ceb72dbaa5f7b50f6420a72629acbf29ebDaniel Dunbar  switch (Id) {
1114db938ceb72dbaa5f7b50f6420a72629acbf29ebDaniel Dunbar  default:
1124db938ceb72dbaa5f7b50f6420a72629acbf29ebDaniel Dunbar    return false;
1134db938ceb72dbaa5f7b50f6420a72629acbf29ebDaniel Dunbar
1144db938ceb72dbaa5f7b50f6420a72629acbf29ebDaniel Dunbar  case TY_CXX: case TY_PP_CXX:
115ecf16265407c4d0edb860dc8259a6874d1a19f6eChad Rosier  case TY_ObjCXX: case TY_PP_ObjCXX: case TY_PP_ObjCXX_Alias:
1164db938ceb72dbaa5f7b50f6420a72629acbf29ebDaniel Dunbar  case TY_CXXHeader: case TY_PP_CXXHeader:
1174db938ceb72dbaa5f7b50f6420a72629acbf29ebDaniel Dunbar  case TY_ObjCXXHeader: case TY_PP_ObjCXXHeader:
118d26db2f595ee008719856fff3622357d6e41e9efPeter Collingbourne  case TY_CUDA:
1194db938ceb72dbaa5f7b50f6420a72629acbf29ebDaniel Dunbar    return true;
1204db938ceb72dbaa5f7b50f6420a72629acbf29ebDaniel Dunbar  }
1214db938ceb72dbaa5f7b50f6420a72629acbf29ebDaniel Dunbar}
1224db938ceb72dbaa5f7b50f6420a72629acbf29ebDaniel Dunbar
123e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbartypes::ID types::lookupTypeForExtension(const char *Ext) {
12455d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor  return llvm::StringSwitch<types::ID>(Ext)
12555d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("c", TY_C)
12655d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("i", TY_PP_C)
12755d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("m", TY_ObjC)
12855d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("M", TY_ObjCXX)
12955d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("h", TY_CHeader)
13055d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("C", TY_CXX)
13155d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("H", TY_CXXHeader)
13255d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("f", TY_PP_Fortran)
13355d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("F", TY_Fortran)
13455d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("s", TY_PP_Asm)
13555d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("S", TY_Asm)
13620fd8674836a4c71cc8455d1a7541ddb864345e8Chad Rosier           .Case("o", TY_Object)
13755d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("ii", TY_PP_CXX)
13855d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("mi", TY_PP_ObjC)
13955d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("mm", TY_ObjCXX)
1406c6424bc0d3b5f080a97b5f6ef4a8d70c38e38f5Daniel Dunbar           .Case("bc", TY_LLVM_BC)
14155d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("cc", TY_CXX)
14255d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("CC", TY_CXX)
143edcfc411148e81c644a1ff36a9df8a7b08209a23Nate Begeman           .Case("cl", TY_CL)
14455d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("cp", TY_CXX)
145895fcca55a6d52a71639f2472a6623ab2dd9f628Peter Collingbourne           .Case("cu", TY_CUDA)
14655d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("hh", TY_CXXHeader)
1476c6424bc0d3b5f080a97b5f6ef4a8d70c38e38f5Daniel Dunbar           .Case("ll", TY_LLVM_IR)
14890cb920bfa167ae30cea35fe296533e7779f4ee2Daniel Dunbar           .Case("hpp", TY_CXXHeader)
14955d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("ads", TY_Ada)
15055d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("adb", TY_Ada)
15155d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("ast", TY_AST)
152169b753b4546b464ad81742ec09a9b9bb11d3b47Douglas Gregor           .Case("c++", TY_CXX)
153169b753b4546b464ad81742ec09a9b9bb11d3b47Douglas Gregor           .Case("C++", TY_CXX)
15455d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("cxx", TY_CXX)
15555d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("cpp", TY_CXX)
15655d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("CPP", TY_CXX)
15755d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("CXX", TY_CXX)
15855d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("for", TY_PP_Fortran)
15955d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("FOR", TY_PP_Fortran)
16055d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("fpp", TY_Fortran)
16155d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("FPP", TY_Fortran)
16255d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("f90", TY_PP_Fortran)
16355d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("f95", TY_PP_Fortran)
16455d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("F90", TY_Fortran)
16555d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("F95", TY_Fortran)
16655d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Case("mii", TY_PP_ObjCXX)
16755d3f7ae512875a1d6402943c3a619633feb2a18Douglas Gregor           .Default(TY_INVALID);
168e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar}
169e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar
170e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbartypes::ID types::lookupTypeForTypeSpecifier(const char *Name) {
171e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar  for (unsigned i=0; i<numTypes; ++i) {
172e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar    types::ID Id = (types::ID) (i + 1);
1731eb4433ac451dc16f4133a88af2d002ac26c58efMike Stump    if (canTypeBeUserSpecified(Id) &&
17416cda861c5587d7130a216466a29a808673c1656Evgeniy Stepanov        strcmp(Name, getInfo(Id).Name) == 0)
175e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar      return Id;
176e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar  }
177e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar
178e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar  return TY_INVALID;
179e9fba573bd9433b89a12f747f2c4ccfa490a79cbDaniel Dunbar}
180c1b5fa81a2dfa4fea2e25bf057363658e7b43681Daniel Dunbar
181c1b5fa81a2dfa4fea2e25bf057363658e7b43681Daniel Dunbar// FIXME: Why don't we just put this list in the defs file, eh.
182b9aa6739700d10e99da64cfa9b58ba7ca1c248e2Matthew Curtisvoid types::getCompilationPhases(
183b9aa6739700d10e99da64cfa9b58ba7ca1c248e2Matthew Curtis  ID Id,
184b9aa6739700d10e99da64cfa9b58ba7ca1c248e2Matthew Curtis  llvm::SmallVector<phases::ID, phases::MaxNumberOfPhases> &P) {
185b9aa6739700d10e99da64cfa9b58ba7ca1c248e2Matthew Curtis  if (Id != TY_Object) {
186b9aa6739700d10e99da64cfa9b58ba7ca1c248e2Matthew Curtis    if (getPreprocessedType(Id) != TY_INVALID) {
187b9aa6739700d10e99da64cfa9b58ba7ca1c248e2Matthew Curtis      P.push_back(phases::Preprocess);
188b9aa6739700d10e99da64cfa9b58ba7ca1c248e2Matthew Curtis    }
189b9aa6739700d10e99da64cfa9b58ba7ca1c248e2Matthew Curtis
190b9aa6739700d10e99da64cfa9b58ba7ca1c248e2Matthew Curtis    if (onlyPrecompileType(Id)) {
191b9aa6739700d10e99da64cfa9b58ba7ca1c248e2Matthew Curtis      P.push_back(phases::Precompile);
192b9aa6739700d10e99da64cfa9b58ba7ca1c248e2Matthew Curtis    } else {
193b9aa6739700d10e99da64cfa9b58ba7ca1c248e2Matthew Curtis      if (!onlyAssembleType(Id)) {
194b9aa6739700d10e99da64cfa9b58ba7ca1c248e2Matthew Curtis        P.push_back(phases::Compile);
195b9aa6739700d10e99da64cfa9b58ba7ca1c248e2Matthew Curtis      }
196b9aa6739700d10e99da64cfa9b58ba7ca1c248e2Matthew Curtis      P.push_back(phases::Assemble);
197b9aa6739700d10e99da64cfa9b58ba7ca1c248e2Matthew Curtis    }
198c1b5fa81a2dfa4fea2e25bf057363658e7b43681Daniel Dunbar  }
199b9aa6739700d10e99da64cfa9b58ba7ca1c248e2Matthew Curtis  if (!onlyPrecompileType(Id)) {
200b9aa6739700d10e99da64cfa9b58ba7ca1c248e2Matthew Curtis    P.push_back(phases::Link);
201b9aa6739700d10e99da64cfa9b58ba7ca1c248e2Matthew Curtis  }
202b9aa6739700d10e99da64cfa9b58ba7ca1c248e2Matthew Curtis  assert(0 < P.size() && "Not enough phases in list");
203b9aa6739700d10e99da64cfa9b58ba7ca1c248e2Matthew Curtis  assert(P.size() <= phases::MaxNumberOfPhases && "Too many phases in list");
204b9aa6739700d10e99da64cfa9b58ba7ca1c248e2Matthew Curtis  return;
205c1b5fa81a2dfa4fea2e25bf057363658e7b43681Daniel Dunbar}
20651679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar
20751679c5e4828b8a64953c4f3db162ca963bf7b03Daniel DunbarID types::lookupCXXTypeForCType(ID Id) {
20851679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar  switch (Id) {
20951679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar  default:
21051679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar    return Id;
21121261f4f9775d1212b12be5a125ab9f3beca4c12Joey Gouly
21251679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar  case types::TY_C:
21351679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar    return types::TY_CXX;
21451679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar  case types::TY_PP_C:
21551679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar    return types::TY_PP_CXX;
21651679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar  case types::TY_CHeader:
21751679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar    return types::TY_CXXHeader;
21851679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar  case types::TY_PP_CHeader:
21951679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar    return types::TY_PP_CXXHeader;
22051679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar  }
22151679c5e4828b8a64953c4f3db162ca963bf7b03Daniel Dunbar}
222