]> granicus.if.org Git - clang/commitdiff
Whoops. Don't fall through into the overload case when mangling a
authorJohn McCall <rjmccall@apple.com>
Tue, 17 Aug 2010 21:51:21 +0000 (21:51 +0000)
committerJohn McCall <rjmccall@apple.com>
Tue, 17 Aug 2010 21:51:21 +0000 (21:51 +0000)
dependent call expression.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@111300 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/Mangle.cpp
test/CodeGenCXX/mangle.cpp

index 7bdbabc8c07e1df76d9eca49690576e3d1f9d6c6..969670a28d7c225d8df9546e8fa19c332789b0da 100644 (file)
@@ -1546,8 +1546,8 @@ void CXXNameMangler::mangleIntegerLiteral(QualType T,
 
 void CXXNameMangler::mangleCalledExpression(const Expr *E, unsigned Arity) {
   if (E->getType() != getASTContext().OverloadTy)
-    mangleExpression(E);
-  // propagate arity to dependent overloads?
+    return mangleExpression(E);
+  // FIXME: propagate arity to dependent overloads?
 
   llvm::PointerIntPair<OverloadExpr*,1> R
     = OverloadExpr::find(const_cast<Expr*>(E));
index 4152dabc0b4cfaa839f0930ddca6926fdf377247..6636c926ae479e35d954cb27365259bcdc774664 100644 (file)
@@ -540,3 +540,20 @@ namespace test16 {
   static union { struct { union {}; }; };
   static union { struct { struct {}; }; };
 }
+
+// rdar://problem/8302148
+namespace test17 {
+  template <int N> struct A {};
+
+  struct B {
+    static int foo(void);
+  };
+
+  template <class T> A<sizeof(T::foo())> func(void);
+
+  // CHECK: define i32 @_ZN6test174testEv()
+  // CHECK: call {{.*}} @_ZN6test174funcINS_1BEEENS_1AIXszclsrT_3fooEEEEv()
+  int test() {
+    func<B>();  // { dg-error "sorry, unimplemented" }
+  }
+}