[med-svn] [castxml] 01/06: Imported Upstream version 0.1+git20160706

Gert Wollny gert-guest at moszumanska.debian.org
Wed Jul 6 15:22:46 UTC 2016


This is an automated email from the git hooks/post-receive script.

gert-guest pushed a commit to branch master
in repository castxml.

commit 593ae0e4f421db3a6f6a9d9db71349dea811623c
Author: Gert Wollny <gw.fossdev at gmail.com>
Date:   Wed Jul 6 14:59:02 2016 +0000

    Imported Upstream version 0.1+git20160706
---
 README.rst                                         |  3 +-
 src/Output.cxx                                     | 49 +++++++--------
 src/RunClang.cxx                                   | 73 +++++++++++++++++++---
 src/Utils.cxx                                      | 11 ++++
 src/Utils.h                                        |  4 ++
 src/Version.cmake                                  |  2 +-
 test/CMakeLists.txt                                | 11 ++--
 test/expect/cmd.cc-gnu-c-tgt-i386-opt-E.stdout.txt |  1 +
 test/expect/cmd.cc-gnu-tgt-i386-opt-E.stdout.txt   |  1 +
 test/expect/cmd.cc-msvc-builtin-1800-E.stdout.txt  |  7 +++
 test/expect/cmd.cc-msvc-builtin-1900-E.stdout.txt  |  9 +++
 ...gccxml.any.Class-member-template-access.xml.txt | 40 ++++++------
 .../expect/gccxml.any.GNU-float128-nostart.xml.txt |  2 +-
 test/expect/gccxml.any.GNU-float128.xml.txt        | 13 ++--
 test/expect/gccxml.any.nostart.xml.txt             | 10 +++
 test/expect/gccxml.c.GNU-float128-nostart.xml.txt  |  2 +-
 test/input/Class-member-template-access.cxx        |  2 +
 .../{GNU-float128.c => GNU-float128-nostart.c}     |  0
 .../{GNU-float128.c => GNU-float128-nostart.cxx}   |  0
 test/input/GNU-float128.c                          |  1 +
 test/input/GNU-float128.cxx                        |  7 ++-
 test/input/make_integer_seq.cxx                    |  6 ++
 test/input/nostart.cxx                             |  2 +
 23 files changed, 186 insertions(+), 70 deletions(-)

diff --git a/README.rst b/README.rst
index 9e44ad2..075dce9 100644
--- a/README.rst
+++ b/README.rst
@@ -46,7 +46,8 @@ To build CastXML from source, first obtain the prerequisites:
 * `LLVM/Clang`_ compiler SDK install tree built using the C++ compiler.
   This version of CastXML has been tested with LLVM/Clang
 
-  - SVN revision ``245954``
+  - SVN revision ``267153``
+  - Release ``3.8``
   - Release ``3.7``
   - Release ``3.6``
 
diff --git a/src/Output.cxx b/src/Output.cxx
index 2ec5d79..e16d9b9 100644
--- a/src/Output.cxx
+++ b/src/Output.cxx
@@ -809,6 +809,17 @@ void ASTVisitor::AddDeclContextMembers(clang::DeclContext const* dc,
       continue;
     }
 
