CGDebugInfo: At the end of EmitFunctionStart, Initialize PrevLoc to the
location that the next call emitLocation() would default to. Otherwise
setLocation() may wrongly believe that the current source file didn't
change, when in fact it did.

llvm-svn: 204517
diff --git a/clang/test/CodeGenCXX/linetable-fnbegin.cpp b/clang/test/CodeGenCXX/linetable-fnbegin.cpp
new file mode 100644
index 0000000..8f8e4c9
--- /dev/null
+++ b/clang/test/CodeGenCXX/linetable-fnbegin.cpp
@@ -0,0 +1,24 @@
+// RUN: %clang_cc1 -emit-llvm -g %s -o - | FileCheck %s
+// Test that the line table info for Foo<T>::bar() is pointing to the
+// right header file.
+// CHECK: define{{.*}} @_ZN3FooIiE3barEv
+// CHECK-NOT: define
+// CHECK: ret {{.*}}, !dbg ![[DBG:.*]]
+// CHECK: ![[HPP:.*]] = metadata !{metadata !"./template.hpp",
+// CHECK:![[BLOCK:.*]] = metadata !{{{.*}}, metadata ![[HPP]], {{.*}}} ; [ DW_TAG_lexical_block ]
+// CHECK: [[DBG]] = metadata !{i32 23, i32 0, metadata ![[BLOCK]], null}
+# 1 "./template.h" 1
+template <typename T>
+class Foo {
+public:
+ int bar();
+};
+# 21 "./template.hpp"
+template <typename T>
+int Foo<T>::bar() {
+}
+int main (int argc, const char * argv[])
+{
+  Foo<int> f;
+  f.bar();
+}