[PATCH] C99 partial re-initialization behavior (DR-253)

Gao, Yunzhong yunzhong_gao at playstation.sony.com
Wed May 27 15:45:05 PDT 2015


Ah, sorry I did not provide more context before pulling you in.

The assertion is related to GetElementPointer and I thought you may have worked on this recently;
also there was no assertion before your r234096+r234097. I am not sure if the assertion indicates
a real problem here because I had to modify the compiler source to show the problem. You probably
know better.


[Step#1] apply the following patch: it comments out an optimization.

Index: llvm/tools/clang/lib/CodeGen/CGExprCXX.cpp
===================================================================
--- llvm/tools/clang/lib/CodeGen/CGExprCXX.cpp	(revision 238351)
+++ llvm/tools/clang/lib/CodeGen/CGExprCXX.cpp	(working copy)
@@ -953,10 +953,12 @@
   assert(getContext().hasSameUnqualifiedType(ElementType, Init->getType()) &&
          "got wrong type of element to initialize");
 
+#if 0
   // If we have an empty initializer list, we can usually use memset.
   if (auto *ILE = dyn_cast<InitListExpr>(Init))
     if (ILE->getNumInits() == 0 && TryMemsetInitialization())
       return;
+#endif
 
   // Create the loop blocks.
   llvm::BasicBlock *EntryBB = Builder.GetInsertBlock();


[Step#2] Compile the following test case:

// test.cpp
int n;
struct T { int a; };
void *r = new T[n][3]{ { 1, 2, 3 }, { 4, 5, 6 } };


$ build/Debug+Asserts/bin/clang -S -std=c++11 -emit-llvm -o - test.cpp
clang: llvm/include/llvm/IR/Instructions.h:842: static llvm::GetElementPtrInst* llvm::GetElementPtrInst::Create(llvm::Type*, llvm::Value*, llvm::ArrayRef<llvm::Value*>, const llvm::Twine&, llvm::Instruction*): Assertion `PointeeType == cast<PointerType>(Ptr->getType()->getScalarType())->getElementType()' failed.
0  clang           0x00000000046113de llvm::sys::PrintStackTrace(llvm::raw_ostream&) + 44
1  clang           0x00000000046116f3
2  clang           0x00000000046101f4
3  libpthread.so.0 0x00007fedccedf340
4  libc.so.6       0x00007fedcc11bf79 gsignal + 57
5  libc.so.6       0x00007fedcc11f388 abort + 328
6  libc.so.6       0x00007fedcc114e36
7  libc.so.6       0x00007fedcc114ee2
8  clang           0x00000000017077ff
9  clang           0x00000000017078af
10 clang           0x0000000001764c8c
11 clang           0x00000000018f5662 clang::CodeGen::CodeGenFunction::EmitNewArrayInitializer(clang::CXXNewExpr const*, clang::QualType, llvm::Type*, llvm::Value*, llvm::Value*, llvm::Value*) + 3100
12 clang           0x00000000018f57a6
13 clang           0x00000000018f6d60 clang::CodeGen::CodeGenFunction::EmitCXXNewExpr(clang::CXXNewExpr const*) + 1950
14 clang           0x000000000190489c
15 clang           0x00000000019154af
16 clang           0x00000000019038d2
17 clang           0x00000000019095ba
18 clang           0x0000000001917257
19 clang           0x00000000019156d7
20 clang           0x00000000019038d2
21 clang           0x00000000019141b2 clang::CodeGen::CodeGenFunction::EmitScalarExpr(clang::Expr const*, bool) + 128
22 clang           0x00000000018b2e75 clang::CodeGen::CodeGenFunction::EmitScalarInit(clang::Expr const*, clang::ValueDecl const*, clang::CodeGen::LValue, bool) + 99
23 clang           0x00000000018bb9b2
24 clang           0x00000000018bc0b7 clang::CodeGen::CodeGenFunction::EmitCXXGlobalVarDeclInit(clang::VarDecl const&, llvm::Constant*, bool) + 437
25 clang           0x00000000018bdd1f clang::CodeGen::CodeGenFunction::GenerateCXXGlobalVarDeclInitFunc(llvm::Function*, clang::VarDecl const*, llvm::GlobalVariable*, bool) + 501
26 clang           0x00000000018bcda1 clang::CodeGen::CodeGenModule::EmitCXXGlobalVarDeclInitFunc(clang::VarDecl const*, llvm::GlobalVariable*, bool) + 615
27 clang           0x0000000001774193 clang::CodeGen::CodeGenModule::EmitGlobalVarDefinition(clang::VarDecl const*) + 2291
28 clang           0x000000000177216f clang::CodeGen::CodeGenModule::EmitGlobalDefinition(clang::GlobalDecl, llvm::GlobalValue*) + 531
29 clang           0x00000000017719ca clang::CodeGen::CodeGenModule::EmitGlobal(clang::GlobalDecl) + 796
30 clang           0x00000000017792a2 clang::CodeGen::CodeGenModule::EmitTopLevelDecl(clang::Decl*) + 438
31 clang           0x00000000016c6215
32 clang           0x00000000016aabb6
33 clang           0x00000000019ac057 clang::ParseAST(clang::Sema&, bool, bool) + 553
34 clang           0x00000000013a8fe2 clang::ASTFrontendAction::ExecuteAction() + 322
35 clang           0x00000000016ad592 clang::CodeGenAction::ExecuteAction() + 1486
36 clang           0x00000000013a8ac1 clang::FrontendAction::Execute() + 139
37 clang           0x000000000136c902 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 772
38 clang           0x000000000132dadb clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 993
39 clang           0x0000000001318d68 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 770
40 clang           0x0000000001327500
41 clang           0x0000000001327ae7 main + 1074
42 libc.so.6       0x00007fedcc106ec5 __libc_start_main + 245
43 clang           0x0000000001317469
Stack dump:
0.	Program arguments: build/Debug+Asserts/bin/clang -cc1 -triple x86_64-unknown-linux-gnu -emit-llvm -disable-free -main-file-name test.cpp -mrelocation-model static -mthread-model posix -mdisable-fp-elim -fmath-errno -masm-verbose -mconstructor-aliases -munwind-tables -fuse-init-array -target-cpu x86-64 -target-linker-version 2.24 -dwarf-column-info -coverage-file /tmp/- -resource-dir build/Debug+Asserts/bin/../lib/clang/3.7.0 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/x86_64-linux-gnu/c++/4.8 -internal-isystem /usr/lib/gcc/x86_64-linux-gnu/4.8/../../../../include/c++/4.8/backward -internal-isystem /usr/local/include -internal-isystem build/Debug+Asserts/bin/../lib/clang/3.7.0/include -internal-externc-isystem /usr/include/x86_64-linux-gnu -internal-externc-isystem /include -internal-externc-isystem /usr/include -std=c++11 -fdeprecated-macro -fdebug-compilation-dir /tmp -ferror-limit 19 -fmessage-length 205 -mstackrealign -fobjc-runtime=gcc -fcxx-exceptions -fexceptions -fdiagnostics-show-option -o - -x c++ test.cpp 
1.	<eof> parser at end of file
2.	test.cpp:4:7: LLVM IR generation of declaration 'r'
3.	test.cpp:4:7: Generating code for declaration 'r'
clang: error: unable to execute command: Aborted (core dumped)
clang: error: clang frontend command failed due to signal (use -v to see invocation)
clang version 3.7.0 (trunk 238351)
Target: x86_64-unknown-linux-gnu
Thread model: posix
clang: note: diagnostic msg: PLEASE submit a bug report to http://llvm.org/bugs/ and include the crash backtrace, preprocessed source, and associated run script.
clang: note: diagnostic msg: 
********************

PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
Preprocessed source(s) and associated run script(s) are located at:
clang: note: diagnostic msg: /tmp/test-d13456.cpp
clang: note: diagnostic msg: /tmp/test-d13456.sh
clang: note: diagnostic msg: 


________________________________________
From: David Blaikie [dblaikie at gmail.com]
Sent: Wednesday, May 27, 2015 3:26 PM
To: reviews+D5789+public+1cf6f6f096f4f610 at reviews.llvm.org
Cc: Gao, Yunzhong; Richard Smith; dccitaliano at gmail.com; Robinson, Paul; arthur.j.odwyer+phab+github at gmail.com; Anton Korobeynikov; llvm cfe
Subject: Re: [PATCH] C99 partial re-initialization behavior (DR-253)

On Wed, May 27, 2015 at 1:34 PM, Yunzhong Gao <Yunzhong_Gao at playstation.sony.com<mailto:Yunzhong_Gao at playstation.sony.com>> wrote:
Ping.

Also add David Blaikie. He might have some insight on whether lib/CodeGen/CGExprCXX.cpp#952-953 indicates any actual problem.

Don't think I have any particular light to shed here... if you/we want to dive into this deeper, the backtrace from the assertion might be useful.

http://reviews.llvm.org/D5789?id=22530#inline-76127


http://reviews.llvm.org/D5789

EMAIL PREFERENCES
  http://reviews.llvm.org/settings/panel/emailpreferences/







More information about the cfe-commits mailing list