Index: gcc/testsuite/gfortran.fortran-torture/compile/pr39937.f
===================================================================
--- gcc/testsuite/gfortran.fortran-torture/compile/pr39937.f	(revision 189929)
+++ gcc/testsuite/gfortran.fortran-torture/compile/pr39937.f	(working copy)
@@ -4,8 +4,8 @@
      $                   WORK( * )
       DOUBLE PRECISION   X( 2, 2 )
       CALL DLALN2( .FALSE., 1, 1, SMIN, ONE, T( J, J ),
-     $                            ZERO, X, 2, SCALE, XNORM, IERR )
-      CALL DSCAL( KI, SCALE, WORK( 1+N ), 1 )
+     $                            ZERO, X, 2, SCA, XNORM, IERR )
+      CALL DSCAL( KI, SCA, WORK( 1+N ), 1 )
       DO 90 J = KI - 2, 1, -1
       IF( J.GT.JNXT )
      $               GO TO 90
Index: gcc/fortran/resolve.c
===================================================================
--- gcc/fortran/resolve.c	(revision 189929)
+++ gcc/fortran/resolve.c	(working copy)
@@ -12471,16 +12471,22 @@ resolve_symbol (gfc_symbol *sym)
 	    }
 	}
 
-      /* Otherwise give it a flavor according to such attributes as
-	 it has.  */
-      if (sym->attr.flavor == FL_UNKNOWN && sym->attr.external == 0
-	  && sym->attr.intrinsic == 0)
-	sym->attr.flavor = FL_VARIABLE;
-      else if (sym->attr.flavor == FL_UNKNOWN)
+      if (sym->attr.flavor == FL_UNKNOWN)
 	{
-	  sym->attr.flavor = FL_PROCEDURE;
-	  if (sym->attr.dimension)
-	    sym->attr.function = 1;
+	  /* Check for intrinsics.  */
+	  if (sym->ts.type == BT_UNKNOWN && !sym->attr.in_common
+	      && (gfc_is_intrinsic (sym, 0, gfc_current_locus)
+		  || gfc_is_intrinsic (sym, 1, gfc_current_locus)))
+	    sym->attr.intrinsic = 1;
+	  /* Give it a flavor according to its attributes.  */
+	  if (sym->attr.external || sym->attr.intrinsic)
+	    {
+	      sym->attr.flavor = FL_PROCEDURE;
+	      if (sym->attr.dimension)
+		sym->attr.function = 1;
+	    }
+	  else
+	    sym->attr.flavor = FL_VARIABLE;
 	}
     }
 
Index: gcc/fortran/primary.c
===================================================================
--- gcc/fortran/primary.c	(revision 189929)
+++ gcc/fortran/primary.c	(working copy)
@@ -2843,9 +2843,6 @@ gfc_match_rvalue (gfc_expr **result)
 	    /* Parse functions returning a procptr.  */
 	    goto function0;
 
-	  if (gfc_is_intrinsic (sym, 0, gfc_current_locus)
-	      || gfc_is_intrinsic (sym, 1, gfc_current_locus))
-	    sym->attr.intrinsic = 1;
 	  e = gfc_get_expr ();
 	  e->expr_type = EXPR_VARIABLE;
 	  e->symtree = symtree;
