[cfe-commits] r40999 - /cfe/trunk/Sema/SemaExpr.cpp
Chris Lattner
clattner at apple.com
Fri Aug 10 11:29:55 PDT 2007
> Make sure the arithmetic conversion are done for relation and
> equality operators.
Thanks steve! Does this do the right thing for comparison of void*
to char* etc?
-Chris
> This fixes the following...
>
> eypedef short S;
> int test(S X, long long Y) {
> return X < Y;
> }
>
> Before...
>
> (CompoundStmt 0x2905d00
> (ReturnStmt 0x2905cf0
> (BinaryOperator 0x2905cd0 'int' '<'
> (ImplicitCastExpr 0x2905cc0 'int'
> (DeclRefExpr 0x2905c80 'S':'short' Decl='X' 0x2905c20))
> (DeclRefExpr 0x2905ca0 'long long' Decl='Y' 0x2905c50))))
>
> After...
>
> (CompoundStmt 0x2b05c30
> (ReturnStmt 0x2b05c20
> (BinaryOperator 0x2b05c00 'int' '<'
> (ImplicitCastExpr 0x2b05bf0 'long long'
> (DeclRefExpr 0x2b05bb0 'S':'short' Decl='X' 0x2b05b50))
> (DeclRefExpr 0x2b05bd0 'long long' Decl='Y' 0x2b05b80))))
>
>
> Modified:
> cfe/trunk/Sema/SemaExpr.cpp
>
> Modified: cfe/trunk/Sema/SemaExpr.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Sema/
> SemaExpr.cpp?rev=40999&r1=40998&r2=40999&view=diff
>
> ======================================================================
> ========
> --- cfe/trunk/Sema/SemaExpr.cpp (original)
> +++ cfe/trunk/Sema/SemaExpr.cpp Fri Aug 10 13:26:40 2007
> @@ -1026,8 +1026,13 @@
> inline QualType Sema::CheckRelationalOperands( // C99 6.5.8
> Expr *&lex, Expr *&rex, SourceLocation loc)
> {
> - UsualUnaryConversions(lex);
> - UsualUnaryConversions(rex);
> + // C99 6.5.8p3
> + if (lex->getType()->isArithmeticType() && rex->getType()-
> >isArithmeticType())
> + UsualArithmeticConversions(lex, rex);
> + else {
> + UsualUnaryConversions(lex);
> + UsualUnaryConversions(rex);
> + }
> QualType lType = lex->getType();
> QualType rType = rex->getType();
>
> @@ -1058,8 +1063,13 @@
> inline QualType Sema::CheckEqualityOperands( // C99 6.5.9
> Expr *&lex, Expr *&rex, SourceLocation loc)
> {
> - UsualUnaryConversions(lex);
> - UsualUnaryConversions(rex);
> + // C99 6.5.9p4
> + if (lex->getType()->isArithmeticType() && rex->getType()-
> >isArithmeticType())
> + UsualArithmeticConversions(lex, rex);
> + else {
> + UsualUnaryConversions(lex);
> + UsualUnaryConversions(rex);
> + }
> QualType lType = lex->getType();
> QualType rType = rex->getType();
>
>
>
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
More information about the cfe-commits
mailing list