First bug introduced by pgrminclude - Mailing list pgsql-hackers

From Bruce Momjian
Subject First bug introduced by pgrminclude
Date
Msg-id 201109071700.p87H0RJ03567@momjian.us
Whole thread Raw
List pgsql-hackers
I have fixed a bug introduced by pgrminclude.  It turns out that
CppAsString2() will expand any symbol, even one that is undefined, so
pgrminclude thought that catalog/catversion was not needed.  This is
illustrated in the attached C file that outputs "1" and "y".

I have bumped the catalog version to force users to reload their
tablespaces (or use pg_upgrade) because the tablespace directory names
will not be expanded to the catalog version.

I have modified pgrminclude to skip files that use CppAsString2().

--
  Bruce Momjian  <bruce@momjian.us>        http://momjian.us
  EnterpriseDB                             http://enterprisedb.com

  + It's impossible for everything to be true. +
diff --git a/src/include/catalog/catalog.h b/src/include/catalog/catalog.h
new file mode 100644
index 1e1e12d..e472e05
*** a/src/include/catalog/catalog.h
--- b/src/include/catalog/catalog.h
***************
*** 14,19 ****
--- 14,24 ----
  #ifndef CATALOG_H
  #define CATALOG_H

+ /*
+  *    'pgrminclude ignore' needed here because CppAsString2() does not throw
+  *    an error if the symbol is not defined.
+  */
+ #include "catalog/catversion.h"    /* pgrminclude ignore */
  #include "catalog/pg_class.h"
  #include "storage/relfilenode.h"
  #include "utils/relcache.h"
diff --git a/src/include/catalog/catversion.h b/src/include/catalog/catversion.h
new file mode 100644
index f5c9797..f3c8bb4
*** a/src/include/catalog/catversion.h
--- b/src/include/catalog/catversion.h
***************
*** 53,58 ****
   */

  /*                            yyyymmddN */
! #define CATALOG_VERSION_NO    201108051

  #endif
--- 53,58 ----
   */

  /*                            yyyymmddN */
! #define CATALOG_VERSION_NO    201109071

  #endif
#include <stdio.h>
#include <stdlib.h>
#include "/pg/include/c.h"

#define x 1
#define x1 CppAsString2(x)
#define x2 CppAsString2(y)

int
main(int argc, char **argv)
{
    puts(x1);
    puts(x2);
    return 0;
}

pgsql-hackers by date:

Previous
From: Euler Taveira de Oliveira
Date:
Subject: typo
Next
From: Tom Lane
Date:
Subject: Re: [v9.2] Fix Leaky View Problem