[cfe-commits] r75650 - in /cfe/trunk: include/clang/AST/Type.h include/clang/Analysis/PathSensitive/SVals.h lib/AST/ASTContext.cpp lib/Analysis/CheckObjCInstMethSignature.cpp lib/CodeGen/CGExprScalar.cpp lib/Sema/SemaExpr.cpp lib/Sema/SemaExprCXX.cpp
steve naroff
snaroff at apple.com
Tue Jul 14 11:53:46 PDT 2009
On Jul 14, 2009, at 2:33 PM, Fariborz Jahanian wrote:
> Maybe this was discussed before. Sorry for asking again. Why do we
> exclude block pointers?
>
No problem...we didn't discuss it at length. I think it would make
sense, especially since Type::getPointeeType() allows block pointers.
If I include block pointers, the following errors turn into warnings
(which is fine with me...).
/Users/snaroff/llvm/Debug/bin/clang-cc -fsyntax-only -verify /Users/
snaroff/llvm/tools/clang/test/Sema/block-misc.c -fblocks
Incorrect Output:
Errors expected but not seen:
Line 170: invalid operands
Line 174: invalid operands to binary expression
Line 176: invalid operands to binary expression
Line 178: invalid operands to binary expression
Line 179: invalid operands to binary expression
Line 180: invalid operands to binary expression
Line 181: invalid operands to binary expression
Warnings seen but not expected:
Line 170: ordered comparison between pointer and integer ('void (^)
(int)' and 'int')
Line 174: comparison between pointer and integer ('void (^)(int)'
and 'int')
Line 176: comparison between pointer and integer ('int' and 'void
(^)(int)')
Line 178: ordered comparison between pointer and integer ('void (^)
(int)' and 'int')
Line 179: ordered comparison between pointer and integer ('void (^)
(int)' and 'int')
Line 180: ordered comparison between pointer and integer ('int' and
'void (^)(int)')
Line 181: ordered comparison between pointer and integer ('int' and
'void (^)(int)')
What do you think?
snaroff
> - Fariborz
>
> On Jul 14, 2009, at 11:25 AM, Steve Naroff wrote:
>
>> Author: snaroff
>> Date: Tue Jul 14 13:25:06 2009
>> New Revision: 75650
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=75650&view=rev
>> Log:
>> Introduce Type::isAnyPointerType() and convert all clients
>> (suggested by Chris).
>>
>> I don't love the name, however it simplifies the code and is a
>> worthwhile change. If/when we come up with a better name, we can do
>> a search/replace.
>>
>> Modified:
>> cfe/trunk/include/clang/AST/Type.h
>> cfe/trunk/include/clang/Analysis/PathSensitive/SVals.h
>> cfe/trunk/lib/AST/ASTContext.cpp
>> cfe/trunk/lib/Analysis/CheckObjCInstMethSignature.cpp
>> cfe/trunk/lib/CodeGen/CGExprScalar.cpp
>> cfe/trunk/lib/Sema/SemaExpr.cpp
>> cfe/trunk/lib/Sema/SemaExprCXX.cpp
>>
>> Modified: cfe/trunk/include/clang/AST/Type.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Type.h?rev=75650&r1=75649&r2=75650&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- cfe/trunk/include/clang/AST/Type.h (original)
>> +++ cfe/trunk/include/clang/AST/Type.h Tue Jul 14 13:25:06 2009
>> @@ -375,6 +375,7 @@
>> bool isFunctionNoProtoType() const { return
>> getAsFunctionNoProtoType() != 0; }
>> bool isFunctionProtoType() const { return
>> getAsFunctionProtoType() != 0; }
>> bool isPointerType() const;
>> + bool isAnyPointerType() const; // Any C pointer or ObjC object
>> pointer
>> bool isBlockPointerType() const;
>> bool isVoidPointerType() const;
>> bool isReferenceType() const;
>> @@ -2120,6 +2121,9 @@
>> inline bool Type::isPointerType() const {
>> return isa<PointerType>(CanonicalType.getUnqualifiedType());
>> }
>> +inline bool Type::isAnyPointerType() const {
>> + return isPointerType() || isObjCObjectPointerType();
>> +}
>> inline bool Type::isBlockPointerType() const {
>> return isa<BlockPointerType>(CanonicalType.getUnqualifiedType());
>> }
>>
>> Modified: cfe/trunk/include/clang/Analysis/PathSensitive/SVals.h
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Analysis/PathSensitive/SVals.h?rev=75650&r1=75649&r2=75650&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- cfe/trunk/include/clang/Analysis/PathSensitive/SVals.h (original)
>> +++ cfe/trunk/include/clang/Analysis/PathSensitive/SVals.h Tue Jul
>> 14 13:25:06 2009
>> @@ -200,8 +200,7 @@
>> }
>>
>> static inline bool IsLocType(QualType T) {
>> - return T->isPointerType() || T->isObjCObjectPointerType()
>> - || T->isBlockPointerType();
>> + return T->isAnyPointerType() || T->isBlockPointerType();
>> }
>> };
>>
>>
>> Modified: cfe/trunk/lib/AST/ASTContext.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/ASTContext.cpp?rev=75650&r1=75649&r2=75650&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- cfe/trunk/lib/AST/ASTContext.cpp (original)
>> +++ cfe/trunk/lib/AST/ASTContext.cpp Tue Jul 14 13:25:06 2009
>> @@ -1088,7 +1088,7 @@
>>
>> if (T->isPointerType()) {
>> QualType Pointee = T->getAsPointerType()->getPointeeType();
>> - if (Pointee->isPointerType() || Pointee-
>> >isObjCObjectPointerType()) {
>> + if (Pointee->isAnyPointerType()) {
>> QualType ResultType = getObjCGCQualType(Pointee, GCAttr);
>> return getPointerType(ResultType);
>> }
>>
>> Modified: cfe/trunk/lib/Analysis/CheckObjCInstMethSignature.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Analysis/CheckObjCInstMethSignature.cpp?rev=75650&r1=75649&r2=75650&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- cfe/trunk/lib/Analysis/CheckObjCInstMethSignature.cpp (original)
>> +++ cfe/trunk/lib/Analysis/CheckObjCInstMethSignature.cpp Tue Jul
>> 14 13:25:06 2009
>> @@ -30,8 +30,7 @@
>>
>> // Right now don't compare the compatibility of pointers. That
>> involves
>> // looking at subtyping relationships. FIXME: Future patch.
>> - if ((Derived->isPointerType() || Derived-
>> >isObjCObjectPointerType()) &&
>> - (Ancestor->isPointerType() || Ancestor-
>> >isObjCObjectPointerType()))
>> + if (Derived->isAnyPointerType() && Ancestor->isAnyPointerType())
>> return true;
>>
>> return C.typesAreCompatible(Derived, Ancestor);
>>
>> Modified: cfe/trunk/lib/CodeGen/CGExprScalar.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/CGExprScalar.cpp?rev=75650&r1=75649&r2=75650&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- cfe/trunk/lib/CodeGen/CGExprScalar.cpp (original)
>> +++ cfe/trunk/lib/CodeGen/CGExprScalar.cpp Tue Jul 14 13:25:06 2009
>> @@ -986,7 +986,7 @@
>> }
>>
>> Value *ScalarExprEmitter::EmitAdd(const BinOpInfo &Ops) {
>> - if (!Ops.Ty->isPointerType() && !Ops.Ty-
>> >isObjCObjectPointerType()) {
>> + if (!Ops.Ty->isAnyPointerType()) {
>> if (CGF.getContext().getLangOptions().OverflowChecking &&
>> Ops.Ty->isSignedIntegerType())
>> return EmitOverflowCheckedBinOp(Ops);
>>
>> Modified: cfe/trunk/lib/Sema/SemaExpr.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExpr.cpp?rev=75650&r1=75649&r2=75650&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- cfe/trunk/lib/Sema/SemaExpr.cpp (original)
>> +++ cfe/trunk/lib/Sema/SemaExpr.cpp Tue Jul 14 13:25:06 2009
>> @@ -3094,14 +3094,12 @@
>> }
>> // C99 6.5.15p6 - "if one operand is a null pointer constant, the
>> result has
>> // the type of the other operand."
>> - if ((LHSTy->isPointerType() || LHSTy->isBlockPointerType() ||
>> - LHSTy->isObjCObjectPointerType()) &&
>> + if ((LHSTy->isAnyPointerType() || LHSTy->isBlockPointerType()) &&
>> RHS->isNullPointerConstant(Context)) {
>> ImpCastExprToType(RHS, LHSTy); // promote the null to a pointer.
>> return LHSTy;
>> }
>> - if ((RHSTy->isPointerType() || RHSTy->isBlockPointerType() ||
>> - RHSTy->isObjCObjectPointerType()) &&
>> + if ((RHSTy->isAnyPointerType() || RHSTy->isBlockPointerType()) &&
>> LHS->isNullPointerConstant(Context)) {
>> ImpCastExprToType(LHS, RHSTy); // promote the null to a pointer.
>> return RHSTy;
>> @@ -3823,12 +3821,10 @@
>>
>> // Put any potential pointer into PExp
>> Expr* PExp = lex, *IExp = rex;
>> - if (IExp->getType()->isPointerType() ||
>> - IExp->getType()->isObjCObjectPointerType())
>> + if (IExp->getType()->isAnyPointerType())
>> std::swap(PExp, IExp);
>>
>> - if (PExp->getType()->isPointerType() ||
>> - PExp->getType()->isObjCObjectPointerType()) {
>> + if (PExp->getType()->isAnyPointerType()) {
>>
>> if (IExp->getType()->isIntegerType()) {
>> QualType PointeeTy = PExp->getType()->getPointeeType();
>> @@ -3912,8 +3908,7 @@
>> }
>>
>> // Either ptr - int or ptr - ptr.
>> - if (lex->getType()->isPointerType() ||
>> - lex->getType()->isObjCObjectPointerType()) {
>> + if (lex->getType()->isAnyPointerType()) {
>> QualType lpointee = lex->getType()->getPointeeType();
>>
>> // The LHS must be an completely-defined object type.
>> @@ -4293,8 +4288,7 @@
>> return ResultTy;
>> }
>> }
>> - if ((lType->isPointerType() || lType->isObjCObjectPointerType())
>> &&
>> - rType->isIntegerType()) {
>> + if (lType->isAnyPointerType() && rType->isIntegerType()) {
>> if (isRelational)
>> Diag(Loc,
>> diag::ext_typecheck_ordered_comparison_of_pointer_integer)
>> << lType << rType << lex->getSourceRange() << rex-
>> >getSourceRange();
>> @@ -4304,8 +4298,7 @@
>> ImpCastExprToType(rex, lType); // promote the integer to pointer
>> return ResultTy;
>> }
>> - if (lType->isIntegerType() &&
>> - (rType->isPointerType() || rType-
>> >isObjCObjectPointerType())) {
>> + if (lType->isIntegerType() && rType->isAnyPointerType()) {
>> if (isRelational)
>> Diag(Loc,
>> diag::ext_typecheck_ordered_comparison_of_pointer_integer)
>> << lType << rType << lex->getSourceRange() << rex-
>> >getSourceRange();
>> @@ -4578,15 +4571,9 @@
>> Diag(OpLoc, diag::warn_increment_bool) << Op->getSourceRange();
>> } else if (ResType->isRealType()) {
>> // OK!
>> - } else if (ResType->getAsPointerType() ||ResType-
>> >isObjCObjectPointerType()) {
>> - QualType PointeeTy;
>> + } else if (ResType->isAnyPointerType()) {
>> + QualType PointeeTy = ResType->getPointeeType();
>>
>> - if (const PointerType *PTy = ResType->getAsPointerType())
>> - PointeeTy = PTy->getPointeeType();
>> - else if (const ObjCObjectPointerType *OPT =
>> - ResType->getAsObjCObjectPointerType())
>> - PointeeTy = OPT->getPointeeType();
>> -
>> // C99 6.5.2.4p2, 6.5.6p2
>> if (PointeeTy->isVoidType()) {
>> if (getLangOptions().CPlusPlus) {
>>
>> Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp
>> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=75650&r1=75649&r2=75650&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original)
>> +++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Tue Jul 14 13:25:06 2009
>> @@ -1482,8 +1482,7 @@
>> QualType Sema::FindCompositePointerType(Expr *&E1, Expr *&E2) {
>> assert(getLangOptions().CPlusPlus && "This function assumes C++");
>> QualType T1 = E1->getType(), T2 = E2->getType();
>> - if(!T1->isPointerType() && !T2->isPointerType() &&
>> - !T1->isObjCObjectPointerType() && !T2-
>> >isObjCObjectPointerType())
>> + if(!T1->isAnyPointerType() && !T2->isAnyPointerType())
>> return QualType();
>>
>> // C++0x 5.9p2
>>
>>
>> _______________________________________________
>> 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