YamlConstant.Alignment
? YamlConstant.Alignment
: M.getDataLayout().getPrefTypeAlignment(Value->getType());
- // TODO: Report an error when the same constant pool value ID is redefined.
- ConstantPoolSlots.insert(std::make_pair(
- YamlConstant.ID, ConstantPool.getConstantPoolIndex(Value, Alignment)));
+ unsigned Index = ConstantPool.getConstantPoolIndex(Value, Alignment);
+ if (!ConstantPoolSlots.insert(std::make_pair(YamlConstant.ID.Value, Index))
+ .second)
+ return error(YamlConstant.ID.SourceRange.Start,
+ Twine("redefinition of constant pool item '%const.") +
+ Twine(YamlConstant.ID.Value) + "'");
}
return false;
}
--- /dev/null
+# RUN: not llc -march=x86-64 -start-after branch-folder -stop-after branch-folder -o /dev/null %s 2>&1 | FileCheck %s
+
+--- |
+
+ define double @test(double %a, float %b) {
+ entry:
+ %c = fadd double %a, 3.250000e+00
+ ret double %c
+ }
+
+...
+---
+name: test
+constants:
+ - id: 0
+ value: 'double 3.250000e+00'
+# CHECK: [[@LINE+1]]:18: redefinition of constant pool item '%const.0'
+ - id: 0
+ value: 'double 3.250000e+00'
+body:
+ - id: 0
+ name: entry
+ instructions:
+ - '%xmm0 = ADDSDrm killed %xmm0, %rip, 1, _, %const.0, _'
+ - 'RETQ %xmm0'
+...
+