diff --git a/loopy/frontend/fortran/__init__.py b/loopy/frontend/fortran/__init__.py
index 2626069a0551a7e11c7b8703965423be8011860c..efdd07e8ab1f0ab32461f67c12920694b8eb6a26 100644
--- a/loopy/frontend/fortran/__init__.py
+++ b/loopy/frontend/fortran/__init__.py
@@ -82,6 +82,9 @@ def _extract_loopy_lines(source):
                 raise LoopyError("non-comment source line in loopy block")
 
             remaining_lines.append(l)
+
+            # Preserves line numbers in loopy code, for debuggability
+            loopy_lines.append("# "+l)
             continue
 
         cmt = comment_match.group(1)
@@ -103,6 +106,9 @@ def _extract_loopy_lines(source):
         else:
             remaining_lines.append(l)
 
+            # Preserves line numbers in loopy code, for debuggability
+            loopy_lines.append("# "+l)
+
     return "\n".join(remaining_lines), "\n".join(loopy_lines)
 
 
diff --git a/loopy/frontend/fortran/translator.py b/loopy/frontend/fortran/translator.py
index eaa2de68166644799b873398e0804fe10ceac772..97005cab607f1c1db5341ca3e29bd80ec7e761c1 100644
--- a/loopy/frontend/fortran/translator.py
+++ b/loopy/frontend/fortran/translator.py
@@ -300,16 +300,18 @@ class F2LoopyTranslator(FTreeWalkerBase):
     TYPE_MAP = {
             ("real", "4"): np.float32,
             ("real", "8"): np.float64,
-            ("real", "16"): np.float128,
 
             ("complex", "8"): np.complex64,
             ("complex", "16"): np.complex128,
-            ("complex", "32"): np.complex256,
 
             ("integer", ""): np.int32,
             ("integer", "4"): np.int32,
             ("integer", "8"): np.int64,
             }
+    if hasattr(np, "float128"):
+        TYPE_MAP[("real", "16")] = np.float128
+    if hasattr(np, "complex256"):
+        TYPE_MAP[("complex", "32")] = np.complex256
 
     def dtype_from_stmt(self, stmt):
         length, kind = stmt.selector