[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