Hi, I. When running test libgomp.c/appendix-a/a.29.1.c with '--target_board unix/-O2/-g', we run into this failure: ... FAIL: libgomp.c/appendix-a/a.29.1.c (test for excess errors) Excess errors: src/libgomp/testsuite/libgomp.c/appendix-a/a.29.1.c:6:1: error: type mismatch between an SSA_NAME and its symbol ... Without -g, the testcase passes. II. The scenario for the failure is as follows: At fnsplit, we split off f.part.0 from f, which at source level looks like this: ... void f (int n, int B[n][n], int C[]) { int D[2][2] = { 1, 2, 3, 4 }; int E[n][n]; assert (n >= 2); E[1][1] = 4; #pragma omp parallel firstprivate(B, C, D, E) { assert (sizeof (B) == sizeof (int (*)[n])); assert (sizeof (C) == sizeof (int *)); assert (sizeof (D) == 4 * sizeof (int)); assert (sizeof (E) == n * n * sizeof (int)); /* Private B and C have values of original B and C. */ assert (&B[1][1] == &A[1][1]); assert (&C[3] == &A[1][1]); assert (D[1][1] == 4); assert (E[1][1] == 4); } } ... The split introduces a debug_insn and ssa-name that references param B in f: ... # DEBUG D#4ptD.0 => B_3(D) .. And a debug_insn that references param B in f.part.0: ... # DEBUG D#7ptD.0 s=> BD.1846 ... At this point, the type of the ssa name and the param are the same. Then at inline, we decide to inline f.part.0 back into function f. For inlining, we rewrite the body of inlined function f.part.0. While rewriting the debug insn mentioned above, we hit this code for param B: ... if (TREE_CODE (*tp) != OMP_CLAUSE) TREE_TYPE (*tp) = remap_type (TREE_TYPE (*tp), id); ... And since it's a variable-sized type, the type of param is changed. Now the type of the ssa name and the param are no longer the same, and a bit later we hit the ICE. III. Attached patch fixes the ICE by handling PARM_DECL in remap_gimple_op_r. [ I'm not confident though this is the right fix ] Bootstrapped and reg-tested on x86_64. OK for trunk, or to be fixed otherwise? Thanks, - Tom