From 2be9af95562beed66965b7ca731bd35df1de7711 Mon Sep 17 00:00:00 2001 From: Eli Friedman Date: Wed, 13 Feb 2008 17:29:58 +0000 Subject: [PATCH] Fix a minor bug in isNullPointerConstant triggered by the linux tgmath.h. Note that there is another issue with tgmath.h, so mandel.c still doesn't work. llvm-svn: 47069 --- clang/AST/Expr.cpp | 2 +- clang/test/Sema/conditional-expr.c | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/clang/AST/Expr.cpp b/clang/AST/Expr.cpp index c7a2005bc8f3..f4da0f075162 100644 --- a/clang/AST/Expr.cpp +++ b/clang/AST/Expr.cpp @@ -995,7 +995,7 @@ bool Expr::isNullPointerConstant(ASTContext &Ctx) const { // Strip off a cast to void*, if it exists. if (const CastExpr *CE = dyn_cast(this)) { // Check that it is a cast to void*. - if (const PointerType *PT = dyn_cast(CE->getType())) { + if (const PointerType *PT = CE->getType()->getAsPointerType()) { QualType Pointee = PT->getPointeeType(); if (Pointee.getQualifiers() == 0 && Pointee->isVoidType() && // to void* CE->getSubExpr()->getType()->isIntegerType()) // from int. diff --git a/clang/test/Sema/conditional-expr.c b/clang/test/Sema/conditional-expr.c index 813aaee9d0d1..a21914c6d5cc 100644 --- a/clang/test/Sema/conditional-expr.c +++ b/clang/test/Sema/conditional-expr.c @@ -31,5 +31,8 @@ void foo() { enum {xxx,yyy,zzz} e, *ee; short x; ee = ee ? &x : ee ? &i : &e; // expected-warning {{pointer type mismatch}} + + typedef void *asdf; + *(0 ? (asdf) 0 : &x) = 10; }