changeset 12:449dd23ac5df

if input file has a __code , set HasCodeSegment flag
author Kaito Tokumori <e105711@ie.u-ryukyu.ac.jp>
date Mon, 29 Jul 2013 21:48:18 +0900
parents b7de57f78d3a
children 0c91843d63c0
files tools/clang/include/clang/Frontend/CodeGenOptions.def tools/clang/lib/CodeGen/BackendUtil.cpp tools/clang/lib/Parse/ParseDecl.cpp tools/clang/tools/libclang/CIndex.cpp
diffstat 4 files changed, 15 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- 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
--- 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,
--- 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<LangOptions*>(&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,
--- 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: