mirror of
https://gcc.gnu.org/git/gcc.git
synced 2026-02-22 03:46:53 -05:00
free-lang-data: Remove C++ annotations [PR123837]
As mentioned in the PR and reproduced on the testcase, we ICE during LTO streaming because C++ annotation arguments can contain trees LTO streaming doesn't handle. We don't really need annotations when the FE is done with the whole TU, annotations are always TU local and not exposed to the rest and used in consteval only stuff, so the following patch just removes all annotations at free-lang-data time. 2026-01-28 Jakub Jelinek <jakub@redhat.com> PR c++/123837 * ipa-free-lang-data.cc (find_decls_types_r): Remove C++ annotations from {DECL,TYPE}_ATRIBUTES. * g++.dg/reflect/annotations9.C: New test.
This commit is contained in:
committed by
Jakub Jelinek
parent
5957ce932f
commit
5c2a5bfcd4
@@ -730,6 +730,10 @@ find_decls_types_r (tree *tp, int *ws, void *data)
|
||||
if (TREE_CODE (t) != TYPE_DECL)
|
||||
fld_worklist_push (DECL_INITIAL (t), fld);
|
||||
|
||||
/* Remove C++ annotations, those aren't needed for LTO and contain
|
||||
trees we sometimes can't stream. */
|
||||
DECL_ATTRIBUTES (t)
|
||||
= remove_attribute ("annotation ", DECL_ATTRIBUTES (t));
|
||||
fld_worklist_push (DECL_ATTRIBUTES (t), fld);
|
||||
fld_worklist_push (DECL_ABSTRACT_ORIGIN (t), fld);
|
||||
|
||||
@@ -763,6 +767,10 @@ find_decls_types_r (tree *tp, int *ws, void *data)
|
||||
fld_worklist_push (TYPE_CACHED_VALUES (t), fld);
|
||||
fld_worklist_push (TYPE_SIZE (t), fld);
|
||||
fld_worklist_push (TYPE_SIZE_UNIT (t), fld);
|
||||
/* Remove C++ annotations, those aren't needed for LTO and contain
|
||||
trees we sometimes can't stream. */
|
||||
TYPE_ATTRIBUTES (t)
|
||||
= remove_attribute ("annotation ", TYPE_ATTRIBUTES (t));
|
||||
fld_worklist_push (TYPE_ATTRIBUTES (t), fld);
|
||||
fld_worklist_push (TYPE_POINTER_TO (t), fld);
|
||||
fld_worklist_push (TYPE_REFERENCE_TO (t), fld);
|
||||
|
||||
14
gcc/testsuite/g++.dg/reflect/annotations9.C
Normal file
14
gcc/testsuite/g++.dg/reflect/annotations9.C
Normal file
@@ -0,0 +1,14 @@
|
||||
// PR c++/123837
|
||||
// { dg-do compile { target c++26 } }
|
||||
// { dg-additional-options "-freflection" }
|
||||
// { dg-additional-options "-flto" { target lto } }
|
||||
|
||||
struct A {};
|
||||
[[=A {}]] int a {};
|
||||
struct [[=A {}]] B { int b; };
|
||||
B b {};
|
||||
|
||||
int
|
||||
main ()
|
||||
{
|
||||
}
|
||||
Reference in New Issue
Block a user