<html>
    <head>
      <base href="https://bugs.llvm.org/">
    </head>
    <body><table border="1" cellspacing="0" cellpadding="8">
        <tr>
          <th>Bug ID</th>
          <td><a class="bz_bug_link 
          bz_status_NEW "
   title="NEW - Compiler OOM on simple code that makes large dynamic allocation"
   href="https://bugs.llvm.org/show_bug.cgi?id=52530">52530</a>
          </td>
        </tr>

        <tr>
          <th>Summary</th>
          <td>Compiler OOM on simple code that makes large dynamic allocation
          </td>
        </tr>

        <tr>
          <th>Product</th>
          <td>clang
          </td>
        </tr>

        <tr>
          <th>Version</th>
          <td>unspecified
          </td>
        </tr>

        <tr>
          <th>Hardware</th>
          <td>All
          </td>
        </tr>

        <tr>
          <th>OS</th>
          <td>All
          </td>
        </tr>

        <tr>
          <th>Status</th>
          <td>NEW
          </td>
        </tr>

        <tr>
          <th>Severity</th>
          <td>normal
          </td>
        </tr>

        <tr>
          <th>Priority</th>
          <td>P
          </td>
        </tr>

        <tr>
          <th>Component</th>
          <td>C++
          </td>
        </tr>

        <tr>
          <th>Assignee</th>
          <td>unassignedclangbugs@nondot.org
          </td>
        </tr>

        <tr>
          <th>Reporter</th>
          <td>zeratul976@hotmail.com
          </td>
        </tr>

        <tr>
          <th>CC</th>
          <td>blitzrakete@gmail.com, dgregor@apple.com, erik.pilkington@gmail.com, llvm-bugs@lists.llvm.org, richard-llvm@metafoo.co.uk
          </td>
        </tr></table>
      <p>
        <div>
        <pre>Originally reported at <a href="https://github.com/clangd/clangd/issues/928">https://github.com/clangd/clangd/issues/928</a>.

With recent clang trunk, compiling the following code:


#define HOG_SIZE (300 * 1000 * 1000)
struct Hog {
    static Hog* hogSet;
    static void Init() { hogSet = new Hog[HOG_SIZE]; }
};
int main() { return 0; }


results in an OOM:


$ clang++ -c main.cpp
LLVM ERROR: out of memory
Allocation failed
PLEASE submit a bug report to <a href="https://bugs.llvm.org/">https://bugs.llvm.org/</a> and include the crash
backtrace, preprocessed source, and associated run script.
Stack dump:
0.      Program arguments: clang++ -c main.cpp
1.      main.cpp:4:54: current parser token '}'
2.      main.cpp:2:1: parsing struct/union/class body 'Hog'
3.      main.cpp:4:24: parsing function body 'Hog::Init'
4.      main.cpp:4:24: in compound statement ('{}')
 #0 0x00007ff5302348e3 llvm::sys::PrintStackTrace(llvm::raw_ostream&, int)
(/home/nr/programs/clang/dev/bin/../lib/libLLVMSupport.so.14git+0x1a88e3)
 #1 0x00007ff53023261e llvm::sys::RunSignalHandlers()
(/home/nr/programs/clang/dev/bin/../lib/libLLVMSupport.so.14git+0x1a661e)
 #2 0x00007ff530233c5d llvm::sys::CleanupOnSignal(unsigned long)
(/home/nr/programs/clang/dev/bin/../lib/libLLVMSupport.so.14git+0x1a7c5d)
 #3 0x00007ff530150313 (anonymous
namespace)::CrashRecoveryContextImpl::HandleCrash(int, unsigned long)
CrashRecoveryContext.cpp:0:0
 #4 0x00007ff5301504be CrashRecoverySignalHandler(int)
CrashRecoveryContext.cpp:0:0
 #5 0x00007ff5341a1730 __restore_rt
(/lib/x86_64-linux-gnu/libpthread.so.0+0x12730)
 #6 0x00007ff52f78d7bb raise
/build/glibc-vjB4T1/glibc-2.28/signal/../sysdeps/unix/sysv/linux/raise.c:51:1
 #7 0x00007ff52f778535 abort /build/glibc-vjB4T1/glibc-2.28/stdlib/abort.c:81:7
 #8 0x00007ff530162b0d llvm::report_bad_alloc_error(char const*, bool)
(/home/nr/programs/clang/dev/bin/../lib/libLLVMSupport.so.14git+0xd6b0d)
 #9 0x00007ff530162d62
