[pushed] c++: attribute on dtor in template [PR108795]
Checks
Commit Message
Tested x86_64-pc-linux-gnu, applying to trunk.
-- 8< --
Since r7-2549 we were throwing away the explicit C:: when we found that ~C
has an attribute that we treat as making its type dependent.
PR c++/108795
gcc/cp/ChangeLog:
* semantics.cc (finish_id_expression_1): Check scope before
returning id_expression.
gcc/testsuite/ChangeLog:
* g++.dg/ext/attr-tsafe1.C: New test.
---
gcc/cp/semantics.cc | 1 +
gcc/testsuite/g++.dg/ext/attr-tsafe1.C | 14 ++++++++++++++
2 files changed, 15 insertions(+)
create mode 100644 gcc/testsuite/g++.dg/ext/attr-tsafe1.C
base-commit: d3a6f174543816600b1f472997d492088e4e396a
@@ -4238,6 +4238,7 @@ finish_id_expression_1 (tree id_expression,
: CP_ID_KIND_UNQUALIFIED)));
if (dependent_p
+ && !scope
&& DECL_P (decl)
&& any_dependent_type_attributes_p (DECL_ATTRIBUTES (decl)))
/* Dependent type attributes on the decl mean that the TREE_TYPE is
new file mode 100644
@@ -0,0 +1,14 @@
+// PR c++/108795
+
+template <typename T> void g (T x)
+{
+ struct C
+ {
+ __attribute__((transaction_safe)) ~C();
+ };
+ C::~C(); // { dg-error "" }
+}
+void f ()
+{
+ g (5);
+}