Do not imply private access when building a struct from ABIXML.
authorOndrej Oprala <ooprala@redhat.com>
Mon, 5 Oct 2015 13:01:04 +0000 (15:01 +0200)
committerOndrej Oprala <ooprala@redhat.com>
Mon, 5 Oct 2015 13:11:02 +0000 (15:11 +0200)
* src/abg-reader.cc (read_context): Abort if we run into an
unsupported access specifier.
(build_class_decl) Default to public access for the children
of a struct.

Signed-off-by: Ondrej Oprala <ooprala@redhat.com>
src/abg-reader.cc

index 0eec58f..284c1f5 100644 (file)
@@ -1727,7 +1727,9 @@ read_access(xmlNodePtr node, access_specifier& access)
       else if (a == "public")
        access = public_access;
       else
-       access = private_access;
+       /// If there is an access specifier of an unsupported value,
+       /// we should not assume anything and abort.
+       abort();
 
       return true;
     }
@@ -3435,7 +3437,10 @@ build_class_decl(read_context&           ctxt,
 
       if (xmlStrEqual(n->name, BAD_CAST("base-class")))
        {
-         access_specifier access = private_access;
+         access_specifier access =
+           is_struct
+           ? public_access
+           : private_access;
          read_access(n, access);
 
          string type_id;
@@ -3462,7 +3467,10 @@ build_class_decl(read_context&           ctxt,
        }
       else if (xmlStrEqual(n->name, BAD_CAST("member-type")))
        {
-         access_specifier access = private_access;
+         access_specifier access =
+           is_struct
+           ? public_access
+           : private_access;
          read_access(n, access);
 
          ctxt.map_xml_node_to_decl(n, decl);
@@ -3493,7 +3501,10 @@ build_class_decl(read_context&           ctxt,
        {
          ctxt.map_xml_node_to_decl(n, decl);
 
-         access_specifier access = private_access;
+         access_specifier access =
+           is_struct
+           ? public_access
+           : private_access;
          read_access(n, access);
 
          bool is_laid_out = false;
@@ -3523,7 +3534,10 @@ build_class_decl(read_context&           ctxt,
        {
          ctxt.map_xml_node_to_decl(n, decl);
 
-         access_specifier access = private_access;
+         access_specifier access =
+           is_struct
+           ? public_access
+           : private_access;
          read_access(n, access);
 
          bool is_virtual = false;
@@ -3568,7 +3582,10 @@ build_class_decl(read_context&           ctxt,
        {
          ctxt.map_xml_node_to_decl(n, decl);
 
-         access_specifier access = private_access;
+         access_specifier access =
+           is_struct
+           ? public_access
+           : private_access;
          read_access(n, access);
 
          bool is_static = false;