[llvm-bugs] [Bug 46677] New: Unexpected behavior for static declaration of memset
    via llvm-bugs 
    llvm-bugs at lists.llvm.org
       
    Fri Jul 10 14:50:50 PDT 2020
    
    
  
https://bugs.llvm.org/show_bug.cgi?id=46677
            Bug ID: 46677
           Summary: Unexpected behavior for static declaration of memset
           Product: clang
           Version: unspecified
          Hardware: PC
                OS: Windows NT
            Status: NEW
          Severity: enhancement
          Priority: P
         Component: -New Bugs
          Assignee: unassignedclangbugs at nondot.org
          Reporter: efriedma at quicinc.com
                CC: htmldeveloper at gmail.com, llvm-bugs at lists.llvm.org,
                    neeilans at live.com, richard-llvm at metafoo.co.uk
Take the following at -O0:
static int memset(int z){  return 3; }
int g(int*a) { if (a[0] > 1) return *(volatile char*)0; return 0; }
int f() { int z[1000] = {0}; z[0]++; g(z); return memset(1); }
int main() { f(); f(); }
The program crashes; according to the C standard, it shouldn't.  (Strictly
speaking, the name memset can be used for internal symbols if C library headers
aren't included.)
Another testcase; suppose we have something like the following at -O2:
__attribute((noinline)) void *fast_memset(void *s, int c, unsigned long n) {
    for (int i = 0; i < n; ++i)
      ((char*)s)[i] = c;
    return s;
}
__attribute((noinline)) static void *memset(void *s, int c, unsigned long n) {
  return fast_memset(s, c, n);
}
void f2(char* x) { memset(x, 3, 100); }
int g(volatile int *a) { if (a[0] > 1) return *(volatile char*)0; return 0; }
void f() { volatile int z[1000] = {0}; z[0]++; g(z); }
int main() { f(); f(); }
This crashes; according to the C standard, it also shouldn't crash.  (The
"memset" looks like it should work on the surface, but it doesn't due to
constant propagation.)
-----
It's possible there isn't any reasonable way to fix this due to various
compatibility constraints.  But we should at least emit a warning in that case.
-- 
You are receiving this mail because:
You are on the CC list for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-bugs/attachments/20200710/657c7b15/attachment.html>
    
    
More information about the llvm-bugs
mailing list