RELEASE STOPPER? nonportable int64 constants in pg_crc.c

Started by Zeugswetter Andreas SBalmost 25 years ago12 messages
#1Zeugswetter Andreas SB
ZeugswetterA@wien.spardat.at
1 attachment(s)

Recent changes in pg_crc.c (64 bit CRC) introduced non portable constants of the form:

-c -o pg_crc.o pg_crc.c
287 | 0x0000000000000000, 0x42F0E1EBA9EA3693,
............................a..................
a - 1506-207 (W) Integer constant 0x42F0E1EBA9EA3693 out of range.

I guess this will show up on a lot of non gcc platforms !!!!!
It shows no diffs in the regression tests! From what I understand,
failure would only show up after fast shutdown/crash.

Attached is a patch, but I have no idea how portable that is.

Andreas

Attachments:

pg_crc.patchapplication/octet-stream; name=pg_crc.patchDownload
*** ./src/backend/utils/hash/pg_crc.c.orig	Tue Mar 13 02:17:06 2001
--- ./src/backend/utils/hash/pg_crc.c	Wed Mar 21 18:35:40 2001
***************
*** 284,417 ****
  #else /* int64 works */
  
  const uint64 crc_table[256] = {
! 	0x0000000000000000, 0x42F0E1EBA9EA3693,
! 	0x85E1C3D753D46D26, 0xC711223CFA3E5BB5,
! 	0x493366450E42ECDF, 0x0BC387AEA7A8DA4C,
! 	0xCCD2A5925D9681F9, 0x8E224479F47CB76A,
! 	0x9266CC8A1C85D9BE, 0xD0962D61B56FEF2D,
! 	0x17870F5D4F51B498, 0x5577EEB6E6BB820B,
! 	0xDB55AACF12C73561, 0x99A54B24BB2D03F2,
! 	0x5EB4691841135847, 0x1C4488F3E8F96ED4,
! 	0x663D78FF90E185EF, 0x24CD9914390BB37C,
! 	0xE3DCBB28C335E8C9, 0xA12C5AC36ADFDE5A,
! 	0x2F0E1EBA9EA36930, 0x6DFEFF5137495FA3,
! 	0xAAEFDD6DCD770416, 0xE81F3C86649D3285,
! 	0xF45BB4758C645C51, 0xB6AB559E258E6AC2,
! 	0x71BA77A2DFB03177, 0x334A9649765A07E4,
! 	0xBD68D2308226B08E, 0xFF9833DB2BCC861D,
! 	0x388911E7D1F2DDA8, 0x7A79F00C7818EB3B,
! 	0xCC7AF1FF21C30BDE, 0x8E8A101488293D4D,
! 	0x499B3228721766F8, 0x0B6BD3C3DBFD506B,
! 	0x854997BA2F81E701, 0xC7B97651866BD192,
! 	0x00A8546D7C558A27, 0x4258B586D5BFBCB4,
! 	0x5E1C3D753D46D260, 0x1CECDC9E94ACE4F3,
! 	0xDBFDFEA26E92BF46, 0x990D1F49C77889D5,
! 	0x172F5B3033043EBF, 0x55DFBADB9AEE082C,
! 	0x92CE98E760D05399, 0xD03E790CC93A650A,
! 	0xAA478900B1228E31, 0xE8B768EB18C8B8A2,
! 	0x2FA64AD7E2F6E317, 0x6D56AB3C4B1CD584,
! 	0xE374EF45BF6062EE, 0xA1840EAE168A547D,
! 	0x66952C92ECB40FC8, 0x2465CD79455E395B,
! 	0x3821458AADA7578F, 0x7AD1A461044D611C,
! 	0xBDC0865DFE733AA9, 0xFF3067B657990C3A,
! 	0x711223CFA3E5BB50, 0x33E2C2240A0F8DC3,
! 	0xF4F3E018F031D676, 0xB60301F359DBE0E5,
! 	0xDA050215EA6C212F, 0x98F5E3FE438617BC,
! 	0x5FE4C1C2B9B84C09, 0x1D14202910527A9A,
! 	0x93366450E42ECDF0, 0xD1C685BB4DC4FB63,
! 	0x16D7A787B7FAA0D6, 0x5427466C1E109645,
! 	0x4863CE9FF6E9F891, 0x0A932F745F03CE02,
! 	0xCD820D48A53D95B7, 0x8F72ECA30CD7A324,
! 	0x0150A8DAF8AB144E, 0x43A04931514122DD,
! 	0x84B16B0DAB7F7968, 0xC6418AE602954FFB,
! 	0xBC387AEA7A8DA4C0, 0xFEC89B01D3679253,
! 	0x39D9B93D2959C9E6, 0x7B2958D680B3FF75,
! 	0xF50B1CAF74CF481F, 0xB7FBFD44DD257E8C,
! 	0x70EADF78271B2539, 0x321A3E938EF113AA,
! 	0x2E5EB66066087D7E, 0x6CAE578BCFE24BED,
! 	0xABBF75B735DC1058, 0xE94F945C9C3626CB,
! 	0x676DD025684A91A1, 0x259D31CEC1A0A732,
! 	0xE28C13F23B9EFC87, 0xA07CF2199274CA14,
! 	0x167FF3EACBAF2AF1, 0x548F120162451C62,
! 	0x939E303D987B47D7, 0xD16ED1D631917144,
! 	0x5F4C95AFC5EDC62E, 0x1DBC74446C07F0BD,
! 	0xDAAD56789639AB08, 0x985DB7933FD39D9B,
! 	0x84193F60D72AF34F, 0xC6E9DE8B7EC0C5DC,
! 	0x01F8FCB784FE9E69, 0x43081D5C2D14A8FA,
! 	0xCD2A5925D9681F90, 0x8FDAB8CE70822903,
! 	0x48CB9AF28ABC72B6, 0x0A3B7B1923564425,
! 	0x70428B155B4EAF1E, 0x32B26AFEF2A4998D,
! 	0xF5A348C2089AC238, 0xB753A929A170F4AB,
! 	0x3971ED50550C43C1, 0x7B810CBBFCE67552,
! 	0xBC902E8706D82EE7, 0xFE60CF6CAF321874,
! 	0xE224479F47CB76A0, 0xA0D4A674EE214033,
! 	0x67C58448141F1B86, 0x253565A3BDF52D15,
! 	0xAB1721DA49899A7F, 0xE9E7C031E063ACEC,
! 	0x2EF6E20D1A5DF759, 0x6C0603E6B3B7C1CA,
! 	0xF6FAE5C07D3274CD, 0xB40A042BD4D8425E,
! 	0x731B26172EE619EB, 0x31EBC7FC870C2F78,
! 	0xBFC9838573709812, 0xFD39626EDA9AAE81,
! 	0x3A28405220A4F534, 0x78D8A1B9894EC3A7,
! 	0x649C294A61B7AD73, 0x266CC8A1C85D9BE0,
! 	0xE17DEA9D3263C055, 0xA38D0B769B89F6C6,
! 	0x2DAF4F0F6FF541AC, 0x6F5FAEE4C61F773F,
! 	0xA84E8CD83C212C8A, 0xEABE6D3395CB1A19,
! 	0x90C79D3FEDD3F122, 0xD2377CD44439C7B1,
! 	0x15265EE8BE079C04, 0x57D6BF0317EDAA97,
! 	0xD9F4FB7AE3911DFD, 0x9B041A914A7B2B6E,
! 	0x5C1538ADB04570DB, 0x1EE5D94619AF4648,
! 	0x02A151B5F156289C, 0x4051B05E58BC1E0F,
! 	0x87409262A28245BA, 0xC5B073890B687329,
! 	0x4B9237F0FF14C443, 0x0962D61B56FEF2D0,
! 	0xCE73F427ACC0A965, 0x8C8315CC052A9FF6,
! 	0x3A80143F5CF17F13, 0x7870F5D4F51B4980,
! 	0xBF61D7E80F251235, 0xFD913603A6CF24A6,
! 	0x73B3727A52B393CC, 0x31439391FB59A55F,
! 	0xF652B1AD0167FEEA, 0xB4A25046A88DC879,
! 	0xA8E6D8B54074A6AD, 0xEA16395EE99E903E,
! 	0x2D071B6213A0CB8B, 0x6FF7FA89BA4AFD18,
! 	0xE1D5BEF04E364A72, 0xA3255F1BE7DC7CE1,
! 	0x64347D271DE22754, 0x26C49CCCB40811C7,
! 	0x5CBD6CC0CC10FAFC, 0x1E4D8D2B65FACC6F,
! 	0xD95CAF179FC497DA, 0x9BAC4EFC362EA149,
! 	0x158E0A85C2521623, 0x577EEB6E6BB820B0,
! 	0x906FC95291867B05, 0xD29F28B9386C4D96,
! 	0xCEDBA04AD0952342, 0x8C2B41A1797F15D1,
! 	0x4B3A639D83414E64, 0x09CA82762AAB78F7,
! 	0x87E8C60FDED7CF9D, 0xC51827E4773DF90E,
! 	0x020905D88D03A2BB, 0x40F9E43324E99428,
! 	0x2CFFE7D5975E55E2, 0x6E0F063E3EB46371,
! 	0xA91E2402C48A38C4, 0xEBEEC5E96D600E57,
! 	0x65CC8190991CB93D, 0x273C607B30F68FAE,
! 	0xE02D4247CAC8D41B, 0xA2DDA3AC6322E288,
! 	0xBE992B5F8BDB8C5C, 0xFC69CAB42231BACF,
! 	0x3B78E888D80FE17A, 0x7988096371E5D7E9,
! 	0xF7AA4D1A85996083, 0xB55AACF12C735610,
! 	0x724B8ECDD64D0DA5, 0x30BB6F267FA73B36,
! 	0x4AC29F2A07BFD00D, 0x08327EC1AE55E69E,
! 	0xCF235CFD546BBD2B, 0x8DD3BD16FD818BB8,
! 	0x03F1F96F09FD3CD2, 0x41011884A0170A41,
! 	0x86103AB85A2951F4, 0xC4E0DB53F3C36767,
! 	0xD8A453A01B3A09B3, 0x9A54B24BB2D03F20,
! 	0x5D45907748EE6495, 0x1FB5719CE1045206,
! 	0x919735E51578E56C, 0xD367D40EBC92D3FF,
! 	0x1476F63246AC884A, 0x568617D9EF46BED9,
! 	0xE085162AB69D5E3C, 0xA275F7C11F7768AF,
! 	0x6564D5FDE549331A, 0x279434164CA30589,
! 	0xA9B6706FB8DFB2E3, 0xEB46918411358470,
! 	0x2C57B3B8EB0BDFC5, 0x6EA7525342E1E956,
! 	0x72E3DAA0AA188782, 0x30133B4B03F2B111,
! 	0xF7021977F9CCEAA4, 0xB5F2F89C5026DC37,
! 	0x3BD0BCE5A45A6B5D, 0x79205D0E0DB05DCE,
! 	0xBE317F32F78E067B, 0xFCC19ED95E6430E8,
! 	0x86B86ED5267CDBD3, 0xC4488F3E8F96ED40,
! 	0x0359AD0275A8B6F5, 0x41A94CE9DC428066,
! 	0xCF8B0890283E370C, 0x8D7BE97B81D4019F,
! 	0x4A6ACB477BEA5A2A, 0x089A2AACD2006CB9,
! 	0x14DEA25F3AF9026D, 0x562E43B4931334FE,
! 	0x913F6188692D6F4B, 0xD3CF8063C0C759D8,
! 	0x5DEDC41A34BBEEB2, 0x1F1D25F19D51D821,
! 	0xD80C07CD676F8394, 0x9AFCE626CE85B507
  };
  
  #endif /* INT64_IS_BUSTED */
