mirror of git://gcc.gnu.org/git/gcc.git
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:
parent
255a48d641
commit
1edfb384e8
|
|
@ -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>
|
2015-05-25 Marek Polacek <polacek@redhat.com>
|
||||||
|
|
||||||
* c-ubsan.c (ubsan_instrument_shift): Use type0.
|
* c-ubsan.c (ubsan_instrument_shift): Use type0.
|
||||||
|
|
|
||||||
|
|
@ -960,6 +960,9 @@ is_tagged_type (const_tree type)
|
||||||
if (!type || !RECORD_OR_UNION_TYPE_P (type))
|
if (!type || !RECORD_OR_UNION_TYPE_P (type))
|
||||||
return false;
|
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))
|
for (tmp = TYPE_METHODS (type); tmp; tmp = TREE_CHAIN (tmp))
|
||||||
if (TREE_CODE (tmp) == FUNCTION_DECL && DECL_VINDEX (tmp))
|
if (TREE_CODE (tmp) == FUNCTION_DECL && DECL_VINDEX (tmp))
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -988,6 +991,9 @@ has_nontrivial_methods (tree type)
|
||||||
if (!cpp_check (type, IS_TRIVIAL))
|
if (!cpp_check (type, IS_TRIVIAL))
|
||||||
return true;
|
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. */
|
/* If there are user-defined methods, they are deemed non-trivial. */
|
||||||
for (tmp = TYPE_METHODS (type); tmp; tmp = TREE_CHAIN (tmp))
|
for (tmp = TYPE_METHODS (type); tmp; tmp = TREE_CHAIN (tmp))
|
||||||
if (!DECL_ARTIFICIAL (tmp))
|
if (!DECL_ARTIFICIAL (tmp))
|
||||||
|
|
|
||||||
|
|
@ -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>
|
2015-05-30 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
* gcc.dg/alias-8.c: Fix dg-warning.
|
* gcc.dg/alias-8.c: Fix dg-warning.
|
||||||
|
|
|
||||||
|
|
@ -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 } } */
|
||||||
Loading…
Reference in New Issue