r213790 - PR20228: don't retain a pointer to a vector element after the container has been resized.
David Blaikie
dblaikie at gmail.com
Mon Jul 28 08:25:19 PDT 2014
On Mon, Jul 28, 2014 at 12:51 AM, Kostya Serebryany <kcc at google.com> wrote:
>
>
>
> On Thu, Jul 24, 2014 at 2:25 AM, Richard Smith <richard at metafoo.co.uk>
> wrote:
>>
>> On Wed, Jul 23, 2014 at 1:32 PM, Alexey Samsonov <vonosmas at gmail.com>
>> wrote:
>>>
>>> +kcc
>>>
>>> I wonder if we could detect it with container-overflow feature in ASan
>>> and annotated libcxx vector.
>>
>>
>> FWIW, the existing ASan diagnostic was great here, and let me find the bug
>> with essentially no work (but only triggers in the cases where the vector
>> actually gets reallocated).
>
>
> The container overflow annotations will not help here -- there is not use of
> data between begin()+size() and begin()+capacity() here.
*nod* you'd have to pretend that the container had been reallocated
/every/ time - is there any way to do that? Probably not, as I assume
ASan depends on pointer identity (not on how a pointer was derived) so
there's no way to invalidate existing pointers into the buffer and
only allow ones newly derived from begin()?
>
>>
>>
>>>
>>> On Wed, Jul 23, 2014 at 1:07 PM, Richard Smith
>>> <richard-llvm at metafoo.co.uk> wrote:
>>>>
>>>> Author: rsmith
>>>> Date: Wed Jul 23 15:07:08 2014
>>>> New Revision: 213790
>>>>
>>>> URL: http://llvm.org/viewvc/llvm-project?rev=213790&view=rev
>>>> Log:
>>>> PR20228: don't retain a pointer to a vector element after the container
>>>> has been resized.
>>>>
>>>> Modified:
>>>> cfe/trunk/lib/Sema/SemaExprCXX.cpp
>>>> cfe/trunk/test/SemaCXX/type-traits.cpp
>>>>
>>>> Modified: cfe/trunk/lib/Sema/SemaExprCXX.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaExprCXX.cpp?rev=213790&r1=213789&r2=213790&view=diff
>>>>
>>>> ==============================================================================
>>>> --- cfe/trunk/lib/Sema/SemaExprCXX.cpp (original)
>>>> +++ cfe/trunk/lib/Sema/SemaExprCXX.cpp Wed Jul 23 15:07:08 2014
>>>> @@ -3651,12 +3651,13 @@ static bool evaluateTypeTrait(Sema &S, T
>>>> if (T->isObjectType() || T->isFunctionType())
>>>> T = S.Context.getRValueReferenceType(T);
>>>> OpaqueArgExprs.push_back(
>>>> - OpaqueValueExpr(Args[I]->getTypeLoc().getLocStart(),
>>>> + OpaqueValueExpr(Args[I]->getTypeLoc().getLocStart(),
>>>> T.getNonLValueExprType(S.Context),
>>>> Expr::getValueKindForType(T)));
>>>> - ArgExprs.push_back(&OpaqueArgExprs.back());
>>>> }
>>>> -
>>>> + for (Expr &E : OpaqueArgExprs)
>>>> + ArgExprs.push_back(&E);
>>>> +
>>>> // Perform the initialization in an unevaluated context within a
>>>> SFINAE
>>>> // trap at translation unit scope.
>>>> EnterExpressionEvaluationContext Unevaluated(S, Sema::Unevaluated);
>>>>
>>>> Modified: cfe/trunk/test/SemaCXX/type-traits.cpp
>>>> URL:
>>>> http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/type-traits.cpp?rev=213790&r1=213789&r2=213790&view=diff
>>>>
>>>> ==============================================================================
>>>> --- cfe/trunk/test/SemaCXX/type-traits.cpp (original)
>>>> +++ cfe/trunk/test/SemaCXX/type-traits.cpp Wed Jul 23 15:07:08 2014
>>>> @@ -146,6 +146,10 @@ struct ThreeArgCtor {
>>>> ThreeArgCtor(int*, char*, int);
>>>> };
>>>>
>>>> +struct VariadicCtor {
>>>> + template<typename...T> VariadicCtor(T...);
>>>> +};
>>>> +
>>>> void is_pod()
>>>> {
>>>> { int arr[T(__is_pod(int))]; }
>>>> @@ -1968,6 +1972,10 @@ void constructible_checks() {
>>>> // PR19178
>>>> { int arr[F(__is_constructible(Abstract))]; }
>>>> { int arr[F(__is_nothrow_constructible(Abstract))]; }
>>>> +
>>>> + // PR20228
>>>> + { int arr[T(__is_constructible(VariadicCtor,
>>>> + int, int, int, int, int, int, int,
>>>> int, int))]; }
>>>> }
>>>>
>>>> // Instantiation of __is_trivially_constructible
>>>>
>>>>
>>>> _______________________________________________
>>>> cfe-commits mailing list
>>>> cfe-commits at cs.uiuc.edu
>>>> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
>>>
>>>
>>>
>>>
>>> --
>>> Alexey Samsonov
>>> vonosmas at gmail.com
>>
>>
>
>
> _______________________________________________
> 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