 -		  "narrowing conversion of %qE from %qT to %qT inside { }",
 -		  init, ftype, type);
 +	{
++	  int savederrorcount = errorcount;
 +	  global_dc->pedantic_errors = 1;
 +	  pedwarn (EXPR_LOC_OR_LOC (init, input_location), OPT_Wnarrowing,
-+		   "narrowing conversion of %qE from %qT to %qT inside { }",
-+		   init, ftype, type);
++		   "narrowing conversion of %qE from %qT to %qT "
++		   "inside { }", init, ftype, type);
++	  if (errorcount == savederrorcount)
++	    ok = true;
 +	  global_dc->pedantic_errors = flag_pedantic_errors;
 +	}
      }
  
    return cxx_dialect == cxx98 || ok; 
+@@ -1089,6 +1096,19 @@
+ 	      || TREE_CODE (type) == UNION_TYPE
+ 	      || TREE_CODE (type) == COMPLEX_TYPE);
+ 
++  /* "If T is a class type and the initializer list has a single
++     element of type cv U, where U is T or a class derived from T,
++     the object is initialized from that element."  */
++  if (cxx_dialect >= cxx11
++      && BRACE_ENCLOSED_INITIALIZER_P (init)
++      && CONSTRUCTOR_NELTS (init) == 1
++      && (CLASS_TYPE_P (type) || VECTOR_TYPE_P (type)))
++    {
++      tree elt = CONSTRUCTOR_ELT (init, 0)->value;
++      if (reference_related_p (type, TREE_TYPE (elt)))
++	init = elt;
++    }
++
+   if (BRACE_ENCLOSED_INITIALIZER_P (init)
+       && !TYPE_NON_AGGREGATE_CLASS (type))
+     return process_init_constructor (type, init, complain);
+--- a/gcc/fortran/check.c	2015-03-02 19:56:51.000000000 +0100
++++ b/gcc/fortran/check.c	2015-05-23 11:29:30.690530828 +0200
+@@ -6213,6 +6213,15 @@
+ bool
+ gfc_check_storage_size (gfc_expr *a, gfc_expr *kind)
+ {
++
++  if (a->expr_type == EXPR_NULL)
++    {
++      gfc_error ("Intrinsic function NULL at %L cannot be an actual "
++		 "argument to STORAGE_SIZE, because it returns a "
++		 "disassociated pointer", &a->where);
++      return false;
++    }
++
+   if (a->ts.type == BT_ASSUMED)
+     {
+       gfc_error ("%qs argument of %qs intrinsic at %L shall not be TYPE(*)",
 --- a/gcc/fortran/decl.c	2015-04-10 13:29:53.000000000 +0200
-+++ b/gcc/fortran/decl.c	2015-05-01 10:22:54.222520710 +0200
++++ b/gcc/fortran/decl.c	2015-05-23 11:30:42.240495466 +0200
 @@ -1404,9 +1404,7 @@
  		    }
  		  else if (init->expr_type == EXPR_ARRAY)

 	  *loc = x != pseudo_slots[i].mem ? x : copy_rtx (x);
 	}
       return;
--- a/gcc/tree-vrp.c	2015-02-17 16:32:05.000000000 +0100
+++ b/gcc/tree-vrp.c	2015-05-01 10:22:54.232520893 +0200
@@ -874,13 +874,18 @@
   if (is_new)
     {

 		{
 		  if (first_p)
--- a/gcc/lra-spills.c	2015-01-15 14:28:42.000000000 +0100
+++ b/gcc/lra-spills.c	2015-05-23 11:18:33.965634942 +0200
@@ -461,7 +461,7 @@
 	{
 	  rtx x = lra_eliminate_regs_1 (insn, pseudo_slots[i].mem,
