[cfe-commits] r148874 - in /cfe/trunk: lib/Sema/SemaExprCXX.cpp test/Analysis/reference.cpp
Nico Weber
thakis at chromium.org
Sat Jan 28 16:19:45 PST 2012
Hi Eli,
with this change, clang now warns about this function in gtest (which is fine):
// Invalid<T>() returns an invalid value of type T. This is useful
// when a value of type T is needed for compilation, but the statement
// will not really be executed (or we don't care if the statement
// crashes).
template <typename T>
inline T Invalid() {
return *static_cast<typename remove_reference<T>::type*>(NULL);
}
The warning recommends to add a "volatile", but then code that calls
this function with a type without copy constructor fails to compile.
What's the recommended way to change code like this?
Should the -Wnull-dereference diagnostic text be changed to something
else in an expression context? It currently says "consider using
__builtin_trap() or qualifying pointer with 'volatile'".
Thanks,
Nico
On Tue, Jan 24, 2012 at 2:51 PM, Eli Friedman <eli.friedman at gmail.com> wrote:
> Author: efriedma
> Date: Tue Jan 24 16:51:26 2012
> New Revision: 148874
>
> URL: http://llvm.org/viewvc/llvm-project?rev=148874&view=rev
> Log:
> Switch PerformImplicitConversion over to use DefaultLvalueConversion for lvalue-to-rvalue conversion.
>
>
> Modified:
> cfe/trunk/lib/Sema/SemaExprCXX.cpp
> cfe/trunk/test/Analysis/reference.cpp
>
> Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=148874&r1=148873&r2=148874&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Tue Jan 24 16:51:26 2012
> @@ -2324,12 +2324,14 @@
> // Nothing to do.
> break;
>
> - case ICK_Lvalue_To_Rvalue:
> + case ICK_Lvalue_To_Rvalue: {
> assert(From->getObjectKind() != OK_ObjCProperty);
> FromType = FromType.getUnqualifiedType();
> - From = ImplicitCastExpr::Create(Context, FromType, CK_LValueToRValue,
> - From, 0, VK_RValue);
> + ExprResult FromRes = DefaultLvalueConversion(From);
> + assert(!FromRes.isInvalid() && "Can't perform deduced conversion?!");
> + From = FromRes.take();
> break;
> + }
>
> case ICK_Array_To_Pointer:
> FromType = Context.getArrayDecayedType(FromType);
>
> Modified: cfe/trunk/test/Analysis/reference.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Analysis/reference.cpp?rev=148874&r1=148873&r2=148874&view=diff
> ==============================================================================
> --- cfe/trunk/test/Analysis/reference.cpp (original)
> +++ cfe/trunk/test/Analysis/reference.cpp Tue Jan 24 16:51:26 2012
> @@ -1,4 +1,4 @@
> -// RUN: %clang_cc1 -analyze -analyzer-checker=core,experimental.core -analyzer-store=region -analyzer-constraints=range -verify %s
> +// RUN: %clang_cc1 -analyze -analyzer-checker=core,experimental.core -analyzer-store=region -analyzer-constraints=range -verify -Wno-null-dereference %s
> // XFAIL
>
> typedef typeof(sizeof(int)) size_t;
>
>
> _______________________________________________
> 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