diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index ab6efa3b2efc919282acb82510e0f385709b5d76..7f810dd8b6c1528c816efbc486cee5ee69988c62 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,9 @@
+2004-12-09  Matt Rice  <ratmice@yahoo.com>
+
+	PR preprocessor/18102
+	* c-incpath.c (remove_duplicates): Check for construct
+	equality.
+
 2004-12-09  Dorit Naishlos  <dorit@il.ibm.com>
 
 	* genopinit.c (vec_realign_store_optab): Initialization removed.
diff --git a/gcc/c-incpath.c b/gcc/c-incpath.c
index 177af983d8d0048d484704ce14f7a6aa1508f6cd..b141c078e1abbacd2d57d488945cbaa08839b9ec 100644
--- a/gcc/c-incpath.c
+++ b/gcc/c-incpath.c
@@ -211,7 +211,8 @@ remove_duplicates (cpp_reader *pfile, struct cpp_dir *head,
 	  /* Remove this one if it is in the system chain.  */
 	  reason = REASON_DUP_SYS;
 	  for (tmp = system; tmp; tmp = tmp->next)
-	    if (INO_T_EQ (tmp->ino, cur->ino) && tmp->dev == cur->dev)
+           if (INO_T_EQ (tmp->ino, cur->ino) && tmp->dev == cur->dev
+               && cur->construct == tmp->construct)
 	      break;
 
 	  if (!tmp)
@@ -219,14 +220,16 @@ remove_duplicates (cpp_reader *pfile, struct cpp_dir *head,
 	      /* Duplicate of something earlier in the same chain?  */
 	      reason = REASON_DUP;
 	      for (tmp = head; tmp != cur; tmp = tmp->next)
-		if (INO_T_EQ (cur->ino, tmp->ino) && cur->dev == tmp->dev)
+               if (INO_T_EQ (cur->ino, tmp->ino) && cur->dev == tmp->dev
+                   && cur->construct == tmp->construct)
 		  break;
 
 	      if (tmp == cur
 		  /* Last in the chain and duplicate of JOIN?  */
 		  && !(cur->next == NULL && join
 		       && INO_T_EQ (cur->ino, join->ino)
-		       && cur->dev == join->dev))
+                      && cur->dev == join->dev
+                      && cur->construct == join->construct))
 		{
 		  /* Unique, so keep this directory.  */
 		  pcur = &cur->next;