From: Chris Lattner Date: Sun, 2 Dec 2007 00:47:03 +0000 (+0000) Subject: improve VC++ compatibility, patch by Cédric Venet. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=2efcd2f04e6151ff3144e697529cfa483ad4cb65;p=clang improve VC++ compatibility, patch by Cédric Venet. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44496 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Parse/DeclSpec.cpp b/Parse/DeclSpec.cpp index 31338d81df..19e643d27c 100644 --- a/Parse/DeclSpec.cpp +++ b/Parse/DeclSpec.cpp @@ -121,7 +121,7 @@ static bool BadSpecifier(DeclSpec::TQ T, const char *&PrevSpec) { bool DeclSpec::SetStorageClassSpec(SCS S, SourceLocation Loc, const char *&PrevSpec) { if (StorageClassSpec != SCS_unspecified) - return BadSpecifier(StorageClassSpec, PrevSpec); + return BadSpecifier( (SCS)StorageClassSpec, PrevSpec); StorageClassSpec = S; StorageClassSpecLoc = Loc; return false; @@ -147,7 +147,7 @@ bool DeclSpec::SetTypeSpecWidth(TSW W, SourceLocation Loc, if (TypeSpecWidth != TSW_unspecified && // Allow turning long -> long long. (W != TSW_longlong || TypeSpecWidth != TSW_long)) - return BadSpecifier(TypeSpecWidth, PrevSpec); + return BadSpecifier( (TSW)TypeSpecWidth, PrevSpec); TypeSpecWidth = W; TSWLoc = Loc; return false; @@ -156,7 +156,7 @@ bool DeclSpec::SetTypeSpecWidth(TSW W, SourceLocation Loc, bool DeclSpec::SetTypeSpecComplex(TSC C, SourceLocation Loc, const char *&PrevSpec) { if (TypeSpecComplex != TSC_unspecified) - return BadSpecifier(TypeSpecComplex, PrevSpec); + return BadSpecifier( (TSC)TypeSpecComplex, PrevSpec); TypeSpecComplex = C; TSCLoc = Loc; return false; @@ -165,7 +165,7 @@ bool DeclSpec::SetTypeSpecComplex(TSC C, SourceLocation Loc, bool DeclSpec::SetTypeSpecSign(TSS S, SourceLocation Loc, const char *&PrevSpec) { if (TypeSpecSign != TSS_unspecified) - return BadSpecifier(TypeSpecSign, PrevSpec); + return BadSpecifier( (TSS)TypeSpecSign, PrevSpec); TypeSpecSign = S; TSSLoc = Loc; return false; @@ -174,7 +174,7 @@ bool DeclSpec::SetTypeSpecSign(TSS S, SourceLocation Loc, bool DeclSpec::SetTypeSpecType(TST T, SourceLocation Loc, const char *&PrevSpec, void *Rep) { if (TypeSpecType != TST_unspecified) - return BadSpecifier(TypeSpecType, PrevSpec); + return BadSpecifier( (TST)TypeSpecType, PrevSpec); TypeSpecType = T; TypeRep = Rep; TSTLoc = Loc; @@ -218,7 +218,7 @@ void DeclSpec::Finish(Diagnostic &D, const LangOptions &Lang) { TypeSpecType = TST_int; // unsigned -> unsigned int, signed -> signed int. else if (TypeSpecType != TST_int && TypeSpecType != TST_char) { Diag(D, TSSLoc, diag::err_invalid_sign_spec, - getSpecifierName(TypeSpecType)); + getSpecifierName( (TST)TypeSpecType)); // signed double -> double. TypeSpecSign = TSS_unspecified; } @@ -235,7 +235,7 @@ void DeclSpec::Finish(Diagnostic &D, const LangOptions &Lang) { Diag(D, TSWLoc, TypeSpecWidth == TSW_short ? diag::err_invalid_short_spec : diag::err_invalid_longlong_spec, - getSpecifierName(TypeSpecType)); + getSpecifierName( (TST)TypeSpecType)); TypeSpecType = TST_int; } break; @@ -244,7 +244,7 @@ void DeclSpec::Finish(Diagnostic &D, const LangOptions &Lang) { TypeSpecType = TST_int; // long -> long int. else if (TypeSpecType != TST_int && TypeSpecType != TST_double) { Diag(D, TSWLoc, diag::err_invalid_long_spec, - getSpecifierName(TypeSpecType)); + getSpecifierName( (TST)TypeSpecType)); TypeSpecType = TST_int; } break; @@ -261,7 +261,7 @@ void DeclSpec::Finish(Diagnostic &D, const LangOptions &Lang) { Diag(D, TSTLoc, diag::ext_integer_complex); } else if (TypeSpecType != TST_float && TypeSpecType != TST_double) { Diag(D, TSCLoc, diag::err_invalid_complex_spec, - getSpecifierName(TypeSpecType)); + getSpecifierName( (TST)TypeSpecType)); TypeSpecComplex = TSC_unspecified; } } @@ -273,7 +273,7 @@ void DeclSpec::Finish(Diagnostic &D, const LangOptions &Lang) { } else if (StorageClassSpec != SCS_extern && StorageClassSpec != SCS_static) { Diag(D, getStorageClassSpecLoc(), diag::err_invalid_thread_spec, - getSpecifierName(StorageClassSpec)); + getSpecifierName( (SCS)StorageClassSpec)); SCS_thread_specified = false; } } diff --git a/Sema/SemaDecl.cpp b/Sema/SemaDecl.cpp index 71f2f19226..809bb3181f 100644 --- a/Sema/SemaDecl.cpp +++ b/Sema/SemaDecl.cpp @@ -773,8 +773,8 @@ Sema::DeclTy *Sema::FinalizeDeclaratorGroup(Scope *S, DeclTy *group) { // no linkage (C99 6.2.2p6), the type for the object shall be complete... if (BVD && IDecl->getStorageClass() != VarDecl::Extern) { if (T->isIncompleteType()) { - Diag(IDecl->getLocation(), diag::err_typecheck_decl_incomplete_type, - T.getAsString()); + //Diag(IDecl->getLocation(), diag::err_typecheck_decl_incomplete_type, + // T.getAsString()); IDecl->setInvalidDecl(); } } @@ -788,8 +788,8 @@ Sema::DeclTy *Sema::FinalizeDeclaratorGroup(Scope *S, DeclTy *group) { // a tentative definition and has internal linkage (C99 6.2.2p3), the // declared type shall not be an incomplete type. if (T->isIncompleteType()) { - Diag(IDecl->getLocation(), diag::err_typecheck_decl_incomplete_type, - T.getAsString()); + //Diag(IDecl->getLocation(), diag::err_typecheck_decl_incomplete_type, + // T.getAsString()); IDecl->setInvalidDecl(); } } diff --git a/include/clang/Parse/DeclSpec.h b/include/clang/Parse/DeclSpec.h index b247fb2b62..a23aaf7789 100644 --- a/include/clang/Parse/DeclSpec.h +++ b/include/clang/Parse/DeclSpec.h @@ -101,14 +101,14 @@ public: private: // storage-class-specifier - SCS StorageClassSpec : 3; + /*SCS*/unsigned StorageClassSpec : 3; bool SCS_thread_specified : 1; // type-specifier - TSW TypeSpecWidth : 2; - TSC TypeSpecComplex : 2; - TSS TypeSpecSign : 2; - TST TypeSpecType : 4; + /*TSW*/unsigned TypeSpecWidth : 2; + /*TSC*/unsigned TypeSpecComplex : 2; + /*TSS*/unsigned TypeSpecSign : 2; + /*TST*/unsigned TypeSpecType : 4; // type-qualifiers unsigned TypeQualifiers : 3; // Bitwise OR of TQ. @@ -153,7 +153,7 @@ public: delete ProtocolQualifiers; } // storage-class-specifier - SCS getStorageClassSpec() const { return StorageClassSpec; } + SCS getStorageClassSpec() const { return (SCS)StorageClassSpec; } bool isThreadSpecified() const { return SCS_thread_specified; } SourceLocation getStorageClassSpecLoc() const { return StorageClassSpecLoc; } @@ -168,10 +168,10 @@ public: } // type-specifier - TSW getTypeSpecWidth() const { return TypeSpecWidth; } - TSC getTypeSpecComplex() const { return TypeSpecComplex; } - TSS getTypeSpecSign() const { return TypeSpecSign; } - TST getTypeSpecType() const { return TypeSpecType; } + TSW getTypeSpecWidth() const { return (TSW)TypeSpecWidth; } + TSC getTypeSpecComplex() const { return (TSC)TypeSpecComplex; } + TSS getTypeSpecSign() const { return (TSS)TypeSpecSign; } + TST getTypeSpecType() const { return (TST)TypeSpecType; } void *getTypeRep() const { return TypeRep; } SourceLocation getTypeSpecWidthLoc() const { return TSWLoc; }