From: Marek Polacek Date: Thu, 16 Jul 2015 13:33:12 +0000 (+0000) Subject: re PR c++/66748 (Crash with abi_tag attribute) X-Git-Tag: releases/gcc-4.9.4~699 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=92ecebc54f873ced6af277a3c80265d7e5a4c639;p=thirdparty%2Fgcc.git re PR c++/66748 (Crash with abi_tag attribute) PR c++/66748 * tree.c (handle_abi_tag_attribute): Check for CLASS_TYPE_P before accessing TYPE_LANG_SPECIFIC node. * g++.dg/abi/abi-tag15.C: New test. From-SVN: r225878 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 0f1499d4f29e..213e76dc1b2d 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,12 @@ +2015-07-16 Marek Polacek + + 2015-07-08 Marek Polacek + Backported from mainline + + PR c++/66748 + * tree.c (handle_abi_tag_attribute): Check for CLASS_TYPE_P before + accessing TYPE_LANG_SPECIFIC node. + 2015-06-26 Release Manager * GCC 4.9.3 released. diff --git a/gcc/cp/tree.c b/gcc/cp/tree.c index 11c352143d45..0560781bae22 100644 --- a/gcc/cp/tree.c +++ b/gcc/cp/tree.c @@ -3375,13 +3375,15 @@ handle_abi_tag_attribute (tree* node, tree name, tree args, name, *node); goto fail; } - else if (CLASSTYPE_TEMPLATE_INSTANTIATION (*node)) + else if (CLASS_TYPE_P (*node) + && CLASSTYPE_TEMPLATE_INSTANTIATION (*node)) { warning (OPT_Wattributes, "ignoring %qE attribute applied to " "template instantiation %qT", name, *node); goto fail; } - else if (CLASSTYPE_TEMPLATE_SPECIALIZATION (*node)) + else if (CLASS_TYPE_P (*node) + && CLASSTYPE_TEMPLATE_SPECIALIZATION (*node)) { warning (OPT_Wattributes, "ignoring %qE attribute applied to " "template specialization %qT", name, *node); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index adf39131ba5f..043b4b728211 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2015-07-16 Marek Polacek + + 2015-07-08 Marek Polacek + Backported from mainline + + PR c++/66748 + * g++.dg/abi/abi-tag15.C: New test. + 2015-07-10 Mantas Mikaitis * gcc.target/arm/macro_defs0.c: New test. diff --git a/gcc/testsuite/g++.dg/abi/abi-tag15.C b/gcc/testsuite/g++.dg/abi/abi-tag15.C new file mode 100644 index 000000000000..bfda3a279ef0 --- /dev/null +++ b/gcc/testsuite/g++.dg/abi/abi-tag15.C @@ -0,0 +1,3 @@ +// PR c++/66748 + +enum __attribute__((abi_tag("foo"))) E {}; // { dg-error "redeclaration of" }