[cfe-commits] r59331 - in /cfe/trunk: include/clang/Basic/DiagnosticKinds.def include/clang/Parse/DeclSpec.h lib/Parse/DeclSpec.cpp lib/Parse/ParseDecl.cpp lib/Sema/SemaDecl.cpp lib/Sema/SemaDeclCXX.cpp test/Parser/cxx-class.cpp test/SemaCXX/class.cpp www/cxx_status.html

Sebastian Redl sebastian.redl at getdesigned.at
Mon Nov 17 15:12:40 PST 2008

Chris Lattner wrote:
> On Nov 14, 2008, at 3:42 PM, Sebastian Redl wrote:
>> +    case DeclSpec::SCS_mutable:
>> +      // mutable can only appear on non-static class members, so 
>> it's always
>> +      // an error here
>> +      Diag(D.getIdentifierLoc(), diag::err_mutable_nonmember);
>> +      InvalidDecl = true;
>> +    }
> Please use an explicit break here, even though it isn't strictly needed.
Of course. I'd never intentionally omit a break.
>> +    case DeclSpec::SCS_mutable:
>> +      if (isFunc) {
>> +        if (DS.getStorageClassSpecLoc().isValid())
>> +          Diag(DS.getStorageClassSpecLoc(),
>> +               diag::err_mutable_function);
>> +        else
>> +          Diag(DS.getThreadSpecLoc(),
>> +               diag::err_mutable_function);
>> +        D.getMutableDeclSpec().ClearStorageClassSpecs();
> How does this work for things like:
>   mutable int Y(), X;
> or:
>   mutable int &Y, X;
> I guess it isn't the end of the world :), but it seems that it could 
> cause spurious diagnostics in these cases by removing mutability from 
> X.  Is it possible to recover by eliminating mutable from just Y?
Yes, but at some effort. We would have to set a flag here and pass it 
along to the function that actually creates the CXXFieldDecl 
(ActOnField), so that it can ignore the mutable storage class.
ActOnField, however, is a method of Action, so we shouldn't just add a 
parameter to it that is an implementation detail of Sema. So we'd have 
to create a new function that has this parameter and make ActOnField a 
thin wrapper around it.

I'll add a FIXME for now. I can do this I have some time with nothing 
better to do.


More information about the cfe-commits mailing list