--- 284,417 ----
  #else /* int64 works */
  
  const uint64 crc_table[256] = {
! 	0x0000000000000000LL, 0x42F0E1EBA9EA3693LL,
! 	0x85E1C3D753D46D26LL, 0xC711223CFA3E5BB5LL,
! 	0x493366450E42ECDFLL, 0x0BC387AEA7A8DA4CLL,
! 	0xCCD2A5925D9681F9LL, 0x8E224479F47CB76ALL,
! 	0x9266CC8A1C85D9BELL, 0xD0962D61B56FEF2DLL,
! 	0x17870F5D4F51B498LL, 0x5577EEB6E6BB820BLL,
! 	0xDB55AACF12C73561LL, 0x99A54B24BB2D03F2LL,
! 	0x5EB4691841135847LL, 0x1C4488F3E8F96ED4LL,
! 	0x663D78FF90E185EFLL, 0x24CD9914390BB37CLL,
! 	0xE3DCBB28C335E8C9LL, 0xA12C5AC36ADFDE5ALL,
! 	0x2F0E1EBA9EA36930LL, 0x6DFEFF5137495FA3LL,
! 	0xAAEFDD6DCD770416LL, 0xE81F3C86649D3285LL,
! 	0xF45BB4758C645C51LL, 0xB6AB559E258E6AC2LL,
! 	0x71BA77A2DFB03177LL, 0x334A9649765A07E4LL,
! 	0xBD68D2308226B08ELL, 0xFF9833DB2BCC861DLL,
! 	0x388911E7D1F2DDA8LL, 0x7A79F00C7818EB3BLL,
! 	0xCC7AF1FF21C30BDELL, 0x8E8A101488293D4DLL,
! 	0x499B3228721766F8LL, 0x0B6BD3C3DBFD506BLL,
! 	0x854997BA2F81E701LL, 0xC7B97651866BD192LL,
! 	0x00A8546D7C558A27LL, 0x4258B586D5BFBCB4LL,
! 	0x5E1C3D753D46D260LL, 0x1CECDC9E94ACE4F3LL,
! 	0xDBFDFEA26E92BF46LL, 0x990D1F49C77889D5LL,
! 	0x172F5B3033043EBFLL, 0x55DFBADB9AEE082CLL,
! 	0x92CE98E760D05399LL, 0xD03E790CC93A650ALL,
! 	0xAA478900B1228E31LL, 0xE8B768EB18C8B8A2LL,
! 	0x2FA64AD7E2F6E317LL, 0x6D56AB3C4B1CD584LL,
! 	0xE374EF45BF6062EELL, 0xA1840EAE168A547DLL,
! 	0x66952C92ECB40FC8LL, 0x2465CD79455E395BLL,
! 	0x3821458AADA7578FLL, 0x7AD1A461044D611CLL,
! 	0xBDC0865DFE733AA9LL, 0xFF3067B657990C3ALL,
! 	0x711223CFA3E5BB50LL, 0x33E2C2240A0F8DC3LL,
! 	0xF4F3E018F031D676LL, 0xB60301F359DBE0E5LL,
! 	0xDA050215EA6C212FLL, 0x98F5E3FE438617BCLL,
! 	0x5FE4C1C2B9B84C09LL, 0x1D14202910527A9ALL,
! 	0x93366450E42ECDF0LL, 0xD1C685BB4DC4FB63LL,
! 	0x16D7A787B7FAA0D6LL, 0x5427466C1E109645LL,
! 	0x4863CE9FF6E9F891LL, 0x0A932F745F03CE02LL,
! 	0xCD820D48A53D95B7LL, 0x8F72ECA30CD7A324LL,
! 	0x0150A8DAF8AB144ELL, 0x43A04931514122DDLL,
! 	0x84B16B0DAB7F7968LL, 0xC6418AE602954FFBLL,
! 	0xBC387AEA7A8DA4C0LL, 0xFEC89B01D3679253LL,
! 	0x39D9B93D2959C9E6LL, 0x7B2958D680B3FF75LL,
! 	0xF50B1CAF74CF481FLL, 0xB7FBFD44DD257E8CLL,
! 	0x70EADF78271B2539LL, 0x321A3E938EF113AALL,
! 	0x2E5EB66066087D7ELL, 0x6CAE578BCFE24BEDLL,
! 	0xABBF75B735DC1058LL, 0xE94F945C9C3626CBLL,
! 	0x676DD025684A91A1LL, 0x259D31CEC1A0A732LL,
! 	0xE28C13F23B9EFC87LL, 0xA07CF2199274CA14LL,
! 	0x167FF3EACBAF2AF1LL, 0x548F120162451C62LL,
! 	0x939E303D987B47D7LL, 0xD16ED1D631917144LL,
! 	0x5F4C95AFC5EDC62ELL, 0x1DBC74446C07F0BDLL,
! 	0xDAAD56789639AB08LL, 0x985DB7933FD39D9BLL,
! 	0x84193F60D72AF34FLL, 0xC6E9DE8B7EC0C5DCLL,
! 	0x01F8FCB784FE9E69LL, 0x43081D5C2D14A8FALL,
! 	0xCD2A5925D9681F90LL, 0x8FDAB8CE70822903LL,
! 	0x48CB9AF28ABC72B6LL, 0x0A3B7B1923564425LL,
! 	0x70428B155B4EAF1ELL, 0x32B26AFEF2A4998DLL,
! 	0xF5A348C2089AC238LL, 0xB753A929A170F4ABLL,
! 	0x3971ED50550C43C1LL, 0x7B810CBBFCE67552LL,
! 	0xBC902E8706D82EE7LL, 0xFE60CF6CAF321874LL,
! 	0xE224479F47CB76A0LL, 0xA0D4A674EE214033LL,
! 	0x67C58448141F1B86LL, 0x253565A3BDF52D15LL,
! 	0xAB1721DA49899A7FLL, 0xE9E7C031E063ACECLL,
! 	0x2EF6E20D1A5DF759LL, 0x6C0603E6B3B7C1CALL,
! 	0xF6FAE5C07D3274CDLL, 0xB40A042BD4D8425ELL,
! 	0x731B26172EE619EBLL, 0x31EBC7FC870C2F78LL,
! 	0xBFC9838573709812LL, 0xFD39626EDA9AAE81LL,
! 	0x3A28405220A4F534LL, 0x78D8A1B9894EC3A7LL,
! 	0x649C294A61B7AD73LL, 0x266CC8A1C85D9BE0LL,
! 	0xE17DEA9D3263C055LL, 0xA38D0B769B89F6C6LL,
! 	0x2DAF4F0F6FF541ACLL, 0x6F5FAEE4C61F773FLL,
! 	0xA84E8CD83C212C8ALL, 0xEABE6D3395CB1A19LL,
! 	0x90C79D3FEDD3F122LL, 0xD2377CD44439C7B1LL,
! 	0x15265EE8BE079C04LL, 0x57D6BF0317EDAA97LL,
! 	0xD9F4FB7AE3911DFDLL, 0x9B041A914A7B2B6ELL,
! 	0x5C1538ADB04570DBLL, 0x1EE5D94619AF4648LL,
! 	0x02A151B5F156289CLL, 0x4051B05E58BC1E0FLL,
! 	0x87409262A28245BALL, 0xC5B073890B687329LL,
! 	0x4B9237F0FF14C443LL, 0x0962D61B56FEF2D0LL,
! 	0xCE73F427ACC0A965LL, 0x8C8315CC052A9FF6LL,
! 	0x3A80143F5CF17F13LL, 0x7870F5D4F51B4980LL,
! 	0xBF61D7E80F251235LL, 0xFD913603A6CF24A6LL,
! 	0x73B3727A52B393CCLL, 0x31439391FB59A55FLL,
! 	0xF652B1AD0167FEEALL, 0xB4A25046A88DC879LL,
! 	0xA8E6D8B54074A6ADLL, 0xEA16395EE99E903ELL,
! 	0x2D071B6213A0CB8BLL, 0x6FF7FA89BA4AFD18LL,
! 	0xE1D5BEF04E364A72LL, 0xA3255F1BE7DC7CE1LL,
! 	0x64347D271DE22754LL, 0x26C49CCCB40811C7LL,
! 	0x5CBD6CC0CC10FAFCLL, 0x1E4D8D2B65FACC6FLL,
! 	0xD95CAF179FC497DALL, 0x9BAC4EFC362EA149LL,
! 	0x158E0A85C2521623LL, 0x577EEB6E6BB820B0LL,
! 	0x906FC95291867B05LL, 0xD29F28B9386C4D96LL,
! 	0xCEDBA04AD0952342LL, 0x8C2B41A1797F15D1LL,
! 	0x4B3A639D83414E64LL, 0x09CA82762AAB78F7LL,
! 	0x87E8C60FDED7CF9DLL, 0xC51827E4773DF90ELL,
! 	0x020905D88D03A2BBLL, 0x40F9E43324E99428LL,
! 	0x2CFFE7D5975E55E2LL, 0x6E0F063E3EB46371LL,
! 	0xA91E2402C48A38C4LL, 0xEBEEC5E96D600E57LL,
! 	0x65CC8190991CB93DLL, 0x273C607B30F68FAELL,
! 	0xE02D4247CAC8D41BLL, 0xA2DDA3AC6322E288LL,
! 	0xBE992B5F8BDB8C5CLL, 0xFC69CAB42231BACFLL,
! 	0x3B78E888D80FE17ALL, 0x7988096371E5D7E9LL,
! 	0xF7AA4D1A85996083LL, 0xB55AACF12C735610LL,
! 	0x724B8ECDD64D0DA5LL, 0x30BB6F267FA73B36LL,
! 	0x4AC29F2A07BFD00DLL, 0x08327EC1AE55E69ELL,
! 	0xCF235CFD546BBD2BLL, 0x8DD3BD16FD818BB8LL,
! 	0x03F1F96F09FD3CD2LL, 0x41011884A0170A41LL,
! 	0x86103AB85A2951F4LL, 0xC4E0DB53F3C36767LL,
! 	0xD8A453A01B3A09B3LL, 0x9A54B24BB2D03F20LL,
! 	0x5D45907748EE6495LL, 0x1FB5719CE1045206LL,
! 	0x919735E51578E56CLL, 0xD367D40EBC92D3FFLL,
! 	0x1476F63246AC884ALL, 0x568617D9EF46BED9LL,
! 	0xE085162AB69D5E3CLL, 0xA275F7C11F7768AFLL,
! 	0x6564D5FDE549331ALL, 0x279434164CA30589LL,
! 	0xA9B6706FB8DFB2E3LL, 0xEB46918411358470LL,
! 	0x2C57B3B8EB0BDFC5LL, 0x6EA7525342E1E956LL,
! 	0x72E3DAA0AA188782LL, 0x30133B4B03F2B111LL,
! 	0xF7021977F9CCEAA4LL, 0xB5F2F89C5026DC37LL,
! 	0x3BD0BCE5A45A6B5DLL, 0x79205D0E0DB05DCELL,
! 	0xBE317F32F78E067BLL, 0xFCC19ED95E6430E8LL,
! 	0x86B86ED5267CDBD3LL, 0xC4488F3E8F96ED40LL,
! 	0x0359AD0275A8B6F5LL, 0x41A94CE9DC428066LL,
! 	0xCF8B0890283E370CLL, 0x8D7BE97B81D4019FLL,
! 	0x4A6ACB477BEA5A2ALL, 0x089A2AACD2006CB9LL,
! 	0x14DEA25F3AF9026DLL, 0x562E43B4931334FELL,
! 	0x913F6188692D6F4BLL, 0xD3CF8063C0C759D8LL,
! 	0x5DEDC41A34BBEEB2LL, 0x1F1D25F19D51D821LL,
! 	0xD80C07CD676F8394LL, 0x9AFCE626CE85B507LL
  };
  
  #endif /* INT64_IS_BUSTED */
