r188622 - DebugInfo: don't require full definitions for friend classes

David Blaikie dblaikie at gmail.com
Sat Aug 17 21:50:23 PDT 2013


Author: dblaikie
Date: Sat Aug 17 23:50:23 2013
New Revision: 188622

URL: http://llvm.org/viewvc/llvm-project?rev=188622&view=rev
Log:
DebugInfo: don't require full definitions for friend classes

Fixes a crash-on-valid introduced by r188486 (which should've occurred
earlier but for a blatant bug where calling createFwdDecl from the
requireCompleteType callback was useless under -flimit-debug-info and we
were just getting lucky with other later callbacks requiring the type
anyway).

Modified:
    cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
    cfe/trunk/test/CodeGenCXX/debug-info-friend.cpp

Modified: cfe/trunk/lib/CodeGen/CGDebugInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGDebugInfo.cpp?rev=188622&r1=188621&r2=188622&view=diff
==============================================================================
--- cfe/trunk/lib/CodeGen/CGDebugInfo.cpp (original)
+++ cfe/trunk/lib/CodeGen/CGDebugInfo.cpp Sat Aug 17 23:50:23 2013
@@ -1136,9 +1136,8 @@ CollectCXXFriends(const CXXRecordDecl *R
     if ((*BI)->isUnsupportedFriend())
       continue;
     if (TypeSourceInfo *TInfo = (*BI)->getFriendType())
-      EltTys.push_back(DBuilder.createFriend(RecordTy,
-                                             getOrCreateType(TInfo->getType(),
-                                                             Unit)));
+      EltTys.push_back(DBuilder.createFriend(
+          RecordTy, getOrCreateType(TInfo->getType(), Unit, true)));
   }
 }
 

Modified: cfe/trunk/test/CodeGenCXX/debug-info-friend.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/debug-info-friend.cpp?rev=188622&r1=188621&r2=188622&view=diff
==============================================================================
--- cfe/trunk/test/CodeGenCXX/debug-info-friend.cpp (original)
+++ cfe/trunk/test/CodeGenCXX/debug-info-friend.cpp Sat Aug 17 23:50:23 2013
@@ -1,11 +1,17 @@
-// RUN: %clang -fverbose-asm -S -g %s -o - | grep DW_TAG_friend
+// RUN: %clang -emit-llvm -S -g %s -o - | FileCheck %s
 
 class MyFriend;
 
-class SomeClass
-{
- friend class MyFriend;
+class SomeClass {
+  friend class MyFriend;
+  typedef int SomeType;
 };
 
-SomeClass sc;
+SomeClass *x;
 
+struct MyFriend {
+  static void func(SomeClass::SomeType) {
+  }
+};
+
+// CHECK: DW_TAG_friend





More information about the cfe-commits mailing list