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 /inclu!
 de -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 [[email protected]]
Sent: Wednesday, May 27, 2015 3:26 PM
To: [email protected]
Cc: Gao, Yunzhong; Richard Smith; [email protected]; Robinson, Paul; 
[email protected]; 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 
<[email protected]<mailto:[email protected]>> 
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/




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

Reply via email to