]> granicus.if.org Git - clang/commitdiff
*this is const in a trailing-return-type for a constexpr member function.
authorRichard Smith <richard-llvm@metafoo.co.uk>
Mon, 14 Jan 2013 01:55:13 +0000 (01:55 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Mon, 14 Jan 2013 01:55:13 +0000 (01:55 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@172375 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Parse/ParseDecl.cpp
test/Parser/cxx0x-decl.cpp

index bd79e56b09992af93690239f714d1ba9305fd7ed..1fbe6b3a1a4eca8cb4e90a4ee91847eb78ea2156 100644 (file)
@@ -4761,7 +4761,9 @@ void Parser::ParseFunctionDeclarator(Declarator &D,
           Actions.CurContext->isRecord()));
       Sema::CXXThisScopeRAII ThisScope(Actions,
                                dyn_cast<CXXRecordDecl>(Actions.CurContext),
-                               DS.getTypeQualifiers(),
+                               DS.getTypeQualifiers() |
+                               (D.getDeclSpec().isConstexprSpecified()
+                                  ? Qualifiers::Const : 0),
                                IsCXX11MemberFunction);
 
       // Parse exception-specification[opt].
index d74b337b313a942939214fad655d6f3b097a7928..1da7dd28331148b24034261afdd3c99cda6e5410 100644 (file)
@@ -41,3 +41,11 @@ struct SS {
 };
 
 using PR14855 = int S::; // expected-error {{expected ';' after alias declaration}}
+
+// Ensure that 'this' has a const-qualified type in a trailing return type for
+// a constexpr function.
+struct ConstexprTrailingReturn {
+  int n;
+  constexpr auto f() -> decltype((n));
+};
+constexpr const int &ConstexprTrailingReturn::f() const { return n; }