middle-end/101824 - properly handle volatiles in nested fn lowering
When we build the COMPONENT_REF of a formerly volatile local off the FRAME decl we have to make sure to mark the COMPONENT_REF as TREE_THIS_VOLATILE. While the GIMPLE operand scanner looks at the FIELD_DECL this is not how volatile GENERIC refs work. 2021-08-09 Richard Biener <rguenther@suse.de> PR middle-end/101824 * tree-nested.c (get_frame_field): Mark the COMPONENT_REF as volatile in case the variable was. * gcc.dg/tree-ssa/pr101824.c: New testcase.
This commit is contained in:
parent
0631faf87a
commit
bb169406cd
19
gcc/testsuite/gcc.dg/tree-ssa/pr101824.c
Normal file
19
gcc/testsuite/gcc.dg/tree-ssa/pr101824.c
Normal file
@ -0,0 +1,19 @@
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O3 -fdump-tree-pcom-details -fdump-tree-optimized" } */
|
||||
|
||||
int main()
|
||||
{
|
||||
volatile int y;
|
||||
void bar()
|
||||
{
|
||||
__builtin_printf ("%d", y);
|
||||
}
|
||||
while (y)
|
||||
;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Make sure the load from y is correctly interpreted as volatile, even
|
||||
when going through FRAME. */
|
||||
/* { dg-final { scan-tree-dump-not "Executing predictive commoning" "pcom" } } */
|
||||
/* { dg-final { scan-tree-dump " ={v} FRAME" "optimized" } } */
|
@ -1033,6 +1033,7 @@ get_frame_field (struct nesting_info *info, tree target_context,
|
||||
}
|
||||
|
||||
x = build3 (COMPONENT_REF, TREE_TYPE (field), x, field, NULL_TREE);
|
||||
TREE_THIS_VOLATILE (x) = TREE_THIS_VOLATILE (field);
|
||||
return x;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user