InitPreprocessor.cpp revision 239462
1193323Sed//===--- InitPreprocessor.cpp - PP initialization code. ---------*- C++ -*-===//
2193323Sed//
3193323Sed//                     The LLVM Compiler Infrastructure
4193323Sed//
5193323Sed// This file is distributed under the University of Illinois Open Source
6193323Sed// License. See LICENSE.TXT for details.
7193323Sed//
8193323Sed//===----------------------------------------------------------------------===//
9193323Sed//
10193323Sed// This file implements the clang::InitializePreprocessor function.
11193323Sed//
12193323Sed//===----------------------------------------------------------------------===//
13193323Sed
14193323Sed#include "clang/Basic/Version.h"
15193323Sed#include "clang/Frontend/Utils.h"
16193323Sed#include "clang/Basic/MacroBuilder.h"
17193323Sed#include "clang/Basic/TargetInfo.h"
18193323Sed#include "clang/Frontend/FrontendDiagnostic.h"
19193323Sed#include "clang/Frontend/FrontendOptions.h"
20193323Sed#include "clang/Frontend/PreprocessorOptions.h"
21193323Sed#include "clang/Lex/HeaderSearch.h"
22193323Sed#include "clang/Lex/Preprocessor.h"
23193323Sed#include "clang/Basic/FileManager.h"
24221345Sdim#include "clang/Basic/SourceManager.h"
25193323Sed#include "llvm/ADT/APFloat.h"
26193323Sed#include "llvm/Support/FileSystem.h"
27198892Srdivacky#include "llvm/Support/MemoryBuffer.h"
28193323Sed#include "llvm/Support/Path.h"
29193323Sedusing namespace clang;
30193323Sed
31198090Srdivacky// Append a #define line to Buf for Macro.  Macro should be of the form XXX,
32193323Sed// in which case we emit "#define XXX 1" or "XXX=Y z W" in which case we emit
33193323Sed// "#define XXX Y z W".  To get a #define with no value, use "XXX=".
34198090Srdivackystatic void DefineBuiltinMacro(MacroBuilder &Builder, StringRef Macro,
35193323Sed                               DiagnosticsEngine &Diags) {
36193323Sed  std::pair<StringRef, StringRef> MacroPair = Macro.split('=');
37193323Sed  StringRef MacroName = MacroPair.first;
38193323Sed  StringRef MacroBody = MacroPair.second;
39193323Sed  if (MacroName.size() != Macro.size()) {
40193323Sed    // Per GCC -D semantics, the macro ends at \n if it exists.
41193323Sed    StringRef::size_type End = MacroBody.find_first_of("\n\r");
42193323Sed    if (End != StringRef::npos)
43193323Sed      Diags.Report(diag::warn_fe_macro_contains_embedded_newline)
44218893Sdim        << MacroName;
45193323Sed    Builder.defineMacro(MacroName, MacroBody.substr(0, End));
46193323Sed  } else {
47193323Sed    // Push "macroname 1".
48193323Sed    Builder.defineMacro(Macro);
49193323Sed  }
50193323Sed}
51193323Sed
52193323Sed/// AddImplicitInclude - Add an implicit \#include of the specified file to the
53193323Sed/// predefines buffer.
54193323Sedstatic void AddImplicitInclude(MacroBuilder &Builder, StringRef File,
55193323Sed                               FileManager &FileMgr) {
56193323Sed  Builder.append(Twine("#include \"") +
57193323Sed                 HeaderSearch::NormalizeDashIncludePath(File, FileMgr) + "\"");
58221345Sdim}
59193323Sed
60193323Sedstatic void AddImplicitIncludeMacros(MacroBuilder &Builder,
61218893Sdim                                     StringRef File,
62198892Srdivacky                                     FileManager &FileMgr) {
63193323Sed  Builder.append(Twine("#__include_macros \"") +
64193323Sed                 HeaderSearch::NormalizeDashIncludePath(File, FileMgr) + "\"");
65193323Sed  // Marker token to stop the __include_macros fetch loop.
66218893Sdim  Builder.append("##"); // ##?
67218893Sdim}
68218893Sdim
69193323Sed/// AddImplicitIncludePTH - Add an implicit \#include using the original file
70193323Sed/// used to generate a PTH cache.
71193323Sedstatic void AddImplicitIncludePTH(MacroBuilder &Builder, Preprocessor &PP,
72193323Sed                                  StringRef ImplicitIncludePTH) {
73193323Sed  PTHManager *P = PP.getPTHManager();
74193323Sed  // Null check 'P' in the corner case where it couldn't be created.
75193323Sed  const char *OriginalFile = P ? P->getOriginalSourceFile() : 0;
76193323Sed
77193323Sed  if (!OriginalFile) {
78218893Sdim    PP.getDiagnostics().Report(diag::err_fe_pth_file_has_no_source_header)
79218893Sdim      << ImplicitIncludePTH;
80218893Sdim    return;
81218893Sdim  }
82221345Sdim
83193323Sed  AddImplicitInclude(Builder, OriginalFile, PP.getFileManager());
84193323Sed}
85193323Sed
86193323Sed/// PickFP - This is used to pick a value based on the FP semantics of the
87212904Sdim/// specified FP model.
88218893Sdimtemplate <typename T>
89193323Sedstatic T PickFP(const llvm::fltSemantics *Sem, T IEEESingleVal,
90193323Sed                T IEEEDoubleVal, T X87DoubleExtendedVal, T PPCDoubleDoubleVal,
91193323Sed                T IEEEQuadVal) {
92193323Sed  if (Sem == (const llvm::fltSemantics*)&llvm::APFloat::IEEEsingle)
93193323Sed    return IEEESingleVal;
94193323Sed  if (Sem == (const llvm::fltSemantics*)&llvm::APFloat::IEEEdouble)
95193323Sed    return IEEEDoubleVal;
96193323Sed  if (Sem == (const llvm::fltSemantics*)&llvm::APFloat::x87DoubleExtended)
97198892Srdivacky    return X87DoubleExtendedVal;
98218893Sdim  if (Sem == (const llvm::fltSemantics*)&llvm::APFloat::PPCDoubleDouble)
99218893Sdim    return PPCDoubleDoubleVal;
100218893Sdim  assert(Sem == (const llvm::fltSemantics*)&llvm::APFloat::IEEEquad);
101193323Sed  return IEEEQuadVal;
102193323Sed}
103193323Sed
104193323Sedstatic void DefineFloatMacros(MacroBuilder &Builder, StringRef Prefix,
105193323Sed                              const llvm::fltSemantics *Sem) {
106193323Sed  const char *DenormMin, *Epsilon, *Max, *Min;
107193323Sed  DenormMin = PickFP(Sem, "1.40129846e-45F", "4.9406564584124654e-324",
108193323Sed                     "3.64519953188247460253e-4951L",
109193323Sed                     "4.94065645841246544176568792868221e-324L",
110193323Sed                     "6.47517511943802511092443895822764655e-4966L");
111193323Sed  int Digits = PickFP(Sem, 6, 15, 18, 31, 33);
112193323Sed  Epsilon = PickFP(Sem, "1.19209290e-7F", "2.2204460492503131e-16",
113193323Sed                   "1.08420217248550443401e-19L",
114193323Sed                   "4.94065645841246544176568792868221e-324L",
115193323Sed                   "1.92592994438723585305597794258492732e-34L");
116193323Sed  int MantissaDigits = PickFP(Sem, 24, 53, 64, 106, 113);
117193323Sed  int Min10Exp = PickFP(Sem, -37, -307, -4931, -291, -4931);
118193323Sed  int Max10Exp = PickFP(Sem, 38, 308, 4932, 308, 4932);
119193323Sed  int MinExp = PickFP(Sem, -125, -1021, -16381, -968, -16381);
120193323Sed  int MaxExp = PickFP(Sem, 128, 1024, 16384, 1024, 16384);
121193323Sed  Min = PickFP(Sem, "1.17549435e-38F", "2.2250738585072014e-308",
122193323Sed               "3.36210314311209350626e-4932L",
123193323Sed               "2.00416836000897277799610805135016e-292L",
124193323Sed               "3.36210314311209350626267781732175260e-4932L");
125193323Sed  Max = PickFP(Sem, "3.40282347e+38F", "1.7976931348623157e+308",
126193323Sed               "1.18973149535723176502e+4932L",
127193323Sed               "1.79769313486231580793728971405301e+308L",
128193323Sed               "1.18973149535723176508575932662800702e+4932L");
129193323Sed
130193323Sed  SmallString<32> DefPrefix;
131193323Sed  DefPrefix = "__";
132193323Sed  DefPrefix += Prefix;
133193323Sed  DefPrefix += "_";
134193323Sed
135193323Sed  Builder.defineMacro(DefPrefix + "DENORM_MIN__", DenormMin);
136206083Srdivacky  Builder.defineMacro(DefPrefix + "HAS_DENORM__");
137193323Sed  Builder.defineMacro(DefPrefix + "DIG__", Twine(Digits));
138193323Sed  Builder.defineMacro(DefPrefix + "EPSILON__", Twine(Epsilon));
139193323Sed  Builder.defineMacro(DefPrefix + "HAS_INFINITY__");
140193323Sed  Builder.defineMacro(DefPrefix + "HAS_QUIET_NAN__");
141193323Sed  Builder.defineMacro(DefPrefix + "MANT_DIG__", Twine(MantissaDigits));
142193323Sed
143193323Sed  Builder.defineMacro(DefPrefix + "MAX_10_EXP__", Twine(Max10Exp));
144193323Sed  Builder.defineMacro(DefPrefix + "MAX_EXP__", Twine(MaxExp));
145218893Sdim  Builder.defineMacro(DefPrefix + "MAX__", Twine(Max));
146218893Sdim
147218893Sdim  Builder.defineMacro(DefPrefix + "MIN_10_EXP__","("+Twine(Min10Exp)+")");
148218893Sdim  Builder.defineMacro(DefPrefix + "MIN_EXP__", "("+Twine(MinExp)+")");
149218893Sdim  Builder.defineMacro(DefPrefix + "MIN__", Twine(Min));
150193323Sed}
151193323Sed
152193323Sed
153193323Sed/// DefineTypeSize - Emit a macro to the predefines buffer that declares a macro
154194178Sed/// named MacroName with the max value for a type with width 'TypeWidth' a
155194178Sed/// signedness of 'isSigned' and with a value suffix of 'ValSuffix' (e.g. LL).
156194178Sedstatic void DefineTypeSize(StringRef MacroName, unsigned TypeWidth,
157194178Sed                           StringRef ValSuffix, bool isSigned,
158206083Srdivacky                           MacroBuilder &Builder) {
159193323Sed  llvm::APInt MaxVal = isSigned ? llvm::APInt::getSignedMaxValue(TypeWidth)
160193323Sed                                : llvm::APInt::getMaxValue(TypeWidth);
161207618Srdivacky  Builder.defineMacro(MacroName, MaxVal.toString(10, isSigned) + ValSuffix);
162207618Srdivacky}
163206083Srdivacky
164194178Sed/// DefineTypeSize - An overloaded helper that uses TargetInfo to determine
165193323Sed/// the width, suffix, and signedness of the given type
166193323Sedstatic void DefineTypeSize(StringRef MacroName, TargetInfo::IntType Ty,
167193323Sed                           const TargetInfo &TI, MacroBuilder &Builder) {
168193323Sed  DefineTypeSize(MacroName, TI.getTypeWidth(Ty), TI.getTypeConstantSuffix(Ty),
169193323Sed                 TI.isTypeSigned(Ty), Builder);
170193323Sed}
171193323Sed
172193323Sedstatic void DefineType(const Twine &MacroName, TargetInfo::IntType Ty,
173193323Sed                       MacroBuilder &Builder) {
174193323Sed  Builder.defineMacro(MacroName, TargetInfo::getTypeName(Ty));
175206083Srdivacky}
176206083Srdivacky
177207618Srdivackystatic void DefineTypeWidth(StringRef MacroName, TargetInfo::IntType Ty,
178210299Sed                            const TargetInfo &TI, MacroBuilder &Builder) {
179210299Sed  Builder.defineMacro(MacroName, Twine(TI.getTypeWidth(Ty)));
180210299Sed}
181193323Sed
182218893Sdimstatic void DefineTypeSizeof(StringRef MacroName, unsigned BitWidth,
183218893Sdim                             const TargetInfo &TI, MacroBuilder &Builder) {
184218893Sdim  Builder.defineMacro(MacroName,
185218893Sdim                      Twine(BitWidth / TI.getCharWidth()));
186218893Sdim}
187193323Sed
188210299Sedstatic void DefineExactWidthIntType(TargetInfo::IntType Ty,
189193323Sed                               const TargetInfo &TI, MacroBuilder &Builder) {
190206083Srdivacky  int TypeWidth = TI.getTypeWidth(Ty);
191193323Sed
192193323Sed  // Use the target specified int64 type, when appropriate, so that [u]int64_t
193193323Sed  // ends up being defined in terms of the correct type.
194193323Sed  if (TypeWidth == 64)
195193323Sed    Ty = TI.getInt64Type();
196206083Srdivacky
197193323Sed  DefineType("__INT" + Twine(TypeWidth) + "_TYPE__", Ty, Builder);
198193323Sed
199206083Srdivacky  StringRef ConstSuffix(TargetInfo::getTypeConstantSuffix(Ty));
200193323Sed  if (!ConstSuffix.empty())
201193323Sed    Builder.defineMacro("__INT" + Twine(TypeWidth) + "_C_SUFFIX__",
202193323Sed                        ConstSuffix);
203193323Sed}
204193323Sed
205193323Sed/// Get the value the ATOMIC_*_LOCK_FREE macro should have for a type with
206193323Sed/// the specified properties.
207193323Sedstatic const char *getLockFreeValue(unsigned TypeWidth, unsigned TypeAlign,
208193323Sed                                    unsigned InlineWidth) {
209207618Srdivacky  // Fully-aligned, power-of-2 sizes no larger than the inline
210207618Srdivacky  // width will be inlined as lock-free operations.
211193323Sed  if (TypeWidth == TypeAlign && (TypeWidth & (TypeWidth - 1)) == 0 &&
212193323Sed      TypeWidth <= InlineWidth)
213193323Sed    return "2"; // "always lock free"
214193323Sed  // We cannot be certain what operations the lib calls might be
215193323Sed  // able to implement as lock-free on future processors.
216193323Sed  return "1"; // "sometimes lock free"
217193323Sed}
218193323Sed
219193323Sed/// \brief Add definitions required for a smooth interaction between
220193323Sed/// Objective-C++ automated reference counting and libstdc++ (4.2).
221193323Sedstatic void AddObjCXXARCLibstdcxxDefines(const LangOptions &LangOpts,
222193323Sed                                         MacroBuilder &Builder) {
223193323Sed  Builder.defineMacro("_GLIBCXX_PREDEFINED_OBJC_ARC_IS_SCALAR");
224193323Sed
225193323Sed  std::string Result;
226193323Sed  {
227193323Sed    // Provide specializations for the __is_scalar type trait so that
228193323Sed    // lifetime-qualified objects are not considered "scalar" types, which
229193323Sed    // libstdc++ uses as an indicator of the presence of trivial copy, assign,
230193323Sed    // default-construct, and destruct semantics (none of which hold for
231193323Sed    // lifetime-qualified objects in ARC).
232193323Sed    llvm::raw_string_ostream Out(Result);
233193323Sed
234193323Sed    Out << "namespace std {\n"
235193323Sed        << "\n"
236206083Srdivacky        << "struct __true_type;\n"
237193323Sed        << "struct __false_type;\n"
238193323Sed        << "\n";
239193323Sed
240193323Sed    Out << "template<typename _Tp> struct __is_scalar;\n"
241193323Sed        << "\n";
242193323Sed
243218893Sdim    Out << "template<typename _Tp>\n"
244223017Sdim        << "struct __is_scalar<__attribute__((objc_ownership(strong))) _Tp> {\n"
245223017Sdim        << "  enum { __value = 0 };\n"
246210299Sed        << "  typedef __false_type __type;\n"
247193323Sed        << "};\n"
248210299Sed        << "\n";
249193323Sed
250223017Sdim    if (LangOpts.ObjCRuntimeHasWeak) {
251223017Sdim      Out << "template<typename _Tp>\n"
252223017Sdim          << "struct __is_scalar<__attribute__((objc_ownership(weak))) _Tp> {\n"
253193323Sed          << "  enum { __value = 0 };\n"
254193323Sed          << "  typedef __false_type __type;\n"
255193323Sed          << "};\n"
256193323Sed          << "\n";
257210299Sed    }
258193323Sed
259193323Sed    Out << "template<typename _Tp>\n"
260194178Sed        << "struct __is_scalar<__attribute__((objc_ownership(autoreleasing)))"
261193323Sed        << " _Tp> {\n"
262193323Sed        << "  enum { __value = 0 };\n"
263193323Sed        << "  typedef __false_type __type;\n"
264193323Sed        << "};\n"
265193323Sed        << "\n";
266193323Sed
267210299Sed    Out << "}\n";
268193323Sed  }
269193323Sed  Builder.append(Result);
270193323Sed}
271193323Sed
272199481Srdivackystatic void InitializeStandardPredefinedMacros(const TargetInfo &TI,
273193323Sed                                               const LangOptions &LangOpts,
274193323Sed                                               const FrontendOptions &FEOpts,
275193323Sed                                               MacroBuilder &Builder) {
276193323Sed  if (!LangOpts.MicrosoftMode && !LangOpts.TraditionalCPP)
277193323Sed    Builder.defineMacro("__STDC__");
278193323Sed  if (LangOpts.Freestanding)
279193323Sed    Builder.defineMacro("__STDC_HOSTED__", "0");
280193323Sed  else
281193323Sed    Builder.defineMacro("__STDC_HOSTED__");
282193323Sed
283193323Sed  if (!LangOpts.CPlusPlus) {
284193323Sed    if (LangOpts.C11)
285193323Sed      Builder.defineMacro("__STDC_VERSION__", "201112L");
286193323Sed    else if (LangOpts.C99)
287193323Sed      Builder.defineMacro("__STDC_VERSION__", "199901L");
288193323Sed    else if (!LangOpts.GNUMode && LangOpts.Digraphs)
289193323Sed      Builder.defineMacro("__STDC_VERSION__", "199409L");
290193323Sed  } else {
291193323Sed    // C++11 [cpp.predefined]p1:
292193323Sed    //   The name __cplusplus is defined to the value 201103L when compiling a
293193323Sed    //   C++ translation unit.
294193323Sed    if (LangOpts.CPlusPlus0x)
295193323Sed      Builder.defineMacro("__cplusplus", "201103L");
296193323Sed    // C++03 [cpp.predefined]p1:
297193323Sed    //   The name __cplusplus is defined to the value 199711L when compiling a
298193323Sed    //   C++ translation unit.
299193323Sed    else
300193323Sed      Builder.defineMacro("__cplusplus", "199711L");
301193323Sed  }
302193323Sed
303193323Sed  if (LangOpts.ObjC1)
304193323Sed    Builder.defineMacro("__OBJC__");
305193323Sed
306193323Sed  // Not "standard" per se, but available even with the -undef flag.
307193323Sed  if (LangOpts.AsmPreprocessor)
308199481Srdivacky    Builder.defineMacro("__ASSEMBLER__");
309193323Sed}
310193323Sed
311193323Sedstatic void InitializePredefinedMacros(const TargetInfo &TI,
312193323Sed                                       const LangOptions &LangOpts,
313193323Sed                                       const FrontendOptions &FEOpts,
314193323Sed                                       MacroBuilder &Builder) {
315193323Sed  // Compiler version introspection macros.
316193323Sed  Builder.defineMacro("__llvm__");  // LLVM Backend
317193323Sed  Builder.defineMacro("__clang__"); // Clang Frontend
318193323Sed#define TOSTR2(X) #X
319193323Sed#define TOSTR(X) TOSTR2(X)
320193323Sed  Builder.defineMacro("__clang_major__", TOSTR(CLANG_VERSION_MAJOR));
321193323Sed  Builder.defineMacro("__clang_minor__", TOSTR(CLANG_VERSION_MINOR));
322193323Sed#ifdef CLANG_VERSION_PATCHLEVEL
323193323Sed  Builder.defineMacro("__clang_patchlevel__", TOSTR(CLANG_VERSION_PATCHLEVEL));
324193323Sed#else
325193323Sed  Builder.defineMacro("__clang_patchlevel__", "0");
326193323Sed#endif
327193323Sed  Builder.defineMacro("__clang_version__",
328193323Sed                      "\"" CLANG_VERSION_STRING " ("
329199481Srdivacky                      + getClangFullRepositoryVersion() + ")\"");
330218893Sdim#undef TOSTR
331204642Srdivacky#undef TOSTR2
332193323Sed  if (!LangOpts.MicrosoftMode) {
333199481Srdivacky    // Currently claim to be compatible with GCC 4.2.1-5621, but only if we're
334193323Sed    // not compiling for MSVC compatibility
335193323Sed    Builder.defineMacro("__GNUC_MINOR__", "2");
336193323Sed    Builder.defineMacro("__GNUC_PATCHLEVEL__", "1");
337193323Sed    Builder.defineMacro("__GNUC__", "4");
338193323Sed    Builder.defineMacro("__GXX_ABI_VERSION", "1002");
339193323Sed  }
340193323Sed
341193323Sed  // Define macros for the C11 / C++11 memory orderings
342193323Sed  Builder.defineMacro("__ATOMIC_RELAXED", "0");
343193323Sed  Builder.defineMacro("__ATOMIC_CONSUME", "1");
344193323Sed  Builder.defineMacro("__ATOMIC_ACQUIRE", "2");
345193323Sed  Builder.defineMacro("__ATOMIC_RELEASE", "3");
346218893Sdim  Builder.defineMacro("__ATOMIC_ACQ_REL", "4");
347199481Srdivacky  Builder.defineMacro("__ATOMIC_SEQ_CST", "5");
348193323Sed
349193323Sed  // Support for #pragma redefine_extname (Sun compatibility)
350193323Sed  Builder.defineMacro("__PRAGMA_REDEFINE_EXTNAME", "1");
351199481Srdivacky
352193323Sed  // As sad as it is, enough software depends on the __VERSION__ for version
353193323Sed  // checks that it is necessary to report 4.2.1 (the base GCC version we claim
354193323Sed  // compatibility with) first.
355193323Sed  Builder.defineMacro("__VERSION__", "\"4.2.1 Compatible " +
356193323Sed                      Twine(getClangFullCPPVersion()) + "\"");
357193323Sed
358193323Sed  // Initialize language-specific preprocessor defines.
359193323Sed
360193323Sed  // Standard conforming mode?
361193323Sed  if (!LangOpts.GNUMode)
362193323Sed    Builder.defineMacro("__STRICT_ANSI__");
363193323Sed
364193323Sed  if (LangOpts.CPlusPlus0x)
365193323Sed    Builder.defineMacro("__GXX_EXPERIMENTAL_CXX0X__");
366194178Sed
367193323Sed  if (LangOpts.ObjC1) {
368193323Sed    if (LangOpts.ObjCRuntime.isNonFragile()) {
369199481Srdivacky      Builder.defineMacro("__OBJC2__");
370193323Sed
371193323Sed      if (LangOpts.ObjCExceptions)
372193323Sed        Builder.defineMacro("OBJC_ZEROCOST_EXCEPTIONS");
373193323Sed    }
374193323Sed
375193323Sed    if (LangOpts.getGC() != LangOptions::NonGC)
376193323Sed      Builder.defineMacro("__OBJC_GC__");
377193323Sed
378193323Sed    if (LangOpts.ObjCRuntime.isNeXTFamily())
379193323Sed      Builder.defineMacro("__NEXT_RUNTIME__");
380193323Sed
381193323Sed    Builder.defineMacro("IBOutlet", "__attribute__((iboutlet))");
382194178Sed    Builder.defineMacro("IBOutletCollection(ClassName)",
383218893Sdim                        "__attribute__((iboutletcollection(ClassName)))");
384193323Sed    Builder.defineMacro("IBAction", "void)__attribute__((ibaction)");
385193323Sed  }
386193323Sed
387193323Sed  // darwin_constant_cfstrings controls this. This is also dependent
388193323Sed  // on other things like the runtime I believe.  This is set even for C code.
389193323Sed  if (!LangOpts.NoConstantCFStrings)
390193323Sed      Builder.defineMacro("__CONSTANT_CFSTRINGS__");
391193323Sed
392193323Sed  if (LangOpts.ObjC2)
393218893Sdim    Builder.defineMacro("OBJC_NEW_PROPERTIES");
394193323Sed
395193323Sed  if (LangOpts.PascalStrings)
396193323Sed    Builder.defineMacro("__PASCAL_STRINGS__");
397218893Sdim
398193323Sed  if (LangOpts.Blocks) {
399193323Sed    Builder.defineMacro("__block", "__attribute__((__blocks__(byref)))");
400193323Sed    Builder.defineMacro("__BLOCKS__");
401218893Sdim  }
402193323Sed
403193323Sed  if (LangOpts.CXXExceptions)
404193323Sed    Builder.defineMacro("__EXCEPTIONS");
405193323Sed  if (LangOpts.RTTI)
406193323Sed    Builder.defineMacro("__GXX_RTTI");
407193323Sed  if (LangOpts.SjLjExceptions)
408193323Sed    Builder.defineMacro("__USING_SJLJ_EXCEPTIONS__");
409193323Sed
410193323Sed  if (LangOpts.Deprecated)
411193323Sed    Builder.defineMacro("__DEPRECATED");
412193323Sed
413193323Sed  if (LangOpts.CPlusPlus) {
414193323Sed    Builder.defineMacro("__GNUG__", "4");
415218893Sdim    Builder.defineMacro("__GXX_WEAK__");
416218893Sdim    Builder.defineMacro("__private_extern__", "extern");
417193323Sed  }
418193323Sed
419218893Sdim  if (LangOpts.MicrosoftExt) {
420193323Sed    // Both __PRETTY_FUNCTION__ and __FUNCTION__ are GCC extensions, however
421193323Sed    // VC++ appears to only like __FUNCTION__.
422193323Sed    Builder.defineMacro("__PRETTY_FUNCTION__", "__FUNCTION__");
423193323Sed    // Work around some issues with Visual C++ headerws.
424193323Sed    if (LangOpts.CPlusPlus) {
425193323Sed      // Since we define wchar_t in C++ mode.
426193323Sed      Builder.defineMacro("_WCHAR_T_DEFINED");
427193323Sed      Builder.defineMacro("_NATIVE_WCHAR_T_DEFINED");
428193323Sed      // FIXME: Support Microsoft's __identifier extension in the lexer.
429193323Sed      Builder.append("#define __identifier(x) x");
430193323Sed      Builder.append("class type_info;");
431218893Sdim    }
432193323Sed
433193323Sed    if (LangOpts.CPlusPlus0x) {
434193323Sed      Builder.defineMacro("_HAS_CHAR16_T_LANGUAGE_SUPPORT", "1");
435193323Sed    }
436218893Sdim  }
437193323Sed
438193323Sed  if (LangOpts.Optimize)
439193323Sed    Builder.defineMacro("__OPTIMIZE__");
440193323Sed  if (LangOpts.OptimizeSize)
441193323Sed    Builder.defineMacro("__OPTIMIZE_SIZE__");
442218893Sdim
443193323Sed  if (LangOpts.FastMath)
444193323Sed    Builder.defineMacro("__FAST_MATH__");
445193323Sed
446193323Sed  // Initialize target-specific preprocessor defines.
447193323Sed
448193323Sed  // __BYTE_ORDER__ was added in GCC 4.6. It's analogous
449193323Sed  // to the macro __BYTE_ORDER (no trailing underscores)
450193323Sed  // from glibc's <endian.h> header.
451198090Srdivacky  // We don't support the PDP-11 as a target, but include
452193323Sed  // the define so it can still be compared against.
453193323Sed  Builder.defineMacro("__ORDER_LITTLE_ENDIAN__", "1234");
454193323Sed  Builder.defineMacro("__ORDER_BIG_ENDIAN__",    "4321");
455193323Sed  Builder.defineMacro("__ORDER_PDP_ENDIAN__",    "3412");
456198090Srdivacky  if (TI.isBigEndian())
457198090Srdivacky    Builder.defineMacro("__BYTE_ORDER__", "__ORDER_BIG_ENDIAN__");
458198090Srdivacky  else
459204642Srdivacky    Builder.defineMacro("__BYTE_ORDER__", "__ORDER_LITTLE_ENDIAN__");
460198090Srdivacky
461198090Srdivacky
462198090Srdivacky  if (TI.getPointerWidth(0) == 64 && TI.getLongWidth() == 64
463218893Sdim      && TI.getIntWidth() == 32) {
464193323Sed    Builder.defineMacro("_LP64");
465193323Sed    Builder.defineMacro("__LP64__");
466193323Sed  }
467193323Sed
468193323Sed  // Define type sizing macros based on the target properties.
469193323Sed  assert(TI.getCharWidth() == 8 && "Only support 8-bit char so far");
470193323Sed  Builder.defineMacro("__CHAR_BIT__", "8");
471193323Sed
472193323Sed  DefineTypeSize("__SCHAR_MAX__", TI.getCharWidth(), "", true, Builder);
473193323Sed  DefineTypeSize("__SHRT_MAX__", TargetInfo::SignedShort, TI, Builder);
474193323Sed  DefineTypeSize("__INT_MAX__", TargetInfo::SignedInt, TI, Builder);
475193323Sed  DefineTypeSize("__LONG_MAX__", TargetInfo::SignedLong, TI, Builder);
476193323Sed  DefineTypeSize("__LONG_LONG_MAX__", TargetInfo::SignedLongLong, TI, Builder);
477193323Sed  DefineTypeSize("__WCHAR_MAX__", TI.getWCharType(), TI, Builder);
478193323Sed  DefineTypeSize("__INTMAX_MAX__", TI.getIntMaxType(), TI, Builder);
479193323Sed
480193323Sed  DefineTypeSizeof("__SIZEOF_DOUBLE__", TI.getDoubleWidth(), TI, Builder);
481193323Sed  DefineTypeSizeof("__SIZEOF_FLOAT__", TI.getFloatWidth(), TI, Builder);
482193323Sed  DefineTypeSizeof("__SIZEOF_INT__", TI.getIntWidth(), TI, Builder);
483193323Sed  DefineTypeSizeof("__SIZEOF_LONG__", TI.getLongWidth(), TI, Builder);
484193323Sed  DefineTypeSizeof("__SIZEOF_LONG_DOUBLE__",TI.getLongDoubleWidth(),TI,Builder);
485193323Sed  DefineTypeSizeof("__SIZEOF_LONG_LONG__", TI.getLongLongWidth(), TI, Builder);
486193323Sed  DefineTypeSizeof("__SIZEOF_POINTER__", TI.getPointerWidth(0), TI, Builder);
487193323Sed  DefineTypeSizeof("__SIZEOF_SHORT__", TI.getShortWidth(), TI, Builder);
488218893Sdim  DefineTypeSizeof("__SIZEOF_PTRDIFF_T__",
489193323Sed                   TI.getTypeWidth(TI.getPtrDiffType(0)), TI, Builder);
490193323Sed  DefineTypeSizeof("__SIZEOF_SIZE_T__",
491193323Sed                   TI.getTypeWidth(TI.getSizeType()), TI, Builder);
492193323Sed  DefineTypeSizeof("__SIZEOF_WCHAR_T__",
493193323Sed                   TI.getTypeWidth(TI.getWCharType()), TI, Builder);
494199481Srdivacky  DefineTypeSizeof("__SIZEOF_WINT_T__",
495193323Sed                   TI.getTypeWidth(TI.getWIntType()), TI, Builder);
496193323Sed
497193323Sed  DefineType("__INTMAX_TYPE__", TI.getIntMaxType(), Builder);
498218893Sdim  DefineType("__UINTMAX_TYPE__", TI.getUIntMaxType(), Builder);
499193323Sed  DefineTypeWidth("__INTMAX_WIDTH__",  TI.getIntMaxType(), TI, Builder);
500193323Sed  DefineType("__PTRDIFF_TYPE__", TI.getPtrDiffType(0), Builder);
501193323Sed  DefineTypeWidth("__PTRDIFF_WIDTH__", TI.getPtrDiffType(0), TI, Builder);
502193323Sed  DefineType("__INTPTR_TYPE__", TI.getIntPtrType(), Builder);
503193323Sed  DefineTypeWidth("__INTPTR_WIDTH__", TI.getIntPtrType(), TI, Builder);
504193323Sed  DefineType("__SIZE_TYPE__", TI.getSizeType(), Builder);
505193323Sed  DefineTypeWidth("__SIZE_WIDTH__", TI.getSizeType(), TI, Builder);
506193323Sed  DefineType("__WCHAR_TYPE__", TI.getWCharType(), Builder);
507193323Sed  DefineTypeWidth("__WCHAR_WIDTH__", TI.getWCharType(), TI, Builder);
508193323Sed  DefineType("__WINT_TYPE__", TI.getWIntType(), Builder);
509193323Sed  DefineTypeWidth("__WINT_WIDTH__", TI.getWIntType(), TI, Builder);
510218893Sdim  DefineTypeWidth("__SIG_ATOMIC_WIDTH__", TI.getSigAtomicType(), TI, Builder);
511193323Sed  DefineType("__CHAR16_TYPE__", TI.getChar16Type(), Builder);
512193323Sed  DefineType("__CHAR32_TYPE__", TI.getChar32Type(), Builder);
513193323Sed
514193323Sed  DefineFloatMacros(Builder, "FLT", &TI.getFloatFormat());
515193323Sed  DefineFloatMacros(Builder, "DBL", &TI.getDoubleFormat());
516199481Srdivacky  DefineFloatMacros(Builder, "LDBL", &TI.getLongDoubleFormat());
517193323Sed
518199481Srdivacky  // Define a __POINTER_WIDTH__ macro for stdint.h.
519193323Sed  Builder.defineMacro("__POINTER_WIDTH__",
520198090Srdivacky                      Twine((int)TI.getPointerWidth(0)));
521193323Sed
522198090Srdivacky  if (!LangOpts.CharIsSigned)
523193323Sed    Builder.defineMacro("__CHAR_UNSIGNED__");
524193323Sed
525218893Sdim  if (!TargetInfo::isTypeSigned(TI.getWCharType()))
526193323Sed    Builder.defineMacro("__WCHAR_UNSIGNED__");
527193323Sed
528193323Sed  if (!TargetInfo::isTypeSigned(TI.getWIntType()))
529193323Sed    Builder.defineMacro("__WINT_UNSIGNED__");
530193323Sed
531193323Sed  // Define exact-width integer types for stdint.h
532193323Sed  Builder.defineMacro("__INT" + Twine(TI.getCharWidth()) + "_TYPE__",
533193323Sed                      "char");
534193323Sed
535193323Sed  if (TI.getShortWidth() > TI.getCharWidth())
536193323Sed    DefineExactWidthIntType(TargetInfo::SignedShort, TI, Builder);
537193323Sed
538193323Sed  if (TI.getIntWidth() > TI.getShortWidth())
539193323Sed    DefineExactWidthIntType(TargetInfo::SignedInt, TI, Builder);
540193323Sed
541193323Sed  if (TI.getLongWidth() > TI.getIntWidth())
542193323Sed    DefineExactWidthIntType(TargetInfo::SignedLong, TI, Builder);
543193323Sed
544218893Sdim  if (TI.getLongLongWidth() > TI.getLongWidth())
545193323Sed    DefineExactWidthIntType(TargetInfo::SignedLongLong, TI, Builder);
546193323Sed
547193323Sed  if (const char *Prefix = TI.getUserLabelPrefix())
548193323Sed    Builder.defineMacro("__USER_LABEL_PREFIX__", Prefix);
549199481Srdivacky
550193323Sed  if (LangOpts.FastMath || LangOpts.FiniteMathOnly)
551193323Sed    Builder.defineMacro("__FINITE_MATH_ONLY__", "1");
552199481Srdivacky  else
553193323Sed    Builder.defineMacro("__FINITE_MATH_ONLY__", "0");
554198090Srdivacky
555193323Sed  if (LangOpts.GNUInline)
556198090Srdivacky    Builder.defineMacro("__GNUC_GNU_INLINE__");
557193323Sed  else
558193323Sed    Builder.defineMacro("__GNUC_STDC_INLINE__");
559218893Sdim
560193323Sed  // The value written by __atomic_test_and_set.
561193323Sed  // FIXME: This is target-dependent.
562193323Sed  Builder.defineMacro("__GCC_ATOMIC_TEST_AND_SET_TRUEVAL", "1");
563193323Sed
564193323Sed  // Used by libstdc++ to implement ATOMIC_<foo>_LOCK_FREE.
565193323Sed  unsigned InlineWidthBits = TI.getMaxAtomicInlineWidth();
566193323Sed#define DEFINE_LOCK_FREE_MACRO(TYPE, Type) \
567193323Sed  Builder.defineMacro("__GCC_ATOMIC_" #TYPE "_LOCK_FREE", \
568193323Sed                      getLockFreeValue(TI.get##Type##Width(), \
569193323Sed                                       TI.get##Type##Align(), \
570193323Sed                                       InlineWidthBits));
571218893Sdim  DEFINE_LOCK_FREE_MACRO(BOOL, Bool);
572202375Srdivacky  DEFINE_LOCK_FREE_MACRO(CHAR, Char);
573193323Sed  DEFINE_LOCK_FREE_MACRO(CHAR16_T, Char16);
574199481Srdivacky  DEFINE_LOCK_FREE_MACRO(CHAR32_T, Char32);
575193323Sed  DEFINE_LOCK_FREE_MACRO(WCHAR_T, WChar);
576193323Sed  DEFINE_LOCK_FREE_MACRO(SHORT, Short);
577193323Sed  DEFINE_LOCK_FREE_MACRO(INT, Int);
578193323Sed  DEFINE_LOCK_FREE_MACRO(LONG, Long);
579193323Sed  DEFINE_LOCK_FREE_MACRO(LLONG, LongLong);
580193323Sed  Builder.defineMacro("__GCC_ATOMIC_POINTER_LOCK_FREE",
581193323Sed                      getLockFreeValue(TI.getPointerWidth(0),
582193323Sed                                       TI.getPointerAlign(0),
583193323Sed                                       InlineWidthBits));
584193323Sed#undef DEFINE_LOCK_FREE_MACRO
585193323Sed
586193323Sed  if (LangOpts.NoInlineDefine)
587193323Sed    Builder.defineMacro("__NO_INLINE__");
588193323Sed
589193323Sed  if (unsigned PICLevel = LangOpts.PICLevel) {
590193323Sed    Builder.defineMacro("__PIC__", Twine(PICLevel));
591193323Sed    Builder.defineMacro("__pic__", Twine(PICLevel));
592193323Sed  }
593193323Sed  if (unsigned PIELevel = LangOpts.PIELevel) {
594193323Sed    Builder.defineMacro("__PIE__", Twine(PIELevel));
595193323Sed    Builder.defineMacro("__pie__", Twine(PIELevel));
596193323Sed  }
597193323Sed
598193323Sed  // Macros to control C99 numerics and <float.h>
599193323Sed  Builder.defineMacro("__FLT_EVAL_METHOD__", Twine(TI.getFloatEvalMethod()));
600193323Sed  Builder.defineMacro("__FLT_RADIX__", "2");
601193323Sed  int Dig = PickFP(&TI.getLongDoubleFormat(), -1/*FIXME*/, 17, 21, 33, 36);
602193323Sed  Builder.defineMacro("__DECIMAL_DIG__", Twine(Dig));
603193323Sed
604193323Sed  if (LangOpts.getStackProtector() == LangOptions::SSPOn)
605193323Sed    Builder.defineMacro("__SSP__");
606193323Sed  else if (LangOpts.getStackProtector() == LangOptions::SSPReq)
607193323Sed    Builder.defineMacro("__SSP_ALL__", "2");
608198090Srdivacky
609193323Sed  if (FEOpts.ProgramAction == frontend::RewriteObjC)
610193323Sed    Builder.defineMacro("__weak", "__attribute__((objc_gc(weak)))");
611193323Sed
612193323Sed  // Define a macro that exists only when using the static analyzer.
613193323Sed  if (FEOpts.ProgramAction == frontend::RunAnalysis)
614193323Sed    Builder.defineMacro("__clang_analyzer__");
615193323Sed
616193323Sed  if (LangOpts.FastRelaxedMath)
617193323Sed    Builder.defineMacro("__FAST_RELAXED_MATH__");
618193323Sed
619193323Sed  if (LangOpts.ObjCAutoRefCount) {
620193323Sed    Builder.defineMacro("__weak", "__attribute__((objc_ownership(weak)))");
621193323Sed    Builder.defineMacro("__strong", "__attribute__((objc_ownership(strong)))");
622193323Sed    Builder.defineMacro("__autoreleasing",
623193323Sed                        "__attribute__((objc_ownership(autoreleasing)))");
624193323Sed    Builder.defineMacro("__unsafe_unretained",
625193323Sed                        "__attribute__((objc_ownership(none)))");
626193323Sed  }
627193323Sed
628193323Sed  // Get other target #defines.
629193323Sed  TI.getTargetDefines(LangOpts, Builder);
630193323Sed}
631193323Sed
632193323Sed// Initialize the remapping of files to alternative contents, e.g.,
633193323Sed// those specified through other files.
634193323Sedstatic void InitializeFileRemapping(DiagnosticsEngine &Diags,
635193323Sed                                    SourceManager &SourceMgr,
636193323Sed                                    FileManager &FileMgr,
637218893Sdim                                    const PreprocessorOptions &InitOpts) {
638193323Sed  // Remap files in the source manager (with buffers).
639207618Srdivacky  for (PreprocessorOptions::const_remapped_file_buffer_iterator
640207618Srdivacky         Remap = InitOpts.remapped_file_buffer_begin(),
641207618Srdivacky         RemapEnd = InitOpts.remapped_file_buffer_end();
642207618Srdivacky       Remap != RemapEnd;
643207618Srdivacky       ++Remap) {
644207618Srdivacky    // Create the file entry for the file that we're mapping from.
645207618Srdivacky    const FileEntry *FromFile = FileMgr.getVirtualFile(Remap->first,
646193323Sed                                                Remap->second->getBufferSize(),
647207618Srdivacky                                                       0);
648193323Sed    if (!FromFile) {
649207618Srdivacky      Diags.Report(diag::err_fe_remap_missing_from_file)
650193323Sed        << Remap->first;
651193323Sed      if (!InitOpts.RetainRemappedFileBuffers)
652207618Srdivacky        delete Remap->second;
653205407Srdivacky      continue;
654207618Srdivacky    }
655193323Sed
656193323Sed    // Override the contents of the "from" file with the contents of
657207618Srdivacky    // the "to" file.
658205407Srdivacky    SourceMgr.overrideFileContents(FromFile, Remap->second,
659207618Srdivacky                                   InitOpts.RetainRemappedFileBuffers);
660193323Sed  }
661193323Sed
662207618Srdivacky  // Remap files in the source manager (with other files).
663193323Sed  for (PreprocessorOptions::const_remapped_file_iterator
664207618Srdivacky         Remap = InitOpts.remapped_file_begin(),
665193323Sed         RemapEnd = InitOpts.remapped_file_end();
666207618Srdivacky       Remap != RemapEnd;
667193323Sed       ++Remap) {
668193323Sed    // Find the file that we're mapping to.
669203954Srdivacky    const FileEntry *ToFile = FileMgr.getFile(Remap->second);
670203954Srdivacky    if (!ToFile) {
671207618Srdivacky      Diags.Report(diag::err_fe_remap_missing_to_file)
672193323Sed      << Remap->first << Remap->second;
673204642Srdivacky      continue;
674193323Sed    }
675207618Srdivacky
676193323Sed    // Create the file entry for the file that we're mapping from.
677193323Sed    const FileEntry *FromFile = FileMgr.getVirtualFile(Remap->first,
678207618Srdivacky                                                       ToFile->getSize(), 0);
679193323Sed    if (!FromFile) {
680193323Sed      Diags.Report(diag::err_fe_remap_missing_from_file)
681193323Sed      << Remap->first;
682193323Sed      continue;
683193323Sed    }
684193323Sed
685207618Srdivacky    // Override the contents of the "from" file with the contents of
686207618Srdivacky    // the "to" file.
687207618Srdivacky    SourceMgr.overrideFileContents(FromFile, ToFile);
688207618Srdivacky  }
689207618Srdivacky
690207618Srdivacky  SourceMgr.setOverridenFilesKeepOriginalName(
691207618Srdivacky                                        InitOpts.RemappedFilesKeepOriginalName);
692193323Sed}
693193323Sed
694207618Srdivacky/// InitializePreprocessor - Initialize the preprocessor getting it and the
695193323Sed/// environment ready to process a single file. This returns true on error.
696193323Sed///
697193323Sedvoid clang::InitializePreprocessor(Preprocessor &PP,
698207618Srdivacky                                   const PreprocessorOptions &InitOpts,
699193323Sed                                   const HeaderSearchOptions &HSOpts,
700193323Sed                                   const FrontendOptions &FEOpts) {
701207618Srdivacky  const LangOptions &LangOpts = PP.getLangOpts();
702193323Sed  std::string PredefineBuffer;
703193323Sed  PredefineBuffer.reserve(4080);
704193323Sed  llvm::raw_string_ostream Predefines(PredefineBuffer);
705199481Srdivacky  MacroBuilder Builder(Predefines);
706193323Sed
707193323Sed  InitializeFileRemapping(PP.getDiagnostics(), PP.getSourceManager(),
708193323Sed                          PP.getFileManager(), InitOpts);
709193323Sed
710193323Sed  // Emit line markers for various builtin sections of the file.  We don't do
711193323Sed  // this in asm preprocessor mode, because "# 4" is not a line marker directive
712193323Sed  // in this mode.
713193323Sed  if (!PP.getLangOpts().AsmPreprocessor)
714193323Sed    Builder.append("# 1 \"<built-in>\" 3");
715193323Sed
716193323Sed  // Install things like __POWERPC__, __GNUC__, etc into the macro table.
717193323Sed  if (InitOpts.UsePredefines) {
718207618Srdivacky    InitializePredefinedMacros(PP.getTargetInfo(), LangOpts, FEOpts, Builder);
719207618Srdivacky
720193323Sed    // Install definitions to make Objective-C++ ARC work well with various
721193323Sed    // C++ Standard Library implementations.
722207618Srdivacky    if (LangOpts.ObjC1 && LangOpts.CPlusPlus && LangOpts.ObjCAutoRefCount) {
723193323Sed      switch (InitOpts.ObjCXXARCStandardLibrary) {
724193323Sed      case ARCXX_nolib:
725207618Srdivacky        case ARCXX_libcxx:
726207618Srdivacky        break;
727193323Sed
728207618Srdivacky      case ARCXX_libstdcxx:
729193323Sed        AddObjCXXARCLibstdcxxDefines(LangOpts, Builder);
730193323Sed        break;
731193323Sed      }
732193323Sed    }
733193323Sed  }
734193323Sed
735193323Sed  // Even with predefines off, some macros are still predefined.
736193323Sed  // These should all be defined in the preprocessor according to the
737193323Sed  // current language configuration.
738193323Sed  InitializeStandardPredefinedMacros(PP.getTargetInfo(), PP.getLangOpts(),
739199481Srdivacky                                     FEOpts, Builder);
740193323Sed
741193323Sed  // Add on the predefines from the driver.  Wrap in a #line directive to report
742193323Sed  // that they come from the command line.
743193323Sed  if (!PP.getLangOpts().AsmPreprocessor)
744193323Sed    Builder.append("# 1 \"<command line>\" 1");
745193323Sed
746193323Sed  // Process #define's and #undef's in the order they are given.
747193323Sed  for (unsigned i = 0, e = InitOpts.Macros.size(); i != e; ++i) {
748193323Sed    if (InitOpts.Macros[i].second)  // isUndef
749193323Sed      Builder.undefineMacro(InitOpts.Macros[i].first);
750193323Sed    else
751193323Sed      DefineBuiltinMacro(Builder, InitOpts.Macros[i].first,
752193323Sed                         PP.getDiagnostics());
753193323Sed  }
754193323Sed
755193323Sed  // If -imacros are specified, include them now.  These are processed before
756198090Srdivacky  // any -include directives.
757199481Srdivacky  for (unsigned i = 0, e = InitOpts.MacroIncludes.size(); i != e; ++i)
758193323Sed    AddImplicitIncludeMacros(Builder, InitOpts.MacroIncludes[i],
759193323Sed                             PP.getFileManager());
760193323Sed
761193323Sed  // Process -include directives.
762193323Sed  for (unsigned i = 0, e = InitOpts.Includes.size(); i != e; ++i) {
763193323Sed    const std::string &Path = InitOpts.Includes[i];
764193323Sed    if (Path == InitOpts.ImplicitPTHInclude)
765193323Sed      AddImplicitIncludePTH(Builder, PP, Path);
766193323Sed    else
767193323Sed      AddImplicitInclude(Builder, Path, PP.getFileManager());
768193323Sed  }
769193323Sed
770193323Sed  // Exit the command line and go back to <built-in> (2 is LC_LEAVE).
771193323Sed  if (!PP.getLangOpts().AsmPreprocessor)
772193323Sed    Builder.append("# 1 \"<built-in>\" 2");
773199481Srdivacky
774193323Sed  // Instruct the preprocessor to skip the preamble.
775193323Sed  PP.setSkipMainFilePreamble(InitOpts.PrecompiledPreambleBytes.first,
776193323Sed                             InitOpts.PrecompiledPreambleBytes.second);
777193323Sed
778193323Sed  // Copy PredefinedBuffer into the Preprocessor.
779218893Sdim  PP.setPredefines(Predefines.str());
780193323Sed
781193323Sed  // Initialize the header search object.
782193323Sed  ApplyHeaderSearchOptions(PP.getHeaderSearchInfo(), HSOpts,
783193323Sed                           PP.getLangOpts(),
784199481Srdivacky                           PP.getTargetInfo().getTriple());
785193323Sed}
786193323Sed