#2Peter Eisentraut
peter_e@gmx.net
In reply to: Zeugswetter Andreas SB (#1)
Re: RELEASE STOPPER? nonportable int64 constants in pg_crc.c

Zeugswetter Andreas SB writes:

Recent changes in pg_crc.c (64 bit CRC) introduced non portable constants of the form:

-c -o pg_crc.o pg_crc.c
287 | 0x0000000000000000, 0x42F0E1EBA9EA3693,
............................a..................
a - 1506-207 (W) Integer constant 0x42F0E1EBA9EA3693 out of range.

I guess this will show up on a lot of non gcc platforms !!!!!
It shows no diffs in the regression tests! From what I understand,
failure would only show up after fast shutdown/crash.

Attached is a patch, but I have no idea how portable that is.

I don't think it's the answer either. The patch assumes that int64 ==
long long. The ugly solution might have to be:

#if <int64 == long>
#define L64 L
#else
#define L64 LL
#endif

const uint64 crc_table[256] = {
0x0000000000000000##L64, 0x42F0E1EBA9EA3693##L64,
0x85E1C3D753D46D26##L64, 0xC711223CFA3E5BB5##L64,
...

--
Peter Eisentraut peter_e@gmx.net http://yi.org/peter-e/

#3Tom Lane
tgl@sss.pgh.pa.us
In reply to: Zeugswetter Andreas SB (#1)
Re: RELEASE STOPPER? nonportable int64 constants in pg_crc.c

Zeugswetter Andreas SB <ZeugswetterA@wien.spardat.at> writes:

Recent changes in pg_crc.c (64 bit CRC) introduced non portable constants of the form:

-c -o pg_crc.o pg_crc.c
287 | 0x0000000000000000, 0x42F0E1EBA9EA3693,
............................a..................
a - 1506-207 (W) Integer constant 0x42F0E1EBA9EA3693 out of range.

Please observe that this is a warning, not an error. Your proposed
fix is considerably worse than the disease, because it will break on
compilers that do not recognize "LL" constants, to say nothing of
machines where L is correct and LL is some yet wider datatype.

I'm aware that some compilers will produce warnings about these
constants, but there should not be any that fail completely, since
(a) we won't be compiling this code unless we've proven that the
compiler supports a 64-bit-int datatype, and (b) the C standard
forbids a compiler from requiring width suffixes (cf. 6.4.4.1 in C99).

I don't think it's a good tradeoff to risk breaking some platforms in
order to suppress warnings from overly anal-retentive compilers.

regards, tom lane

#4The Hermit Hacker
scrappy@hub.org
In reply to: Tom Lane (#3)
Re: Re: RELEASE STOPPER? nonportable int64 constants in pg_crc.c

okay, this was the only one I was waiting to hear on ... the fix committed
this afternoon for the regression test, did/does it fix the problem? are
we safe on a proper RC1 now?

On Wed, 21 Mar 2001, Tom Lane wrote:

Zeugswetter Andreas SB <ZeugswetterA@wien.spardat.at> writes:

Recent changes in pg_crc.c (64 bit CRC) introduced non portable constants of the form:

-c -o pg_crc.o pg_crc.c
287 | 0x0000000000000000, 0x42F0E1EBA9EA3693,
............................a..................
a - 1506-207 (W) Integer constant 0x42F0E1EBA9EA3693 out of range.

Please observe that this is a warning, not an error. Your proposed
fix is considerably worse than the disease, because it will break on
compilers that do not recognize "LL" constants, to say nothing of
machines where L is correct and LL is some yet wider datatype.

I'm aware that some compilers will produce warnings about these
constants, but there should not be any that fail completely, since
(a) we won't be compiling this code unless we've proven that the
compiler supports a 64-bit-int datatype, and (b) the C standard
forbids a compiler from requiring width suffixes (cf. 6.4.4.1 in C99).

I don't think it's a good tradeoff to risk breaking some platforms in
order to suppress warnings from overly anal-retentive compilers.

regards, tom lane

---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/users-lounge/docs/faq.html

Marc G. Fournier ICQ#7615664 IRC Nick: Scrappy
Systems Administrator @ hub.org
primary: scrappy@hub.org secondary: scrappy@{freebsd|postgresql}.org

#5Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#2)
Re: RELEASE STOPPER? nonportable int64 constants in pg_crc.c

Peter Eisentraut <peter_e@gmx.net> writes:

I don't think it's the answer either. The patch assumes that int64 ==
long long. The ugly solution might have to be:

#if <int64 == long>
#define L64 L
#else
#define L64 LL
#endif

const uint64 crc_table[256] = {
0x0000000000000000##L64, 0x42F0E1EBA9EA3693##L64,
0x85E1C3D753D46D26##L64, 0xC711223CFA3E5BB5##L64,

Hmm ... how portable is that likely to be? I don't want to suppress
warnings on a few boxes at the cost of breaking even one platform
that would otherwise work. See my reply to Andreas.

regards, tom lane

#6Bruce Momjian
pgman@candle.pha.pa.us
In reply to: Tom Lane (#3)
Re: Re: RELEASE STOPPER? nonportable int64 constants in pg_crc.c

Zeugswetter Andreas SB <ZeugswetterA@wien.spardat.at> writes:

Recent changes in pg_crc.c (64 bit CRC) introduced non portable constants of the form:

-c -o pg_crc.o pg_crc.c
287 | 0x0000000000000000, 0x42F0E1EBA9EA3693,
............................a..................
a - 1506-207 (W) Integer constant 0x42F0E1EBA9EA3693 out of range.

Please observe that this is a warning, not an error. Your proposed
fix is considerably worse than the disease, because it will break on
compilers that do not recognize "LL" constants, to say nothing of
machines where L is correct and LL is some yet wider datatype.

I am seeing the same warnings with gcc 2.7.2.1 -Wall on BSDi i386:

pg_crc.c:353: warning: integer constant out of range
pg_crc.c:353: warning: integer constant out of range
pg_crc.c:354: warning: integer constant out of range
pg_crc.c:354: warning: integer constant out of range
pg_crc.c:355: warning: integer constant out of range
pg_crc.c:355: warning: integer constant out of range
pg_crc.c:356: warning: integer constant out of range

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#7Bruce Momjian
pgman@candle.pha.pa.us
In reply to: Bruce Momjian (#6)
Re: Re: RELEASE STOPPER? nonportable int64 constants in pg_crc.c

Can we use (long long) rather than LL?

Zeugswetter Andreas SB <ZeugswetterA@wien.spardat.at> writes:

Recent changes in pg_crc.c (64 bit CRC) introduced non portable constants of the form:

-c -o pg_crc.o pg_crc.c
287 | 0x0000000000000000, 0x42F0E1EBA9EA3693,
............................a..................
a - 1506-207 (W) Integer constant 0x42F0E1EBA9EA3693 out of range.

Please observe that this is a warning, not an error. Your proposed
fix is considerably worse than the disease, because it will break on
compilers that do not recognize "LL" constants, to say nothing of
machines where L is correct and LL is some yet wider datatype.

I am seeing the same warnings with gcc 2.7.2.1 -Wall on BSDi i386:

pg_crc.c:353: warning: integer constant out of range
pg_crc.c:353: warning: integer constant out of range
pg_crc.c:354: warning: integer constant out of range
pg_crc.c:354: warning: integer constant out of range
pg_crc.c:355: warning: integer constant out of range
pg_crc.c:355: warning: integer constant out of range
pg_crc.c:356: warning: integer constant out of range

-- 
Bruce Momjian                        |  http://candle.pha.pa.us
pgman@candle.pha.pa.us               |  (610) 853-3000
+  If your life is a hard drive,     |  830 Blythe Avenue
+  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026

---------------------------(end of broadcast)---------------------------
TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/users-lounge/docs/faq.html

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#8Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#7)
Re: Re: RELEASE STOPPER? nonportable int64 constants in pg_crc.c

Bruce Momjian <pgman@candle.pha.pa.us> writes:

Can we use (long long) rather than LL?

No.

regards, tom lane

#9Bruce Momjian
pgman@candle.pha.pa.us
In reply to: Tom Lane (#8)
Re: Re: RELEASE STOPPER? nonportable int64 constants in pg_crc.c

Bruce Momjian <pgman@candle.pha.pa.us> writes:

Can we use (long long) rather than LL?

No.

Can I ask how 0LL is different from (long long)0?

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  pgman@candle.pha.pa.us               |  (610) 853-3000
  +  If your life is a hard drive,     |  830 Blythe Avenue
  +  Christ can be your backup.        |  Drexel Hill, Pennsylvania 19026
#10Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#9)
Re: Re: RELEASE STOPPER? nonportable int64 constants in pg_crc.c

Bruce Momjian <pgman@candle.pha.pa.us> writes:

Bruce Momjian <pgman@candle.pha.pa.us> writes:

Can we use (long long) rather than LL?

No.

Can I ask how 0LL is different from (long long)0?

The former is a long-long-int constant ab initio. The latter is an int
constant that is subsequently casted to long long. If you write
(long long) 12345678901234567890
I'd expect a compiler that warns about larger-than-int constants to
produce a warning anyway, since the warning is only looking at the
constant and not its context of use. (If the warning had that much
intelligence, it'd not be complaining now.)

regards, tom lane

#11Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#10)
Re: RELEASE STOPPER? nonportable int64 constants in pg_crc.c

Peter Eisentraut <peter_e@gmx.net> writes:

const uint64 crc_table[256] = {
0x0000000000000000##L64, 0x42F0E1EBA9EA3693##L64,
0x85E1C3D753D46D26##L64, 0xC711223CFA3E5BB5##L64,

Hmm ... how portable is that likely to be?

If the 'L' or 'LL' suffix is portable (probably), and token pasting is
portable (yes), then the aggregate should be as well, because one is
handled by the preprocessor and the other by the compiler.

It's just that I've never seen token-pasting applied to build anything
but identifiers and strings. In theory it should work, but theory does
not always predict what compiler writers will choose to warn about and
where. That "oversized integer" warning could be coming out of the
preprocessor.

BTW, my C book only talks about token-pasting as a step of macro body
expansion. Wouldn't we really need something like

SIXTYFOUR(0x0000000000000000), SIXTYFOUR(0x42F0E1EBA9EA3693),
SIXTYFOUR(0x85E1C3D753D46D26), SIXTYFOUR(0xC711223CFA3E5BB5),

where SIXTYFOUR(x) is conditionally defined to be "x##LL", "x##L",
or perhaps just "x"?

regards, tom lane

#12Peter Eisentraut
peter_e@gmx.net
In reply to: Tom Lane (#5)
Re: RELEASE STOPPER? nonportable int64 constants in pg_crc.c

Tom Lane writes:

#if <int64 == long>
#define L64 L
#else
#define L64 LL
#endif

const uint64 crc_table[256] = {
0x0000000000000000##L64, 0x42F0E1EBA9EA3693##L64,
0x85E1C3D753D46D26##L64, 0xC711223CFA3E5BB5##L64,

Hmm ... how portable is that likely to be?

If the 'L' or 'LL' suffix is portable (probably), and token pasting is
portable (yes), then the aggregate should be as well, because one is
handled by the preprocessor and the other by the compiler.

I don't want to suppress warnings on a few boxes at the cost of
breaking even one platform that would otherwise work. See my reply to
Andreas.

It's possible that there might be one that warns and truncates, but that's
unlikely. Why are there suffixes for integer (not float) constants
anyway?

--
Peter Eisentraut peter_e@gmx.net http://yi.org/peter-e/