Author: hans
Date: Tue Aug 16 19:25:07 2016
New Revision: 278877

URL: http://llvm.org/viewvc/llvm-project?rev=278877&view=rev
Log:
Merging r277852:
------------------------------------------------------------------------
r277852 | dblaikie | 2016-08-05 12:03:01 -0700 (Fri, 05 Aug 2016) | 7 lines

PR26423: Assert on valid use of using declaration of a function with an 
undeduced auto return type

For now just disregard the using declaration in this case. Suboptimal,
but wiring up the ability to have declarations of functions that are
separate from their definition (we currently only do that for member
functions) and have differing return types (we don't have any support
for that) is more work than seems reasonable to at least fix this crash.
------------------------------------------------------------------------

Modified:
    cfe/branches/release_39/   (props changed)
    cfe/branches/release_39/lib/CodeGen/CGDebugInfo.cpp
    cfe/branches/release_39/test/CodeGenCXX/debug-info-cxx1y.cpp

Propchange: cfe/branches/release_39/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Aug 16 19:25:07 2016
@@ -1,4 +1,4 @@
 /cfe/branches/type-system-rewrite:134693-134817
-/cfe/trunk:275880,275967,276102,276350,276361,276473,276653,276716,276887,276891,276900,276979,276983,277095,277138,277141,277221,277307,277522,277743,277783,277796-277797,277866,277889,277900,278139,278156,278234-278235,278393,278395,278763
+/cfe/trunk:275880,275967,276102,276350,276361,276473,276653,276716,276887,276891,276900,276979,276983,277095,277138,277141,277221,277307,277522,277743,277783,277796-277797,277852,277866,277889,277900,278139,278156,278234-278235,278393,278395,278763
 /cfe/trunk/test:170344
 /cfe/trunk/test/SemaTemplate:126920

Modified: cfe/branches/release_39/lib/CodeGen/CGDebugInfo.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/branches/release_39/lib/CodeGen/CGDebugInfo.cpp?rev=278877&r1=278876&r2=278877&view=diff
==============================================================================
--- cfe/branches/release_39/lib/CodeGen/CGDebugInfo.cpp (original)
+++ cfe/branches/release_39/lib/CodeGen/CGDebugInfo.cpp Tue Aug 16 19:25:07 2016
@@ -3637,6 +3637,16 @@ void CGDebugInfo::EmitUsingDecl(const Us
   // Emitting one decl is sufficient - debuggers can detect that this is an
   // overloaded name & provide lookup for all the overloads.
   const UsingShadowDecl &USD = **UD.shadow_begin();
+
+  // FIXME: Skip functions with undeduced auto return type for now since we
+  // don't currently have the plumbing for separate declarations & definitions
+  // of free functions and mismatched types (auto in the declaration, concrete
+  // return type in the definition)
+  if (const auto *FD = dyn_cast<FunctionDecl>(USD.getUnderlyingDecl()))
+    if (const auto *AT =
+            FD->getType()->getAs<FunctionProtoType>()->getContainedAutoType())
+      if (AT->getDeducedType().isNull())
+        return;
   if (llvm::DINode *Target =
           getDeclarationOrDefinition(USD.getUnderlyingDecl()))
     DBuilder.createImportedDeclaration(

Modified: cfe/branches/release_39/test/CodeGenCXX/debug-info-cxx1y.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/branches/release_39/test/CodeGenCXX/debug-info-cxx1y.cpp?rev=278877&r1=278876&r2=278877&view=diff
==============================================================================
--- cfe/branches/release_39/test/CodeGenCXX/debug-info-cxx1y.cpp (original)
+++ cfe/branches/release_39/test/CodeGenCXX/debug-info-cxx1y.cpp Tue Aug 16 
19:25:07 2016
@@ -1,16 +1,25 @@
 // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm-only -std=c++14 
-emit-llvm -debug-info-kind=limited %s -o - | FileCheck %s
 
+// CHECK: imports: [[IMPS:![0-9]*]]
 // CHECK: [[EMPTY:![0-9]*]] = !{}
+
 // CHECK: [[FOO:![0-9]+]] = distinct !DICompositeType(tag: 
DW_TAG_structure_type, name: "foo",
 // CHECK-SAME:             elements: [[EMPTY]]
-// FIXME: The context of this definition should be the CU/file scope, not the 
class.
-// CHECK: !DISubprogram(name: "func", {{.*}} scope: [[FOO]]
+
+// CHECK: [[IMPS]] = !{[[IMP:![0-9]*]]}
+// CHECK: [[IMP]] = !DIImportedEntity(
+// CHECK-SAME: entity: [[F3:![0-9]*]]
+// CHECK: [[F3]] = distinct !DISubprogram(name: "f3"
 // CHECK-SAME:          type: [[SUBROUTINE_TYPE:![0-9]*]]
-// CHECK-SAME:          isDefinition: true
-// CHECK-SAME:          declaration: [[FUNC_DECL:![0-9]*]]
 // CHECK: [[SUBROUTINE_TYPE]] = !DISubroutineType(types: [[TYPE_LIST:![0-9]*]])
 // CHECK: [[TYPE_LIST]] = !{[[INT:![0-9]*]]}
 // CHECK: [[INT]] = !DIBasicType(name: "int"
+
+// FIXME: The context of this definition should be the CU/file scope, not the 
class.
+// CHECK: !DISubprogram(name: "func", {{.*}} scope: [[FOO]]
+// CHECK-SAME:          type: [[SUBROUTINE_TYPE]]
+// CHECK-SAME:          isDefinition: true
+// CHECK-SAME:          declaration: [[FUNC_DECL:![0-9]*]]
 // CHECK: [[FUNC_DECL]] = !DISubprogram(name: "func",
 // CHECK-SAME:                          scope: [[FOO]]
 // CHECK-SAME:                          type: [[SUBROUTINE_TYPE]]
@@ -25,3 +34,12 @@ foo f;
 auto foo::func() {
   return 1;
 }
+
+namespace ns {
+auto f2();
+auto f3() {
+  return 0;
+}
+}
+using ns::f2;
+using ns::f3;


_______________________________________________
llvm-branch-commits mailing list
[email protected]
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to