================
Comment at: lib/AST/Expr.cpp:501
@@ -500,3 +500,3 @@
       Decl = Pattern;
     const FunctionType *AFT = Decl->getType()->getAs<FunctionType>();
     const FunctionProtoType *FT = nullptr;
----------------
The best fix (for the immediate issue) would probably be to use the declared 
type rather than the actual type: use `Decl->getTypeSourceInfo()->getType()` 
rather than `Decl->getType()` here.

As Reid points out, we may want to just stash the string into the 
`PredefinedExpr` object when we create it, rather than recomputing it each time.

================
Comment at: lib/AST/Expr.cpp:606
@@ -604,3 +605,3 @@
          cast<CXXMethodDecl>(FD)->getParent()->isLambda()) ||
         (FT && FT->getReturnType()->getAs<AutoType>()))
       Proto = "auto " + Proto;
----------------
Remove the existing (broken) handling for this case.

================
Comment at: test/CodeGenCXX/predefined-expr-cxx14.cpp:3-4
@@ +2,4 @@
+
+// CHECK-DAG: private unnamed_addr constant [15 x i8] c"externFunction\00"
+// CHECK-DAG: private unnamed_addr constant [26 x i8] c"auto 
NS::externFunction()\00"
+// CHECK-DAG: private unnamed_addr constant [49 x i8] c"auto 
functionTemplateExplicitSpecialization(int)\00"
----------------
This test does not seem quite right:

  1) Testing all the different kinds of function declarations here is gaining 
you zero test coverage. The thing that's relevant here is how we handle the 
return type, and that does not change between these cases.

  2) You're missing test coverage for the cases you fixed: `decltype(auto)` as 
a return type, and types that contain `auto` (but are not *exactly* `auto`).

http://reviews.llvm.org/D5365



_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to