[cfe-commits] r126153 - in /cfe/trunk: include/clang/Basic/DiagnosticSemaKinds.td lib/Sema/SemaType.cpp test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p5.cpp
Douglas Gregor
dgregor at apple.com
Mon Feb 21 15:42:09 PST 2011
On Feb 21, 2011, at 3:18 PM, Richard Smith wrote:
> Author: rsmith
> Date: Mon Feb 21 17:18:00 2011
> New Revision: 126153
>
> URL: http://llvm.org/viewvc/llvm-project?rev=126153&view=rev
> Log:
> C++0x's deduced auto is illegal in typedefs.
>
> This actually rules out too much, since it also catches typedefs for pointers to functions with trailing return types:
>
> typedef auto (*F)() -> int;
>
> Fix for that (and the same issue in all abstract-declarators) to follow shortly.
Isn't there a PR associated with this change? It would be helpful to mention the PR number in the commit message and test case.
- Doug
>
> Modified:
> cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
> cfe/trunk/lib/Sema/SemaType.cpp
> cfe/trunk/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p5.cpp
>
> Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=126153&r1=126152&r2=126153&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
> +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Mon Feb 21 17:18:00 2011
> @@ -898,7 +898,8 @@
> def err_auto_not_allowed : Error<
> "'auto' not allowed %select{in function prototype|in struct member"
> "|in union member|in class member|in exception declaration"
> - "|in template parameter|in block literal|in template argument|here}0">;
> + "|in template parameter|in block literal|in template argument"
> + "|in typedef|here}0">;
> def err_auto_var_requires_init : Error<
> "declaration of variable %0 with type %1 requires an initializer">;
> def err_auto_new_requires_ctor_arg : Error<
>
> Modified: cfe/trunk/lib/Sema/SemaType.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaType.cpp?rev=126153&r1=126152&r2=126153&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaType.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaType.cpp Mon Feb 21 17:18:00 2011
> @@ -1483,7 +1483,7 @@
> break;
> case Declarator::TypeNameContext:
> if (!AutoAllowedInTypeName)
> - Error = 8; // Generic
> + Error = 9; // Generic
> break;
> case Declarator::FileContext:
> case Declarator::BlockContext:
> @@ -1492,6 +1492,9 @@
> break;
> }
>
> + if (D.getDeclSpec().getStorageClassSpec() == DeclSpec::SCS_typedef)
> + Error = 8;
> +
> if (Error != -1) {
> Diag(D.getDeclSpec().getTypeSpecTypeLoc(), diag::err_auto_not_allowed)
> << Error;
>
> Modified: cfe/trunk/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p5.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p5.cpp?rev=126153&r1=126152&r2=126153&view=diff
> ==============================================================================
> --- cfe/trunk/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p5.cpp (original)
> +++ cfe/trunk/test/CXX/dcl.dcl/dcl.spec/dcl.type/dcl.spec.auto/p5.cpp Mon Feb 21 17:18:00 2011
> @@ -14,6 +14,9 @@
> operator auto(); // expected-error{{'auto' not allowed here}}
> };
>
> +typedef auto *AutoPtr; // expected-error{{'auto' not allowed in typedef}}
> +typedef auto Fun(int a) -> decltype(a + a);
> +
> void g(auto a) { // expected-error{{'auto' not allowed in function prototype}}
> try { }
> catch (auto &a) { } // expected-error{{'auto' not allowed in exception declaration}}
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list