(/home/nr/programs/clang/dev/bin/../lib/libLLVMSupport.so.14git+0xd6d62)
#10 0x00007ff52fd582cc operator new(unsigned long)
/home/nr/builds/gcc-build/x86_64-pc-linux-gnu/libstdc++-v3/libsupc++/../../../../gcc-9.1.0/libstdc++-v3/libsupc++/new_op.cc:50:3
#11 0x00007ff52e0f659b clang::APValue::MakeArray(unsigned int, unsigned int)
(/home/nr/programs/clang/dev/bin/../lib/../lib/libclangAST.so.14git+0x17459b)
#12 0x00007ff52e3d0f96 (anonymous
namespace)::ArrayExprEvaluator::VisitCXXConstructExpr(clang::CXXConstructExpr
const*, (anonymous namespace)::LValue const&, clang::APValue*, clang::QualType)
ExprConstant.cpp:0:0
#13 0x00007ff52e38d1c4 (anonymous
namespace)::PointerExprEvaluator::VisitCXXNewExpr(clang::CXXNewExpr const*)
ExprConstant.cpp:0:0
#14 0x00007ff52e389191 EvaluatePointer(clang::Expr const*, (anonymous
namespace)::LValue&, (anonymous namespace)::EvalInfo&, bool)
ExprConstant.cpp:0:0
#15 0x00007ff52e3754e4 Evaluate(clang::APValue&, (anonymous
namespace)::EvalInfo&, clang::Expr const*) ExprConstant.cpp:0:0
#16 0x00007ff52e379168 clang::StmtVisitorBase<llvm::make_const_ptr, (anonymous
namespace)::LValueExprEvaluator, bool>::Visit(clang::Stmt const*)
ExprConstant.cpp:0:0
#17 0x00007ff52e36fe81 EvaluateLValue(clang::Expr const*, (anonymous
namespace)::LValue&, (anonymous namespace)::EvalInfo&, bool)
ExprConstant.cpp:0:0
#18 0x00007ff52e375357 Evaluate(clang::APValue&, (anonymous
namespace)::EvalInfo&, clang::Expr const*) ExprConstant.cpp:0:0
#19 0x00007ff52e372b4c EvaluateAsRValue((anonymous namespace)::EvalInfo&,
clang::Expr const*, clang::APValue&) ExprConstant.cpp:0:0
#20 0x00007ff52e372d28 clang::Expr::EvaluateForOverflow(clang::ASTContext
const&) const
(/home/nr/programs/clang/dev/bin/../lib/../lib/libclangAST.so.14git+0x3f0d28)
#21 0x00007ff52cf72b2c clang::Sema::CheckForIntOverflow(clang::Expr*)
(/home/nr/programs/clang/dev/bin/../lib/../lib/libclangSema.so.14git+0x21ab2c)
#22 0x00007ff52cf7314e clang::Sema::CheckCompletedExpr(clang::Expr*,
clang::SourceLocation, bool)
(/home/nr/programs/clang/dev/bin/../lib/../lib/libclangSema.so.14git+0x21b14e)
#23 0x00007ff52d27bf9a clang::Sema::ActOnFinishFullExpr(clang::Expr*,
clang::SourceLocation, bool, bool)
(/home/nr/programs/clang/dev/bin/../lib/../lib/libclangSema.so.14git+0x523f9a)
#24 0x00007ff52d49cf91
clang::Sema::ActOnExprStmt(clang::ActionResult<clang::Expr*, true>, bool)
(/home/nr/programs/clang/dev/bin/../lib/../lib/libclangSema.so.14git+0x744f91)
#25 0x00007ff52da19d62
clang::Parser::ParseExprStatement(clang::Parser::ParsedStmtContext)
(/home/nr/programs/clang/dev/bin/../lib/../lib/libclangParse.so.14git+0xf3d62)
#26 0x00007ff52da1947f
clang::Parser::ParseStatementOrDeclarationAfterAttributes(llvm::SmallVector<clang::Stmt*,
32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*,
clang::ParsedAttributesWithRange&)
(/home/nr/programs/clang/dev/bin/../lib/../lib/libclangParse.so.14git+0xf347f)
#27 0x00007ff52da17821
clang::Parser::ParseStatementOrDeclaration(llvm::SmallVector<clang::Stmt*,
32u>&, clang::Parser::ParsedStmtContext, clang::SourceLocation*)
(/home/nr/programs/clang/dev/bin/../lib/../lib/libclangParse.so.14git+0xf1821)
#28 0x00007ff52da216b1 clang::Parser::ParseCompoundStatementBody(bool)
(/home/nr/programs/clang/dev/bin/../lib/../lib/libclangParse.so.14git+0xfb6b1)
#29 0x00007ff52da226e8 clang::Parser::ParseFunctionStatementBody(clang::Decl*,
clang::Parser::ParseScope&)
(/home/nr/programs/clang/dev/bin/../lib/../lib/libclangParse.so.14git+0xfc6e8)
#30 0x00007ff52d9629cd
clang::Parser::ParseLexedMethodDef(clang::Parser::LexedMethod&)
(/home/nr/programs/clang/dev/bin/../lib/../lib/libclangParse.so.14git+0x3c9cd)
#31 0x00007ff52d96112a
clang::Parser::ParseLexedMethodDefs(clang::Parser::ParsingClass&)
(/home/nr/programs/clang/dev/bin/../lib/../lib/libclangParse.so.14git+0x3b12a)
#32 0x00007ff52d99c7da
clang::Parser::ParseCXXMemberSpecification(clang::SourceLocation,
clang::SourceLocation, clang::ParsedAttributesWithRange&, unsigned int,
clang::Decl*)
(/home/nr/programs/clang/dev/bin/../lib/../lib/libclangParse.so.14git+0x767da)
#33 0x00007ff52d99a1ae
clang::Parser::ParseClassSpecifier(clang::tok::TokenKind,
clang::SourceLocation, clang::DeclSpec&, clang::Parser::ParsedTemplateInfo
const&, clang::AccessSpecifier, bool, clang::Parser::DeclSpecContext,
clang::ParsedAttributesWithRange&)
(/home/nr/programs/clang/dev/bin/../lib/../lib/libclangParse.so.14git+0x741ae)
#34 0x00007ff52d972e0e
clang::Parser::ParseDeclarationSpecifiers(clang::DeclSpec&,
clang::Parser::ParsedTemplateInfo const&, clang::AccessSpecifier,
clang::Parser::DeclSpecContext, clang::Parser::LateParsedAttrList*)
(/home/nr/programs/clang/dev/bin/../lib/../lib/libclangParse.so.14git+0x4ce0e)
#35 0x00007ff52da3eeda
clang::Parser::ParseDeclOrFunctionDefInternal(clang::ParsedAttributesWithRange&,
clang::ParsingDeclSpec&, clang::AccessSpecifier)
(/home/nr/programs/clang/dev/bin/../lib/../lib/libclangParse.so.14git+0x118eda)
#36 0x00007ff52da3ebe5
clang::Parser::ParseDeclarationOrFunctionDefinition(clang::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*, clang::AccessSpecifier)
(/home/nr/programs/clang/dev/bin/../lib/../lib/libclangParse.so.14git+0x118be5)
#37 0x00007ff52da3d8f2
clang::Parser::ParseExternalDeclaration(clang::ParsedAttributesWithRange&,
clang::ParsingDeclSpec*)
(/home/nr/programs/clang/dev/bin/../lib/../lib/libclangParse.so.14git+0x1178f2)
#38 0x00007ff52da3b8af
clang::Parser::ParseTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&, bool)
(/home/nr/programs/clang/dev/bin/../lib/../lib/libclangParse.so.14git+0x1158af)
#39 0x00007ff52da3b097
clang::Parser::ParseFirstTopLevelDecl(clang::OpaquePtr<clang::DeclGroupRef>&)
(/home/nr/programs/clang/dev/bin/../lib/../lib/libclangParse.so.14git+0x115097)
#40 0x00007ff52d95d3a7 clang::ParseAST(clang::Sema&, bool, bool)
(/home/nr/programs/clang/dev/bin/../lib/../lib/libclangParse.so.14git+0x373a7)
#41 0x00007ff532a4cfe0 clang::FrontendAction::Execute()
(/home/nr/programs/clang/dev/bin/../lib/libclangFrontend.so.14git+0x124fe0)
#42 0x00007ff5329c4baf
clang::CompilerInstance::ExecuteAction(clang::FrontendAction&)
(/home/nr/programs/clang/dev/bin/../lib/libclangFrontend.so.14git+0x9cbaf)
#43 0x00007ff53418ad43
clang::ExecuteCompilerInvocation(clang::CompilerInstance*)
(/home/nr/programs/clang/dev/bin/../lib/libclangFrontendTool.so.14git+0x3d43)
#44 0x0000000000411e46 cc1_main(llvm::ArrayRef<char const*>, char const*,
void*) (/home/nr/programs/clang/dev/bin/clang-14+0x411e46)
#45 0x000000000040fcfd ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&)
driver.cpp:0:0
#46 0x00007ff532730d42 void llvm::function_ref<void
()>::callback_fn<clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>
<span class="quote">>, std::__cxx11::basic_string<char, std::char_traits<char>,</span >
std::allocator<char> >*, bool*) const::$_1>(long) Job.cpp:0:0
#47 0x00007ff530150227
llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>)
(/home/nr/programs/clang/dev/bin/../lib/libLLVMSupport.so.14git+0xc4227)
#48 0x00007ff532730787
clang::driver::CC1Command::Execute(llvm::ArrayRef<llvm::Optional<llvm::StringRef>
<span class="quote">>, std::__cxx11::basic_string<char, std::char_traits<char>,</span >
std::allocator<char> >*, bool*) const
(/home/nr/programs/clang/dev/bin/../lib/libclangDriver.so.14git+0xaf787)
#49 0x00007ff5326f7a48
clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&,
clang::driver::Command const*&) const
(/home/nr/programs/clang/dev/bin/../lib/libclangDriver.so.14git+0x76a48)
#50 0x00007ff5326f7d47
clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&,
llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&) const
(/home/nr/programs/clang/dev/bin/../lib/libclangDriver.so.14git+0x76d47)
#51 0x00007ff532713a58
clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&,
llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*> >&)
(/home/nr/programs/clang/dev/bin/../lib/libclangDriver.so.14git+0x92a58)


While it's true that the program makes a dynamic memory allocation, (1) it's
not _so_ large (here, 300 MB) that the program would OOM at runtime, and (2) in
any case that shouldn't be a reason to OOM at compile time.</pre>
        </div>
      </p>


      <hr>
      <span>You are receiving this mail because:</span>

      <ul>
          <li>You are on the CC list for the bug.</li>
      </ul>
    </body>
</html>