@@ -1783,11 +1783,24 @@ static bool interp__builtin_memcpy(InterpState &S, CodePtr OpPC,
17831783 if (DestPtr.isDummy () || SrcPtr.isDummy ())
17841784 return false ;
17851785
1786+ if (DestPtr.getType ()->isIncompleteType ()) {
1787+ S.FFDiag (S.Current ->getSource (OpPC),
1788+ diag::note_constexpr_memcpy_incomplete_type)
1789+ << Move << DestPtr.getType ();
1790+ return false ;
1791+ }
1792+ if (SrcPtr.getType ()->isIncompleteType ()) {
1793+ S.FFDiag (S.Current ->getSource (OpPC),
1794+ diag::note_constexpr_memcpy_incomplete_type)
1795+ << Move << SrcPtr.getType ();
1796+ return false ;
1797+ }
1798+
17861799 QualType DestElemType = getElemType (DestPtr);
17871800 if (DestElemType->isIncompleteType ()) {
17881801 S.FFDiag (S.Current ->getSource (OpPC),
1789- diag::note_constexpr_ltor_incomplete_type )
1790- << DestElemType;
1802+ diag::note_constexpr_memcpy_incomplete_type )
1803+ << Move << DestElemType;
17911804 return false ;
17921805 }
17931806
@@ -1832,16 +1845,6 @@ static bool interp__builtin_memcpy(InterpState &S, CodePtr OpPC,
18321845 return false ;
18331846 }
18341847
1835- if (DestElemType->isIncompleteType () ||
1836- DestPtr.getType ()->isIncompleteType ()) {
1837- QualType DiagType =
1838- DestElemType->isIncompleteType () ? DestElemType : DestPtr.getType ();
1839- S.FFDiag (S.Current ->getSource (OpPC),
1840- diag::note_constexpr_memcpy_incomplete_type)
1841- << Move << DiagType;
1842- return false ;
1843- }
1844-
18451848 if (!DestElemType.isTriviallyCopyableType (ASTCtx)) {
18461849 S.FFDiag (S.Current ->getSource (OpPC), diag::note_constexpr_memcpy_nontrivial)
18471850 << Move << DestElemType;
@@ -2030,8 +2033,13 @@ static bool interp__builtin_memchr(InterpState &S, CodePtr OpPC,
20302033 return true ;
20312034 }
20322035
2033- if (Ptr.isDummy ())
2036+ if (Ptr.isDummy ()) {
2037+ if (Ptr.getType ()->isIncompleteType ())
2038+ S.FFDiag (S.Current ->getSource (OpPC),
2039+ diag::note_constexpr_ltor_incomplete_type)
2040+ << Ptr.getType ();
20342041 return false ;
2042+ }
20352043
20362044 // Null is only okay if the given size is 0.
20372045 if (Ptr.isZero ()) {
0 commit comments