1 //===--- SemaChecking.cpp - Extra Semantic Checking -----------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // This file implements extra semantic analysis beyond what is enforced
11 // by the C type system.
13 //===----------------------------------------------------------------------===//
16 #include "clang/AST/ASTContext.h"
17 #include "clang/AST/DeclObjC.h"
18 #include "clang/AST/ExprCXX.h"
19 #include "clang/AST/ExprObjC.h"
20 #include "clang/Lex/LiteralSupport.h"
21 #include "clang/Lex/Preprocessor.h"
23 using namespace clang
;
25 /// getLocationOfStringLiteralByte - Return a source location that points to the
26 /// specified byte of the specified string literal.
28 /// Strings are amazingly complex. They can be formed from multiple tokens and
29 /// can have escape sequences in them in addition to the usual trigraph and
30 /// escaped newline business. This routine handles this complexity.
32 SourceLocation
Sema::getLocationOfStringLiteralByte(const StringLiteral
*SL
,
33 unsigned ByteNo
) const {
34 assert(!SL
->isWide() && "This doesn't work for wide strings yet");
36 // Loop over all of the tokens in this string until we find the one that
37 // contains the byte we're looking for.
40 assert(TokNo
< SL
->getNumConcatenated() && "Invalid byte number!");
41 SourceLocation StrTokLoc
= SL
->getStrTokenLoc(TokNo
);
43 // Get the spelling of the string so that we can get the data that makes up
44 // the string literal, not the identifier for the macro it is potentially
46 SourceLocation StrTokSpellingLoc
= SourceMgr
.getSpellingLoc(StrTokLoc
);
48 // Re-lex the token to get its length and original spelling.
49 std::pair
<FileID
, unsigned> LocInfo
=
50 SourceMgr
.getDecomposedLoc(StrTokSpellingLoc
);
51 std::pair
<const char *,const char *> Buffer
=
52 SourceMgr
.getBufferData(LocInfo
.first
);
53 const char *StrData
= Buffer
.first
+LocInfo
.second
;
55 // Create a langops struct and enable trigraphs. This is sufficient for
58 LangOpts
.Trigraphs
= true;
60 // Create a lexer starting at the beginning of this token.
61 Lexer
TheLexer(StrTokSpellingLoc
, LangOpts
, Buffer
.first
, StrData
,
64 TheLexer
.LexFromRawLexer(TheTok
);
66 // Use the StringLiteralParser to compute the length of the string in bytes.
67 StringLiteralParser
SLP(&TheTok
, 1, PP
);
68 unsigned TokNumBytes
= SLP
.GetStringLength();
70 // If the byte is in this token, return the location of the byte.
71 if (ByteNo
< TokNumBytes
||
72 (ByteNo
== TokNumBytes
&& TokNo
== SL
->getNumConcatenated())) {
74 StringLiteralParser::getOffsetOfStringByte(TheTok
, ByteNo
, PP
);
76 // Now that we know the offset of the token in the spelling, use the
77 // preprocessor to get the offset in the original source.
78 return PP
.AdvanceToTokenCharacter(StrTokLoc
, Offset
);
81 // Move to the next string token.
83 ByteNo
-= TokNumBytes
;
88 /// CheckFunctionCall - Check a direct function call for various correctness
89 /// and safety properties not strictly enforced by the C type system.
90 Action::OwningExprResult
91 Sema::CheckFunctionCall(FunctionDecl
*FDecl
, CallExpr
*TheCall
) {
92 OwningExprResult
TheCallResult(Owned(TheCall
));
93 // Get the IdentifierInfo* for the called function.
94 IdentifierInfo
*FnInfo
= FDecl
->getIdentifier();
96 // None of the checks below are needed for functions that don't have
97 // simple names (e.g., C++ conversion functions).
99 return move(TheCallResult
);
101 switch (FDecl
->getBuiltinID(Context
)) {
102 case Builtin::BI__builtin___CFStringMakeConstantString
:
103 assert(TheCall
->getNumArgs() == 1 &&
104 "Wrong # arguments to builtin CFStringMakeConstantString");
105 if (CheckObjCString(TheCall
->getArg(0)))
107 return move(TheCallResult
);
108 case Builtin::BI__builtin_stdarg_start
:
109 case Builtin::BI__builtin_va_start
:
110 if (SemaBuiltinVAStart(TheCall
))
112 return move(TheCallResult
);
113 case Builtin::BI__builtin_isgreater
:
114 case Builtin::BI__builtin_isgreaterequal
:
115 case Builtin::BI__builtin_isless
:
116 case Builtin::BI__builtin_islessequal
:
117 case Builtin::BI__builtin_islessgreater
:
118 case Builtin::BI__builtin_isunordered
:
119 if (SemaBuiltinUnorderedCompare(TheCall
))
121 return move(TheCallResult
);
122 case Builtin::BI__builtin_return_address
:
123 case Builtin::BI__builtin_frame_address
:
124 if (SemaBuiltinStackAddress(TheCall
))
126 return move(TheCallResult
);
127 case Builtin::BI__builtin_shufflevector
:
128 return SemaBuiltinShuffleVector(TheCall
);
129 // TheCall will be freed by the smart pointer here, but that's fine, since
130 // SemaBuiltinShuffleVector guts it, but then doesn't release it.
131 case Builtin::BI__builtin_prefetch
:
132 if (SemaBuiltinPrefetch(TheCall
))
134 return move(TheCallResult
);
135 case Builtin::BI__builtin_object_size
:
136 if (SemaBuiltinObjectSize(TheCall
))
138 return move(TheCallResult
);
139 case Builtin::BI__builtin_longjmp
:
140 if (SemaBuiltinLongjmp(TheCall
))
142 return move(TheCallResult
);
143 case Builtin::BI__sync_fetch_and_add
:
144 case Builtin::BI__sync_fetch_and_sub
:
145 case Builtin::BI__sync_fetch_and_or
:
146 case Builtin::BI__sync_fetch_and_and
:
147 case Builtin::BI__sync_fetch_and_xor
:
148 case Builtin::BI__sync_fetch_and_nand
:
149 case Builtin::BI__sync_add_and_fetch
:
150 case Builtin::BI__sync_sub_and_fetch
:
151 case Builtin::BI__sync_and_and_fetch
:
152 case Builtin::BI__sync_or_and_fetch
:
153 case Builtin::BI__sync_xor_and_fetch
:
154 case Builtin::BI__sync_nand_and_fetch
:
155 case Builtin::BI__sync_val_compare_and_swap
:
156 case Builtin::BI__sync_bool_compare_and_swap
:
157 case Builtin::BI__sync_lock_test_and_set
:
158 case Builtin::BI__sync_lock_release
:
159 if (SemaBuiltinAtomicOverloaded(TheCall
))
161 return move(TheCallResult
);
164 // FIXME: This mechanism should be abstracted to be less fragile and
165 // more efficient. For example, just map function ids to custom
169 if (const FormatAttr
*Format
= FDecl
->getAttr
<FormatAttr
>()) {
170 if (Format
->getType() == "printf") {
171 bool HasVAListArg
= Format
->getFirstArg() == 0;
173 if (const FunctionProtoType
*Proto
174 = FDecl
->getType()->getAsFunctionProtoType())
175 HasVAListArg
= !Proto
->isVariadic();
177 CheckPrintfArguments(TheCall
, HasVAListArg
, Format
->getFormatIdx() - 1,
178 HasVAListArg
? 0 : Format
->getFirstArg() - 1);
181 for (const Attr
*attr
= FDecl
->getAttrs();
182 attr
; attr
= attr
->getNext()) {
183 if (const NonNullAttr
*NonNull
= dyn_cast
<NonNullAttr
>(attr
))
184 CheckNonNullArguments(NonNull
, TheCall
);
187 return move(TheCallResult
);
190 Action::OwningExprResult
191 Sema::CheckBlockCall(NamedDecl
*NDecl
, CallExpr
*TheCall
) {
193 OwningExprResult
TheCallResult(Owned(TheCall
));
195 const FormatAttr
*Format
= NDecl
->getAttr
<FormatAttr
>();
197 return move(TheCallResult
);
198 const VarDecl
*V
= dyn_cast
<VarDecl
>(NDecl
);
200 return move(TheCallResult
);
201 QualType Ty
= V
->getType();
202 if (!Ty
->isBlockPointerType())
203 return move(TheCallResult
);
204 if (Format
->getType() == "printf") {
205 bool HasVAListArg
= Format
->getFirstArg() == 0;
207 const FunctionType
*FT
=
208 Ty
->getAsBlockPointerType()->getPointeeType()->getAsFunctionType();
209 if (const FunctionProtoType
*Proto
= dyn_cast
<FunctionProtoType
>(FT
))
210 HasVAListArg
= !Proto
->isVariadic();
212 CheckPrintfArguments(TheCall
, HasVAListArg
, Format
->getFormatIdx() - 1,
213 HasVAListArg
? 0 : Format
->getFirstArg() - 1);
215 return move(TheCallResult
);
218 /// SemaBuiltinAtomicOverloaded - We have a call to a function like
219 /// __sync_fetch_and_add, which is an overloaded function based on the pointer
220 /// type of its first argument. The main ActOnCallExpr routines have already
221 /// promoted the types of arguments because all of these calls are prototyped as
224 /// This function goes through and does final semantic checking for these
226 bool Sema::SemaBuiltinAtomicOverloaded(CallExpr
*TheCall
) {
227 DeclRefExpr
*DRE
=cast
<DeclRefExpr
>(TheCall
->getCallee()->IgnoreParenCasts());
228 FunctionDecl
*FDecl
= cast
<FunctionDecl
>(DRE
->getDecl());
230 // Ensure that we have at least one argument to do type inference from.
231 if (TheCall
->getNumArgs() < 1)
232 return Diag(TheCall
->getLocEnd(), diag::err_typecheck_call_too_few_args
)
233 << 0 << TheCall
->getCallee()->getSourceRange();
235 // Inspect the first argument of the atomic builtin. This should always be
236 // a pointer type, whose element is an integral scalar or pointer type.
237 // Because it is a pointer type, we don't have to worry about any implicit
239 Expr
*FirstArg
= TheCall
->getArg(0);
240 if (!FirstArg
->getType()->isPointerType())
241 return Diag(DRE
->getLocStart(), diag::err_atomic_builtin_must_be_pointer
)
242 << FirstArg
->getType() << FirstArg
->getSourceRange();
244 QualType ValType
= FirstArg
->getType()->getAsPointerType()->getPointeeType();
245 if (!ValType
->isIntegerType() && !ValType
->isPointerType() &&
246 !ValType
->isBlockPointerType())
247 return Diag(DRE
->getLocStart(),
248 diag::err_atomic_builtin_must_be_pointer_intptr
)
249 << FirstArg
->getType() << FirstArg
->getSourceRange();
251 // We need to figure out which concrete builtin this maps onto. For example,
252 // __sync_fetch_and_add with a 2 byte object turns into
253 // __sync_fetch_and_add_2.
254 #define BUILTIN_ROW(x) \
255 { Builtin::BI##x##_1, Builtin::BI##x##_2, Builtin::BI##x##_4, \
256 Builtin::BI##x##_8, Builtin::BI##x##_16 }
258 static const unsigned BuiltinIndices
[][5] = {
259 BUILTIN_ROW(__sync_fetch_and_add
),
260 BUILTIN_ROW(__sync_fetch_and_sub
),
261 BUILTIN_ROW(__sync_fetch_and_or
),
262 BUILTIN_ROW(__sync_fetch_and_and
),
263 BUILTIN_ROW(__sync_fetch_and_xor
),
264 BUILTIN_ROW(__sync_fetch_and_nand
),
266 BUILTIN_ROW(__sync_add_and_fetch
),
267 BUILTIN_ROW(__sync_sub_and_fetch
),
268 BUILTIN_ROW(__sync_and_and_fetch
),
269 BUILTIN_ROW(__sync_or_and_fetch
),
270 BUILTIN_ROW(__sync_xor_and_fetch
),
271 BUILTIN_ROW(__sync_nand_and_fetch
),
273 BUILTIN_ROW(__sync_val_compare_and_swap
),
274 BUILTIN_ROW(__sync_bool_compare_and_swap
),
275 BUILTIN_ROW(__sync_lock_test_and_set
),
276 BUILTIN_ROW(__sync_lock_release
)
280 // Determine the index of the size.
282 switch (Context
.getTypeSize(ValType
)/8) {
283 case 1: SizeIndex
= 0; break;
284 case 2: SizeIndex
= 1; break;
285 case 4: SizeIndex
= 2; break;
286 case 8: SizeIndex
= 3; break;
287 case 16: SizeIndex
= 4; break;
289 return Diag(DRE
->getLocStart(), diag::err_atomic_builtin_pointer_size
)
290 << FirstArg
->getType() << FirstArg
->getSourceRange();
293 // Each of these builtins has one pointer argument, followed by some number of
294 // values (0, 1 or 2) followed by a potentially empty varags list of stuff
295 // that we ignore. Find out which row of BuiltinIndices to read from as well
296 // as the number of fixed args.
297 unsigned BuiltinID
= FDecl
->getBuiltinID(Context
);
298 unsigned BuiltinIndex
, NumFixed
= 1;
300 default: assert(0 && "Unknown overloaded atomic builtin!");
301 case Builtin::BI__sync_fetch_and_add
: BuiltinIndex
= 0; break;
302 case Builtin::BI__sync_fetch_and_sub
: BuiltinIndex
= 1; break;
303 case Builtin::BI__sync_fetch_and_or
: BuiltinIndex
= 2; break;
304 case Builtin::BI__sync_fetch_and_and
: BuiltinIndex
= 3; break;
305 case Builtin::BI__sync_fetch_and_xor
: BuiltinIndex
= 4; break;
306 case Builtin::BI__sync_fetch_and_nand
:BuiltinIndex
= 5; break;
308 case Builtin::BI__sync_add_and_fetch
: BuiltinIndex
= 6; break;
309 case Builtin::BI__sync_sub_and_fetch
: BuiltinIndex
= 7; break;
310 case Builtin::BI__sync_and_and_fetch
: BuiltinIndex
= 8; break;
311 case Builtin::BI__sync_or_and_fetch
: BuiltinIndex
= 9; break;
312 case Builtin::BI__sync_xor_and_fetch
: BuiltinIndex
=10; break;
313 case Builtin::BI__sync_nand_and_fetch
:BuiltinIndex
=11; break;
315 case Builtin::BI__sync_val_compare_and_swap
:
319 case Builtin::BI__sync_bool_compare_and_swap
:
323 case Builtin::BI__sync_lock_test_and_set
: BuiltinIndex
= 14; break;
324 case Builtin::BI__sync_lock_release
:
330 // Now that we know how many fixed arguments we expect, first check that we
331 // have at least that many.
332 if (TheCall
->getNumArgs() < 1+NumFixed
)
333 return Diag(TheCall
->getLocEnd(), diag::err_typecheck_call_too_few_args
)
334 << 0 << TheCall
->getCallee()->getSourceRange();
337 // Get the decl for the concrete builtin from this, we can tell what the
338 // concrete integer type we should convert to is.
339 unsigned NewBuiltinID
= BuiltinIndices
[BuiltinIndex
][SizeIndex
];
340 const char *NewBuiltinName
= Context
.BuiltinInfo
.GetName(NewBuiltinID
);
341 IdentifierInfo
*NewBuiltinII
= PP
.getIdentifierInfo(NewBuiltinName
);
342 FunctionDecl
*NewBuiltinDecl
=
343 cast
<FunctionDecl
>(LazilyCreateBuiltin(NewBuiltinII
, NewBuiltinID
,
344 TUScope
, false, DRE
->getLocStart()));
345 const FunctionProtoType
*BuiltinFT
=
346 NewBuiltinDecl
->getType()->getAsFunctionProtoType();
347 ValType
= BuiltinFT
->getArgType(0)->getAsPointerType()->getPointeeType();
349 // If the first type needs to be converted (e.g. void** -> int*), do it now.
350 if (BuiltinFT
->getArgType(0) != FirstArg
->getType()) {
351 ImpCastExprToType(FirstArg
, BuiltinFT
->getArgType(0), false);
352 TheCall
->setArg(0, FirstArg
);
355 // Next, walk the valid ones promoting to the right type.
356 for (unsigned i
= 0; i
!= NumFixed
; ++i
) {
357 Expr
*Arg
= TheCall
->getArg(i
+1);
359 // If the argument is an implicit cast, then there was a promotion due to
360 // "...", just remove it now.
361 if (ImplicitCastExpr
*ICE
= dyn_cast
<ImplicitCastExpr
>(Arg
)) {
362 Arg
= ICE
->getSubExpr();
364 ICE
->Destroy(Context
);
365 TheCall
->setArg(i
+1, Arg
);
368 // GCC does an implicit conversion to the pointer or integer ValType. This
369 // can fail in some cases (1i -> int**), check for this error case now.
370 if (CheckCastTypes(Arg
->getSourceRange(), ValType
, Arg
))
373 // Okay, we have something that *can* be converted to the right type. Check
374 // to see if there is a potentially weird extension going on here. This can
375 // happen when you do an atomic operation on something like an char* and
376 // pass in 42. The 42 gets converted to char. This is even more strange
377 // for things like 45.123 -> char, etc.
378 // FIXME: Do this check.
379 ImpCastExprToType(Arg
, ValType
, false);
380 TheCall
->setArg(i
+1, Arg
);
383 // Switch the DeclRefExpr to refer to the new decl.
384 DRE
->setDecl(NewBuiltinDecl
);
385 DRE
->setType(NewBuiltinDecl
->getType());
387 // Set the callee in the CallExpr.
388 // FIXME: This leaks the original parens and implicit casts.
389 Expr
*PromotedCall
= DRE
;
390 UsualUnaryConversions(PromotedCall
);
391 TheCall
->setCallee(PromotedCall
);
394 // Change the result type of the call to match the result type of the decl.
395 TheCall
->setType(NewBuiltinDecl
->getResultType());
400 /// CheckObjCString - Checks that the argument to the builtin
401 /// CFString constructor is correct
402 /// FIXME: GCC currently emits the following warning:
403 /// "warning: input conversion stopped due to an input byte that does not
404 /// belong to the input codeset UTF-8"
405 /// Note: It might also make sense to do the UTF-16 conversion here (would
406 /// simplify the backend).
407 bool Sema::CheckObjCString(Expr
*Arg
) {
408 Arg
= Arg
->IgnoreParenCasts();
409 StringLiteral
*Literal
= dyn_cast
<StringLiteral
>(Arg
);
411 if (!Literal
|| Literal
->isWide()) {
412 Diag(Arg
->getLocStart(), diag::err_cfstring_literal_not_string_constant
)
413 << Arg
->getSourceRange();
417 const char *Data
= Literal
->getStrData();
418 unsigned Length
= Literal
->getByteLength();
420 for (unsigned i
= 0; i
< Length
; ++i
) {
422 Diag(getLocationOfStringLiteralByte(Literal
, i
),
423 diag::warn_cfstring_literal_contains_nul_character
)
424 << Arg
->getSourceRange();
432 /// SemaBuiltinVAStart - Check the arguments to __builtin_va_start for validity.
433 /// Emit an error and return true on failure, return false on success.
434 bool Sema::SemaBuiltinVAStart(CallExpr
*TheCall
) {
435 Expr
*Fn
= TheCall
->getCallee();
436 if (TheCall
->getNumArgs() > 2) {
437 Diag(TheCall
->getArg(2)->getLocStart(),
438 diag::err_typecheck_call_too_many_args
)
439 << 0 /*function call*/ << Fn
->getSourceRange()
440 << SourceRange(TheCall
->getArg(2)->getLocStart(),
441 (*(TheCall
->arg_end()-1))->getLocEnd());
445 if (TheCall
->getNumArgs() < 2) {
446 return Diag(TheCall
->getLocEnd(), diag::err_typecheck_call_too_few_args
)
447 << 0 /*function call*/;
450 // Determine whether the current function is variadic or not.
453 isVariadic
= CurBlock
->isVariadic
;
454 else if (getCurFunctionDecl()) {
455 if (FunctionProtoType
* FTP
=
456 dyn_cast
<FunctionProtoType
>(getCurFunctionDecl()->getType()))
457 isVariadic
= FTP
->isVariadic();
461 isVariadic
= getCurMethodDecl()->isVariadic();
465 Diag(Fn
->getLocStart(), diag::err_va_start_used_in_non_variadic_function
);
469 // Verify that the second argument to the builtin is the last argument of the
470 // current function or method.
471 bool SecondArgIsLastNamedArgument
= false;
472 const Expr
*Arg
= TheCall
->getArg(1)->IgnoreParenCasts();
474 if (const DeclRefExpr
*DR
= dyn_cast
<DeclRefExpr
>(Arg
)) {
475 if (const ParmVarDecl
*PV
= dyn_cast
<ParmVarDecl
>(DR
->getDecl())) {
476 // FIXME: This isn't correct for methods (results in bogus warning).
477 // Get the last formal in the current function.
478 const ParmVarDecl
*LastArg
;
480 LastArg
= *(CurBlock
->TheDecl
->param_end()-1);
481 else if (FunctionDecl
*FD
= getCurFunctionDecl())
482 LastArg
= *(FD
->param_end()-1);
484 LastArg
= *(getCurMethodDecl()->param_end()-1);
485 SecondArgIsLastNamedArgument
= PV
== LastArg
;
489 if (!SecondArgIsLastNamedArgument
)
490 Diag(TheCall
->getArg(1)->getLocStart(),
491 diag::warn_second_parameter_of_va_start_not_last_named_argument
);
495 /// SemaBuiltinUnorderedCompare - Handle functions like __builtin_isgreater and
496 /// friends. This is declared to take (...), so we have to check everything.
497 bool Sema::SemaBuiltinUnorderedCompare(CallExpr
*TheCall
) {
498 if (TheCall
->getNumArgs() < 2)
499 return Diag(TheCall
->getLocEnd(), diag::err_typecheck_call_too_few_args
)
500 << 0 /*function call*/;
501 if (TheCall
->getNumArgs() > 2)
502 return Diag(TheCall
->getArg(2)->getLocStart(),
503 diag::err_typecheck_call_too_many_args
)
504 << 0 /*function call*/
505 << SourceRange(TheCall
->getArg(2)->getLocStart(),
506 (*(TheCall
->arg_end()-1))->getLocEnd());
508 Expr
*OrigArg0
= TheCall
->getArg(0);
509 Expr
*OrigArg1
= TheCall
->getArg(1);
511 // Do standard promotions between the two arguments, returning their common
513 QualType Res
= UsualArithmeticConversions(OrigArg0
, OrigArg1
, false);
515 // Make sure any conversions are pushed back into the call; this is
516 // type safe since unordered compare builtins are declared as "_Bool
518 TheCall
->setArg(0, OrigArg0
);
519 TheCall
->setArg(1, OrigArg1
);
521 if (OrigArg0
->isTypeDependent() || OrigArg1
->isTypeDependent())
524 // If the common type isn't a real floating type, then the arguments were
525 // invalid for this operation.
526 if (!Res
->isRealFloatingType())
527 return Diag(OrigArg0
->getLocStart(),
528 diag::err_typecheck_call_invalid_ordered_compare
)
529 << OrigArg0
->getType() << OrigArg1
->getType()
530 << SourceRange(OrigArg0
->getLocStart(), OrigArg1
->getLocEnd());
535 bool Sema::SemaBuiltinStackAddress(CallExpr
*TheCall
) {
536 // The signature for these builtins is exact; the only thing we need
537 // to check is that the argument is a constant.
539 if (!TheCall
->getArg(0)->isTypeDependent() &&
540 !TheCall
->getArg(0)->isValueDependent() &&
541 !TheCall
->getArg(0)->isIntegerConstantExpr(Context
, &Loc
))
542 return Diag(Loc
, diag::err_stack_const_level
) << TheCall
->getSourceRange();
547 /// SemaBuiltinShuffleVector - Handle __builtin_shufflevector.
548 // This is declared to take (...), so we have to check everything.
549 Action::OwningExprResult
Sema::SemaBuiltinShuffleVector(CallExpr
*TheCall
) {
550 if (TheCall
->getNumArgs() < 3)
551 return ExprError(Diag(TheCall
->getLocEnd(),
552 diag::err_typecheck_call_too_few_args
)
553 << 0 /*function call*/ << TheCall
->getSourceRange());
555 unsigned numElements
= std::numeric_limits
<unsigned>::max();
556 if (!TheCall
->getArg(0)->isTypeDependent() &&
557 !TheCall
->getArg(1)->isTypeDependent()) {
558 QualType FAType
= TheCall
->getArg(0)->getType();
559 QualType SAType
= TheCall
->getArg(1)->getType();
561 if (!FAType
->isVectorType() || !SAType
->isVectorType()) {
562 Diag(TheCall
->getLocStart(), diag::err_shufflevector_non_vector
)
563 << SourceRange(TheCall
->getArg(0)->getLocStart(),
564 TheCall
->getArg(1)->getLocEnd());
568 if (Context
.getCanonicalType(FAType
).getUnqualifiedType() !=
569 Context
.getCanonicalType(SAType
).getUnqualifiedType()) {
570 Diag(TheCall
->getLocStart(), diag::err_shufflevector_incompatible_vector
)
571 << SourceRange(TheCall
->getArg(0)->getLocStart(),
572 TheCall
->getArg(1)->getLocEnd());
576 numElements
= FAType
->getAsVectorType()->getNumElements();
577 if (TheCall
->getNumArgs() != numElements
+2) {
578 if (TheCall
->getNumArgs() < numElements
+2)
579 return ExprError(Diag(TheCall
->getLocEnd(),
580 diag::err_typecheck_call_too_few_args
)
581 << 0 /*function call*/ << TheCall
->getSourceRange());
582 return ExprError(Diag(TheCall
->getLocEnd(),
583 diag::err_typecheck_call_too_many_args
)
584 << 0 /*function call*/ << TheCall
->getSourceRange());
588 for (unsigned i
= 2; i
< TheCall
->getNumArgs(); i
++) {
589 if (TheCall
->getArg(i
)->isTypeDependent() ||
590 TheCall
->getArg(i
)->isValueDependent())
593 llvm::APSInt
Result(32);
594 if (!TheCall
->getArg(i
)->isIntegerConstantExpr(Result
, Context
))
595 return ExprError(Diag(TheCall
->getLocStart(),
596 diag::err_shufflevector_nonconstant_argument
)
597 << TheCall
->getArg(i
)->getSourceRange());
599 if (Result
.getActiveBits() > 64 || Result
.getZExtValue() >= numElements
*2)
600 return ExprError(Diag(TheCall
->getLocStart(),
601 diag::err_shufflevector_argument_too_large
)
602 << TheCall
->getArg(i
)->getSourceRange());
605 llvm::SmallVector
<Expr
*, 32> exprs
;
607 for (unsigned i
= 0, e
= TheCall
->getNumArgs(); i
!= e
; i
++) {
608 exprs
.push_back(TheCall
->getArg(i
));
609 TheCall
->setArg(i
, 0);
612 return Owned(new (Context
) ShuffleVectorExpr(exprs
.begin(), exprs
.size(),
614 TheCall
->getCallee()->getLocStart(),
615 TheCall
->getRParenLoc()));
618 /// SemaBuiltinPrefetch - Handle __builtin_prefetch.
619 // This is declared to take (const void*, ...) and can take two
620 // optional constant int args.
621 bool Sema::SemaBuiltinPrefetch(CallExpr
*TheCall
) {
622 unsigned NumArgs
= TheCall
->getNumArgs();
625 return Diag(TheCall
->getLocEnd(), diag::err_typecheck_call_too_many_args
)
626 << 0 /*function call*/ << TheCall
->getSourceRange();
628 // Argument 0 is checked for us and the remaining arguments must be
629 // constant integers.
630 for (unsigned i
= 1; i
!= NumArgs
; ++i
) {
631 Expr
*Arg
= TheCall
->getArg(i
);
632 if (Arg
->isTypeDependent())
635 QualType RWType
= Arg
->getType();
637 const BuiltinType
*BT
= RWType
->getAsBuiltinType();
639 if (!BT
|| BT
->getKind() != BuiltinType::Int
)
640 return Diag(TheCall
->getLocStart(), diag::err_prefetch_invalid_argument
)
641 << SourceRange(Arg
->getLocStart(), Arg
->getLocEnd());
643 if (Arg
->isValueDependent())
646 if (!Arg
->isIntegerConstantExpr(Result
, Context
))
647 return Diag(TheCall
->getLocStart(), diag::err_prefetch_invalid_argument
)
648 << SourceRange(Arg
->getLocStart(), Arg
->getLocEnd());
650 // FIXME: gcc issues a warning and rewrites these to 0. These
651 // seems especially odd for the third argument since the default
654 if (Result
.getSExtValue() < 0 || Result
.getSExtValue() > 1)
655 return Diag(TheCall
->getLocStart(), diag::err_argument_invalid_range
)
656 << "0" << "1" << SourceRange(Arg
->getLocStart(), Arg
->getLocEnd());
658 if (Result
.getSExtValue() < 0 || Result
.getSExtValue() > 3)
659 return Diag(TheCall
->getLocStart(), diag::err_argument_invalid_range
)
660 << "0" << "3" << SourceRange(Arg
->getLocStart(), Arg
->getLocEnd());
667 /// SemaBuiltinObjectSize - Handle __builtin_object_size(void *ptr,
668 /// int type). This simply type checks that type is one of the defined
670 bool Sema::SemaBuiltinObjectSize(CallExpr
*TheCall
) {
671 Expr
*Arg
= TheCall
->getArg(1);
672 if (Arg
->isTypeDependent())
675 QualType ArgType
= Arg
->getType();
676 const BuiltinType
*BT
= ArgType
->getAsBuiltinType();
677 llvm::APSInt
Result(32);
678 if (!BT
|| BT
->getKind() != BuiltinType::Int
)
679 return Diag(TheCall
->getLocStart(), diag::err_object_size_invalid_argument
)
680 << SourceRange(Arg
->getLocStart(), Arg
->getLocEnd());
682 if (Arg
->isValueDependent())
685 if (!Arg
->isIntegerConstantExpr(Result
, Context
)) {
686 return Diag(TheCall
->getLocStart(), diag::err_object_size_invalid_argument
)
687 << SourceRange(Arg
->getLocStart(), Arg
->getLocEnd());
690 if (Result
.getSExtValue() < 0 || Result
.getSExtValue() > 3) {
691 return Diag(TheCall
->getLocStart(), diag::err_argument_invalid_range
)
692 << "0" << "3" << SourceRange(Arg
->getLocStart(), Arg
->getLocEnd());
698 /// SemaBuiltinLongjmp - Handle __builtin_longjmp(void *env[5], int val).
699 /// This checks that val is a constant 1.
700 bool Sema::SemaBuiltinLongjmp(CallExpr
*TheCall
) {
701 Expr
*Arg
= TheCall
->getArg(1);
702 if (Arg
->isTypeDependent() || Arg
->isValueDependent())
705 llvm::APSInt
Result(32);
706 if (!Arg
->isIntegerConstantExpr(Result
, Context
) || Result
!= 1)
707 return Diag(TheCall
->getLocStart(), diag::err_builtin_longjmp_invalid_val
)
708 << SourceRange(Arg
->getLocStart(), Arg
->getLocEnd());
713 // Handle i > 1 ? "x" : "y", recursivelly
714 bool Sema::SemaCheckStringLiteral(const Expr
*E
, const CallExpr
*TheCall
,
716 unsigned format_idx
, unsigned firstDataArg
) {
717 if (E
->isTypeDependent() || E
->isValueDependent())
720 switch (E
->getStmtClass()) {
721 case Stmt::ConditionalOperatorClass
: {
722 const ConditionalOperator
*C
= cast
<ConditionalOperator
>(E
);
723 return SemaCheckStringLiteral(C
->getLHS(), TheCall
,
724 HasVAListArg
, format_idx
, firstDataArg
)
725 && SemaCheckStringLiteral(C
->getRHS(), TheCall
,
726 HasVAListArg
, format_idx
, firstDataArg
);
729 case Stmt::ImplicitCastExprClass
: {
730 const ImplicitCastExpr
*Expr
= cast
<ImplicitCastExpr
>(E
);
731 return SemaCheckStringLiteral(Expr
->getSubExpr(), TheCall
, HasVAListArg
,
732 format_idx
, firstDataArg
);
735 case Stmt::ParenExprClass
: {
736 const ParenExpr
*Expr
= cast
<ParenExpr
>(E
);
737 return SemaCheckStringLiteral(Expr
->getSubExpr(), TheCall
, HasVAListArg
,
738 format_idx
, firstDataArg
);
741 case Stmt::DeclRefExprClass
: {
742 const DeclRefExpr
*DR
= cast
<DeclRefExpr
>(E
);
744 // As an exception, do not flag errors for variables binding to
745 // const string literals.
746 if (const VarDecl
*VD
= dyn_cast
<VarDecl
>(DR
->getDecl())) {
747 bool isConstant
= false;
748 QualType T
= DR
->getType();
750 if (const ArrayType
*AT
= Context
.getAsArrayType(T
)) {
751 isConstant
= AT
->getElementType().isConstant(Context
);
753 else if (const PointerType
*PT
= T
->getAsPointerType()) {
754 isConstant
= T
.isConstant(Context
) &&
755 PT
->getPointeeType().isConstant(Context
);
759 const VarDecl
*Def
= 0;
760 if (const Expr
*Init
= VD
->getDefinition(Def
))
761 return SemaCheckStringLiteral(Init
, TheCall
,
762 HasVAListArg
, format_idx
, firstDataArg
);
765 // For vprintf* functions (i.e., HasVAListArg==true), we add a
766 // special check to see if the format string is a function parameter
767 // of the function calling the printf function. If the function
768 // has an attribute indicating it is a printf-like function, then we
769 // should suppress warnings concerning non-literals being used in a call
770 // to a vprintf function. For example:
773 // logmessage(char const *fmt __attribute__ (format (printf, 1, 2)), ...){
775 // va_start(ap, fmt);
776 // vprintf(fmt, ap); // Do NOT emit a warning about "fmt".
780 // FIXME: We don't have full attribute support yet, so just check to see
781 // if the argument is a DeclRefExpr that references a parameter. We'll
782 // add proper support for checking the attribute later.
784 if (isa
<ParmVarDecl
>(VD
))
791 case Stmt::CallExprClass
: {
792 const CallExpr
*CE
= cast
<CallExpr
>(E
);
793 if (const ImplicitCastExpr
*ICE
794 = dyn_cast
<ImplicitCastExpr
>(CE
->getCallee())) {
795 if (const DeclRefExpr
*DRE
= dyn_cast
<DeclRefExpr
>(ICE
->getSubExpr())) {
796 if (const FunctionDecl
*FD
= dyn_cast
<FunctionDecl
>(DRE
->getDecl())) {
797 if (const FormatArgAttr
*FA
= FD
->getAttr
<FormatArgAttr
>()) {
798 unsigned ArgIndex
= FA
->getFormatIdx();
799 const Expr
*Arg
= CE
->getArg(ArgIndex
- 1);
801 return SemaCheckStringLiteral(Arg
, TheCall
, HasVAListArg
,
802 format_idx
, firstDataArg
);
810 case Stmt::ObjCStringLiteralClass
:
811 case Stmt::StringLiteralClass
: {
812 const StringLiteral
*StrE
= NULL
;
814 if (const ObjCStringLiteral
*ObjCFExpr
= dyn_cast
<ObjCStringLiteral
>(E
))
815 StrE
= ObjCFExpr
->getString();
817 StrE
= cast
<StringLiteral
>(E
);
820 CheckPrintfString(StrE
, E
, TheCall
, HasVAListArg
, format_idx
,
834 Sema::CheckNonNullArguments(const NonNullAttr
*NonNull
, const CallExpr
*TheCall
)
836 for (NonNullAttr::iterator i
= NonNull
->begin(), e
= NonNull
->end();
838 const Expr
*ArgExpr
= TheCall
->getArg(*i
);
839 if (ArgExpr
->isNullPointerConstant(Context
))
840 Diag(TheCall
->getCallee()->getLocStart(), diag::warn_null_arg
)
841 << ArgExpr
->getSourceRange();
845 /// CheckPrintfArguments - Check calls to printf (and similar functions) for
846 /// correct use of format strings.
848 /// HasVAListArg - A predicate indicating whether the printf-like
849 /// function is passed an explicit va_arg argument (e.g., vprintf)
851 /// format_idx - The index into Args for the format string.
853 /// Improper format strings to functions in the printf family can be
854 /// the source of bizarre bugs and very serious security holes. A
855 /// good source of information is available in the following paper
856 /// (which includes additional references):
858 /// FormatGuard: Automatic Protection From printf Format String
859 /// Vulnerabilities, Proceedings of the 10th USENIX Security Symposium, 2001.
861 /// Functionality implemented:
863 /// We can statically check the following properties for string
864 /// literal format strings for non v.*printf functions (where the
865 /// arguments are passed directly):
867 /// (1) Are the number of format conversions equal to the number of
870 /// (2) Does each format conversion correctly match the type of the
871 /// corresponding data argument? (TODO)
873 /// Moreover, for all printf functions we can:
875 /// (3) Check for a missing format string (when not caught by type checking).
877 /// (4) Check for no-operation flags; e.g. using "#" with format
878 /// conversion 'c' (TODO)
880 /// (5) Check the use of '%n', a major source of security holes.
882 /// (6) Check for malformed format conversions that don't specify anything.
884 /// (7) Check for empty format strings. e.g: printf("");
886 /// (8) Check that the format string is a wide literal.
888 /// (9) Also check the arguments of functions with the __format__ attribute.
891 /// All of these checks can be done by parsing the format string.
893 /// For now, we ONLY do (1), (3), (5), (6), (7), and (8).
895 Sema::CheckPrintfArguments(const CallExpr
*TheCall
, bool HasVAListArg
,
896 unsigned format_idx
, unsigned firstDataArg
) {
897 const Expr
*Fn
= TheCall
->getCallee();
899 // CHECK: printf-like function is called with no format string.
900 if (format_idx
>= TheCall
->getNumArgs()) {
901 Diag(TheCall
->getRParenLoc(), diag::warn_printf_missing_format_string
)
902 << Fn
->getSourceRange();
906 const Expr
*OrigFormatExpr
= TheCall
->getArg(format_idx
)->IgnoreParenCasts();
908 // CHECK: format string is not a string literal.
910 // Dynamically generated format strings are difficult to
911 // automatically vet at compile time. Requiring that format strings
912 // are string literals: (1) permits the checking of format strings by
913 // the compiler and thereby (2) can practically remove the source of
914 // many format string exploits.
916 // Format string can be either ObjC string (e.g. @"%d") or
917 // C string (e.g. "%d")
918 // ObjC string uses the same format specifiers as C string, so we can use
919 // the same format string checking logic for both ObjC and C strings.
920 if (SemaCheckStringLiteral(OrigFormatExpr
, TheCall
, HasVAListArg
, format_idx
,
922 return; // Literal format string found, check done!
924 // If there are no arguments specified, warn with -Wformat-security, otherwise
925 // warn only with -Wformat-nonliteral.
926 if (TheCall
->getNumArgs() == format_idx
+1)
927 Diag(TheCall
->getArg(format_idx
)->getLocStart(),
928 diag::warn_printf_nonliteral_noargs
)
929 << OrigFormatExpr
->getSourceRange();
931 Diag(TheCall
->getArg(format_idx
)->getLocStart(),
932 diag::warn_printf_nonliteral
)
933 << OrigFormatExpr
->getSourceRange();
936 void Sema::CheckPrintfString(const StringLiteral
*FExpr
,
937 const Expr
*OrigFormatExpr
,
938 const CallExpr
*TheCall
, bool HasVAListArg
,
939 unsigned format_idx
, unsigned firstDataArg
) {
941 const ObjCStringLiteral
*ObjCFExpr
=
942 dyn_cast
<ObjCStringLiteral
>(OrigFormatExpr
);
944 // CHECK: is the format string a wide literal?
945 if (FExpr
->isWide()) {
946 Diag(FExpr
->getLocStart(),
947 diag::warn_printf_format_string_is_wide_literal
)
948 << OrigFormatExpr
->getSourceRange();
952 // Str - The format string. NOTE: this is NOT null-terminated!
953 const char *Str
= FExpr
->getStrData();
955 // CHECK: empty format string?
956 unsigned StrLen
= FExpr
->getByteLength();
959 Diag(FExpr
->getLocStart(), diag::warn_printf_empty_format_string
)
960 << OrigFormatExpr
->getSourceRange();
964 // We process the format string using a binary state machine. The
965 // current state is stored in CurrentState.
969 } CurrentState
= state_OrdChr
;
971 // numConversions - The number of conversions seen so far. This is
972 // incremented as we traverse the format string.
973 unsigned numConversions
= 0;
975 // numDataArgs - The number of data arguments after the format
976 // string. This can only be determined for non vprintf-like
977 // functions. For those functions, this value is 1 (the sole
979 unsigned numDataArgs
= TheCall
->getNumArgs()-firstDataArg
;
981 // Inspect the format string.
984 // LastConversionIdx - Index within the format string where we last saw
985 // a '%' character that starts a new format conversion.
986 unsigned LastConversionIdx
= 0;
988 for (; StrIdx
< StrLen
; ++StrIdx
) {
990 // Is the number of detected conversion conversions greater than
991 // the number of matching data arguments? If so, stop.
992 if (!HasVAListArg
&& numConversions
> numDataArgs
) break;
995 if (Str
[StrIdx
] == '\0') {
996 // The string returned by getStrData() is not null-terminated,
997 // so the presence of a null character is likely an error.
998 Diag(getLocationOfStringLiteralByte(FExpr
, StrIdx
),
999 diag::warn_printf_format_string_contains_null_char
)
1000 << OrigFormatExpr
->getSourceRange();
1004 // Ordinary characters (not processing a format conversion).
1005 if (CurrentState
== state_OrdChr
) {
1006 if (Str
[StrIdx
] == '%') {
1007 CurrentState
= state_Conversion
;
1008 LastConversionIdx
= StrIdx
;
1013 // Seen '%'. Now processing a format conversion.
1014 switch (Str
[StrIdx
]) {
1015 // Handle dynamic precision or width specifier.
1019 if (!HasVAListArg
) {
1020 if (numConversions
> numDataArgs
) {
1021 SourceLocation Loc
= getLocationOfStringLiteralByte(FExpr
, StrIdx
);
1023 if (Str
[StrIdx
-1] == '.')
1024 Diag(Loc
, diag::warn_printf_asterisk_precision_missing_arg
)
1025 << OrigFormatExpr
->getSourceRange();
1027 Diag(Loc
, diag::warn_printf_asterisk_width_missing_arg
)
1028 << OrigFormatExpr
->getSourceRange();
1030 // Don't do any more checking. We'll just emit spurious errors.
1034 // Perform type checking on width/precision specifier.
1035 const Expr
*E
= TheCall
->getArg(format_idx
+numConversions
);
1036 if (const BuiltinType
*BT
= E
->getType()->getAsBuiltinType())
1037 if (BT
->getKind() == BuiltinType::Int
)
1040 SourceLocation Loc
= getLocationOfStringLiteralByte(FExpr
, StrIdx
);
1042 if (Str
[StrIdx
-1] == '.')
1043 Diag(Loc
, diag::warn_printf_asterisk_precision_wrong_type
)
1044 << E
->getType() << E
->getSourceRange();
1046 Diag(Loc
, diag::warn_printf_asterisk_width_wrong_type
)
1047 << E
->getType() << E
->getSourceRange();
1053 // Characters which can terminate a format conversion
1054 // (e.g. "%d"). Characters that specify length modifiers or
1055 // other flags are handled by the default case below.
1057 // FIXME: additional checks will go into the following cases.
1081 CurrentState
= state_OrdChr
;
1085 // FIXME: Warn in situations where this isn't supported!
1086 CurrentState
= state_OrdChr
;
1089 // CHECK: Are we using "%n"? Issue a warning.
1092 CurrentState
= state_OrdChr
;
1093 SourceLocation Loc
= getLocationOfStringLiteralByte(FExpr
,
1096 Diag(Loc
, diag::warn_printf_write_back
)<<OrigFormatExpr
->getSourceRange();
1102 // %@ is allowed in ObjC format strings only.
1103 if(ObjCFExpr
!= NULL
)
1104 CurrentState
= state_OrdChr
;
1106 // Issue a warning: invalid format conversion.
1107 SourceLocation Loc
=
1108 getLocationOfStringLiteralByte(FExpr
, LastConversionIdx
);
1110 Diag(Loc
, diag::warn_printf_invalid_conversion
)
1111 << std::string(Str
+LastConversionIdx
,
1112 Str
+std::min(LastConversionIdx
+2, StrLen
))
1113 << OrigFormatExpr
->getSourceRange();
1120 // Sanity check: Was the first "%" character the previous one?
1121 // If not, we will assume that we have a malformed format
1122 // conversion, and that the current "%" character is the start
1123 // of a new conversion.
1124 if (StrIdx
- LastConversionIdx
== 1)
1125 CurrentState
= state_OrdChr
;
1127 // Issue a warning: invalid format conversion.
1128 SourceLocation Loc
=
1129 getLocationOfStringLiteralByte(FExpr
, LastConversionIdx
);
1131 Diag(Loc
, diag::warn_printf_invalid_conversion
)
1132 << std::string(Str
+LastConversionIdx
, Str
+StrIdx
)
1133 << OrigFormatExpr
->getSourceRange();
1135 // This conversion is broken. Advance to the next format
1137 LastConversionIdx
= StrIdx
;
1143 // This case catches all other characters: flags, widths, etc.
1144 // We should eventually process those as well.
1149 if (CurrentState
== state_Conversion
) {
1150 // Issue a warning: invalid format conversion.
1151 SourceLocation Loc
=
1152 getLocationOfStringLiteralByte(FExpr
, LastConversionIdx
);
1154 Diag(Loc
, diag::warn_printf_invalid_conversion
)
1155 << std::string(Str
+LastConversionIdx
,
1156 Str
+std::min(LastConversionIdx
+2, StrLen
))
1157 << OrigFormatExpr
->getSourceRange();
1161 if (!HasVAListArg
) {
1162 // CHECK: Does the number of format conversions exceed the number
1163 // of data arguments?
1164 if (numConversions
> numDataArgs
) {
1165 SourceLocation Loc
=
1166 getLocationOfStringLiteralByte(FExpr
, LastConversionIdx
);
1168 Diag(Loc
, diag::warn_printf_insufficient_data_args
)
1169 << OrigFormatExpr
->getSourceRange();
1171 // CHECK: Does the number of data arguments exceed the number of
1172 // format conversions in the format string?
1173 else if (numConversions
< numDataArgs
)
1174 Diag(TheCall
->getArg(format_idx
+numConversions
+1)->getLocStart(),
1175 diag::warn_printf_too_many_data_args
)
1176 << OrigFormatExpr
->getSourceRange();
1180 //===--- CHECK: Return Address of Stack Variable --------------------------===//
1182 static DeclRefExpr
* EvalVal(Expr
*E
);
1183 static DeclRefExpr
* EvalAddr(Expr
* E
);
1185 /// CheckReturnStackAddr - Check if a return statement returns the address
1186 /// of a stack variable.
1188 Sema::CheckReturnStackAddr(Expr
*RetValExp
, QualType lhsType
,
1189 SourceLocation ReturnLoc
) {
1191 // Perform checking for returned stack addresses.
1192 if (lhsType
->isPointerType() || lhsType
->isBlockPointerType()) {
1193 if (DeclRefExpr
*DR
= EvalAddr(RetValExp
))
1194 Diag(DR
->getLocStart(), diag::warn_ret_stack_addr
)
1195 << DR
->getDecl()->getDeclName() << RetValExp
->getSourceRange();
1197 // Skip over implicit cast expressions when checking for block expressions.
1198 if (ImplicitCastExpr
*IcExpr
=
1199 dyn_cast_or_null
<ImplicitCastExpr
>(RetValExp
))
1200 RetValExp
= IcExpr
->getSubExpr();
1202 if (BlockExpr
*C
= dyn_cast_or_null
<BlockExpr
>(RetValExp
))
1203 if (C
->hasBlockDeclRefExprs())
1204 Diag(C
->getLocStart(), diag::err_ret_local_block
)
1205 << C
->getSourceRange();
1207 // Perform checking for stack values returned by reference.
1208 else if (lhsType
->isReferenceType()) {
1209 // Check for a reference to the stack
1210 if (DeclRefExpr
*DR
= EvalVal(RetValExp
))
1211 Diag(DR
->getLocStart(), diag::warn_ret_stack_ref
)
1212 << DR
->getDecl()->getDeclName() << RetValExp
->getSourceRange();
1216 /// EvalAddr - EvalAddr and EvalVal are mutually recursive functions that
1217 /// check if the expression in a return statement evaluates to an address
1218 /// to a location on the stack. The recursion is used to traverse the
1219 /// AST of the return expression, with recursion backtracking when we
1220 /// encounter a subexpression that (1) clearly does not lead to the address
1221 /// of a stack variable or (2) is something we cannot determine leads to
1222 /// the address of a stack variable based on such local checking.
1224 /// EvalAddr processes expressions that are pointers that are used as
1225 /// references (and not L-values). EvalVal handles all other values.
1226 /// At the base case of the recursion is a check for a DeclRefExpr* in
1227 /// the refers to a stack variable.
1229 /// This implementation handles:
1231 /// * pointer-to-pointer casts
1232 /// * implicit conversions from array references to pointers
1233 /// * taking the address of fields
1234 /// * arbitrary interplay between "&" and "*" operators
1235 /// * pointer arithmetic from an address of a stack variable
1236 /// * taking the address of an array element where the array is on the stack
1237 static DeclRefExpr
* EvalAddr(Expr
*E
) {
1238 // We should only be called for evaluating pointer expressions.
1239 assert((E
->getType()->isPointerType() ||
1240 E
->getType()->isBlockPointerType() ||
1241 E
->getType()->isObjCQualifiedIdType()) &&
1242 "EvalAddr only works on pointers");
1244 // Our "symbolic interpreter" is just a dispatch off the currently
1245 // viewed AST node. We then recursively traverse the AST by calling
1246 // EvalAddr and EvalVal appropriately.
1247 switch (E
->getStmtClass()) {
1248 case Stmt::ParenExprClass
:
1249 // Ignore parentheses.
1250 return EvalAddr(cast
<ParenExpr
>(E
)->getSubExpr());
1252 case Stmt::UnaryOperatorClass
: {
1253 // The only unary operator that make sense to handle here
1254 // is AddrOf. All others don't make sense as pointers.
1255 UnaryOperator
*U
= cast
<UnaryOperator
>(E
);
1257 if (U
->getOpcode() == UnaryOperator::AddrOf
)
1258 return EvalVal(U
->getSubExpr());
1263 case Stmt::BinaryOperatorClass
: {
1264 // Handle pointer arithmetic. All other binary operators are not valid
1266 BinaryOperator
*B
= cast
<BinaryOperator
>(E
);
1267 BinaryOperator::Opcode op
= B
->getOpcode();
1269 if (op
!= BinaryOperator::Add
&& op
!= BinaryOperator::Sub
)
1272 Expr
*Base
= B
->getLHS();
1274 // Determine which argument is the real pointer base. It could be
1275 // the RHS argument instead of the LHS.
1276 if (!Base
->getType()->isPointerType()) Base
= B
->getRHS();
1278 assert (Base
->getType()->isPointerType());
1279 return EvalAddr(Base
);
1282 // For conditional operators we need to see if either the LHS or RHS are
1283 // valid DeclRefExpr*s. If one of them is valid, we return it.
1284 case Stmt::ConditionalOperatorClass
: {
1285 ConditionalOperator
*C
= cast
<ConditionalOperator
>(E
);
1287 // Handle the GNU extension for missing LHS.
1288 if (Expr
*lhsExpr
= C
->getLHS())
1289 if (DeclRefExpr
* LHS
= EvalAddr(lhsExpr
))
1292 return EvalAddr(C
->getRHS());
1295 // For casts, we need to handle conversions from arrays to
1296 // pointer values, and pointer-to-pointer conversions.
1297 case Stmt::ImplicitCastExprClass
:
1298 case Stmt::CStyleCastExprClass
:
1299 case Stmt::CXXFunctionalCastExprClass
: {
1300 Expr
* SubExpr
= cast
<CastExpr
>(E
)->getSubExpr();
1301 QualType T
= SubExpr
->getType();
1303 if (SubExpr
->getType()->isPointerType() ||
1304 SubExpr
->getType()->isBlockPointerType() ||
1305 SubExpr
->getType()->isObjCQualifiedIdType())
1306 return EvalAddr(SubExpr
);
1307 else if (T
->isArrayType())
1308 return EvalVal(SubExpr
);
1313 // C++ casts. For dynamic casts, static casts, and const casts, we
1314 // are always converting from a pointer-to-pointer, so we just blow
1315 // through the cast. In the case the dynamic cast doesn't fail (and
1316 // return NULL), we take the conservative route and report cases
1317 // where we return the address of a stack variable. For Reinterpre
1318 // FIXME: The comment about is wrong; we're not always converting
1319 // from pointer to pointer. I'm guessing that this code should also
1320 // handle references to objects.
1321 case Stmt::CXXStaticCastExprClass
:
1322 case Stmt::CXXDynamicCastExprClass
:
1323 case Stmt::CXXConstCastExprClass
:
1324 case Stmt::CXXReinterpretCastExprClass
: {
1325 Expr
*S
= cast
<CXXNamedCastExpr
>(E
)->getSubExpr();
1326 if (S
->getType()->isPointerType() || S
->getType()->isBlockPointerType())
1332 // Everything else: we simply don't reason about them.
1339 /// EvalVal - This function is complements EvalAddr in the mutual recursion.
1340 /// See the comments for EvalAddr for more details.
1341 static DeclRefExpr
* EvalVal(Expr
*E
) {
1343 // We should only be called for evaluating non-pointer expressions, or
1344 // expressions with a pointer type that are not used as references but instead
1345 // are l-values (e.g., DeclRefExpr with a pointer type).
1347 // Our "symbolic interpreter" is just a dispatch off the currently
1348 // viewed AST node. We then recursively traverse the AST by calling
1349 // EvalAddr and EvalVal appropriately.
1350 switch (E
->getStmtClass()) {
1351 case Stmt::DeclRefExprClass
:
1352 case Stmt::QualifiedDeclRefExprClass
: {
1353 // DeclRefExpr: the base case. When we hit a DeclRefExpr we are looking
1354 // at code that refers to a variable's name. We check if it has local
1355 // storage within the function, and if so, return the expression.
1356 DeclRefExpr
*DR
= cast
<DeclRefExpr
>(E
);
1358 if (VarDecl
*V
= dyn_cast
<VarDecl
>(DR
->getDecl()))
1359 if(V
->hasLocalStorage() && !V
->getType()->isReferenceType()) return DR
;
1364 case Stmt::ParenExprClass
:
1365 // Ignore parentheses.
1366 return EvalVal(cast
<ParenExpr
>(E
)->getSubExpr());
1368 case Stmt::UnaryOperatorClass
: {
1369 // The only unary operator that make sense to handle here
1370 // is Deref. All others don't resolve to a "name." This includes
1371 // handling all sorts of rvalues passed to a unary operator.
1372 UnaryOperator
*U
= cast
<UnaryOperator
>(E
);
1374 if (U
->getOpcode() == UnaryOperator::Deref
)
1375 return EvalAddr(U
->getSubExpr());
1380 case Stmt::ArraySubscriptExprClass
: {
1381 // Array subscripts are potential references to data on the stack. We
1382 // retrieve the DeclRefExpr* for the array variable if it indeed
1383 // has local storage.
1384 return EvalAddr(cast
<ArraySubscriptExpr
>(E
)->getBase());
1387 case Stmt::ConditionalOperatorClass
: {
1388 // For conditional operators we need to see if either the LHS or RHS are
1389 // non-NULL DeclRefExpr's. If one is non-NULL, we return it.
1390 ConditionalOperator
*C
= cast
<ConditionalOperator
>(E
);
1392 // Handle the GNU extension for missing LHS.
1393 if (Expr
*lhsExpr
= C
->getLHS())
1394 if (DeclRefExpr
*LHS
= EvalVal(lhsExpr
))
1397 return EvalVal(C
->getRHS());
1400 // Accesses to members are potential references to data on the stack.
1401 case Stmt::MemberExprClass
: {
1402 MemberExpr
*M
= cast
<MemberExpr
>(E
);
1404 // Check for indirect access. We only want direct field accesses.
1406 return EvalVal(M
->getBase());
1411 // Everything else: we simply don't reason about them.
1417 //===--- CHECK: Floating-Point comparisons (-Wfloat-equal) ---------------===//
1419 /// Check for comparisons of floating point operands using != and ==.
1420 /// Issue a warning if these are no self-comparisons, as they are not likely
1421 /// to do what the programmer intended.
1422 void Sema::CheckFloatComparison(SourceLocation loc
, Expr
* lex
, Expr
*rex
) {
1423 bool EmitWarning
= true;
1425 Expr
* LeftExprSansParen
= lex
->IgnoreParens();
1426 Expr
* RightExprSansParen
= rex
->IgnoreParens();
1428 // Special case: check for x == x (which is OK).
1429 // Do not emit warnings for such cases.
1430 if (DeclRefExpr
* DRL
= dyn_cast
<DeclRefExpr
>(LeftExprSansParen
))
1431 if (DeclRefExpr
* DRR
= dyn_cast
<DeclRefExpr
>(RightExprSansParen
))
1432 if (DRL
->getDecl() == DRR
->getDecl())
1433 EmitWarning
= false;
1436 // Special case: check for comparisons against literals that can be exactly
1437 // represented by APFloat. In such cases, do not emit a warning. This
1438 // is a heuristic: often comparison against such literals are used to
1439 // detect if a value in a variable has not changed. This clearly can
1440 // lead to false negatives.
1442 if (FloatingLiteral
* FLL
= dyn_cast
<FloatingLiteral
>(LeftExprSansParen
)) {
1444 EmitWarning
= false;
1447 if (FloatingLiteral
* FLR
= dyn_cast
<FloatingLiteral
>(RightExprSansParen
)){
1449 EmitWarning
= false;
1453 // Check for comparisons with builtin types.
1455 if (CallExpr
* CL
= dyn_cast
<CallExpr
>(LeftExprSansParen
))
1456 if (CL
->isBuiltinCall(Context
))
1457 EmitWarning
= false;
1460 if (CallExpr
* CR
= dyn_cast
<CallExpr
>(RightExprSansParen
))
1461 if (CR
->isBuiltinCall(Context
))
1462 EmitWarning
= false;
1464 // Emit the diagnostic.
1466 Diag(loc
, diag::warn_floatingpoint_eq
)
1467 << lex
->getSourceRange() << rex
->getSourceRange();