On 09/06/2014 22:51, Quentin Colombet wrote:
Hi,

On Jun 5, 2014, at 5:44 PM, Alp Toker <[email protected] <mailto:[email protected]>> wrote:


On 06/06/2014 02:33, Alexey Samsonov wrote:
Hi Alp,

This warning should be fixed by r210301. However, consider investigating why the frame size appears to be that large. I believe we build this code with GCC as well and have seen no complaints
from its implementation of -Wframe-larger-than.

CC'ing in llvmdev. Like Chandler said it could just be due to lack of stack sharing compared to GCC. There's a lot going on between the time when we generate IR from AST to the time this final machine pass is run. GCC might just be optimizing differently.

On the other hand it could indeed be that LLVM's DiagnosticInfoStackSize is giving us a different value or computation than GCC's -Wframe-larger-than. It's worth double checking that we're using a similar function frame size computation here.

I do not know what exactly GCC is giving for -Wframe-larger-than, but based on the description in the documentation I would say it is likely we are not returning the same thing in LLVM.
Indeed, GCC documentation says:
|-Wframe-larger-than=|len
    Warn if the size of a function frame is larger than len bytes. The
    computation done to determine the stack frame size is approximate
    and not conservative. The actual requirements may be somewhat
    greater than len even if you do not get a warning. In addition,
    any space allocated via |alloca|, variable-length arrays, or
    related constructs is not included by the compiler when
determining whether or not to issue a warning. Whereas in our case, we give the actual size in bytes we reserve on the stack to store the statically known object (locals and/or spills).

In that case, if the reported size is completely off the actual generated code, it is worth filing a PR. Otherwise, we may need to refine the documentation the semantic of the warning for LLVM.

That explains it, nice investigatory work Quentin :-)

I guess the behaviour we have is a safe superset of GCC's warning for now though we might want to document it at some point.

It actually sounds like we're well on the way to covering GCC's -Wstack-usage=len which includes "space allocated via alloca, variable-length arrays, or related constructs". But that also identifies whether there are unbounded/dynamic allocas which we don't have. Would it be possible to feed that information through to the frontend as well?

Alp.



Thanks,
-Quentin


Let's not write off either possibility given that the LLVM value wasn't originally intended for GCC compatibility -- we just spun it that way in the frontend :-)

Quentin, thoughts?

Alp.


And thanks for implementing this flag!


On Thu, Jun 5, 2014 at 4:00 PM, Alp Toker <[email protected] <mailto:[email protected]> <mailto:[email protected]>> wrote:

   Hi Kostya,

   Looks like our new clang diagnostic from r210293 has caught a
   potential issue in compiler-rt which is now breaking the build due
   to -Werror:

   
/home/dtoolsbot/build/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/lib/tsan/rtl/tsan_rtl_mutex.cc:460:6:
   error: stack frame size of 536 bytes in function
   '__tsan::ReportDeadlock' [-Werror,-Wframe-larger-than]
   void ReportDeadlock(ThreadState *thr, uptr pc, DDReport *r) {
        ^
   [ 93%] [ 93%] Building C object
   lib/builtins/CMakeFiles/clang_rt.builtins-i386.dir/udivti3.c.o
   [ 93%] Building CXX object
   lib/tsan/CMakeFiles/clang_rt.tsan-x86_64.dir/rtl/tsan_suppressions.cc.o
   1 error generated.

   Can you confirm that the stack frame report is legitimate?

   Assuming it is, you'll probably want to either fix the function or
   relax the byte limit passed to clang in your build system.

   Let me know if I can help.

   Alp.



   -------- Original Message --------
   Subject:        buildbot failure in LLVM on sanitizer-x86_64-linux
   Date:   Thu, 05 Jun 2014 15:53:19 -0700
From: [email protected] <mailto:[email protected]>
   <mailto:[email protected]>
To: Alp Toker <[email protected] <mailto:[email protected]> <mailto:[email protected]>>, Eric Christopher <[email protected] <mailto:[email protected]> <mailto:[email protected]>>, Jingyue Wu <[email protected] <mailto:[email protected]> <mailto:[email protected]>> CC: [email protected] <mailto:[email protected]> <mailto:[email protected]>



   The Buildbot has detected a new failure on builder
   sanitizer-x86_64-linux while building llvm.
   Full details are available at:
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux/builds/10266

   Buildbot URL: http://lab.llvm.org:8011/

   Buildslave for this Build: sanitizer-buildbot1

   Build Reason: scheduler
   Build Source Stamp: [branch trunk] 210295
   Blamelist: alp,echristo,jingyue

   BUILD FAILED: failed annotate failed bootstrap clang failed run
   asan tests failed run msan unit tests failed run 64-bit tsan unit
   tests failed run 64-bit lsan unit tests failed run
   sanitizer_common tests

   sincerely,
    -The Buildbot





   _______________________________________________
   cfe-commits mailing list
[email protected] <mailto:[email protected]> <mailto:[email protected]>
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits




--
Alexey Samsonov
[email protected] <mailto:[email protected]> <mailto:[email protected]>

--
http://www.nuanti.com
the browser experts



--
http://www.nuanti.com
the browser experts

_______________________________________________
cfe-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

Reply via email to