<html><head><meta http-equiv="Content-Type" content="text/html; charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">+ Sourabh<br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On Oct 28, 2019, at 4:20 PM, David Blaikie <<a href="mailto:dblaikie@gmail.com" class="">dblaikie@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">Looks like this is only the test, but not the functionality? What was the patch that committed the functionality? (I see a clang commit, but I guess there was probably an LLVM change somewhere to use the DIFlag to produce the actual DWARF attribute?)</div><br class=""><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Oct 16, 2019 at 9:28 AM Adrian Prantl via llvm-commits <<a href="mailto:llvm-commits@lists.llvm.org" class="">llvm-commits@lists.llvm.org</a>> wrote:<br class=""></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Author: adrian<br class="">
Date: Wed Oct 16 09:30:38 2019<br class="">
New Revision: 375012<br class="">
<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=375012&view=rev" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project?rev=375012&view=rev</a><br class="">
Log:<br class="">
[DWARF5] Added support for DW_AT_noreturn attribute to be emitted for<br class="">
C++ class member functions.<br class="">
<br class="">
Patch by Sourabh Singh Tomar!<br class="">
<br class="">
Differential Revision: <a href="https://reviews.llvm.org/D68697" rel="noreferrer" target="_blank" class="">https://reviews.llvm.org/D68697</a><br class="">
<br class="">
Modified:<br class="">
    llvm/trunk/test/DebugInfo/X86/noreturn_cpp11.ll<br class="">
<br class="">
Modified: llvm/trunk/test/DebugInfo/X86/noreturn_cpp11.ll<br class="">
URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/noreturn_cpp11.ll?rev=375012&r1=375011&r2=375012&view=diff" rel="noreferrer" target="_blank" class="">http://llvm.org/viewvc/llvm-project/llvm/trunk/test/DebugInfo/X86/noreturn_cpp11.ll?rev=375012&r1=375011&r2=375012&view=diff</a><br class="">
==============================================================================<br class="">
--- llvm/trunk/test/DebugInfo/X86/noreturn_cpp11.ll (original)<br class="">
+++ llvm/trunk/test/DebugInfo/X86/noreturn_cpp11.ll Wed Oct 16 09:30:38 2019<br class="">
@@ -2,56 +2,88 @@<br class="">
 ; REQUIRES: object-emission<br class="">
<br class="">
 ; Generated by clang++ -S -c -std=c++11 --emit-llvm -g from the following C++11 source:<br class="">
-; [[ noreturn ]] void f() {<br class="">
-;   throw 1;<br class="">
-; }<br class="">
+;class foo {<br class="">
+;[[noreturn]] void foo_member(){throw 1;}<br class="">
+;};<br class="">
+;<br class="">
+;[[ noreturn ]] void f() {<br class="">
+;    throw 1;<br class="">
+;}<br class="">
+;<br class="">
+;void func(){<br class="">
+;    foo object;<br class="">
+;}<br class="">
<br class="">
 ; CHECK: DW_TAG_subprogram<br class="">
 ; CHECK-NOT: DW_TAG<br class="">
 ; CHECK: DW_AT_name{{.*}}"f"<br class="">
 ; CHECK-NOT: DW_TAG<br class="">
 ; CHECK: DW_AT_noreturn<br class="">
-<br class="">
+; CHECK: DW_TAG_class_type<br class="">
+; CHECK: DW_TAG_subprogram<br class="">
+; CHECK: DW_AT_name{{.*}}"foo_member"<br class="">
+; CHECK: DW_AT_noreturn<br class="">
 ; ModuleID = 'test.cpp'<br class="">
-source_filename = "test.cpp"<br class="">
-target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"<br class="">
+<br class="">
+source_filename = "noreturn1.cpp"<br class="">
+target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"<br class="">
 target triple = "x86_64-unknown-linux-gnu"<br class="">
<br class="">
-@_ZTIi = external constant i8*<br class="">
+%class.foo = type { i8 }<br class="">
<br class="">
-; Function Attrs: noreturn<br class="">
-define void @_Z1fv() #0 !dbg !6 {<br class="">
-entry:<br class="">
-  %exception = call i8* @__cxa_allocate_exception(i64 4) #1, !dbg !9<br class="">
-  %0 = bitcast i8* %exception to i32*, !dbg !9<br class="">
-  store i32 1, i32* %0, align 16, !dbg !9<br class="">
-  call void @__cxa_throw(i8* %exception, i8* bitcast (i8** @_ZTIi to i8*), i8* null) #2, !dbg !10<br class="">
-  unreachable, !dbg !9<br class="">
+@_ZTIi = external dso_local constant i8*<br class="">
<br class="">
-return:                                           ; No predecessors!<br class="">
-  ret void, !dbg !12<br class="">
+; Function Attrs: noinline noreturn optnone uwtable<br class="">
+define dso_local void @_Z1fv() #0 !dbg !7 {<br class="">
+  %1 = call i8* @__cxa_allocate_exception(i64 4) #3, !dbg !10<br class="">
+  %2 = bitcast i8* %1 to i32*, !dbg !10<br class="">
+  store i32 1, i32* %2, align 16, !dbg !10<br class="">
+  call void @__cxa_throw(i8* %1, i8* bitcast (i8** @_ZTIi to i8*), i8* null) #4, !dbg !10<br class="">
+  unreachable, !dbg !10<br class="">
 }<br class="">
