Hi Richard,

Hi all,

This patch fixes PR18746.


Index: lib/Sema/SemaDeclCXX.cpp
===================================================================
--- lib/Sema/SemaDeclCXX.cpp (revision 205775)
+++ lib/Sema/SemaDeclCXX.cpp (working copy)
@@ -1177,12 +1177,19 @@
       // C++1y doesn't require constexpr functions to contain a 'return'
       // statement. We still do, unless the return type is void, because
       // otherwise if there's no return statement, the function cannot
-      // be used in a core constant expression.
+      // be used in a core constant expression. Also, deduced return type
+      // with no return statements are perfectly legal. For example:
+      // template<typename T> struct X { constexpr auto f() {} };
+
       bool OK = getLangOpts().CPlusPlus1y &&
Dcl->getReturnType()->isVoidType();
+
+      if (!getLangOpts().CPlusPlus1y ||
+          !Dcl->getReturnType()->getContainedAutoType()) {
       Diag(Dcl->getLocation(),
            OK ? diag::warn_cxx11_compat_constexpr_body_no_return
               : diag::err_constexpr_body_no_return);
       return OK;
+      }
     }
     if (ReturnStmts.size() > 1) {
       Diag(ReturnStmts.back(),
Index: test/SemaCXX/cxx1y-deduced-return-type.cpp
===================================================================
--- test/SemaCXX/cxx1y-deduced-return-type.cpp (revision 205775)
+++ test/SemaCXX/cxx1y-deduced-return-type.cpp (working copy)
@@ -261,6 +261,7 @@

 namespace Constexpr {
   constexpr auto f1(int n) { return n; }
+  template<typename T> struct X { constexpr auto f() {} }; // PR18746
   struct NonLiteral { ~NonLiteral(); } nl; // expected-note
{{user-provided destructor}}
   constexpr auto f2(int n) { return nl; } // expected-error {{return type
'Constexpr::NonLiteral' is not a literal type}}
 }


Please if someone could review the same.

Thanks,
Rahul

Attachment: PR18746.patch
Description: Binary data

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

Reply via email to