> We need to skip the constexpr default constructors.
That's actually not sufficient so I have installed the attached patch instead.
Tested on x86_64-suse-linux, applied on the mainline as obvious.
2015-07-10 Eric Botcazou <ebotca...@adacore.com>
c-family/
* c-ada-spec.h (cpp_operation): Revert latest change.
* c-ada-spec.c (print_ada_declaration): Likewise. Skip implicit
constructors and destructors.
cp/
* decl2.c (cpp_check): Revert latest change.
--
Eric Botcazou
Index: c-family/c-ada-spec.h
===================================================================
--- c-family/c-ada-spec.h (revision 225585)
+++ c-family/c-ada-spec.h (working copy)
@@ -27,7 +27,6 @@ along with GCC; see the file COPYING3.
typedef enum {
HAS_DEPENDENT_TEMPLATE_ARGS,
IS_ABSTRACT,
- IS_CONSTEXPR,
IS_CONSTRUCTOR,
IS_DESTRUCTOR,
IS_COPY_CONSTRUCTOR,
Index: c-family/c-ada-spec.c
===================================================================
--- c-family/c-ada-spec.c (revision 225585)
+++ c-family/c-ada-spec.c (working copy)
@@ -2887,7 +2887,6 @@ print_ada_declaration (pretty_printer *b
bool is_method = TREE_CODE (TREE_TYPE (t)) == METHOD_TYPE;
tree decl_name = DECL_NAME (t);
bool is_abstract = false;
- bool is_constexpr = false;
bool is_constructor = false;
bool is_destructor = false;
bool is_copy_constructor = false;
@@ -2899,7 +2898,6 @@ print_ada_declaration (pretty_printer *b
if (cpp_check)
{
is_abstract = cpp_check (t, IS_ABSTRACT);
- is_constexpr = cpp_check (t, IS_CONSTEXPR);
is_constructor = cpp_check (t, IS_CONSTRUCTOR);
is_destructor = cpp_check (t, IS_DESTRUCTOR);
is_copy_constructor = cpp_check (t, IS_COPY_CONSTRUCTOR);
@@ -2913,8 +2911,8 @@ print_ada_declaration (pretty_printer *b
if (is_constructor || is_destructor)
{
- /* Skip constexpr default constructors. */
- if (is_constexpr)
+ /* ??? Skip implicit constructors/destructors for now. */
+ if (DECL_ARTIFICIAL (t))
return 0;
/* Only consider constructors/destructors for complete objects. */
@@ -3050,9 +3048,12 @@ print_ada_declaration (pretty_printer *b
if (num_fields == 1)
is_interface = 1;
- /* Also check that there are only virtual methods. */
+ /* Also check that there are only pure virtual methods. Since the
+ class is empty, we can skip implicit constructors/destructors. */
for (tmp = TYPE_METHODS (TREE_TYPE (t)); tmp; tmp = TREE_CHAIN (tmp))
{
+ if (DECL_ARTIFICIAL (tmp))
+ continue;
if (cpp_check (tmp, IS_ABSTRACT))
is_abstract_record = 1;
else
Index: cp/decl2.c
===================================================================
--- cp/decl2.c (revision 225585)
+++ cp/decl2.c (working copy)
@@ -4070,8 +4070,6 @@ cpp_check (tree t, cpp_operation op)
}
case IS_ABSTRACT:
return DECL_PURE_VIRTUAL_P (t);
- case IS_CONSTEXPR:
- return DECL_DECLARED_CONSTEXPR_P (t);
case IS_CONSTRUCTOR:
return DECL_CONSTRUCTOR_P (t);
case IS_DESTRUCTOR: