From: Chris Lattner Date: Thu, 24 Feb 2011 07:31:28 +0000 (+0000) Subject: compute the integer width, not the memory width here. We want to know that X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=1d6ab7af99a1fc059a6aa5da083640c1d94b07f7;p=clang compute the integer width, not the memory width here. We want to know that _Bool is 1 bit, not 8. This fixes an assertion on the testcase, which is PR9304 and rdar://9045501. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@126368 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Sema/SemaStmt.cpp b/lib/Sema/SemaStmt.cpp index 64827ff177..89957e60de 100644 --- a/lib/Sema/SemaStmt.cpp +++ b/lib/Sema/SemaStmt.cpp @@ -502,8 +502,7 @@ Sema::ActOnFinishSwitchStmt(SourceLocation SwitchLoc, Stmt *Switch, bool HasDependentValue = CondExpr->isTypeDependent() || CondExpr->isValueDependent(); unsigned CondWidth - = HasDependentValue? 0 - : static_cast(Context.getTypeSize(CondTypeBeforePromotion)); + = HasDependentValue ? 0 : Context.getIntWidth(CondTypeBeforePromotion); bool CondIsSigned = CondTypeBeforePromotion->isSignedIntegerType(); // Accumulate all of the case values in a vector so that we can sort them diff --git a/test/SemaCXX/switch.cpp b/test/SemaCXX/switch.cpp index fc13630bbf..3882a1f952 100644 --- a/test/SemaCXX/switch.cpp +++ b/test/SemaCXX/switch.cpp @@ -57,3 +57,10 @@ namespace test3 { template void foo(); template void foo(); //expected-note {{in instantiation}} } + +// PR9304 and rdar://9045501 +void click_check_header_sizes() { + switch (0 == 8) { // expected-warning {{switch condition has boolean value}} + case 0: ; + } +}