ubsan_handlers.cc revision 5f1164955fb28a9bcb826abc195aa2119feb0f97
1eda8bd0fc07df35c9ad7de5b698bb717b063e7afRichard Smith//===-- ubsan_handlers.cc -------------------------------------------------===//
26ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith//
36ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith//                     The LLVM Compiler Infrastructure
46ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith//
56ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith// This file is distributed under the University of Illinois Open Source
66ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith// License. See LICENSE.TXT for details.
76ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith//
86ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith//===----------------------------------------------------------------------===//
96ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith//
106ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith// Error logging entry points for the UBSan runtime.
116ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith//
126ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith//===----------------------------------------------------------------------===//
136ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith
146ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith#include "ubsan_handlers.h"
156ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith#include "ubsan_diag.h"
166ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith
176ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith#include "sanitizer_common/sanitizer_common.h"
186ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith
196ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smithusing namespace __sanitizer;
206ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smithusing namespace __ubsan;
216ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith
22eda8bd0fc07df35c9ad7de5b698bb717b063e7afRichard Smithnamespace __ubsan {
236ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  const char *TypeCheckKinds[] = {
246ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith    "load of", "store to", "reference binding to", "member access within",
25eda8bd0fc07df35c9ad7de5b698bb717b063e7afRichard Smith    "member call on", "constructor call on"
266ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  };
27eda8bd0fc07df35c9ad7de5b698bb717b063e7afRichard Smith}
28eda8bd0fc07df35c9ad7de5b698bb717b063e7afRichard Smith
295f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smithstatic void handleTypeMismatchImpl(TypeMismatchData *Data, ValueHandle Pointer,
305f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith                                   Location FallbackLoc) {
315f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith  Location Loc = Data->Loc;
325f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith  if (Data->Loc.isInvalid())
335f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith    Loc = FallbackLoc;
345f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith
356ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  if (!Pointer)
365f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith    Diag(Loc, "%0 null pointer of type %1")
376ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith      << TypeCheckKinds[Data->TypeCheckKind] << Data->Type;
386ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  else if (Data->Alignment && (Pointer & (Data->Alignment - 1)))
395f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith    Diag(Loc, "%0 misaligned address %1 for type %3, "
405f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith              "which requires %2 byte alignment")
416ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith      << TypeCheckKinds[Data->TypeCheckKind] << (void*)Pointer
426ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith      << Data->Alignment << Data->Type;
436ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  else
445f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith    Diag(Loc, "%0 address %1 with insufficient space "
455f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith              "for an object of type %2")
466ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith      << TypeCheckKinds[Data->TypeCheckKind] << (void*)Pointer << Data->Type;
47a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz}
485f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smithvoid __ubsan::__ubsan_handle_type_mismatch(TypeMismatchData *Data,
495f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith                                           ValueHandle Pointer) {
505f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith  handleTypeMismatchImpl(Data, Pointer, getCallerLocation());
515f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith}
52a82a5d360b19080f2b1beae374c12d4f26146450Will Dietzvoid __ubsan::__ubsan_handle_type_mismatch_abort(TypeMismatchData *Data,
535f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith                                                 ValueHandle Pointer) {
545f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith  handleTypeMismatchImpl(Data, Pointer, getCallerLocation());
556ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  Die();
566ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith}
576ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith
5880af605afd0e92a2a128c81898f647207f384e08Will Dietz/// \brief Common diagnostic emission for various forms of integer overflow.
5980af605afd0e92a2a128c81898f647207f384e08Will Dietztemplate<typename T> static void HandleIntegerOverflow(OverflowData *Data,
606ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith                                                      ValueHandle LHS,
616ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith                                                      const char *Operator,
626ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith                                                      T RHS) {
6380af605afd0e92a2a128c81898f647207f384e08Will Dietz  Diag(Data->Loc, "%0 integer overflow: "
6480af605afd0e92a2a128c81898f647207f384e08Will Dietz                  "%1 %2 %3 cannot be represented in type %4")
6580af605afd0e92a2a128c81898f647207f384e08Will Dietz    << (Data->Type.isSignedIntegerTy() ? "signed" : "unsigned")
666ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith    << Value(Data->Type, LHS) << Operator << RHS << Data->Type;
676ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith}
686ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith
696ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smithvoid __ubsan::__ubsan_handle_add_overflow(OverflowData *Data,
706ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith                                          ValueHandle LHS, ValueHandle RHS) {
7180af605afd0e92a2a128c81898f647207f384e08Will Dietz  HandleIntegerOverflow(Data, LHS, "+", Value(Data->Type, RHS));
726ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith}
73a82a5d360b19080f2b1beae374c12d4f26146450Will Dietzvoid __ubsan::__ubsan_handle_add_overflow_abort(OverflowData *Data,
74a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz                                                 ValueHandle LHS,
75a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz                                                 ValueHandle RHS) {
76a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz  __ubsan_handle_add_overflow(Data, LHS, RHS);
77a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz  Die();
78a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz}
796ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith
806ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smithvoid __ubsan::__ubsan_handle_sub_overflow(OverflowData *Data,
816ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith                                          ValueHandle LHS, ValueHandle RHS) {
8280af605afd0e92a2a128c81898f647207f384e08Will Dietz  HandleIntegerOverflow(Data, LHS, "-", Value(Data->Type, RHS));
836ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith}
84a82a5d360b19080f2b1beae374c12d4f26146450Will Dietzvoid __ubsan::__ubsan_handle_sub_overflow_abort(OverflowData *Data,
85a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz                                                 ValueHandle LHS,
86a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz                                                 ValueHandle RHS) {
87a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz  __ubsan_handle_sub_overflow(Data, LHS, RHS);
88a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz  Die();
89a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz}
906ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith
916ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smithvoid __ubsan::__ubsan_handle_mul_overflow(OverflowData *Data,
926ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith                                          ValueHandle LHS, ValueHandle RHS) {
9380af605afd0e92a2a128c81898f647207f384e08Will Dietz  HandleIntegerOverflow(Data, LHS, "*", Value(Data->Type, RHS));
946ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith}
95a82a5d360b19080f2b1beae374c12d4f26146450Will Dietzvoid __ubsan::__ubsan_handle_mul_overflow_abort(OverflowData *Data,
96a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz                                                 ValueHandle LHS,
97a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz                                                 ValueHandle RHS) {
98a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz  __ubsan_handle_mul_overflow(Data, LHS, RHS);
99a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz  Die();
100a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz}
1016ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith
1026ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smithvoid __ubsan::__ubsan_handle_negate_overflow(OverflowData *Data,
1036ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith                                             ValueHandle OldVal) {
1046ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  Diag(Data->Loc, "negation of %0 cannot be represented in type %1; "
1056ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith                  "cast to an unsigned type to negate this value to itself")
1066ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith    << Value(Data->Type, OldVal) << Data->Type;
107a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz}
108a82a5d360b19080f2b1beae374c12d4f26146450Will Dietzvoid __ubsan::__ubsan_handle_negate_overflow_abort(OverflowData *Data,
109a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz                                                    ValueHandle OldVal) {
110a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz  __ubsan_handle_negate_overflow(Data, OldVal);
1116ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  Die();
1126ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith}
1136ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith
1146ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smithvoid __ubsan::__ubsan_handle_divrem_overflow(OverflowData *Data,
1156ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith                                             ValueHandle LHS, ValueHandle RHS) {
1166ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  Value LHSVal(Data->Type, LHS);
1176ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  Value RHSVal(Data->Type, RHS);
1186ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  if (RHSVal.isMinusOne())
1196ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith    Diag(Data->Loc, "division of %0 by -1 cannot be represented in type %1")
1206ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith      << LHSVal << Data->Type;
1216ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  else
1226ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith    Diag(Data->Loc, "division by zero");
123a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz}
124a82a5d360b19080f2b1beae374c12d4f26146450Will Dietzvoid __ubsan::__ubsan_handle_divrem_overflow_abort(OverflowData *Data,
125a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz                                                    ValueHandle LHS,
126a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz                                                    ValueHandle RHS) {
127a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz  __ubsan_handle_divrem_overflow(Data, LHS, RHS);
1286ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  Die();
1296ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith}
1306ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith
1316ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smithvoid __ubsan::__ubsan_handle_shift_out_of_bounds(ShiftOutOfBoundsData *Data,
1326ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith                                                 ValueHandle LHS,
1336ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith                                                 ValueHandle RHS) {
1346ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  Value LHSVal(Data->LHSType, LHS);
1356ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  Value RHSVal(Data->RHSType, RHS);
1366ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  if (RHSVal.isNegative())
1376ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith    Diag(Data->Loc, "shift exponent %0 is negative") << RHSVal;
1386ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  else if (RHSVal.getPositiveIntValue() >= Data->LHSType.getIntegerBitWidth())
1396ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith    Diag(Data->Loc, "shift exponent %0 is too large for %1-bit type %2")
1406ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith      << RHSVal << Data->LHSType.getIntegerBitWidth() << Data->LHSType;
1416ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  else if (LHSVal.isNegative())
1426ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith    Diag(Data->Loc, "left shift of negative value %0") << LHSVal;
1436ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  else
1446ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith    Diag(Data->Loc, "left shift of %0 by %1 places cannot be represented "
1456ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith                    "in type %2") << LHSVal << RHSVal << Data->LHSType;
146a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz}
147a82a5d360b19080f2b1beae374c12d4f26146450Will Dietzvoid __ubsan::__ubsan_handle_shift_out_of_bounds_abort(
148a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz                                                     ShiftOutOfBoundsData *Data,
149a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz                                                     ValueHandle LHS,
150a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz                                                     ValueHandle RHS) {
151a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz  __ubsan_handle_shift_out_of_bounds(Data, LHS, RHS);
1526ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  Die();
1536ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith}
1546ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith
1556ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smithvoid __ubsan::__ubsan_handle_builtin_unreachable(UnreachableData *Data) {
1566ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  Diag(Data->Loc, "execution reached a __builtin_unreachable() call");
1576ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  Die();
1586ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith}
1596ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith
1606ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smithvoid __ubsan::__ubsan_handle_missing_return(UnreachableData *Data) {
1616ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  Diag(Data->Loc, "execution reached the end of a value-returning function "
1626ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith                  "without returning a value");
1636ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith  Die();
1646ebe45146a2d93eb010b9bb5ea34cb94c6900f83Richard Smith}
165b04caf1385a4279a7b95d41c3ccefc61842c3633Richard Smith
166b04caf1385a4279a7b95d41c3ccefc61842c3633Richard Smithvoid __ubsan::__ubsan_handle_vla_bound_not_positive(VLABoundData *Data,
167b04caf1385a4279a7b95d41c3ccefc61842c3633Richard Smith                                                    ValueHandle Bound) {
168b04caf1385a4279a7b95d41c3ccefc61842c3633Richard Smith  Diag(Data->Loc, "variable length array bound evaluates to "
169b04caf1385a4279a7b95d41c3ccefc61842c3633Richard Smith                  "non-positive value %0")
170b04caf1385a4279a7b95d41c3ccefc61842c3633Richard Smith    << Value(Data->Type, Bound);
171a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz}
172a82a5d360b19080f2b1beae374c12d4f26146450Will Dietzvoid __ubsan::__ubsan_handle_vla_bound_not_positive_abort(VLABoundData *Data,
173a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz                                                           ValueHandle Bound) {
174a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz  __ubsan_handle_vla_bound_not_positive(Data, Bound);
175b04caf1385a4279a7b95d41c3ccefc61842c3633Richard Smith  Die();
176b04caf1385a4279a7b95d41c3ccefc61842c3633Richard Smith}
17758561700a4abad310911a24a867da49a14fae91eRichard Smith
1785f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith
17958561700a4abad310911a24a867da49a14fae91eRichard Smithvoid __ubsan::__ubsan_handle_float_cast_overflow(FloatCastOverflowData *Data,
18058561700a4abad310911a24a867da49a14fae91eRichard Smith                                                 ValueHandle From) {
1815f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith  Diag(getCallerLocation(), "value %0 is outside the range of representable "
1825f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith                            "values of type %2")
18358561700a4abad310911a24a867da49a14fae91eRichard Smith    << Value(Data->FromType, From) << Data->FromType << Data->ToType;
184a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz}
185a82a5d360b19080f2b1beae374c12d4f26146450Will Dietzvoid __ubsan::__ubsan_handle_float_cast_overflow_abort(
186a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz                                                    FloatCastOverflowData *Data,
187a82a5d360b19080f2b1beae374c12d4f26146450Will Dietz                                                    ValueHandle From) {
1885f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith  Diag(getCallerLocation(), "value %0 is outside the range of representable "
1895f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith                            "values of type %2")
1905f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith    << Value(Data->FromType, From) << Data->FromType << Data->ToType;
19158561700a4abad310911a24a867da49a14fae91eRichard Smith  Die();
19258561700a4abad310911a24a867da49a14fae91eRichard Smith}
193f2d77d03b75733139c9f0896162bbc7a6fc38385Richard Smith
194f2d77d03b75733139c9f0896162bbc7a6fc38385Richard Smithvoid __ubsan::__ubsan_handle_load_invalid_value(InvalidValueData *Data,
195f2d77d03b75733139c9f0896162bbc7a6fc38385Richard Smith                                                ValueHandle Val) {
1965f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith  Diag(getCallerLocation(), "load of value %0, which is not a valid value for "
1975f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith                            "type %1")
198f2d77d03b75733139c9f0896162bbc7a6fc38385Richard Smith    << Value(Data->Type, Val) << Data->Type;
199f2d77d03b75733139c9f0896162bbc7a6fc38385Richard Smith}
200f2d77d03b75733139c9f0896162bbc7a6fc38385Richard Smithvoid __ubsan::__ubsan_handle_load_invalid_value_abort(InvalidValueData *Data,
201f2d77d03b75733139c9f0896162bbc7a6fc38385Richard Smith                                                      ValueHandle Val) {
2025f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith  Diag(getCallerLocation(), "load of value %0, which is not a valid value for "
2035f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith                            "type %1")
2045f1164955fb28a9bcb826abc195aa2119feb0f97Richard Smith    << Value(Data->Type, Val) << Data->Type;
205f2d77d03b75733139c9f0896162bbc7a6fc38385Richard Smith  Die();
206f2d77d03b75733139c9f0896162bbc7a6fc38385Richard Smith}
207