Index: tree.c
===================================================================
--- tree.c	(revision 182028)
+++ tree.c	(working copy)
@@ -9442,6 +9442,7 @@ void
 build_common_builtin_nodes (void)
 {
   tree tmp, ftype;
+  int ecf_flags;
 
   if (!builtin_decl_explicit_p (BUILT_IN_MEMCPY)
       || !builtin_decl_explicit_p (BUILT_IN_MEMMOVE))
@@ -9594,9 +9595,12 @@ build_common_builtin_nodes (void)
      its value in the landing pad.  */
   ftype = build_function_type_list (ptr_type_node,
 				    integer_type_node, NULL_TREE);
+  ecf_flags = ECF_PURE | ECF_NOTHROW | ECF_LEAF;
+  /* Only use TM_PURE if we we have TM language support.  */
+  if (builtin_decl_explicit_p (BUILT_IN_TM_LOAD_1))
+    ecf_flags |= ECF_TM_PURE;
   local_define_builtin ("__builtin_eh_pointer", ftype, BUILT_IN_EH_POINTER,
-			"__builtin_eh_pointer",
-			ECF_PURE | ECF_NOTHROW | ECF_LEAF | ECF_TM_PURE);
+			"__builtin_eh_pointer", ecf_flags);
 
   tmp = lang_hooks.types.type_for_mode (targetm.eh_return_filter_mode (), 0);
   ftype = build_function_type_list (tmp, integer_type_node, NULL_TREE);
Index: testsuite/gfortran.dg/trans-mem-skel.f90
===================================================================
--- testsuite/gfortran.dg/trans-mem-skel.f90	(revision 0)
+++ testsuite/gfortran.dg/trans-mem-skel.f90	(revision 0)
@@ -0,0 +1,5 @@
+! { dg-do compile }
+! { dg-options "-fgnu-tm" }
+program foo
+      real x
+end program foo
Index: config/i386/i386.c
===================================================================
--- config/i386/i386.c	(revision 182028)
+++ config/i386/i386.c	(working copy)
@@ -27023,6 +27023,11 @@ ix86_init_tm_builtins (void)
   if (!flag_tm)
     return;
 
+  /* If there are no builtins defined, we must be compiling in a
+     language without trans-mem support.  */
+  if (!builtin_decl_explicit_p (BUILT_IN_TM_LOAD_1))
+    return;
+
   /* Use whatever attributes a normal TM load has.  */
   decl = builtin_decl_explicit (BUILT_IN_TM_LOAD_1);
   attrs_load = DECL_ATTRIBUTES (decl);
