diff --git a/gcc/c-family/ChangeLog b/gcc/c-family/ChangeLog index 63d592ddc56..75e43fd7f09 100644 --- a/gcc/c-family/ChangeLog +++ b/gcc/c-family/ChangeLog @@ -1,3 +1,8 @@ +2015-07-08 Eric Botcazou + + * c-ada-spec.h (cpp_operation): Add IS_CONSTEXPR. + * c-ada-spec.c (print_ada_declaration): Skip constexpr constructors. + 2015-07-08 Jakub Jelinek * c-omp.c (c_omp_declare_simd_clauses_to_numbers): If all clauses diff --git a/gcc/c-family/c-ada-spec.c b/gcc/c-family/c-ada-spec.c index 38a8fb266ac..be8ef244b96 100644 --- a/gcc/c-family/c-ada-spec.c +++ b/gcc/c-family/c-ada-spec.c @@ -2887,6 +2887,7 @@ print_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc) 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; @@ -2898,6 +2899,7 @@ print_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc) 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); @@ -2911,6 +2913,10 @@ print_ada_declaration (pretty_printer *buffer, tree t, tree type, int spc) if (is_constructor || is_destructor) { + /* Skip constexpr default constructors. */ + if (is_constexpr) + return 0; + /* Only consider constructors/destructors for complete objects. */ if (strncmp (IDENTIFIER_POINTER (decl_name), "__comp", 6) != 0) return 0; diff --git a/gcc/c-family/c-ada-spec.h b/gcc/c-family/c-ada-spec.h index 08d268573c7..116ac0bb644 100644 --- a/gcc/c-family/c-ada-spec.h +++ b/gcc/c-family/c-ada-spec.h @@ -27,6 +27,7 @@ along with GCC; see the file COPYING3. If not see typedef enum { HAS_DEPENDENT_TEMPLATE_ARGS, IS_ABSTRACT, + IS_CONSTEXPR, IS_CONSTRUCTOR, IS_DESTRUCTOR, IS_COPY_CONSTRUCTOR, diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 74b746a5398..b6cca3ade33 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,7 @@ +2015-07-08 Eric Botcazou + + * decl2.c (cpp_check): Deal with IS_CONSTEXPR. + 2015-07-08 Jakub Jelinek * decl.c (grokfndecl): Handle flag_openmp_simd like flag_openmp. diff --git a/gcc/cp/decl2.c b/gcc/cp/decl2.c index cac0508f881..a1446c25cb8 100644 --- a/gcc/cp/decl2.c +++ b/gcc/cp/decl2.c @@ -4070,6 +4070,8 @@ 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: diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d883a7c8406..d2d51ae0ac5 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2015-07-08 Eric Botcazou + + * g++.dg/other/dump-ada-spec-9.C: New test. + 2015-07-08 Jakub Jelinek * g++.dg/vect/vect.exp: Run also simd* tests. diff --git a/gcc/testsuite/g++.dg/other/dump-ada-spec-9.C b/gcc/testsuite/g++.dg/other/dump-ada-spec-9.C new file mode 100644 index 00000000000..6387c81a25b --- /dev/null +++ b/gcc/testsuite/g++.dg/other/dump-ada-spec-9.C @@ -0,0 +1,19 @@ +/* { dg-do compile } */ +/* { dg-options "-fdump-ada-spec" } */ + +class Base { + public: + virtual void Primitive (); + +}; + +void Base::Primitive () { + +} + +void Dispatch (Base * B) { + B->Primitive (); +} + +/* { dg-final { scan-ada-spec-not "CPP_Constructor" } } */ +/* { dg-final { cleanup-ada-spec } } */