# HG changeset patch # User Kaito Tokumori # Date 1375102098 -32400 # Node ID 449dd23ac5dfa9c9878b66f7d3ce27e44d3c762e # Parent b7de57f78d3ab5d27f901e852925dae6b1f99b1b if input file has a __code , set HasCodeSegment flag diff -r b7de57f78d3a -r 449dd23ac5df tools/clang/include/clang/Frontend/CodeGenOptions.def --- a/tools/clang/include/clang/Frontend/CodeGenOptions.def Sun Jul 14 17:42:20 2013 +0900 +++ b/tools/clang/include/clang/Frontend/CodeGenOptions.def Mon Jul 29 21:48:18 2013 +0900 @@ -139,7 +139,6 @@ CODEGENOPT(SanitizeRecover, 1, 1) ///< Attempt to recover from sanitizer checks ///< by continuing execution when possible - #undef CODEGENOPT #undef ENUM_CODEGENOPT #undef VALUE_CODEGENOPT diff -r b7de57f78d3a -r 449dd23ac5df tools/clang/lib/CodeGen/BackendUtil.cpp --- a/tools/clang/lib/CodeGen/BackendUtil.cpp Sun Jul 14 17:42:20 2013 +0900 +++ b/tools/clang/lib/CodeGen/BackendUtil.cpp Mon Jul 29 21:48:18 2013 +0900 @@ -458,6 +458,10 @@ Options.PositionIndependentExecutable = LangOpts.PIELevel != 0; Options.SSPBufferSize = CodeGenOpts.SSPBufferSize; Options.EnableSegmentedStacks = CodeGenOpts.EnableSegmentedStacks; +#ifndef noCbC + Options.GuaranteedTailCallOpt = LangOpts.HasCodeSegment; +#endif + TargetMachine *TM = TheTarget->createTargetMachine(Triple, TargetOpts.CPU, FeaturesStr, Options, diff -r b7de57f78d3a -r 449dd23ac5df tools/clang/lib/Parse/ParseDecl.cpp --- a/tools/clang/lib/Parse/ParseDecl.cpp Sun Jul 14 17:42:20 2013 +0900 +++ b/tools/clang/lib/Parse/ParseDecl.cpp Mon Jul 29 21:48:18 2013 +0900 @@ -2875,10 +2875,16 @@ DiagID); break; #ifndef noCbC - case tok::kw___code: + case tok::kw___code: { + LangOptions* LOP; + // LangOptions LOC; + // LOC = getLangOpts(); + LOP = const_cast(&getLangOpts()); + LOP->HasCodeSegment = 1; isInvalid = DS.SetTypeSpecType(DeclSpec::TST___code, Loc, PrevSpec, - DiagID); + DiagID); break; + } #endif case tok::kw_char: isInvalid = DS.SetTypeSpecType(DeclSpec::TST_char, Loc, PrevSpec, diff -r b7de57f78d3a -r 449dd23ac5df tools/clang/tools/libclang/CIndex.cpp --- a/tools/clang/tools/libclang/CIndex.cpp Sun Jul 14 17:42:20 2013 +0900 +++ b/tools/clang/tools/libclang/CIndex.cpp Mon Jul 29 21:48:18 2013 +0900 @@ -1412,6 +1412,9 @@ switch (TL.getTypePtr()->getKind()) { case BuiltinType::Void: +#ifndef noCbC + case BuiltinType::__Code: +#endif case BuiltinType::NullPtr: case BuiltinType::Dependent: case BuiltinType::OCLImage1d: