1*532dc62bSNikita Popov // RUN: %clang_cc1 -no-opaque-pointers -fexceptions -triple x86_64-windows-msvc -debug-info-kind=limited -gcodeview -fdeclspec -S -emit-llvm %s -o - | FileCheck %s 2ce7d3e1cSArthur Eubanks 3ce7d3e1cSArthur Eubanks struct Foo { 4ce7d3e1cSArthur Eubanks int x; 5ce7d3e1cSArthur Eubanks }; 6ce7d3e1cSArthur Eubanks struct Bar { 7ce7d3e1cSArthur Eubanks int y; 8ce7d3e1cSArthur Eubanks }; 9ce7d3e1cSArthur Eubanks extern Foo *gv_foo; 10ce7d3e1cSArthur Eubanks extern Bar *gv_bar; doit()11ce7d3e1cSArthur Eubanksextern "C" void doit() { 12ce7d3e1cSArthur Eubanks gv_foo = new Foo(); 13ce7d3e1cSArthur Eubanks gv_bar = new Bar(); 14ce7d3e1cSArthur Eubanks } 15ce7d3e1cSArthur Eubanks 16ce7d3e1cSArthur Eubanks // CHECK-LABEL: define {{.*}}void @doit 171b1c8d83Shyeongyu kim // CHECK: call {{.*}} i8* {{.*}}@"??2@YAPEAX_K@Z"(i64 noundef 4) {{.*}} !heapallocsite [[DBG_FOO:!.*]] 181b1c8d83Shyeongyu kim // CHECK: call {{.*}} i8* {{.*}}@"??2@YAPEAX_K@Z"(i64 noundef 4) {{.*}} !heapallocsite [[DBG_BAR:!.*]] 19ce7d3e1cSArthur Eubanks useinvoke()20ce7d3e1cSArthur Eubanksextern "C" void useinvoke() { 21ce7d3e1cSArthur Eubanks struct HasDtor { 22ce7d3e1cSArthur Eubanks ~HasDtor() { delete gv_foo; } 23ce7d3e1cSArthur Eubanks } o; 24ce7d3e1cSArthur Eubanks gv_foo = new Foo(); 25ce7d3e1cSArthur Eubanks } 26ce7d3e1cSArthur Eubanks 27ce7d3e1cSArthur Eubanks // CHECK-LABEL: define {{.*}}void @useinvoke 281b1c8d83Shyeongyu kim // CHECK: invoke {{.*}} i8* {{.*}}@"??2@YAPEAX_K@Z"(i64 noundef 4) 29ce7d3e1cSArthur Eubanks // CHECK-NEXT: to label {{.*}} unwind label {{.*}} !heapallocsite [[DBG_FOO]] 30ce7d3e1cSArthur Eubanks 31ce7d3e1cSArthur Eubanks // CHECK: [[DBG_FOO]] = distinct !DICompositeType(tag: DW_TAG_structure_type, 32ce7d3e1cSArthur Eubanks // CHECK-SAME: name: "Foo" 33ce7d3e1cSArthur Eubanks // CHECK: [[DBG_BAR]] = distinct !DICompositeType(tag: DW_TAG_structure_type, 34ce7d3e1cSArthur Eubanks // CHECK-SAME: name: "Bar" 35ce7d3e1cSArthur Eubanks 36ce7d3e1cSArthur Eubanks // a new expression in a default arg has caused crashes in the past, add here to test that edge case foo(int * a=new int)37ce7d3e1cSArthur Eubanksvoid foo(int *a = new int) {} bar()38ce7d3e1cSArthur Eubanksvoid bar() { foo(); } 39