c-ada-spec.c (is_tagged_type): Test for TYPE_METHODS on main variant.

* c-ada-spec.c (is_tagged_type): Test for TYPE_METHODS on main variant.
	(has_nontrivial_methods): Likewise.

From-SVN: r223905
This commit is contained in:
Eric Botcazou 2015-05-31 21:47:28 +00:00 committed by Eric Botcazou
parent 255a48d641
commit 1edfb384e8
4 changed files with 33 additions and 0 deletions

View File

@ -1,3 +1,8 @@
2015-05-31 Eric Botcazou <ebotcazou@adacore.com>
* c-ada-spec.c (is_tagged_type): Test for TYPE_METHODS on main variant.
(has_nontrivial_methods): Likewise.
2015-05-25 Marek Polacek <polacek@redhat.com>
* c-ubsan.c (ubsan_instrument_shift): Use type0.

View File

@ -960,6 +960,9 @@ is_tagged_type (const_tree type)
if (!type || !RECORD_OR_UNION_TYPE_P (type))
return false;
/* TYPE_METHODS is only set on the main variant. */
type = TYPE_MAIN_VARIANT (type);
for (tmp = TYPE_METHODS (type); tmp; tmp = TREE_CHAIN (tmp))
if (TREE_CODE (tmp) == FUNCTION_DECL && DECL_VINDEX (tmp))
return true;
@ -988,6 +991,9 @@ has_nontrivial_methods (tree type)
if (!cpp_check (type, IS_TRIVIAL))
return true;
/* TYPE_METHODS is only set on the main variant. */
type = TYPE_MAIN_VARIANT (type);
/* If there are user-defined methods, they are deemed non-trivial. */
for (tmp = TYPE_METHODS (type); tmp; tmp = TREE_CHAIN (tmp))
if (!DECL_ARTIFICIAL (tmp))

View File

@ -1,3 +1,7 @@
2015-05-31 Eric Botcazou <ebotcazou@adacore.com>
* g++.dg/other/dump-ada-spec-4.C: New test.
2015-05-30 H.J. Lu <hongjiu.lu@intel.com>
* gcc.dg/alias-8.c: Fix dg-warning.

View File

@ -0,0 +1,18 @@
/* { dg-do compile } */
/* { dg-options "-fdump-ada-spec" } */
class Root {
public:
virtual void copyFrom(const Root& property) = 0;
};
class DT : Root {
virtual void copyFrom (const Root& property);
/* Although in C++ the type of argument Root is the parent type
"Root", in order to properly override this primitive in Ada
the profile of the generated function must be the derived
type "DT" */
};
/* { dg-final { scan-ada-spec "Root'Class" } } */
/* { dg-final { cleanup-ada-spec } } */