<br class="">
-declare i8* @__cxa_allocate_exception(i64)<br class="">
+declare dso_local i8* @__cxa_allocate_exception(i64)<br class="">
+<br class="">
+declare dso_local void @__cxa_throw(i8*, i8*, i8*)<br class="">
+<br class="">
+; Function Attrs: noinline nounwind optnone uwtable<br class="">
+define dso_local void @_Z4funcv() #1 !dbg !11 {<br class="">
+  %1 = alloca %class.foo, align 1<br class="">
+  call void @llvm.dbg.declare(metadata %class.foo* %1, metadata !12, metadata !DIExpression()), !dbg !19<br class="">
+  ret void, !dbg !20<br class="">
+}<br class="">
<br class="">
-declare void @__cxa_throw(i8*, i8*, i8*)<br class="">
+; Function Attrs: nounwind readnone speculatable willreturn<br class="">
+declare void @llvm.dbg.declare(metadata, metadata, metadata) #2<br class="">
<br class="">
-attributes #0 = { noreturn }<br class="">
+attributes #0 = { noinline noreturn optnone uwtable }<br class="">
+attributes #1 = { noinline nounwind optnone uwtable }<br class="">
+attributes #2 = { nounwind readnone speculatable willreturn }<br class="">
+attributes #3 = { nounwind }<br class="">
+attributes #4 = { noreturn }<br class="">
<br class="">
 !<a href="http://llvm.dbg.cu/" rel="noreferrer" target="_blank" class="">llvm.dbg.cu</a> = !{!0}<br class="">
-!llvm.module.flags = !{!3, !4}<br class="">
-!llvm.ident = !{!5}<br class="">
+!llvm.module.flags = !{!3, !4, !5}<br class="">
+!llvm.ident = !{!6}<br class="">
<br class="">
-!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus, file: !1, producer: "clang version 4.0.0", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2)<br class="">
-!1 = !DIFile(filename: "test.cpp", directory: "/home/del/test")<br class="">
+!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_11, file: !1, producer: "clang version 10.0.0 (<a href="https://github.com/llvm/llvm-project.git" rel="noreferrer" target="_blank" class="">https://github.com/llvm/llvm-project.git</a> 3fcdd25ad5566114ac3322dcbf71d3c38bfec1ed)", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, enums: !2, nameTableKind: None)<br class="">
+!1 = !DIFile(filename: "test.cpp", directory: "/home/sourabh/work/dwarf/c_c++/c++11")<br class="">
 !2 = !{}<br class="">
 !3 = !{i32 2, !"Dwarf Version", i32 4}<br class="">
 !4 = !{i32 2, !"Debug Info Version", i32 3}<br class="">
-!5 = !{!"clang version 4.0.0"}<br class="">
-!6 = distinct !DISubprogram(name: "f", linkageName: "_Z1fv", scope: !1, file: !1, line: 1, type: !7, isLocal: false, isDefinition: true, scopeLine: 1, flags: DIFlagPrototyped | DIFlagNoReturn, isOptimized: false, unit: !0, retainedNodes: !2)<br class="">
-!7 = !DISubroutineType(types: !8)<br class="">
-!8 = !{null}<br class="">
-!9 = !DILocation(line: 2, column: 5, scope: !6)<br class="">
-!10 = !DILocation(line: 2, column: 5, scope: !11)<br class="">
-!11 = !DILexicalBlockFile(scope: !6, file: !1, discriminator: 1)<br class="">
-!12 = !DILocation(line: 3, column: 1, scope: !6)<br class="">
+!5 = !{i32 1, !"wchar_size", i32 4}<br class="">
+!6 = !{!"clang version 10.0.0 (<a href="https://github.com/llvm/llvm-project.git" rel="noreferrer" target="_blank" class="">https://github.com/llvm/llvm-project.git</a> 3fcdd25ad5566114ac3322dcbf71d3c38bfec1ed)"}<br class="">
+!7 = distinct !DISubprogram(name: "f", linkageName: "_Z1fv", scope: !1, file: !1, line: 5, type: !8, scopeLine: 5, flags: DIFlagPrototyped | DIFlagNoReturn, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)<br class="">
+!8 = !DISubroutineType(types: !9)<br class="">
+!9 = !{null}<br class="">
+!10 = !DILocation(line: 6, column: 5, scope: !7)<br class="">
+!11 = distinct !DISubprogram(name: "func", linkageName: "_Z4funcv", scope: !1, file: !1, line: 9, type: !8, scopeLine: 9, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !2)<br class="">
+!12 = !DILocalVariable(name: "object", scope: !11, file: !1, line: 10, type: !13)<br class="">
+!13 = distinct !DICompositeType(tag: DW_TAG_class_type, name: "foo", file: !1, line: 1, size: 8, flags: DIFlagTypePassByValue, elements: !14, identifier: "_ZTS3foo")<br class="">
+!14 = !{!15}<br class="">
+!15 = !DISubprogram(name: "foo_member", linkageName: "_ZN3foo10foo_memberEv", scope: !13, file: !1, line: 2, type: !16, scopeLine: 2, flags: DIFlagPrototyped | DIFlagNoReturn, spFlags: 0)<br class="">
+!16 = !DISubroutineType(types: !17)<br class="">
+!17 = !{null, !18}<br class="">
+!18 = !DIDerivedType(tag: DW_TAG_pointer_type, baseType: !13, size: 64, flags: DIFlagArtificial | DIFlagObjectPointer)<br class="">
+!19 = !DILocation(line: 10, column: 9, scope: !11)<br class="">
+!20 = !DILocation(line: 11, column: 1, scope: !11)<br class="">
<br class="">
<br class="">
_______________________________________________<br class="">
llvm-commits mailing list<br class="">
<a href="mailto:llvm-commits@lists.llvm.org" target="_blank" class="">llvm-commits@lists.llvm.org</a><br class="">
<a href="https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits" rel="noreferrer" target="_blank" class="">https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits</a><br class="">
</blockquote></div>
</div></blockquote></div><br class=""></body></html>