- Apr 25, 2007
-
-
Steve Naroff authored
Submitted by: Reviewed by: A bunch of "small" changes... - Fixed a bug in ConvertFloatingRankToComplexType() that rendered it useless. ASTContext was being copied by default (as the result of declaring the argument incorrectly). Chris gave me the magic potion to disallow this in ASTContext. - Removed a tab:-) - Added some much needed comments to the float/complex promotion madness. - Improved some aesthetics (based on code review w/Chris). llvm-svn: 39414
-
Steve Naroff authored
Submitted by: Reviewed by: Refactored code that deals with float/complex conversions (the previous commit). - Removed 6 predicates that identify the built-in float/complex types. - Added two helper functions GetFloatingRank() & ConvertFloatingRankToComplexType(). At present, these are static functions in SemaExpr.cpp. Conceptually, they would be nice to move to Type, however there are layering problems with that (i.e. no ASTContext). Another possibility is to move them to ASTContext? - Simplified the logic in UsualArithmeticConversions() considerably. llvm-svn: 39413
-
- Apr 24, 2007
-
-
Steve Naroff authored
Submitted by: Reviewed by: -Lot's of detail work in UsualArithmeticConversion(). Needed to expand the code for dealing with floating types. This code still has a couple of FIXME's and could be refactored a bit. -Added a bunch of Type predicates to simplify the float conversions. Used the opportunity to convert a bunch of predicates to dyn_cast (it's cleaner when just dealing with Builtin types). llvm-svn: 39412
-
Steve Naroff authored
Submitted by: Reviewed by: Lot's of changes related to type checking binary expressions. - Changed the name/proto of ImplicitConversion. It is now named UsualUnaryConversion - it takes a type and returns a type. This allowed me to remove the explicit node creation for array/function->pointer conversions. - Added function UsualArithmeticConversions(). - Changed all the "Check" functions for binary ops. They use the new "Usual" functions above. - new predicates on Type, isSignedIntegerType()/isUnsignedIntegerType(). - moved getDecl() out of the Sema class. It is now a static helper function in SemaExpr.cpp. It was also renamed getPrimaryDeclaration(). - Added CheckArithmeticOperand() for consistency with the other unary "Check" functions. Should finish up the binary expressions tomorrow...with a small number of "FIXME's" llvm-svn: 39411
-
- Apr 21, 2007
-
-
Steve Naroff authored
Submitted by: Reviewed by: Start hacking on binary ops... Important bug fix...was ignoring the return value from ImplicitConversion. This didn't bother the type checking logic, however the AST was malformed. llvm-svn: 39410
-
Steve Naroff authored
Submitted by: Reviewed by: - Added Type::isPromotableIntegerType(). - The unary operators are now largely complete (Sema::ParseUnaryOp and friends). - Implemented ImplicitConversion hook (was a stub). llvm-svn: 39409
-
- Apr 20, 2007
-
-
Steve Naroff authored
Submitted by: Reviewed by: Continue working on type checking for unary operators. Added: - Two 3 private functions to Sema: CheckAddressOfOperand(), CheckIndirectionOperand(), and getDecl(). - Added Expr::isLvalue() - it was needed for CheckAddressOfOperand(). It will also be needed for ++/-- and the assignment operators. - Added a couple diagnostics for invalid lvalues (for & of). llvm-svn: 39408
-
- Apr 11, 2007
-
-
Chris Lattner authored
llvm-svn: 39407
-
Chris Lattner authored
implements test/Preprocessor/expr_usual_conversions.c, which produces this output: expr_usual_conversions.c:5:10: warning: left side of operator converted from negative value to unsigned: -42 to 18446744073709551574 #if (-42 + 0U) / -2 ^ expr_usual_conversions.c:5:16: warning: right side of operator converted from negative value to unsigned: -2 to 18446744073709551614 #if (-42 + 0U) / -2 ^ llvm-svn: 39406
-
Chris Lattner authored
arithmetic conversions'. llvm-svn: 39405
-
Chris Lattner authored
t.c:2:17: warning: integer overflow in preprocessor expression #if -(INTMAX_MAX+1) ^ t.c:2:5: warning: integer overflow in preprocessor expression #if -(INTMAX_MAX+1) ^ GCC has some seriously confused source locations in this case: t.c:2:19: warning: integer overflow in preprocessor expression t.c:2:20: warning: integer overflow in preprocessor expression column 19/20 are off the end of the line. llvm-svn: 39404
-
Chris Lattner authored
llvm-svn: 39403
-
- Apr 10, 2007
-
-
Chris Lattner authored
llvm-svn: 39402
-
Chris Lattner authored
llvm-svn: 39401
-
Chris Lattner authored
t.c:6:7: warning: integer overflow in preprocessor expression #if 1 << 63 ^ t.c:8:7: warning: integer overflow in preprocessor expression #if 4 << 62 ^ t.c:10:7: warning: integer overflow in preprocessor expression #if 4 << 66 ^ but no diagnostic on: #if 1U << 63 llvm-svn: 39400
-
Chris Lattner authored
test/Preprocessor/cxx_true.cpp llvm-svn: 39399
-
Chris Lattner authored
like this: t3.c:5:10: error: 'vers2.h' file not found #include xstr(INCFILE(2).h) ^ instead of: t3.c:5:10: error: file not found #include xstr(INCFILE(2).h) ^ which is useful if the #include name is generated through macro expansion. llvm-svn: 39398
-
Chris Lattner authored
expression is live. For example: #if 0 ? 124/0 : 42 should cause no error. This implements test/Preprocessor/expr_liveness.c llvm-svn: 39397
-
Chris Lattner authored
llvm-svn: 39396
-
- Apr 06, 2007
-
-
Steve Naroff authored
Submitted by: Reviewed by: -Changed the name of TypeRef to QualType. Many diffs. -Changed the QualType constructor to require Quals be passed. This makes the code a bit more verbose, however will make the code easier to work on. Given the complexity of types, this should help spot bogosities. -Changed the Expr constructor to require a QualType. Same motivation. llvm-svn: 39395
-
- Apr 05, 2007
-
-
Steve Naroff authored
Submitted by: Reviewed by: Fix "FIXME: does this lose qualifiers from the typedef??" in ASTContext::getTypedefType(). This change was fairly pervasive...nevertheless, here are the highlights: - Change the type of Type::CanonicalType to TypeRef (was "Type *"). - Change the implementation of TypeRef::getCanonicalType() to work for typedefs. - Make the implementation of Type::getCanonicalType private (only TypeRef should access). This will force clients to use TypeRef::getCanonicalType (the correct version of the function). Since TypeRef overloads "->", it was very easy to fall into this bug... - Changed many references of "Type *" to "TypeRef"...when the raw type pointer is required, use t.getTypePtr(). - Changed all the *Type classes to take a TypeRef. - Made the Type constructor protected (cleanup). - Removed function Expr::getType(). - Convert functions in SemaExpr to use the above support. This fixed the "const" bug I was originally investigating. I will follow this check-in up with a rename of TypeRef->QualType. I will also make sure the constructor does not default to 0 (which can lead to broken code...). llvm-svn: 39394
-
Chris Lattner authored
#if 'a' llvm-svn: 39393
-
Chris Lattner authored
llvm-svn: 39392
-
Chris Lattner authored
llvm-svn: 39391
-
Chris Lattner authored
llvm-svn: 39390
-
Chris Lattner authored
llvm-svn: 39389
-
Chris Lattner authored
constant expressions. This allows us to emit this diagnostic: t.c:5:5: warning: integer constant is so large that it is unsigned #if 12345678901234567890 ^ And makes constant evaluation fully correct, but we do not yet detect and warn about integer overflow. This patch requires cvs up'ing the main llvm tree to get the APSInt class, but no libraries need to be rebuilt there. llvm-svn: 39388
-
- Apr 04, 2007
-
-
Chris Lattner authored
* signedness of values * overflow of intermediate computations. llvm-svn: 39387
-
Chris Lattner authored
llvm-svn: 39386
-
Chris Lattner authored
sized to the target's intmax_t. This also allows us to emit diagnostic like: t.c:11:5: warning: integer constant is too large for its type #if 18446744073709551616 // 2^64 ^ t.c:15:5: warning: integer constant is too large for its type #if 18446744073709551617 // 2^64-1 ^ llvm-svn: 39385
-
Chris Lattner authored
llvm-svn: 39384
-
Chris Lattner authored
llvm-svn: 39383
-
Chris Lattner authored
* Detect overflow correctly. When it occurs, return the truncated value. * Add fixme for radix analysis. llvm-svn: 39382
-
Chris Lattner authored
improvement is needed! llvm-svn: 39381
-
Steve Naroff authored
Submitted by: Reviewed by: Minor bug/typo in classof. llvm-svn: 39380
-
Steve Naroff authored
Submitted by: Reviewed by: - Typechecking for ++/-- not operating on canonical type (fixed). - Many changes to Decl.h... -- Changed ObjectDecl->ValueDecl. -- ValueDecl doesn't define a storage class. The storage class is now defined by VarDecl/FunctionDecl. EnumConstant decls don't need a storage class. -- FieldDecl now inherits directly from Decl (it is not a value). - Changed SemaExpr to use the new Decl.h. Also added a couple diagnostics for bogus storage class usage. For example: z.c:6:10: error: illegal storage class on function auto int func(); ^ z.c:7:14: error: illegal storage class on file-scoped variable register int b; ^ llvm-svn: 39379
-
Chris Lattner authored
llvm-svn: 39378
-
Chris Lattner authored
llvm-svn: 39377
-
- Apr 03, 2007
-
-
Steve Naroff authored
Submitted by: Reviewed by: declare getSizeType() const and fix typo in comment... llvm-svn: 39376
-
Steve Naroff authored
Submitted by: Reviewed by: Avoid including "clang/AST/Expr.h" in Sema.h just to access UnaryOperator::Opcode. While the inclusion wasn't objectionable in terms of layering, it is nice to keep the inclusions as modest as possible. llvm-svn: 39375
-