Message ID | 5550ABEC.8050909@sfr.fr |
---|---|
State | New |
Headers | show |
Hi Mikael, > To be honest, both patches look fragile to me. Yours because it leaves > gfc_current_ns to its value, leaving the door open to other problems. > Mine, well, because it's playing with a global variable, with the > possible side-effects this could have. > However, without a better idea, I'm OK with either patch (or both). I have found that playing around with gfc_current_ns can be quite dangerous and can cause regressions in unexpected places. Specifically, I tried wrapping the callers to create_var and insert_block in save/restore wrappers for gfc_current_ns, and that caused quite a few very strange regressions. So, working on the theory that a fix that may leave unknown problems open is better than a fix that may introduce unknown problems, and in order to get the regression out of the way, I have committed the patch preventing multiple resolution of an array spec. Maybe we should open a PR for auditing the use of gfc_current_ns in front-end optmiization. Regards Thomas
Le 12/05/2015 08:43, Thomas Koenig a écrit : > Hi Mikael, > > >> To be honest, both patches look fragile to me. Yours because it leaves >> gfc_current_ns to its value, leaving the door open to other problems. >> Mine, well, because it's playing with a global variable, with the >> possible side-effects this could have. >> However, without a better idea, I'm OK with either patch (or both). > > I have found that playing around with gfc_current_ns can be quite > dangerous and can cause regressions in unexpected places. Specifically, > I tried wrapping the callers to create_var and insert_block in > save/restore wrappers for gfc_current_ns, and that caused quite > a few very strange regressions. > > So, working on the theory that a fix that may leave unknown problems > open is better than a fix that may introduce unknown problems, and > in order to get the regression out of the way, I have committed the > patch preventing multiple resolution of an array spec. > thanks.
Index: frontend-passes.c =================================================================== --- frontend-passes.c (révision 223002) +++ frontend-passes.c (copie de travail) @@ -581,6 +581,9 @@ insert_block () else ns = inserted_block->ext.block.ns; + /* From now on, everything will happen in the inserted block. */ + gfc_current_ns = ns; + return ns; }