On Jun 26, 2009, at 11:41 AM, Anders Carlsson wrote: > Author: andersca > Date: Fri Jun 26 13:41:36 2009 > New Revision: 74307 > > URL: http://llvm.org/viewvc/llvm-project?rev=74307&view=rev > Log: > Implement enough of the 'auto' keyword so we can claim to support > N2546. > > = > = > = > = > = > = > = > = > ====================================================================== > --- cfe/trunk/lib/Parse/ParseDecl.cpp (original) > +++ cfe/trunk/lib/Parse/ParseDecl.cpp Fri Jun 26 13:41:36 2009 > @@ -926,7 +926,10 @@ > isInvalid = DS.SetStorageClassSpec(DeclSpec::SCS_static, Loc, > PrevSpec); > break; > case tok::kw_auto: > - isInvalid = DS.SetStorageClassSpec(DeclSpec::SCS_auto, Loc, > PrevSpec); > + if (getLang().CPlusPlus0x) > + isInvalid = DS.SetTypeSpecType(DeclSpec::TST_auto, Loc, > PrevSpec); > + else > + isInvalid = DS.SetStorageClassSpec(DeclSpec::SCS_auto, Loc, > PrevSpec); > break; > case tok::kw_register: > isInvalid = DS.SetStorageClassSpec(DeclSpec::SCS_register, > Loc, PrevSpec);
Such a beautiful place to add a warning for -Wc++0x :) > Modified: cfe/trunk/lib/Sema/SemaType.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaType.cpp?rev=74307&r1=74306&r2=74307&view=diff > > = > = > = > = > = > = > = > = > ====================================================================== > --- cfe/trunk/lib/Sema/SemaType.cpp (original) > +++ cfe/trunk/lib/Sema/SemaType.cpp Fri Jun 26 13:41:36 2009 > @@ -245,6 +245,11 @@ > Result = Context.getDecltypeType(E); > break; > } > + case DeclSpec::TST_auto: { > + // TypeQuals handled by caller. > + Result = Context.UndeducedAutoTy; > + break; > + } > > case DeclSpec::TST_error: > Result = Context.IntTy; > > Added: cfe/trunk/test/SemaCXX/auto-cxx0x.cpp > URL: > http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/auto-cxx0x.cpp?rev=74307&view=auto > > = > = > = > = > = > = > = > = > ====================================================================== > --- cfe/trunk/test/SemaCXX/auto-cxx0x.cpp (added) > +++ cfe/trunk/test/SemaCXX/auto-cxx0x.cpp Fri Jun 26 13:41:36 2009 > @@ -0,0 +1,5 @@ > +// RUN: clang-cc -fsyntax-only -verify %s -std=c++0x > +void f() { > + auto int a; // expected-error{{cannot combine with previous > 'auto' declaration specifier}} > + int auto b; // expected-error{{cannot combine with previous 'int' > declaration specifier}} > +} Hmmm... could we give a more targeted diagnostic for this error? This is valid C++98 code that's becoming invalid in C++0x, so it would help to tell the user this explicitly, e.g., "C++0x treats the 'auto' specifier as a type (not a storage class); remove 'auto' to make your code portable for both C++98 and C++0x" (with a fix-it hint to remove "auto", naturally). - Doug _______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