+    // Skip declarations that we use internally as builtins.
+    if (isTranslationUnit) {
+      if (clang::NamedDecl const* nd = clang::dyn_cast<clang::NamedDecl>(d)) {
+        if (clang::IdentifierInfo const* ii = nd->getIdentifier()) {
+          if (ii->getName().find("__castxml") != std::string::npos) {
+            continue;
+          }
+        }
+      }
+    }
+
     // Ignore certain members.
     switch (d->getKind()) {
     case clang::Decl::CXXRecord: {
@@ -817,9 +828,6 @@ void ASTVisitor::AddDeclContextMembers(clang::DeclContext const* dc,
       if (rd->isInjectedClassName()) {
         continue;
       }
-      if (isTranslationUnit && rd->getName() == "__castxml__float128") {
-        continue;
-      }
     } break;
     case clang::Decl::AccessSpec: {
       continue;
@@ -856,12 +864,6 @@ void ASTVisitor::AddDeclContextMembers(clang::DeclContext const* dc,
         continue;
       }
     } break;
-    case clang::Decl::Record: {
-      clang::RecordDecl const* rd = static_cast<clang::RecordDecl const*>(d);
-      if (isTranslationUnit && rd->getName() == "__castxml__float128") {
-        continue;
-      }
-    } break;
     case clang::Decl::Using: {
       continue;
     } break;
@@ -1076,7 +1078,8 @@ void ASTVisitor::PrintIdAttribute(DumpNode const* dn)
 //----------------------------------------------------------------------------
 void ASTVisitor::PrintNameAttribute(std::string const& name)
 {
-  this->OS << " name=\"" << encodeXML(name) << "\"";
+  std::string n = stringReplace(name, "__castxml__float128_s", "__float128");
+  this->OS << " name=\"" << encodeXML(n) << "\"";
 }
 
 //----------------------------------------------------------------------------
@@ -1619,14 +1622,6 @@ void ASTVisitor::OutputNamespaceDecl(
 void ASTVisitor::OutputRecordDecl(clang::RecordDecl const* d,
                                   DumpNode const* dn)
 {
-  // As a special case, replace the Clang fake builtin for __float128
-  // with a FundamentalType so we generate the same thing gccxml did.
-  if (this->CI.getLangOpts().CPlusPlus &&
-      d == this->CI.getASTContext().getFloat128StubType()) {
-    this->PrintFloat128Type(dn);
-    return;
-  }
-
   const char* tag;
   switch (d->getTagKind()) {
   case clang::TTK_Class: tag = "Class"; break;
@@ -1647,15 +1642,13 @@ void ASTVisitor::OutputRecordDecl(clang::RecordDecl const* d,
     this->PrintNameAttribute(rso.str());
   }
   clang::AccessSpecifier access = clang::AS_none;
-  if (dx) {
-    // If this is a template instantiation then get the access of the original
+  if (clang::ClassTemplateSpecializationDecl const* dxts =
+      clang::dyn_cast<clang::ClassTemplateSpecializationDecl>(d)) {
+    // This is a template instantiation so get the access of the original
     // template.  Access of the instantiation itself has no meaning.
-    if (clang::CXXRecordDecl const* dxp =
-        dx->getTemplateInstantiationPattern()) {
-      if (clang::ClassTemplateDecl const* dxpt =
-          dxp->getDescribedClassTemplate()) {
-        access = dxpt->getAccess();
-      }
+    if (clang::ClassTemplateDecl const* dxt =
+        dxts->getSpecializedTemplate()) {
+      access = dxt->getAccess();
     }
   }
   this->PrintContextAttribute(d, access);
@@ -1727,7 +1720,7 @@ void ASTVisitor::OutputTypedefDecl(clang::TypedefDecl const* d,
 {
   // As a special case, replace our compatibility Typedef for __float128
   // with a FundamentalType so we generate the same thing gccxml did.
-  if (d->getName() == "__float128" &&
+  if (d->getName() == "__castxml__float128" &&
       clang::isa<clang::TranslationUnitDecl>(d->getDeclContext())) {
     clang::SourceLocation sl = d->getLocation();
     if (sl.isValid()) {
@@ -2104,7 +2097,7 @@ void ASTVisitor::HandleTranslationUnit(clang::TranslationUnitDecl const* tu)
   // Start dump with gccxml-compatible format.
   this->OS <<
     "<?xml version=\"1.0\"?>\n"
-    "<GCC_XML version=\"0.9.0\" cvs_revision=\"1.137\">\n"
+    "<GCC_XML version=\"0.9.0\" cvs_revision=\"1.139\">\n"
     ;
 
   // Dump the complete nodes.
diff --git a/src/RunClang.cxx b/src/RunClang.cxx
index 515cf4f..03176a6 100644
--- a/src/RunClang.cxx
+++ b/src/RunClang.cxx
@@ -210,17 +210,70 @@ protected:
 
       // Provide __float128 if simulating the actual GNU compiler.
       if (this->NeedFloat128(this->Opts.Predefines)) {
-        // Clang provides its own (fake) builtin in gnu++11 mode.
-        // Otherwise we need to provide our own.
-        if (!(CI.getLangOpts().CPlusPlus11 &&
-              CI.getLangOpts().GNUMode)) {
-          builtins += "\n"
-            "typedef struct __castxml__float128 { "
-            "  char x[16] __attribute__((aligned(16))); "
-            "} __float128;\n"
-            ;
-        }
+        // Clang provides its own (fake) builtin in gnu++11 mode but issues
+        // diagnostics when it is used in some contexts.  Provide our own
+        // approximation of the builtin instead.
+        builtins += "\n"
+          "typedef struct __castxml__float128_s { "
+          "  char x[16] __attribute__((aligned(16))); "
+          "} __castxml__float128;\n"
+          "#define __float128 __castxml__float128\n"
+          ;
+      }
+
+      // Provide __is_assignable builtin if simulating MSVC.
+      // When a future Clang version supports the builtin then
+      // we can skip this when built against such a Clang.
+      if (CI.getLangOpts().MSCompatibilityVersion >= 190000000 &&
+          CI.getLangOpts().CPlusPlus11) {
+        builtins += "\n"
+          "template <typename T> T&& __castxml__declval() noexcept;\n"
+          "template <typename To, typename Fr, typename =\n"
+          "  decltype(__castxml__declval<To>() = __castxml__declval<Fr>())>\n"
+          "  static char (&__castxml__is_assignable_check(int))[1];\n"
+          "template <typename, typename>\n"
+          "  static char (&__castxml__is_assignable_check(...))[2];\n"
+          "#define __is_assignable(_To,_Fr) \\\n"
+          "  (sizeof(__castxml__is_assignable_check<_To,_Fr>(0)) == \\\n"
+          "   sizeof(char(&)[1]))\n"
+          ;
+      }
+
+#if LLVM_VERSION_MAJOR < 3 \
+ || LLVM_VERSION_MAJOR == 3 && LLVM_VERSION_MINOR < 8
+      // Clang 3.8 and above provide a __make_integer_seq builtin needed
+      // in C++14 mode.  Provide it ourselves for older Clang versions.
+      if (CI.getLangOpts().CPlusPlus14) {
+        builtins += "\n"
+          "template <typename _T, _T> struct __castxml__integral_constant;\n"
+          "template <template<typename _U, _U...> class _S,\n"
+          "          typename, typename, bool>\n"
+          "  struct __castxml__make_integer_seq_impl;\n"
+          "template <template<typename _U, _U...> class _S,\n"
+          "          class _T, _T... __v>\n"
+          "  struct __castxml__make_integer_seq_impl<_S,\n"
+          "       __castxml__integral_constant<_T, 0>,\n"
+          "       _S<_T, __v...>, true> {\n"
+          "     typedef _S<_T, __v...> type;\n"
+          "  };\n"
+          "template <template<typename _U, _U...> class _S,\n"
+          "          class _T, _T __i, _T... __v>\n"
+          "  struct __castxml__make_integer_seq_impl<_S,\n"
+          "       __castxml__integral_constant<_T, __i>,\n"
+          "       _S<_T, __v...>, true>\n"
+          "    : __castxml__make_integer_seq_impl<_S,\n"
+          "       __castxml__integral_constant<_T, __i - 1>,\n"
+          "       _S<_T, __i - 1, __v...>, __i >= 1 > {};\n"
+          "template <template<typename _U, _U...> class _S,\n"
+          "          typename _T, _T _Sz>\n"
+          "using __castxml__make_integer_seq = typename\n"
+          "  __castxml__make_integer_seq_impl<_S,\n"
+          "      __castxml__integral_constant<_T, _Sz>,\n"
+          "     _S<_T>, (_Sz>=0)>::type;\n"
+          "#define __make_integer_seq __castxml__make_integer_seq\n"
+          ;
       }
+#endif
 
       // Prevent glibc use of a GNU extension not implemented by Clang.
       if (this->NeedNoMathInlines(this->Opts.Predefines)) {
diff --git a/src/Utils.cxx b/src/Utils.cxx
index 400b563..cea0655 100644
--- a/src/Utils.cxx
+++ b/src/Utils.cxx
@@ -214,6 +214,17 @@ std::string encodeXML(std::string const& in, bool cdata)
   return xml;
 }
 
+//----------------------------------------------------------------------------
+std::string stringReplace(std::string str, std::string const& in,
+                          std::string const& out) {
+  std::string::size_type p = 0;
+  while ((p = str.find(in, p)) != std::string::npos) {
+    str.replace(p, in.size(), out);
+    p += out.length();
+  }
+  return str;
+}
+
 #if defined(_WIN32)
 # include <windows.h>
 #endif
diff --git a/src/Utils.h b/src/Utils.h
index 1baeb33..7103fa7 100644
--- a/src/Utils.h
+++ b/src/Utils.h
@@ -47,4 +47,8 @@ void suppressInteractiveErrors();
 /// encodeXML - Convert character string to XML representation
 std::string encodeXML(std::string const& in, bool cdata = false);
 
+/// stringReplace - Replace all occurrences of an 'in' string with 'out'.
+std::string stringReplace(std::string str, std::string const& in,
+                          std::string const& out);
+
 #endif // CASTXML_UTILS_H
diff --git a/src/Version.cmake b/src/Version.cmake
index 6fead5d..fc93788 100644
--- a/src/Version.cmake
+++ b/src/Version.cmake
@@ -39,7 +39,7 @@ elseif(COMMAND _git)
       set(CastXML_VERSION "${CastXML_VERSION}-git")
     endif()
   endif()
-elseif("b367e2d" MATCHES "^([0-9a-f]+)$")
+elseif("d5934bd" MATCHES "^([0-9a-f]+)$")
   # Use version exported by 'git archive'.
   set(CastXML_VERSION "${CastXML_VERSION}-g${CMAKE_MATCH_1}")
 else()
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
index 65a5d7c..51da580 100644
--- a/test/CMakeLists.txt
+++ b/test/CMakeLists.txt
@@ -266,6 +266,9 @@ castxml_test_cmd(cc-msvc-std-c++98 --castxml-cc-msvc "(" $<TARGET_FILE:cc-msvc>
 castxml_test_cmd(cc-msvc-std-c++11 --castxml-cc-msvc "(" $<TARGET_FILE:cc-msvc> -msc=1600 ")" ${empty_cxx} "-###")
 castxml_test_cmd(cc-msvc-std-c++14 --castxml-cc-msvc "(" $<TARGET_FILE:cc-msvc> -msc=1900 ")" ${empty_cxx} "-###")
 castxml_test_cmd(cc-msvc-std-explicit --castxml-cc-msvc "(" $<TARGET_FILE:cc-msvc> -msc=1500 ")" -std=gnu++14 ${empty_cxx} "-###")
+castxml_test_cmd(cc-msvc-builtin-1800-E --castxml-cc-msvc "(" $<TARGET_FILE:cc-msvc> -msc=1800 ")" ${empty_cxx} -E -dM)
+castxml_test_cmd(cc-msvc-builtin-1900-E --castxml-cc-msvc "(" $<TARGET_FILE:cc-msvc> -msc=1900 ")" ${empty_cxx} -E -dM)
+castxml_test_cmd(cc-msvc-builtin-1900 --castxml-cc-msvc "(" $<TARGET_FILE:cc-msvc> -msc=1900 ")" ${input}/make_integer_seq.cxx)
 castxml_test_cmd(cc-msvc-c-bad-cmd --castxml-cc-msvc-c "(" cc-msvc-c-bad-cmd ")" ${empty_c})
 castxml_test_cmd(cc-msvc-c-src-c-E --castxml-cc-msvc-c $<TARGET_FILE:cc-msvc> ${empty_c} -E -dM)
 castxml_test_cmd(cc-msvc-c-src-c-cmd --castxml-cc-msvc-c $<TARGET_FILE:cc-msvc> ${empty_c} "-###")
@@ -397,6 +400,10 @@ castxml_test_gccxml(using-declaration-start)
 castxml_test_gccxml(using-directive-ns)
 castxml_test_gccxml(using-directive-start)
 
+set(castxml_test_gccxml_custom_start "")
+castxml_test_gccxml(nostart)
+unset(castxml_test_gccxml_custom_start)
+
 if(";${LLVM_TARGETS_TO_BUILD};" MATCHES ";X86;")
   set(castxml_test_gccxml_extra_arguments -target i386-pc-windows-msvc)
   castxml_test_gccxml(Function-calling-convention-ms)
@@ -416,20 +423,16 @@ castxml_test_gccxml_broken(ReferenceType-to-Class-template)
 
 set(castxml_test_gccxml_extra_arguments --castxml-cc-gnu-c "(" $<TARGET_FILE:cc-gnu> --cc-define=__x86_64__ ")")
 castxml_test_gccxml_c(GNU-float128)
-set(castxml_test_gccxml_custom_input GNU-float128)
 set(castxml_test_gccxml_custom_start "")
 castxml_test_gccxml_c(GNU-float128-nostart)
 unset(castxml_test_gccxml_custom_start)
-unset(castxml_test_gccxml_custom_input)
 unset(castxml_test_gccxml_extra_arguments)
 
 set(castxml_test_gccxml_extra_arguments --castxml-cc-gnu "(" $<TARGET_FILE:cc-gnu> --cc-define=__x86_64__ ")")
 castxml_test_gccxml(GNU-float128)
-set(castxml_test_gccxml_custom_input GNU-float128)
 set(castxml_test_gccxml_custom_start "")
 castxml_test_gccxml(GNU-float128-nostart)
 unset(castxml_test_gccxml_custom_start)
-unset(castxml_test_gccxml_custom_input)
 unset(castxml_test_gccxml_extra_arguments)
 
 set(castxml_test_gccxml_extra_arguments --castxml-cc-gnu-c $<TARGET_FILE:cc-gnu>)
diff --git a/test/expect/cmd.cc-gnu-c-tgt-i386-opt-E.stdout.txt b/test/expect/cmd.cc-gnu-c-tgt-i386-opt-E.stdout.txt
index 865095d..aac6988 100644
--- a/test/expect/cmd.cc-gnu-c-tgt-i386-opt-E.stdout.txt
+++ b/test/expect/cmd.cc-gnu-c-tgt-i386-opt-E.stdout.txt
@@ -8,4 +8,5 @@
 #define __castxml_clang_major__ [0-9]+
 #define __castxml_clang_minor__ [0-9]+
 #define __castxml_clang_patchlevel__ [0-9]+
+#define __float128 __castxml__float128
 #define __i386__ 1$
diff --git a/test/expect/cmd.cc-gnu-tgt-i386-opt-E.stdout.txt b/test/expect/cmd.cc-gnu-tgt-i386-opt-E.stdout.txt
index fa9c1e5..2fbf8e5 100644
--- a/test/expect/cmd.cc-gnu-tgt-i386-opt-E.stdout.txt
+++ b/test/expect/cmd.cc-gnu-tgt-i386-opt-E.stdout.txt
@@ -9,4 +9,5 @@
 #define __castxml_clang_minor__ [0-9]+
 #define __castxml_clang_patchlevel__ [0-9]+
 #define __cplusplus 199711L
+#define __float128 __castxml__float128
 #define __i386__ 1$
diff --git a/test/expect/cmd.cc-msvc-builtin-1800-E.stdout.txt b/test/expect/cmd.cc-msvc-builtin-1800-E.stdout.txt
new file mode 100644
index 0000000..e4e6747
--- /dev/null
+++ b/test/expect/cmd.cc-msvc-builtin-1800-E.stdout.txt
@@ -0,0 +1,7 @@
+^#define _MSC_VER 1800
+#define _WIN32 1
+#define __castxml__ [0-9]+
+#define __castxml_clang_major__ [0-9]+
+#define __castxml_clang_minor__ [0-9]+
+#define __castxml_clang_patchlevel__ [0-9]+
+#define __cplusplus 199711L$
diff --git a/test/expect/cmd.cc-msvc-builtin-1900-E.stdout.txt b/test/expect/cmd.cc-msvc-builtin-1900-E.stdout.txt
new file mode 100644
index 0000000..3990d4c
--- /dev/null
+++ b/test/expect/cmd.cc-msvc-builtin-1900-E.stdout.txt
@@ -0,0 +1,9 @@
+^#define _MSC_VER 1900
+#define _WIN32 1
+#define __castxml__ [0-9]+
+#define __castxml_clang_major__ [0-9]+
+#define __castxml_clang_minor__ [0-9]+
+#define __castxml_clang_patchlevel__ [0-9]+
+#define __cplusplus 199711L
+#define __is_assignable\(_To,_Fr\) \(sizeof\(__castxml__is_assignable_check<_To,_Fr>\(0\)\) == sizeof\(char\(&\)\[1\]\)\)(
+#define __make_integer_seq __castxml__make_integer_seq)?$
diff --git a/test/expect/gccxml.any.Class-member-template-access.xml.txt b/test/expect/gccxml.any.Class-member-template-access.xml.txt
index e2c0cd7..4c2a0fc 100644
--- a/test/expect/gccxml.any.Class-member-template-access.xml.txt
+++ b/test/expect/gccxml.any.Class-member-template-access.xml.txt
@@ -1,29 +1,31 @@
 ^<\?xml version="1.0"\?>
 <GCC_XML[^>]*>
-  <Class id="_1" name="start" context="_2" location="f1:1" file="f1" line="1" members="_3 _4 _5 _6 _7" size="[0-9]+" align="[0-9]+"/>
-  <Class id="_3" name="member<int>" context="_1" access="private" location="f1:4" file="f1" line="4" members="_8 _9 _10 _11" size="[0-9]+" align="[0-9]+"/>
-  <Constructor id="_4" name="start" context="_1" access="public" location="f1:1" file="f1" line="1" inline="1" artificial="1"( throw="")?/>
-  <Constructor id="_5" name="start" context="_1" access="public" location="f1:1" file="f1" line="1" inline="1" artificial="1"( throw="")?>
-    <Argument type="_12" location="f1:1" file="f1" line="1"/>
+  <Class id="_1" name="start" context="_2" location="f1:1" file="f1" line="1" members="_3 _4 _5 _6 _7 _8 _9" size="[0-9]+" align="[0-9]+"/>
+  <Class id="_3" name="member<char>" context="_1" access="private" location="f1:2" file="f1" line="2" incomplete="1"/>
+  <Class id="_4" name="member<int>" context="_1" access="private" location="f1:6" file="f1" line="6" members="_10 _11 _12 _13" size="[0-9]+" align="[0-9]+"/>
+  <Typedef id="_5" name="member_char" type="_3" context="_1" access="public" location="f1:4" file="f1" line="4"/>
+  <Constructor id="_6" name="start" context="_1" access="public" location="f1:1" file="f1" line="1" inline="1" artificial="1"( throw="")?/>
+  <Constructor id="_7" name="start" context="_1" access="public" location="f1:1" file="f1" line="1" inline="1" artificial="1"( throw="")?>
+    <Argument type="_14" location="f1:1" file="f1" line="1"/>
   </Constructor>
-  <OperatorMethod id="_6" name="=" returns="_13" context="_1" access="public" location="f1:1" file="f1" line="1" inline="1" artificial="1"( throw="")? mangled="[^"]+">
-    <Argument type="_12" location="f1:1" file="f1" line="1"/>
+  <OperatorMethod id="_8" name="=" returns="_15" context="_1" access="public" location="f1:1" file="f1" line="1" inline="1" artificial="1"( throw="")? mangled="[^"]+">
+    <Argument type="_14" location="f1:1" file="f1" line="1"/>
   </OperatorMethod>
-  <Destructor id="_7" name="start" context="_1" access="public" location="f1:1" file="f1" line="1" inline="1" artificial="1"( throw="")?/>
-  <Constructor id="_8" name="member" context="_3" access="public" location="f1:4" file="f1" line="4" inline="1" artificial="1"( throw="")?/>
-  <Constructor id="_9" name="member" context="_3" access="public" location="f1:4" file="f1" line="4" inline="1" artificial="1"( throw="")?>
-    <Argument type="_14" location="f1:4" file="f1" line="4"/>
+  <Destructor id="_9" name="start" context="_1" access="public" location="f1:1" file="f1" line="1" inline="1" artificial="1"( throw="")?/>
+  <Constructor id="_10" name="member" context="_4" access="public" location="f1:6" file="f1" line="6" inline="1" artificial="1"( throw="")?/>
+  <Constructor id="_11" name="member" context="_4" access="public" location="f1:6" file="f1" line="6" inline="1" artificial="1"( throw="")?>
+    <Argument type="_16" location="f1:6" file="f1" line="6"/>
   </Constructor>
-  <OperatorMethod id="_10" name="=" returns="_15" context="_3" access="public" location="f1:4" file="f1" line="4" inline="1" artificial="1"( throw="")? mangled="[^"]+">
-    <Argument type="_14" location="f1:4" file="f1" line="4"/>
+  <OperatorMethod id="_12" name="=" returns="_17" context="_4" access="public" location="f1:6" file="f1" line="6" inline="1" artificial="1"( throw="")? mangled="[^"]+">
+    <Argument type="_16" location="f1:6" file="f1" line="6"/>
   </OperatorMethod>
-  <Destructor id="_11" name="member" context="_3" access="public" location="f1:4" file="f1" line="4" inline="1" artificial="1"( throw="")?/>
-  <ReferenceType id="_12" type="_1c"/>
+  <Destructor id="_13" name="member" context="_4" access="public" location="f1:6" file="f1" line="6" inline="1" artificial="1"( throw="")?/>
+  <ReferenceType id="_14" type="_1c"/>
   <CvQualifiedType id="_1c" type="_1" const="1"/>
-  <ReferenceType id="_13" type="_1"/>
-  <ReferenceType id="_14" type="_3c"/>
-  <CvQualifiedType id="_3c" type="_3" const="1"/>
-  <ReferenceType id="_15" type="_3"/>
+  <ReferenceType id="_15" type="_1"/>
+  <ReferenceType id="_16" type="_4c"/>
+  <CvQualifiedType id="_4c" type="_4" const="1"/>
+  <ReferenceType id="_17" type="_4"/>
   <Namespace id="_2" name="::"/>
   <File id="f1" name=".*/test/input/Class-member-template-access.cxx"/>
 </GCC_XML>$
diff --git a/test/expect/gccxml.any.GNU-float128-nostart.xml.txt b/test/expect/gccxml.any.GNU-float128-nostart.xml.txt
index 826d133..1ff90f7 100644
--- a/test/expect/gccxml.any.GNU-float128-nostart.xml.txt
+++ b/test/expect/gccxml.any.GNU-float128-nostart.xml.txt
@@ -1,5 +1,5 @@
 ^<\?xml version="1.0"\?>
 <GCC_XML[^>]*>
 .*<FundamentalType id="_[0-9]+" name="__float128" size="128" align="128"/>.*
-  <File id="f1" name=".*/test/input/GNU-float128.cxx"/>
+  <File id="f1" name=".*/test/input/GNU-float128-nostart.cxx"/>
 </GCC_XML>$
diff --git a/test/expect/gccxml.any.GNU-float128.xml.txt b/test/expect/gccxml.any.GNU-float128.xml.txt
index c09de58..8ae15a6 100644
--- a/test/expect/gccxml.any.GNU-float128.xml.txt
+++ b/test/expect/gccxml.any.GNU-float128.xml.txt
@@ -1,9 +1,14 @@
 ^<\?xml version="1.0"\?>
 <GCC_XML[^>]*>
-  <Function id="_1" name="start" returns="_2" context="_3" location="f1:1" file="f1" line="1" mangled="">
-    <Argument type="_2" location="f1:1" file="f1" line="1"/>
+  <Namespace id="_1" name="start" context="_2" members="_3 _4 _5"/>
+  <Function id="_3" name="f" returns="_6" context="_1" location="f1:3" file="f1" line="3" mangled="">
+    <Argument type="_6" location="f1:3" file="f1" line="3"/>
   </Function>
-  <FundamentalType id="_2" name="__float128" size="128" align="128"/>
-  <Namespace id="_3" name="::"/>
+  <Variable id="_4" name="v" type="_6" init="" context="_1" location="f1:4" file="f1" line="4" mangled="[^"]*"/>
+  <Variable id="_5" name="pa" type="_7" context="_1" location="f1:5" file="f1" line="5" mangled="[^"]*"/>
+  <FundamentalType id="_6" name="__float128" size="128" align="128"/>
+  <PointerType id="_7" type="_8"/>
+  <Namespace id="_2" name="::"/>
+  <Struct id="_8" name="A<__float128>" context="_2" location="f1:1" file="f1" line="1" incomplete="1"/>
   <File id="f1" name=".*/test/input/GNU-float128.cxx"/>
 </GCC_XML>$
diff --git a/test/expect/gccxml.any.nostart.xml.txt b/test/expect/gccxml.any.nostart.xml.txt
new file mode 100644
index 0000000..37133fc
--- /dev/null
+++ b/test/expect/gccxml.any.nostart.xml.txt
@@ -0,0 +1,10 @@
+^<\?xml version="1.0"\?>
+<GCC_XML[^>]*>
+  <Namespace id="_1" name="::" members="[^"]*"/>
+.*<Class id="_[0-9]+" name="A" context="_1" location="f1:1" file="f1" line="1" incomplete="1"/>
+  <OperatorFunction id="_[0-9]+" name="\+" returns="_[0-9]+" context="_1" location="f1:2" file="f1" line="2" mangled="[^"]*">
+    <Argument type="_[0-9]+" location="f1:2" file="f1" line="2"/>
+    <Argument type="_[0-9]+" location="f1:2" file="f1" line="2"/>
+  </OperatorFunction>.*
+  <File id="f1" name=".*/test/input/nostart.cxx"/>
+</GCC_XML>$
diff --git a/test/expect/gccxml.c.GNU-float128-nostart.xml.txt b/test/expect/gccxml.c.GNU-float128-nostart.xml.txt
index 58d80c4..7d81e8c 100644
--- a/test/expect/gccxml.c.GNU-float128-nostart.xml.txt
+++ b/test/expect/gccxml.c.GNU-float128-nostart.xml.txt
@@ -1,5 +1,5 @@
 ^<\?xml version="1.0"\?>
 <GCC_XML[^>]*>
 .*<FundamentalType id="_[0-9]+" name="__float128" size="128" align="128"/>.*
-  <File id="f1" name=".*/test/input/GNU-float128.c"/>
+  <File id="f1" name=".*/test/input/GNU-float128-nostart.c"/>
 </GCC_XML>$
diff --git a/test/input/Class-member-template-access.cxx b/test/input/Class-member-template-access.cxx
index d05fe4b..1bcead7 100644
--- a/test/input/Class-member-template-access.cxx
+++ b/test/input/Class-member-template-access.cxx
@@ -1,4 +1,6 @@
 class start {
   template <typename> class member {};
+public:
+  typedef member<char> member_char; // incomplete
 };
 template class start::member<int>; // instantiation
diff --git a/test/input/GNU-float128.c b/test/input/GNU-float128-nostart.c
similarity index 100%
copy from test/input/GNU-float128.c
copy to test/input/GNU-float128-nostart.c
diff --git a/test/input/GNU-float128.c b/test/input/GNU-float128-nostart.cxx
similarity index 100%
copy from test/input/GNU-float128.c
copy to test/input/GNU-float128-nostart.cxx
diff --git a/test/input/GNU-float128.c b/test/input/GNU-float128.c
index fbb07e1..ca848df 100644
--- a/test/input/GNU-float128.c
+++ b/test/input/GNU-float128.c
@@ -1 +1,2 @@
 __float128 start(__float128);
+__float128 v;
diff --git a/test/input/GNU-float128.cxx b/test/input/GNU-float128.cxx
index fbb07e1..183ada9 100644
--- a/test/input/GNU-float128.cxx
+++ b/test/input/GNU-float128.cxx
@@ -1 +1,6 @@
-__float128 start(__float128);
+template <typename T> struct A;
+namespace start {
+  __float128 f(__float128);
+  __float128 v;
+  A<__float128>* pa;
+}
diff --git a/test/input/make_integer_seq.cxx b/test/input/make_integer_seq.cxx
new file mode 100644
index 0000000..44a89a8
--- /dev/null
+++ b/test/input/make_integer_seq.cxx
@@ -0,0 +1,6 @@
+template <typename _T, _T...> struct seq;
+typedef __make_integer_seq<seq, int, 3> seq_A;
+typedef seq<int,0,1,2> seq_B;
+template <typename A, typename B> struct assert_same;
+template <typename A> struct assert_same<A,A> {};
+assert_same<seq_A,seq_B> enforce;
diff --git a/test/input/nostart.cxx b/test/input/nostart.cxx
new file mode 100644
index 0000000..37374bc
--- /dev/null
+++ b/test/input/nostart.cxx
@@ -0,0 +1,2 @@
+class A;
+A operator+(A,A);

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-med/castxml.git



More information about the debian-med-commit mailing list