From: Chris Lattner Date: Sat, 25 Aug 2007 05:36:18 +0000 (+0000) Subject: Fix the test/Sema/format-strings.c regression. This code should be refactored. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=459e8488046be5df0bf57f0a8677316abf253167;p=clang Fix the test/Sema/format-strings.c regression. This code should be refactored. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@41398 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Sema/SemaChecking.cpp b/Sema/SemaChecking.cpp index a62c73e8fb..cc682af99f 100644 --- a/Sema/SemaChecking.cpp +++ b/Sema/SemaChecking.cpp @@ -81,6 +81,7 @@ Sema::CheckFunctionCall(Expr *Fn, /// CheckBuiltinCFStringArgument - Checks that the argument to the builtin /// CFString constructor is correct bool Sema::CheckBuiltinCFStringArgument(Expr* Arg) { + // FIXME: This should go in a helper. while (1) { if (ParenExpr *PE = dyn_cast(Arg)) Arg = PE->getSubExpr(); @@ -180,6 +181,17 @@ Sema::CheckPrintfArguments(Expr *Fn, return; } + Expr *OrigFormatExpr = Args[format_idx]; + // FIXME: This should go in a helper. + while (1) { + if (ParenExpr *PE = dyn_cast(OrigFormatExpr)) + OrigFormatExpr = PE->getSubExpr(); + else if (ImplicitCastExpr *ICE = dyn_cast(OrigFormatExpr)) + OrigFormatExpr = ICE->getSubExpr(); + else + break; + } + // CHECK: format string is not a string literal. // // Dynamically generated format strings are difficult to @@ -187,7 +199,7 @@ Sema::CheckPrintfArguments(Expr *Fn, // are string literals: (1) permits the checking of format strings by // the compiler and thereby (2) can practically remove the source of // many format string exploits. - StringLiteral *FExpr = dyn_cast(Args[format_idx]); + StringLiteral *FExpr = dyn_cast(OrigFormatExpr); if (FExpr == NULL) { Diag(Args[format_idx]->getLocStart(),