@@ -73,6 +73,9 @@ static tree handle_randomize_layout_attr(tree *node, tree name, tree args, int f
73
73
74
74
if (TYPE_P (* node )) {
75
75
type = * node ;
76
+ } else if (TREE_CODE (* node ) == FIELD_DECL ) {
77
+ * no_add_attrs = false;
78
+ return NULL_TREE ;
76
79
} else {
77
80
gcc_assert (TREE_CODE (* node ) == TYPE_DECL );
78
81
type = TREE_TYPE (* node );
@@ -348,15 +351,14 @@ static int relayout_struct(tree type)
348
351
TREE_CHAIN (newtree [i ]) = newtree [i + 1 ];
349
352
TREE_CHAIN (newtree [num_fields - 1 ]) = NULL_TREE ;
350
353
354
+ add_type_attr (type , "randomize_performed" , NULL_TREE );
355
+ add_type_attr (type , "designated_init" , NULL_TREE );
356
+ if (has_flexarray )
357
+ add_type_attr (type , "has_flexarray" , NULL_TREE );
358
+
351
359
main_variant = TYPE_MAIN_VARIANT (type );
352
- for (variant = main_variant ; variant ; variant = TYPE_NEXT_VARIANT (variant )) {
360
+ for (variant = main_variant ; variant ; variant = TYPE_NEXT_VARIANT (variant ))
353
361
TYPE_FIELDS (variant ) = newtree [0 ];
354
- TYPE_ATTRIBUTES (variant ) = copy_list (TYPE_ATTRIBUTES (variant ));
355
- TYPE_ATTRIBUTES (variant ) = tree_cons (get_identifier ("randomize_performed" ), NULL_TREE , TYPE_ATTRIBUTES (variant ));
356
- TYPE_ATTRIBUTES (variant ) = tree_cons (get_identifier ("designated_init" ), NULL_TREE , TYPE_ATTRIBUTES (variant ));
357
- if (has_flexarray )
358
- TYPE_ATTRIBUTES (type ) = tree_cons (get_identifier ("has_flexarray" ), NULL_TREE , TYPE_ATTRIBUTES (type ));
359
- }
360
362
361
363
/*
362
364
* force a re-layout of the main variant
@@ -424,10 +426,8 @@ static void randomize_type(tree type)
424
426
if (lookup_attribute ("randomize_layout" , TYPE_ATTRIBUTES (TYPE_MAIN_VARIANT (type ))) || is_pure_ops_struct (type ))
425
427
relayout_struct (type );
426
428
427
- for (variant = TYPE_MAIN_VARIANT (type ); variant ; variant = TYPE_NEXT_VARIANT (variant )) {
428
- TYPE_ATTRIBUTES (type ) = copy_list (TYPE_ATTRIBUTES (type ));
429
- TYPE_ATTRIBUTES (type ) = tree_cons (get_identifier ("randomize_considered" ), NULL_TREE , TYPE_ATTRIBUTES (type ));
430
- }
429
+ add_type_attr (type , "randomize_considered" , NULL_TREE );
430
+
431
431
#ifdef __DEBUG_PLUGIN
432
432
fprintf (stderr , "Marking randomize_considered on struct %s\n" , ORIG_TYPE_NAME (type ));
433
433
#ifdef __DEBUG_VERBOSE
0 commit comments