DebugInfo: Really support 2^16 arguments in a subprogram

As a follow-up to r235955, actually support up to 65535 arguments in a
subprogram.  r235955 missed assembly support, having only tested the new
limit via C++ unit tests.  Code patch by Amjad Aboud.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238854 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Duncan P. N. Exon Smith 2015-06-02 17:17:44 +00:00
parent 31ed6b767b
commit 16fb1632a1
4 changed files with 23 additions and 1 deletions

View File

@ -3730,7 +3730,7 @@ bool LLParser::ParseDILocalVariable(MDNode *&Result, bool IsDistinct) {
OPTIONAL(file, MDField, ); \
OPTIONAL(line, LineField, ); \
OPTIONAL(type, MDField, ); \
OPTIONAL(arg, MDUnsignedField, (0, UINT8_MAX)); \
OPTIONAL(arg, MDUnsignedField, (0, UINT16_MAX)); \
OPTIONAL(flags, DIFlagField, );
PARSE_MD_FIELDS();
#undef VISIT_MD_FIELDS

View File

@ -0,0 +1,10 @@
; RUN: llvm-as < %s | llvm-dis | llvm-as | llvm-dis | FileCheck %s
; RUN: verify-uselistorder %s
; CHECK: !named = !{!0, !1}
!named = !{!0, !1}
!0 = distinct !DISubprogram()
; CHECK: !1 = !DILocalVariable(tag: DW_TAG_arg_variable, name: "foo", arg: 65535, scope: !0)
!1 = !DILocalVariable(tag: DW_TAG_arg_variable, name: "foo", arg: 65535, scope: !0)

View File

@ -0,0 +1,6 @@
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
!0 = !DILocalVariable(tag: DW_TAG_arg_variable, scope: !{}, arg: 65535)
; CHECK: <stdin>:[[@LINE+1]]:66: error: value for 'arg' too large, limit is 65535
!1 = !DILocalVariable(tag: DW_TAG_arg_variable, scope: !{}, arg: 65536)

View File

@ -0,0 +1,6 @@
; RUN: not llvm-as < %s 2>&1 | FileCheck %s
!0 = !DILocalVariable(tag: DW_TAG_arg_variable, scope: !{}, arg: 0)
; CHECK: <stdin>:[[@LINE+1]]:66: error: expected unsigned integer
!1 = !DILocalVariable(tag: DW_TAG_arg_variable, scope: !{}, arg: -1)