[cfe-commits] r41521 - in /cfe/trunk: Parse/ParseDecl.cpp Sema/SemaDecl.cpp Sema/SemaExpr.cpp Sema/SemaType.cpp include/clang/AST/Decl.h include/clang/Parse/DeclSpec.h

Steve Naroff snaroff at apple.com
Mon Aug 27 21:12:08 PDT 2007


On Aug 27, 2007, at 8:23 PM, Chris Lattner wrote:

>> This seems to work nicely. If Chris is happy with the approach, I  
>> will generalize this to
>> all VarDecls.
>
> Cool, this is very nice.  Some little comments:
>
>> @@ -221,11 +221,14 @@
>>
>>  /// ParmVarDecl - Represent a parameter to a function.
>>  class ParmVarDecl : public VarDecl {
>> +  bool InvalidType;
>
> I think this should move all the way up to Decl (even past VarDecl)  
> and be generalized to just be "InvalidDecl". This will allow it to  
> be set for a decl that has any erroneous aspect: for example, on a  
> "void foo" parm decl (void is a valid type, but not a valid type  
> for a parmdecl, f.e.).
>

Agreed. This was only temporary (to prove the approach for ParmDecls).

>> ===================================================================== 
>> =========
>> --- cfe/trunk/include/clang/Parse/DeclSpec.h (original)
>> +++ cfe/trunk/include/clang/Parse/DeclSpec.h Mon Aug 27 22:03:08 2007
>> @@ -315,10 +315,12 @@
>>      IdentifierInfo *Ident;
>>      SourceLocation IdentLoc;
>>      Action::TypeTy *TypeInfo;
>> +    bool InvalidType;
>
> Why does this need invalidtype here?

It is needed for ParmVarDecls (see Sema::ParseParmDeclarator() for  
more details).

> Isn't it sufficient to mark the whole Declarator object?

This would be nice (and was my first thought, until I bumped into  
problems with ParmVarDecls).

That said, if you think it is still superfluous, I am happy to change  
it (if you can tell me how to get ParmVarDecls to work:-)

>
> Thanks Steve, I think this is a very nice solution!

Great. This will also enable us to fix the following "undeclared  
identifier" diags:-)

[dylan:~/llvm/tools/clang] admin% cat x.c
struct s;
void proto(struct s);

void f () {
   struct s v, *p;

   p = &v; // v is currently undeclared.
}

[dylan:~/llvm/tools/clang] admin% ../../Debug/bin/clang x.c
x.c:5:12: error: variable has incomplete type 'struct s'
   struct s v, *p;
            ^
x.c:7:8: error: use of undeclared identifier 'v'
   p = &v; // v is currently undeclared.
        ^
2 diagnostics generated.


>
> -Chris
>
>




More information about the cfe-commits mailing list