There's a bug with ACC DECLARE clauses involving VLA variables that causes lower_omp_target to thow an ICE on VLA decls. The problem occurred because those clauses are never gimplified. This patch resolves that ICE by teaching gimplify_oacc_declare how to gimplify them. It turns out that gimplify_adjust_omp_clauses removes the gimplify_omp_ctx created by gimplify_scan_omp_clauses. To workaround that problem, I just taught gimplify_oacc_declare to ensure that each gimplified decl has an "oacc declare target" attribute. This seems like a reasonable solution because acc declare is an executable directive, and hence really doesn't have a normal scope like ACC DATA. The declare code does install destructors to unmap those clauses (except for those vars which were ACC DECLARE CREATE'd -- but that's a problem for patch), but that doesn't depend on the gimplify omp ctx. The only other major thing that had to be updated was oacc_default_clause, because omp_notice_variable no longer has a gimple omp ctx to inspect for existing variables. But that's where the "oacc declare target" attribute comes into play. Is this patch OK for trunk? Cesar