diff --git a/lib/spack/spack/compilers/clang.py b/lib/spack/spack/compilers/clang.py
index 6acb2f785c001b9ad6d321013204e6a68d5b5104..a748bd95bd3db8553de94fe83c9e138f752fd409 100644
--- a/lib/spack/spack/compilers/clang.py
+++ b/lib/spack/spack/compilers/clang.py
@@ -126,14 +126,14 @@ def pic_flag(self):
 
     @classmethod
     def default_version(cls, comp):
-        """The '--version' option works for clang compilers.
+        """The ``--version`` option works for clang compilers.
         On most platforms, output looks like this::
 
             clang version 3.1 (trunk 149096)
             Target: x86_64-unknown-linux-gnu
             Thread model: posix
 
-        On Mac OS X, it looks like this::
+        On macOS, it looks like this::
 
             Apple LLVM version 7.0.2 (clang-700.1.81)
             Target: x86_64-apple-darwin15.2.0
diff --git a/lib/spack/spack/compilers/gcc.py b/lib/spack/spack/compilers/gcc.py
index dacc95e8d43f80b8408a2fe73ee829d61bac480b..b97d8b2e243731fdd16f6d925103fab980a102cd 100644
--- a/lib/spack/spack/compilers/gcc.py
+++ b/lib/spack/spack/compilers/gcc.py
@@ -91,6 +91,21 @@ def pic_flag(self):
 
     @classmethod
     def default_version(cls, cc):
+        """Older versions of gcc use the ``-dumpversion`` option.
+        Output looks like this::
+
+            4.4.7
+
+        In GCC 7, this option was changed to only return the major
+        version of the compiler::
+
+            7
+
+        A new ``-dumpfullversion`` option was added that gives us
+        what we want::
+
+            7.2.0
+        """
         # Skip any gcc versions that are actually clang, like Apple's gcc.
         # Returning "unknown" makes them not detected by default.
         # Users can add these manually to compilers.yaml at their own risk.
@@ -104,10 +119,32 @@ def default_version(cls, cc):
 
     @classmethod
     def fc_version(cls, fc):
-        return get_compiler_version(
+        """Older versions of gfortran use the ``-dumpversion`` option.
+        Output looks like this::
+
+            GNU Fortran (GCC) 4.4.7 20120313 (Red Hat 4.4.7-18)
+            Copyright (C) 2010 Free Software Foundation, Inc.
+
+        or::
+
+            4.8.5
+
+        In GCC 7, this option was changed to only return the major
+        version of the compiler::
+
+            7
+
+        A new ``-dumpfullversion`` option was added that gives us
+        what we want::
+
+            7.2.0
+        """
+        version = get_compiler_version(
             fc, '-dumpversion',
-            # older gfortran versions don't have simple dumpversion output.
-            r'(?:GNU Fortran \(GCC\))?(\d+\.\d+(?:\.\d+)?)')
+            r'(?:GNU Fortran \(GCC\) )?([\d.]+)')
+        if version in ['7']:
+            version = get_compiler_version(fc, '-dumpfullversion')
+        return version
 
     @classmethod
     def f77_version(cls, f77):
diff --git a/lib/spack/spack/compilers/intel.py b/lib/spack/spack/compilers/intel.py
index 1601cf03d4df26cbe841b7703c0d1e167e5cfdad..b66436ecc0a56b0b50f6af34d660e0b61d52a3a8 100644
--- a/lib/spack/spack/compilers/intel.py
+++ b/lib/spack/spack/compilers/intel.py
@@ -82,7 +82,7 @@ def pic_flag(self):
 
     @classmethod
     def default_version(cls, comp):
-        """The '--version' option seems to be the most consistent one
+        """The ``--version`` option seems to be the most consistent one
         for intel compilers.  Output looks like this::
 
             icpc (ICC) 12.1.5 20120612
diff --git a/lib/spack/spack/compilers/nag.py b/lib/spack/spack/compilers/nag.py
index d84e4d6f8502e3e8a92b04224e5aade76cb8dbbc..20688b67ef8c0cbd607343dba9fbc5b82cc2486f 100644
--- a/lib/spack/spack/compilers/nag.py
+++ b/lib/spack/spack/compilers/nag.py
@@ -73,7 +73,7 @@ def fc_rpath_arg(self):
 
     @classmethod
     def default_version(self, comp):
-        """The '-V' option works for nag compilers.
+        """The ``-V`` option works for nag compilers.
         Output looks like this::
 
             NAG Fortran Compiler Release 6.0(Hibiya) Build 1037