[msan] Fix truncated stack trace in chained origin reports.

This is a leftover from the times when the next (chained) origin id
was stored as the last frame of a stack trace.

llvm-svn: 211878
This commit is contained in:
Evgeniy Stepanov 2014-06-27 07:32:08 +00:00
parent 673b3afacd
commit 7d3c68a9cf
2 changed files with 34 additions and 1 deletions

View File

@ -90,7 +90,7 @@ static void DescribeOrigin(u32 id) {
// FIXME: copied? modified? passed through? observed?
Printf(" %sUninitialized value was stored to memory at%s\n", d.Origin(),
d.End());
StackTrace::PrintStack(trace, size - 1);
StackTrace::PrintStack(trace, size);
id = prev_id;
}
}

View File

@ -0,0 +1,33 @@
// RUN: %clangxx_msan -fsanitize-memory-track-origins=2 -m64 -O3 %s -o %t && \
// RUN: MSAN_OPTIONS=malloc_context_size=1 not %run %t 2>&1 | FileCheck %s
// Test that stack trace for the intermediate store is not empty.
// CHECK: MemorySanitizer: use-of-uninitialized-value
// CHECK: #0 {{.*}} in main
// CHECK: Uninitialized value was stored to memory at
// CHECK: #0 {{.*}} in fn_g
// CHECK: Uninitialized value was created by an allocation of 'z' in the stack frame of function 'main'
// CHECK: #0 {{.*}} in main
#include <stdio.h>
volatile int x;
__attribute__((noinline))
void fn_g(int a) {
x = a;
}
__attribute__((noinline))
void fn_f(int a) {
fn_g(a);
}
int main(int argc, char *argv[]) {
int volatile z;
fn_f(z);
return x;
}