diff --git a/gcc/cfgexpand.cc b/gcc/cfgexpand.cc index 49b91827e83..bb33c1b939e 100644 --- a/gcc/cfgexpand.cc +++ b/gcc/cfgexpand.cc @@ -4575,6 +4575,10 @@ expand_debug_expr (tree exp) || SYMBOL_REF_DECL (XEXP (op0, 0)) != exp) return NULL; } + else if (VAR_P (exp) + && is_global_var (exp) + && symtab_node::get (exp) == NULL) + return NULL; else op0 = copy_rtx (op0); diff --git a/gcc/testsuite/gcc.dg/pr105630.c b/gcc/testsuite/gcc.dg/pr105630.c new file mode 100644 index 00000000000..c39ca7dda27 --- /dev/null +++ b/gcc/testsuite/gcc.dg/pr105630.c @@ -0,0 +1,22 @@ +/* PR debug/105630 */ +/* { dg-do compile { target pthread } } */ +/* { dg-options "-O1 -ftree-parallelize-loops=2 -fcompare-debug" } */ + +int m; +static int n; + +void +foo (void) +{ + int *arr[] = { &n, &n, &n }; + int unused = n; + + m = 0; +} + +void +bar (int *arr, int i) +{ + while (i < 1) + arr[i++] = 1; +}