diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2018-01-18 17:11:43 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2018-01-18 17:11:43 +0000 |
commit | 50b27938f70819e2453bcd72a80a6a4c2b9e2fcb (patch) | |
tree | c19191d92f8a1319273979ed172ebc3d4d215ebf /gcc | |
parent | 9f7b87cad7c110dc656b4f201782819633dae2cf (diff) | |
download | gcc-50b27938f70819e2453bcd72a80a6a4c2b9e2fcb.zip gcc-50b27938f70819e2453bcd72a80a6a4c2b9e2fcb.tar.gz gcc-50b27938f70819e2453bcd72a80a6a4c2b9e2fcb.tar.bz2 |
re PR c++/81013 (ICE with invalid union in class hierarchy)
/cp
2018-01-18 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/81013
* decl.c (xref_basetypes): Early return upon error about derived
union.
/testsuite
2018-01-18 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/81013
* g++.dg/inherit/union3.C: New.
From-SVN: r256856
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/decl.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/inherit/union3.C | 16 |
4 files changed, 31 insertions, 1 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 0cacefa..2de9dcb 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2018-01-18 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/81013 + * decl.c (xref_basetypes): Early return upon error about derived + union. + 2018-01-18 Nathan Sidwell <nathan@acm.org> PR c++/83160 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 12022a2..32ac81f 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -13801,7 +13801,10 @@ xref_basetypes (tree ref, tree base_list) CLASSTYPE_NON_LAYOUT_POD_P (ref) = true; if (TREE_CODE (ref) == UNION_TYPE) - error ("derived union %qT invalid", ref); + { + error ("derived union %qT invalid", ref); + return; + } } if (max_bases > 1) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index f9674a9..3110c48 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-01-18 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/81013 + * g++.dg/inherit/union3.C: New. + 2018-01-18 Christophe Lyon <christophe.lyon@linaro.org> * gcc.dg/rtl/arm/stl-cond.c: Enable on arm*. diff --git a/gcc/testsuite/g++.dg/inherit/union3.C b/gcc/testsuite/g++.dg/inherit/union3.C new file mode 100644 index 0000000..c13b397 --- /dev/null +++ b/gcc/testsuite/g++.dg/inherit/union3.C @@ -0,0 +1,16 @@ +// PR c++/81013 + +struct A +{ + virtual void foo() const; +}; + +union B : A // { dg-error "derived union 'B' invalid" } +{ + void foo() const; +}; + +void bar(const B& b) +{ + b.foo(); +} |