diff --git a/llvm-pretty-bc-parser.cabal b/llvm-pretty-bc-parser.cabal
--- a/llvm-pretty-bc-parser.cabal
+++ b/llvm-pretty-bc-parser.cabal
@@ -1,5 +1,5 @@
 Name:                llvm-pretty-bc-parser
-Version:             0.2.0.0
+Version:             0.2.1.0
 License:             BSD3
 License-file:        LICENSE
 Author:              Trevor Elliott <trevor@galois.com>
diff --git a/src/Data/LLVM/BitCode/IR/Metadata.hs b/src/Data/LLVM/BitCode/IR/Metadata.hs
--- a/src/Data/LLVM/BitCode/IR/Metadata.hs
+++ b/src/Data/LLVM/BitCode/IR/Metadata.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE RecordWildCards #-}
 {-# LANGUAGE ViewPatterns #-}
 {-# LANGUAGE RecursiveDo #-}
 
@@ -57,6 +58,11 @@
 addString :: String -> MetadataTable -> MetadataTable
 addString str = snd . addMetadata (ValMdString str)
 
+addLoc :: Bool -> PDebugLoc -> MetadataTable -> MetadataTable
+addLoc isDistinct loc mt = nameNode False isDistinct ix mt'
+  where
+  (ix,mt') = addMetadata (ValMdLoc loc) mt
+
 -- | Add a new node, that might be distinct.
 addNode :: Bool -> [Maybe PValMd] -> MetadataTable -> MetadataTable
 addNode isDistinct vals mt = nameNode False isDistinct ix mt'
@@ -233,7 +239,20 @@
 
   -- [distinct, line, col, scope, inlined-at?] 
   7 -> label "METADATA_LOCATION" $ do
-    fail "not implemented"
+    cxt       <- getContext
+    let field = parseField r
+    distinct  <- field 0 numeric
+    dlLine    <- field 1 numeric
+    dlCol     <- field 2 numeric
+    scopeId   <- field 3 numeric
+    iaIx      <- field 4 numeric
+    let dlScope          = mdForwardRef cxt mt scopeId
+        dlIA | iaIx > 0  = Just (mdForwardRef cxt mt (iaIx - 1))
+             | otherwise = Nothing
+        isDistinct       = distinct /= (0 :: Int)
+        loc              = DebugLoc { .. }
+    return $! updateMetadataTable (addLoc isDistinct loc) pm
+
 
   -- [n x (type num, value num)]
   8 -> label "METADATA_OLD_NODE" (parseMetadataOldNode False vt mt r pm)
